-
Notifications
You must be signed in to change notification settings - Fork 94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Documenting Pentair Intellivalve communications #363
Comments
Hi and welcome. Interestingly enough, there are no Pentair outdoor control panels (OCP's) that communicate with the Intellivalve via RS485 yet. The valves work exactly like the Jandy valves in that they operate on a +/- DC voltage. The valves are more accurate (less drift over time) but for whatever reason Pentair has not released this functionality to the world yet. @rstrouse started a project over 1 year ago, valve-Grooter, to try and brute force it. There are a number of packets (245, 247, 240/241) that do things but we were never able to put them together in any sequence that would set or move the valves. We did brick a number of them and after sending 10's of millions of messages we eventually gave up. If you continue to find more in the FW, we can triangulate, but it will take someone with your skills or Pentair to help un-stuck us from our progress so far. Check out the repo above and see if it matches up with your findings and/or if it helps you figure anything else out. |
Thanks! I knew there was an effort before to brute force it, saw it on some forum. But I was unable to re google it. |
Good luck. I am not so sure that flash isn't the failure point. Maybe we hit something that trashes the firmware but it didn't seem that a byte sequence sent the valve south. It appeared to be based on how long the valve was having 245 and 247 messages written, We never did see anything that would tell us what the current status of the valve is. Btw the voltage on the pins is 24vac not dc. |
Hmm, well thankfully this valve is dedicated to science, worst case I have an emulator I can solder in till I get some new PICs. I can definitely see places where buffer overflow could overwrite something important. Commands I can see in the source code: 0x50 (80) Header [165, 63,12,15,80,8] Payload [ADDRESS, *(don't care it seems), serial number from hail or the reading 0xF0] so in my case I set the valve address to 0 with 0x801F124FD63E as my serial number Upon sending that I get back a broadcast packet from the valve with Source as address above (0x4) destination Panel(16), Action of 1, and payload of 80 0x51 (81) I'm still not seeing output when I do anything to the valve, but I suspect there is something else I need to set, will take some more time to continue to disassemble |
Yes you have found the blinky blue mode. Originally I thought this might be the valve waiting for input from the master but never could get anything else out of it. I have a one valve stuck in blinky blue and another in modified watermelon mode. I'll see if I can break those out of their respective mode this week using the command above. Here is some background on our results. Action 82This message is referred to as "I am Groot" simply because when we were initially sending messages to the valve this is the only response we got from the valve. It is broadcast from the valve periodically, regardless of whether it is asked for by the master. So it is not a response to a request from the RS485 master. There is one other device that does this and it is iChlor. Both of these appear to fire this off to address 12. All groot message payloads are unique to the valve and there are similarities for the first several bytes of the payload if the valve is manufactured around the same time. We spent quite a bit of effort to try making sense of this output by comparing it to the label on the valve. Nothing meaningful was gleaned from that other than it looked like you could determine whether one valve was older or younger than another and byte(5) was sequential for valves purchased about the same time. Action 80Action 80 appears to set the address by sending the desired address in the first byte followed by the valve key. The valve key is the last 6 bytes of the groot payload. Upon successfully setting the address the valve will respond with an ACK (action 1) payload 80 from the address you assigned. Action 240This is an interesting message. When you send an action 240 to the valve using the address it will respond with a 241 message that contains the unique valve key followed by an additional 10 bytes tacked to the end of it which was identical for all valves found in the wild. So if you have multiple valves on the bus and send an action 240 to 12 then all valves that have not been addressed will respond with a 241 containing the unique key and some sort of status bytes. If the valve loses power and is not stuck in a reboot cycle from 245 or 247 then it will revert to address 12. Address 12 appears to be a general broadcast address for several Pentair equipment items in the wild. Action 241Action 241 is a response message. This is a message that is sent from the valve when requested by an action 240. It never shows up unless it is asked for (like a good RS485 citizen). It also honors the proper addressing once you set an address with action 80. The payload for this message has been identical for all valves in the wild and has not changed unless the valve is in a mode where it no longer responds to the buttons on the valve. This payload is in the form with constant data between all valves witnessed as follows Action 247Action 247 will cause the valve to start the blue light on the valve blinking (blinky blue). When this message is sent to the addressed valve with a payload staring with If you send enough of these to the valve then it will stay that way and continue rebooting. The human interface on the valve will no longer respond but the valve will continue to respond to messages. Like mom used to say if you keep making that face it will be stuck that way. That is what happens after you have beat the valve up with 247s. However, one of the tests I am going to perform is to send the 245 message again to see if I can break free from the blinky blue on one of the valves stuck there. Action 245Action 245 seems to create light shows on the red segment leds for the valve positions. By sending different combinations in the payload we seem to be able to get different lights illuminated on the valve. This message responds with an ACK[245] when a combination it seems to like is sent. For instance, what was identified as watermelon mode could be attained by sending We also hooked the valve up to a relay to cycle the valve after different responses, sending action 240 to see if there was a different response (241) from the valve but never got beyond the aforementioned byte changes and the position never seemed to report anywhere. In the end we gave up after several valves in the wild stopped responding to the buttons on the valve but never got to the point where the RS485 responses stopped. The only thing I can surmise from it is that the valve either is gets stuck with bad data on it or we simply wore out the flash by writing several hundred million messages to the same locations. There has to be some persistent storage on this valve or it would not remember endpoints or the current mode selected when power is lost. Bear in mind we hammered this with a brute force method since the firmware code was not available from the valve itself. |
"There has to be some persistent storage on this valve or it would not remember endpoints or the current mode selected when power is lost."
On a good note I was able to get some rs485 traffic to emit when the valve changes position, I can only do this by writing a data value (inside the pic) when in a debugger and the output on the bus is missing the standard 0xff 0x0 0xff message header. Also good news is that each step and direction seem to have different values. I'm trying to trace the writing for this variable but not seeing this, yet. I think the dissembler is messing up bank selects somewhere but will take some time to trace. It is also possible that this is some type of manufacturing mode for ADC calibration (the valve uses a pot to set the position). Blinky blue mode reminds me of a firmware update mode, but I haven't found proof of that yet. It could also be a mode where the rs485 gets exclusive access to the valve... Also to note there are 2 different rs485 handlers (I call them early handler and main handler) and they are a bit different from each other. When the valve is powered on, or reset the early handler is used it hands off to the main handler after the valve blinks blue a few times and before the red position and green mode light come on.
|
It is interesting that if you send a 240 out to address 12 all valves will respond with a 241. However, if you have a bit of RS485 understanding the notion of multiple slaves responding to a single master message is very messy and unreliable in that every valve responding at once can destroy the response from all of them. I suspect the default address is simply set to 12 and it blindly responds when it sees that address. Since there is no selector to identify a valve address, perhaps our groot message (82) is the only viable option. So it is likely that the OCP will take however long to listen for groot messages on the bus for all unassigned valves addresses but only after it has assigned the ones already defined in the current definition. The valve does appear to inspect all 80 messages for the 6 byte key to determine if it is the intended recipient. The only way to get this key is by listening for the valve to broadcast it. To verify whether the address has been properly assigned you can send a 240 to the assigned address and it should return the valve key. I suspect that there is a specific address range that Pentair has in mind for these with the most likely address range that starts at 160 and ends at 180. This puts the equipment identifiers outside of other equipment on the bus and provides a contiguous 20 address range that covers all potential valves available with 3 power centers. It could go as high as 24 with reserved addresses for specific valves such as intake, return, and heater bypass. So a likely sequence would be set all the addresses already assigned by sending action 80 on OCP boot verifying each one by calling 240 for verification using the newly assigned address. This 241 result will match the valve key to the assigned address. The address is critical since the address can only a single byte and the valve key is 6 bytes. This is also critical for the OCP configuration since the valve configuration on the OCP needs to map to a single byte ordinal on one of the 15 valve messages output by the OCP. This too is speculation but it does match up to how Pentair addresses and manages other equipment on the RS485 bus. Rumors are that there will be 5 slots in the Pentair programming so the valve would have 5 potential endpoint pairs. What is weird is how they would expect to engage these given the current 1 to 1 nature of the assignments where 1 circuit is assigned to each valve. If the circuit/feature is on then the valve is moved to the diverted position. This is done by simply applying power to either the red or white wire via an SPDT relay. The motor simply rotates until the valve reaches the assigned endpoint. So it is assumed that turning on a circuit or feature will look at all running features associated to the valve and perhaps re-program the endpoints on the valve before engaging it using the relay. How it determines which endpoint slot to use is a mystery. As I look at the operation of the valve the endpoints seem to come in pairs but the only thing that would seem to matter would be the diverted position on the valve. No matter how you slice it if all the associated circuits are off then the un-diverted position would always be the same. To make this really useful you would want a scenario where the valve endpoint is dependent upon multiple circuits being engaged. For instance, if the waterfall and the fountain are on divert more water to the feature plumbing. I could see a scenario where the max diverted position is calculated by identifying all circuits/features that are currently on and picking the largest diverted position value. This is in line with the way VS/VF pumps work. |
Documenting a bit more on action 241 (response to 240) in normal mode: Slow going trying to disassemble and fixup code, and try to infer behavior. Unfortunately not seeing anything in code for control of the valve, but I still have about 60% of the code as unknow behavior. Best I was able to do was to get some RS485 traffic to be sent when changing valve locations and modes, etc. I suspect this is a factory test mode, it can be entered by pressing and holding the Mode and Red button through a power on. Then you need to send a certain RS485 packet to enter the mode. After that the valve basically operates as normal, but sends out RS485 messages on valve change (though buttons) but they dont have the typical Pentair header (255 00 255). Still working on it, but dont hold your breaths this is going to take awhile. |
DANGER DANGER DANGER!!!! For those playing around with sending codes to the valve Please note PIC architecture enforces a whole row (all 64 bytes) to be cleared, so if there is an unalinged write, bytes not written will fill with 0xFF3F (default memory values in erased memory) I think there is some protection in FW update mode to prevent some overwrite memory I'm guessing for the boot loader. Code for this protection is a bit confusing, trying to understand. So if the boot loader is protected, we should be able to recover bad valves through the RS485 port. If someone is interested I can probably write a small program to reflash the firmware(FW). Also this means another option that can be discussed is to write a custom FW for njsPC to control the valves, if I continue to find the valve doesn't allow SW control. It is possible Pentair didn't finish the code and decided that if they want this control later they can upload a new FW. |
Well that certainly jives with our experiences. I have 2 valves that are inop after beating it with 245s. |
Got stalled on this update with my day job (that oddly is also a night job as well most days) and family. I'll probably stage the features out like this:
If people are interested in this alternative, I can open to the community on what features, how things are implemented, etc. And to obviously share. |
If you could make this happen, there would quite a few happy folks out there. I have two manual valves right now that I would never bother to replace with a traditional JVA24 but would do it in a heartbeat with a remotely controlled, variable diverter. One is my spa bypass and the other is the diverter between the floor returns and the wall returns. My ideal would be to remotely set a fully open/fully closed position. And then being able to send it commands to open a certain amount. Doing this by absolute value would be good (maybe degrees, maybe abs value depending on what you find). Everything that operates based on % just seems hokey (chlorinators, hayward pumps). I should be able to send an RS485 command and have the return diverter fully open (floor returns) when my heater is on full blast, fully closed when my cleaner is running, and somewhere in the middle for just the filter pump running. |
This would be huge - as @tag said, not having remote control is what's keeping me from replacing all my valves with iValves |
I have 8 IntelliValves currently installed. Happy to help where I can. |
Posted on TFP and thought it would be worth sharing here.
|
"I'm sure Pentair will 100% hold themselves to those dates/commitments" - No one, ever. lol. Will believe it when I see it, but interesting to see some chatter about it anyway. |
I was able to buy several Intellivalves on eBay used. The issue with these valves is that they are not made to be repairable. Case is glued shut. Even worse, the internals (gear section) is also glued shut. But I was able to carefully open up 2 of them that had gear problems. The gears are metal, but the shafts are plastic and rather poor quality. Not sure why Pentair designed such expensive actuators that are so poorly made. @jeffegg , one of the intellivalves had a motherboard that somehow got beat up really bad. Lost most of it's LEDs and push switches, and even a capacitor. But I was able to solder on the capacitor and it appears to operate OK. Just most of the LEDs missing. But if you need a board to mess with and not worry about bricking, I can send it to you. |
bluemantwo, think maybe you could post some pictures of the dissected Intellivalves? |
@bluemantwo Wow, it's been a few minutes! Glad to see you back here. |
Sorry I've been super slammed at work for past 9 months. I do have a working firmware I wrote that will actually control the valve and set to a discrete locations via rs485 commands. Local control (buttons and wires with relays) are not implemented. I'm not using in my production environment yet. But on my desk seems stable when I can run once a month or so. I have my code on my local gitlab, but I can upload to the GitHub if there is interest. I also have a python script to upload the FW without using a programmer but this is really not well tested still and have not run in an environment where there are more than 1 device on the rs485 bus. |
@tagyoureit LOL. Many, many minutes! How are you doing? I cannot thank you enough for the great work you have done supporting pool automation. I am still using a very old version of your software as my daily driver to run my pool. Only change I have been considering is getting it to update Home Assistant rather than my ISY. Have you done an interface to Home Assistant yet? I should try installing your latest software and give it a test drive. Though I do have a fondness for the initial pre-beta software you did so many years ago. |
@jeffegg Please let us know how we can load your firmware. It would be fun to play with. When you say no local control, does that mean the red/white wires for selecting the 2 valve positions do not work? That would be a bummer since that is what all my existing devices expect. But HUGE thanks for doing this and sharing with us. If we can set the end points using RS485, and then select the end points using red/white wires, we would be golden! |
njsPC is capable of isolating the valve control to a dedicated RS485 bus if you didn't follow the Pentair preamble sequence. @bluemantwo - @Crewski has created an integration to Home Assistant that uses sockets and I am working on some pulls for him to add chemistry controller functionality to it as well as schedules. |
@bluemantwo currently the FW does not support setting valve via the relay interface (red and white wires). Good news is this is completely a FW flow so its possible to add. I plan to make the end stops programmable via RS485 in the future and then have an option to enable/disable the relay interface also via RS485. Basically thinking there will be 3 modes the valve would operate at:
I need to start spending some time again on this as work is getting a bit "quieter" and I should have a free evening on the weekends coming up. I need to package up the FW to be loadable via the Pentair booloader. And verify the python code to invoke and use the bootloader. I don't develop this way and usually just write with the programmer @rstrouse I followed the Pentair packet layout; actually using MessageCenter to send the commands to the valve before I dig into any of the Webcode.
Command will be completely of my own creation; this is current "API". Not all command supported yet, and I need to fully document how this works. Here are my proposed commands
|
Fan-freakin-tastic! Can't wait. Well, actually, I can. No real rush on this but this is a function I have been wanting for years. Even before the Pentair IntelliValves were released I envisioned something like this. Very cool. For those who want to plunge into this, there is a guy selling these valves on eBay for about $40 each (try Make an Offer) but sells them as broken. I bought 3 and was able to cobble 2 working ones out of it. Downside is that these are some of the most cheaply made and unreliable devices I have yet seen from Pentair. And I have seen a lot. |
Awesome! So there are a couple of things that will help let this play nicely on the Pentair bus. First, once the addressing takes place there is no need for a slave to emit anything unless asked. In fact chlorinators can be tardy sometimes when they are polled so they are collision monsters. The software (master) should send a request to the slave (valve) and it should return the expected bytes. There are a couple of posts on TFP where folks have hooked up 5+ IntelliValves to RS485 and the groot messages appear to degrade their RS485 network. Once the valve is addressed (the one thing we figured out how to do) it stops sending groot messages until asked. It only does this because it is very likely that a broadcast with many valves is likely to end in missing valves. These addresses seemed to persist until you reset them to the broadcast and it would then start grooting again. I do know what Pentair was going to do wrt the programming. The rumor mill said that there would be 5 sets of position that could be selected by the mode operation on the pool and each would have 2 endpoints. I do not know whether the valve itself stored this information or it was set only by the master. Likely, it stored at least one active endpoint set. The reason for this is so the valves home to the default position if RS485 is interrupted. The OCP has sort of a halt state that moves everything to an idle state when power is still on and the comms fail. This is also how the service mode operation works. All of the equipment items do this. So if the watchdog on the pump, heater, or chlorinator doesn't get a message after a specified period of time it will stop. For valves this is currently done in the OCP where it will simply cut coil power to the relay and the valve will move to the home position. Not that this is the only way to skin this cat but I suspect the flow was going to go like this from Pentair.
Although I cannot be sure, I suspect that the relay on the OCP is still in play. It simply energizes which leg it wants to match the valve position and the endpoint stop then determines where it should land. There is a thing in the valve programming to reverse it but this is only to accommodate installing the valve 180 degrees either direction. My belief is that they expect to send in an endpoint pair then energize the diverted or undiverted state depending on the current operation of equipment. |
The software has come SOOOO far since those early days. It's almost embarrassing how many times I had to go back and forth to get it right. The software is just amazing now and much of that is due to @rstrouse. We've re-written it since those early days. There is a Home Assistant plugin but there is an even better one from @Crewski https://github.com/Crewski/njsPC-HA and the associated discussion and it can be installed from the HACS repo. You'll be happy with where we are and never look back at that ancient code again! |
@jeffegg , you able to make any more progress? |
Ok I can generate a new FW uploader tonight that dumps more info. Did hitting the buttons help? |
Hitting the buttons on the existing 2 valves that I tried to flash does not generate any activity on the bus. It does on the 3rd valve that was not flashed yet. But rather than jump to conclusions, I need to slow down and take a more methodical approach to this. I might have done something else wrong. Would not be the first time! |
Well, I was finally able to get the valve that originally was on 0.2.1 to 0.3.1. It now shows up reliably in the updater tool and shows it is on the new firmware. The other valve that I had tried to flash with 0.3.0 is in a state where the Red/Blue/Yellow lights are all flashing on and off repeatedly. Not sure if bricked or just in an odd mode. No communications over the bus, even when save/red buttons pressed. Appears inert. 3rd factory valve also shows up reliably, but is still on factory firmware. |
We should be able to recover any valve. The bootloader is pretty protected from damage. It sounds like that valve didn't get a full FW download or maybe the EEPROM is corrupted. You can try updating the FW by power cycling it. I can update the fw uploader to better walk through the process. But good to see at least 1 is working |
@jeffegg , I am not too worried about the valve that is locked up. But if there is an easy way to reload a new firmware, let me know. But low priority to me. I am going to update a few more to 3.1 just to see how things go. |
I've been following this thread with interest. That said I do not have any itellivalves, instead I have some, ahem.. ratherStupidValves ;) i.e. regular Jandy-valves with standard dual-position 24VAC valve actuators. Just wanted to chip in how I made those variable. It's rather simple and rather low-tech, compared to the Intellivalve hacking. Full disclosure, I currently only use NJSPC for my pump, as all the rest including the house was already run by Homeassistant/NodeRed, with an ESP32 running Tasmota at the poolgear. I've adjusted the camber wheels inside my valve actuators so they can travel the range I need. I'm using two relays per valve; one for direction, another to cut actuator power after x seconds of travel. Initially measured by stopwatch, I know it takes about 36 seconds for my actuators to turn a valve 180 degrees. So say I want maindrain vs. skimmer flow at say 25/75%, and since I know the state of the 1st relay, I know which direction the actuator will be traveling. Depending of direction I cut the power to the actuator after either 9 seconds or 27 seconds and it stops where I want it. If the timing gets out of whack (like after multiple relative moves, as my setup has about 20-50ms lag) and I eventually need to resync the position actuator, I can power the actuator on for 36 seconds and I know it will be at the endpoint which the first relay controls. Again super interesting work on the alternate firmware, just wanted to share an alternative for those who do not have these valves. |
@jeffegg , still having problems reliably talking to valves for firmware update. I run the firmware updater (0.3.2), and it puts my valve (firmware 0.3.1) into all red lights blinking mode. So it is talking to it. But it never finds the valve in the list, always giving "Valve Not Found". I did get it to find it once out of about 20 tries, but it failed in updating to 0.3.2. Tried power cycling but no joy there either. Very strange. I tried using another RS485 adapter just in case that was the issue, but same result. Now have 2 valves stuck in red/green/blue flashy mode and not responding to anything. I might stand down for a bit to see if anyone else is having issues or if it might be unique to my setup. If you do have instructions for restoring bricked valve, let me know and I will try it. Also, I see that on 0.3.1, the valve rotate buttons are working in Service mode, but the directions are reversed. |
V0.3.2, I released last night fixes a communication issue on the transmit path that could be your problem. After this I reliably see all my valves working. I also have this working in my production environment now. Did your write the UUID of your valves down? If not I recommend this in the future it may help. |
The bricked valves both flash blue (set) light 4 times (about 2-3 seconds total) and then go into all 3 mode lights flashing at same time (Auto, Set, Service). I am pretty sure I know the UUID of each valve from log files I kept. My set up is on my bench indoors (not connected to any other pool equipment). Raspberry Pi 3+, latest bulleye update, python 3.9.2. 24VAC transformer to valves (black, red, with white no connection), green to negative, yellow to positive of RS485 USB stick. No other programs starting (REM, njsPC, etc are disabled). |
For the Valve with 0.3.1 firmware on it, when I try to connect, all the RED LEDS that show position flash at once (0-24 positions) indicating that the valve is getting communications, but it never shows up in the list. Here is what I get when I try: pi@pool3 ~/fwupdate/EggysIVFW-0.3.2/SW/IntelliValveFWUpdater $ python
Default RS485 device is (hit enter to select): /dev/ttyUSB1 Index ID Tag Name Prerelease Publish Date Has FW release
Please select the fw release: 1
Please select the index of the Valve for FW update: |
I am trying to manual flash a firmware using the known UUID, but it is unclear if I am doing this correctly. See below: Listening to /dev/ttyUSB0 for 30 seconds. Index ID Tag Name Prerelease Publish Date Has FW release
Please select the fw release: 1
Please select the index of the Valve for FW update: 1 I was not sure what to put for the "Enter Firmware" question. |
Enter either of the two: If you don't see the valves enter FW update mode move to blue blinking mode light when commanded you will need to do this manually by power cycling the valve. |
OK, that is what I was doing. Here is what happens: The valve goes into all red lights flashing mode after "lease select the index of your RS485 device: 1" It then goes into the mode where it is trying to flash the firmware, after entering "Enter Address in Hex format (i.e. 0xA0): 0xA0" I then power cycle the valve, and it goes into blinky blue mode, with the 0 LED lit, indicating it is ready for programming. Then nothing happens. It just tries then quits. See terminal log below:
Default RS485 device is (hit enter to select): /dev/ttyUSB0 Index ID Tag Name Prerelease Publish Date Has FW release
Please select the fw release: 1
Please select the index of the Valve for FW update: 1 Opening serial port: /dev/ttyUSB0 At this point it exist blinky blue mode and returns to normal Auto mode. |
I can see this being an issue, can you try with address 0xC instead? When the valve resets in the bootloader 0xc is the address I suspect this could be the issue there. |
Tried 0xc but same result Originally, after flashing 0.2.1, it was 0xB3. Tried that as well and no joy. Again, no rush on this. I just had some spare cycles and was trying different things with it. This does not impact my production environment in any way. |
Hmm this is really odd, its like the valve isn't talking at all but the bootloader should be talking, this is code that I don't/cannot change. But something odd is happening,
Then it should flash |
Bingo! Good flash (only took 30 seconds or so!) and now identifies just fine. Yes!!! I might give a try with the Valve that is bricked to see if that procedure works on it. THANKS!!! |
No luck with the valve that has flashing bottom 3 LEDS (Auto/off, Set, Service). It does flash SET blue led 4 times when powering it up, but I cannot get it to enter firmware flash mode. |
@bluemantwo I'm willing to trade you a good valve for that one, so I can see what is going on there. I can get the logic analyzer on there to see what is happening and pull/debug the FW. The only thing I can think of is that the EEPROM was corrupted.There is 1 more possibility, I need to look at the bootloader tonight, there is an override if I remember when you hold the save button on valve power up. I cannot remember what it does but maybe still a recovery path available |
I have more valves than I need, so would be happy to just send the logic board from this one if we cannot recover it. No worries. If we cannot fix in the next week or so, PM me your mail address and I will send it over. |
If I corrupt the EEPROM with write 0 or 1's, I can definitely make some weird stuff happen like skipping the bootloader code.
My recommendation to try is to run the Update FW and point it to the bad valve like you did the others and hold the save button when you see the message: If you can get the valve to flash, let me know. I will get a new FW out that looks for EEPROM corruption of certain critical regions and tries to fix (I know of about 6 entries I need, and the bootloader now needs). |
THIS. I also have found this to be true. Could not get response from valve until pulling the USB R485 AND powering down the valve. Several times. I came to same conclusion that leakage current from RS485 was keeping something alive on the valve. |
Not able to make any progress on the valve with blinky 3 lights. Pressing Save during power up did not seem to make any difference. I did get it to once self identify by constantly glitching the power to the valve, it still would not flash. I will just set that valve aside for now. Maybe we can come back to it later or I can send you the controller board from it if you wish to evaluate. No need to return it afterwards. BTW, I am noticing that the valve does Hail when first powered up, so it is not totally inert. I provides its UUID and address: [8/14/2023, 9:10:47 AM] info: Serial port: /dev/ttyUSB0 request to open successful 9600b 8-none-1 from njsPC log when running njsPC (of course, normally I have this process stopped). |
Also, now that I can see the valve hailing, I can confirm that it is the same valve that the log taken several days ago (attached) shows was updated to Firmware 0.3.0, but in reality a different valve was updated to 0.3.0 (a valve that is now working after using your new procedure). So somehow having multiple valves connected to RS485 during flashing resulted in the wrong valve being updated even though the log shows it was targeting the correct valve (the valve that is now bricked). Very odd. |
Making some plans here w/ regard to my own systems wiring (don't own any intellivalves yet)... Will I need RS485 AND Relay outputs? Or will be able to fully control it via RS485 and just send the valves constant power? |
@jamestalmage - Technically no need for relays you should be able to connect 1 leg of the valve to +24VAC and other to common and your valve would work without. I have code now that allows the endpoint selection without using the relays |
@jeffegg Amazing! Do we know if that's the plan for the official Pentair firmware, or just the hacked version? Either way, cool. I'm just a few weeks from closing for the season, so hoping I've got good options for spring. |
Pentair has been |
Indeed, it would open the possibility that the entry level IntelliConnect system could control valves for water features. But in reality it would never come to pass. |
Apparently Pentair are planning updated firmware, see IntelliValve Upgrade Update for details. |
Describe the bug
Not really a bug, more of a feature enhancement. And maybe this isn't the correct place for this, maybe the wiki would be better. Let me know
Currently (as I understand) the intellivalve is minimally supported in nodejs-PoolController. In my copious extra time, between family and work, I decided to see what I can do to help improve support. So I ordered an extra intellivalve when adding some to my pool in hopes that I can help this out. Seems I am able, looking at the hardware, there is a PIC16F1718 inside (Yay), as well as a ICSP port, so using MPLABX and an ICD4, I dumped the FW. I'm currently in the process of dissembling the FW from using MPLAB, and Ghidra (thanks NSA :)) I don't know what will be supported, but since I actually made the valve do something from message Center based on the FW (reset) maybe I can figure out something useful, like setting new endstops, etc. Else, I've reverse engineered a partial schematic for the valve and I'll write my own FW. Both efforts will probably take a few weeks, depending on work schedule.
FYI I use Pool controller in Nixie single body mode, and I don't have a Pentair panel to reverse engineer communications (assuming the panels have some interesting support.) This would be easier to capture packets and reverse engineer, but I'm not interested in the panel, so don't want to spend the money on it.
Commands I know (as of 10/31/21)
SW reset of valve:
Action: 0xF7 (247)
Sent Packet: FF00FF A5 3F 0C 10 F7 04 01 01 F9
Response Packet: Source: 12 (Valve); Dest: 16(OCP), Action: 1, Data Length 1: 247, Header [165,1,16,12,1,1] Term: [0,167]
The text was updated successfully, but these errors were encountered: