IntelliCenter Home Automation Integration and Control

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
Ah! I think there is a misunderstanding... You need to replace 'xx' with the number of the aux circuit connected to the light, not with the number of on/off cycles.
So if your light is connected to Aux Circuit 3 then the commands for one off/on cycle would be:

{"command":"SETPARAMLIST","objectList":[{"objnam":"C0003","params":{"STATUS":"OFF"}}],"messageID":"foobar"}
{"command":"SETPARAMLIST","objectList":[{"objnam":"C0003","params":{"STATUS":"ON"}}],"messageID":"foobar"}


You would then repeat the above two commands 14 times to recall the held colour.

Looking at a previous post of yours it looks like you have two light circuits listed 4th and 5th in your setup:
View attachment 111236

I have no idea if the circuits are shown in numeric order but if they are then you could use:

{"command":"SETPARAMLIST","objectList":[{"objnam":"C0004","params":{"STATUS":"OFF"}}],"messageID":"foobar"}
{"command":"SETPARAMLIST","objectList":[{"objnam":"C0004","params":{"STATUS":"ON"}}],"messageID":"foobar"}


to perform a single off/on cycle of your 'Pool Light' circuit or

{"command":"SETPARAMLIST","objectList":[{"objnam":"C0005","params":{"STATUS":"OFF"}}],"messageID":"foobar"}
{"command":"SETPARAMLIST","objectList":[{"objnam":"C0005","params":{"STATUS":"ON"}}],"messageID":"foobar"}


to perform a a singe off/on cycle of your 'Pool Light 2' circuit.

Once you have identified the correct numbers of each of the light circuits, you should be able to select any of the 14 colours/shows/functions of the intellibrite lights by cycling the corresponding number of times.
Here is the chart for ref with the number of off/on cycles shown for each:

View attachment 111238

Good luck :)
Hi mcqwerty
Okay, so I totally get what you were saying regarding putting the circuit number in the command now. That makes sense. Yea, those are NOT in numeric order (one of my complaints that the Web-Client will NOT allow sorting on the pages but whatever).

So the light is Circuits #4. No light on 5. That was an old screenshot where I was doing some testing on another issue for someone else. I tried both the on command when the light was off and the off command when the light was on. Nothing. No error but the commands did not effect the light at all. I'm kind of at a loss. Not sure if I am doing something wrong or not.

But I sure don't mind trying. We'll get it. But those particular commands had no effect.
Let me know if you want me to try something a bit different.
Thanks!
r.
 

kyleaa

Silver Supporter
May 26, 2019
8
Nevada
Sorry for my absence!

You can send commands to directly select any of the colors/shows.


{"command":"SetParamList","messageID":"67865967A01A862FCF9","objectList":[{"objnam":"C0002","params":{"ACT": "MAGNTAR"}}]}

These are the values I'm aware of:
SAMMOD
ROMAN
PARTY
CARIB
AMERCA
SSET
ROYAL
WHITER
GREENR
BLUER
MAGNTAR
REDR


As far as identifying your lights circuit, it looks like this command can search by name (assuming your circuit is named "Lights". I have a schedule that is also named lights, so you can see that returned as well.

Request:
{
"condition": "SNAME = Lights",
"objectList": [{
"objnam": "ALL",
"keys": ["OBJNAM", "OBJTYP", "PARENT", "ACT", "CIRCUIT", "SELECT"]
}],
"command": "GETPARAMLIST",
"messageID": "035A2752-CB39-4756-81C9-DB477A398D36"
}

Response:
{
"command": "SendParamList",
"messageID": "035A2752-CB39-4756-81C9-DB477A398D36",
"response": "200",
"objectList": [{
"objnam": "C0002",
"params": {
"OBJNAM": "C0002",
"OBJTYP": "CIRCUIT",
"PARENT": "M0101",
"ACT": "65535",
"CIRCUIT": "CIRCUIT",
"SELECT": "SELECT"
}
}, {
"objnam": "SCH01",
"params": {
"OBJNAM": "SCH01",
"OBJTYP": "SCHED",
"PARENT": "PARENT",
"ACT": "OFF",
"CIRCUIT": "C0002",
"SELECT": "SELECT"
}
}]
}
 
  • Like
Reactions: chemillion

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
Hi kyleaa
Yea, we had heard that you were in Tahiti, partying it up, so welcome back. :p

It's getting a bit late now, but I am going to play around with those in the next day or two and see what transpires.
Thanks very much for those. Looking forward to giving them a try on my system.
Take care and welcome back :mrgreen:
r...
 

mcqwerty

Active member
Aug 27, 2018
30
TN
Hi @kyleaa,

Glad to see you back!
Would you mind looking over my API 'documentation' in post 39. I have the light commands documented along with everything else I could find but since I don't have an IntelliCenter to test against this is all theory.
I'm hoping that the reason @MyAZPool was not able to get the STATUS commands to work is because of a mismatched circuit number so your suggested command will help figure out that mystery.

As I documented in my google sheet, there is the ACT command to call a color directly, but we were trying to replicate the 'hold' and 'recall' functions that are accessed by cycling the lights 13 and 14 times respectively. I wondered if there was an accompanying ACT value that may trigger these but since this feature doesn't seem to be exposed in the web app then it may be hard to find even if it does exist.
If we can get the STATUS:OFF and STATUS:ON commands to work then maybe we can replicate the hold and recall functions through the API. Testing this method to see if it would change the light colour should also work as far as I can see but obviously using the ACT command for colors makes more sense outside of testing.

One other thing: I had guessed, (and documented in my google sheet), that an ACT command needed to be followed by a STATUS:ON command to make it take effect, seems like you are suggesting this is not the case and simply issuing an ACT command with a specified color is sufficient to make the light change. Is that correct? If so, I will update my documentation.

Thanks!
 
  • Like
Reactions: MyAZPool

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
kyleaa and mcqwerty
These are the two commands I sent via PuTTY.

1. {"command":"SetParamList","messageID":"67865967A01A862FCF9","objectList":[{"objnam":"C0004","params":{"ACT": "MAGNTAR"}}]}
2. {"command":"SETPARAMLIST","objectList":[{"objnam":"C0004","params":{"STATUS":"ON"}}],"messageID":"foobar"}

Nothing happened after the 2nd command. No error but the light did not come on either (I expected I guess for it to turn on to the Magenta color).
Obviously I'm goofed up someone (no surprise there) :p

When I sent the Spoiler command, this was the error message.
112347

Where have I strayed? lol....
:(
 

mcqwerty

Active member
Aug 27, 2018
30
TN
Where have I strayed? lol....
Quick 'from the hip' idea: Try removing the carriage returns from the command, i.e. make the whole thing one line when you send it. It may be considering the newline as the end of input.

{"condition": "SNAME = Lights","objectList": [{"objnam": "ALL","keys": ["OBJNAM", "OBJTYP", "PARENT", "ACT", "CIRCUIT", "SELECT"]}],"command": "GETPARAMLIST","messageID": "035A2752-CB39-4756-81C9-DB477A398D36"}
 

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
Quick 'from the hip' idea: Try removing the carriage returns from the command, i.e. make the whole thing one line when you send it. It may be considering the newline as the end of input.

{"condition": "SNAME = Lights","objectList": [{"objnam": "ALL","keys": ["OBJNAM", "OBJTYP", "PARENT", "ACT", "CIRCUIT", "SELECT"]}],"command": "GETPARAMLIST","messageID": "035A2752-CB39-4756-81C9-DB477A398D36"}
No response. This command did not return an error this time (no carriage returns) but it did not return a response either.
 

mcqwerty

Active member
Aug 27, 2018
30
TN
@MyAZPool,
Well I am confused. :confused::scratch:
Hopefully @kyleaa will weigh in to save us but in the mean time, lets do some trouble shooting. Lets try the simplest command there is and see if we get a response.
Try entering: ping
I believe you should receive a response: pong

If this doesn't work we have bigger problems than the format of the messages. If it does work, lets try this again:

{"condition": "SNAME = Lights","objectList": [{"objnam": "ALL","keys": ["OBJNAM", "OBJTYP", "PARENT", "ACT", "CIRCUIT", "SELECT"]}],"command": "GETPARAMLIST","messageID": "newId0001"}

But this time with a new messageID. I have no idea what happens if you reuse messageIDs so lets try a fresh one as above just to cover all the angles.

If that works you could always have another go at:

{"command":"SETPARAMLIST","objectList":[{"objnam":"C0004","params":{"STATUS":"ON"}}],"messageID":"newId0002"}

Good luck!
 

kyleaa

Silver Supporter
May 26, 2019
8
Nevada
Sorry for my absence! I just turned on email notifications so I'll hopefully be more responsive now :)

That command looks correct - I was able to execute it against my intellicenter. I wonder if theres an issue with either the port (i've noticed that 6681 works for telnet, but using "real" websockets requires 6680) or the tool you are using to connect? It almost seems like it's not recognizing that you put in a command at all. Another thing to look for is to make sure there are no "Smart Quotes" aka the curly quotes - many text editors like to helpfully convert them automatically for you and break other applications in the process.

Another thing I just noticed - if you sign in to intellicenter.com and pull up the chrome javascript console, they are VERY verbose with the logging. It looks like they use the exact same websocket protocol (found in the data key in the log messages) and log all of the requests to the console. This is an even easier way to capture the messages than setting up a reverse proxy.

This is a sample of my chrome console, receiving events from PMP01 (IntelliFlo) for changes in power and _A135 (Air Temperature Sensor) for changes in ambient temp.

113327
 
  • Like
Reactions: cmc0619

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
Sorry for my absence! I just turned on email notifications so I'll hopefully be more responsive now :)

That command looks correct - I was able to execute it against my intellicenter. I wonder if theres an issue with either the port (i've noticed that 6681 works for telnet, but using "real" websockets requires 6680) or the tool you are using to connect? It almost seems like it's not recognizing that you put in a command at all. Another thing to look for is to make sure there are no "Smart Quotes" aka the curly quotes - many text editors like to helpfully convert them automatically for you and break other applications in the process.

Another thing I just noticed - if you sign in to intellicenter.com and pull up the chrome javascript console, they are VERY verbose with the logging. It looks like they use the exact same websocket protocol (found in the data key in the log messages) and log all of the requests to the console. This is an even easier way to capture the messages than setting up a reverse proxy.

This is a sample of my chrome console, receiving events from PMP01 (IntelliFlo) for changes in power and _A135 (Air Temperature Sensor) for changes in ambient temp.

View attachment 113327
Hi kyleaa
Thanks. Yea, mcqwerty and I got past this issue I believe and much more over on the PM side. Tremendous progress over the weekend. mcqwerty did all of the work. I was just the "test bed". :p
I think we were able to use some of your preliminaries to 'break through". I can probably do about 80% or so that I can do from the web-client through an MQTT server and UI.
I don't want to steal mcqwerty's thunder, so I will let him explain it to you. You and he did all of the "heavy lifting" and besides, you and him speak the same "lingo" :p. I would just "muddy the waters" lol.
Anyway, thanks for checking in, hope all is well and looking forward to getting your take and input once mcqwerty's has a chance to explain the progress.
r.
 
Last edited:

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
Hi kyleaa
OMG, I was in such a hurry this morning that I completely spaced that second paragraph.
I came back to the thread to ask you a question, but now for the life of me, I can't remember what it was. crud...

Okay, I gotcha... So, yea I did that. I recognize some of the syntax, but what I don't get is that it keeps scrolling additional information when no commands are forwarded. No time stamps?
So is this just the result of continuous queries by the system or the continuous communications between the panel and the Pentair servers/web-client?

113400

Pretty cool. Nice find. Thanks for sharing.
When I remember what I was going to ask you, I'll get back. :p
Thanks again!!
r.
 

mcqwerty

Active member
Aug 27, 2018
30
TN
Hi @kyleaa and @MyAZPool ,

Sorry for the delay I have a lot going on here at the moment so am not as active on here as I would like to be but wanted to check in and update.
As @MyAZPool mentioned, he and I have been working on what I am calling the IntelliCenter Commander. It's really just a 2-way MQTT to Telnet bridge. I threw together some code and @MyAZPool has been the willing and very gracious guinea pig.

The larger plan is this:
Building off my IntelliCenter API document the Commander will accept coded commands on the MQTT bus interpret them and then send the IntelliCenter formatted command to the IntelliCenter via telnet.
The commander simultaneously listens, via Telnet for messages on the IntelliCenter API bus, and relays them to the MQTT broker.

The idea being that Home Automation systems, or anyone with a little coding knowledge, can use MQTT to both command the IntelliCenter and be updated of status changes for the equipment and sensors connected to the IntelliCenter. The home-brewers out there, if so inclined, could create their own UI without having to worry about communicating with the IntelliCenter or learning all of the command syntax.
The Commander will run as a service on some low-power box on your local network. The MQTT server can be run locally on the same box, a different box or hosted in the cloud. When using a locally hosted MQTT server and when your device with your chosen UI is also on your local network you will have full control of your IntelliCenter no cloud required and no internet connection required.

Finally, since we don't have to rely on Pentair's UI the IntelliCenter commander can do things the Pentair web app cannot (so I'm told :) )
e.g.
  • Select SaM mode for your light(s)
  • Turn on Swim mode for a light group
  • Sync a light group
  • Set a light group
  • 'Hold' a colour on a light
  • 'Recall' a held color on a light
  • Toggle Laminar thumper on/off
  • Other suggestions gladly received and I'll see what I can do
Also, I believe this effectively removes the annoying restriction of only 16 feature groups since we can now command features individually in whatever order and combination we like. It doesn't remove the 32 feature restriction but it does make it much less likely to be an issue since we can control pumps directly to any speed or GPM (if pump is VSF) then we don't have to use precious features to access particular pump speeds we can just command a pump to whatever speed we want directly without using a feature. :)

Additionally all of the commands that are present in the Pentair app are also available via the IntelliCenter Commander and MQTT. So you can control your pumps, your heaters, lights, chemical controller, features, etc, etc.

So that's the theory.
In practice, the code is working. We have the Commander, an MQTT server (other better MQTT servers are available), a viewer which is just a simple console app visualising messages from the MQTT bus sent out from the IntelliCenter and a UI which is a console app that allows you to select the command you wish to perform by selecting a series of options (really just for testing, not meant as a permanent way of sending commands.
I would place the current state one notch above a proof of concept but not really ready for public beta (is that alpha?? 🤔:confused:).

Major to do items:
  • Enable subscribing to capture status changes and publish to MQTT
  • Rework the MQTT topic layout and message encoding to be more standardised and easier to understand
  • Various code clean ups and feature adds (ability to select a 'body of water' i.e. pool or spa' and Pentair seems to have made controlling pumps via their unofficial API more complicated than it needed to be so this needs a bit more investigation to make it fit for public consumption)
  • Upload code to Github
For those that are interested, it is written in C# targeting the latest .net framework. I believe it will all work in .netCore except the telnet library I am using is not compatible with core. I plan on fixing this to make the whole thing work in .netCore to hopefully allow it to run on Linux boxes.

@kyleaa - You mentioned using websockets requires port 6680. I would prefer to use websockets vs Telnet since it seems more well suited to an always open connection where we want to listen in to the Pentair bus as well as add commands. However, I created a connection tester for @MyAZPool including attempting to connect via websockets on 6680 but it failed to connect. Do you have more information on how to establish a websockets connection to the IntelliCenter?

Ok, that's enough for one post...
:D
 
  • Like
Reactions: MyAZPool

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
Hi @kyleaa and @MyAZPool ,

Sorry for the delay I have a lot going on here at the moment so am not as active on here as I would like to be but wanted to check in and update.
As @MyAZPool mentioned, he and I have been working on what I am calling the IntelliCenter Commander. It's really just a 2-way MQTT to Telnet bridge. I threw together some code and @MyAZPool has been the willing and very gracious guinea pig.

The larger plan is this:
Building off my IntelliCenter API document the Commander will accept coded commands on the MQTT bus interpret them and then send the IntelliCenter formatted command to the IntelliCenter via telnet.
The commander simultaneously listens, via Telnet for messages on the IntelliCenter API bus, and relays them to the MQTT broker.

The idea being that Home Automation systems, or anyone with a little coding knowledge, can use MQTT to both command the IntelliCenter and be updated of status changes for the equipment and sensors connected to the IntelliCenter. The home-brewers out there, if so inclined, could create their own UI without having to worry about communicating with the IntelliCenter or learning all of the command syntax.
The Commander will run as a service on some low-power box on your local network. The MQTT server can be run locally on the same box, a different box or hosted in the cloud. When using a locally hosted MQTT server and when your device with your chosen UI is also on your local network you will have full control of your IntelliCenter no cloud required and no internet connection required.

Finally, since we don't have to rely on Pentair's UI the IntelliCenter commander can do things the Pentair web app cannot (so I'm told :) )
e.g.
  • Select SaM mode for your light(s)
  • Turn on Swim mode for a light group
  • Sync a light group
  • Set a light group
  • 'Hold' a colour on a light
  • 'Recall' a held color on a light
  • Toggle Laminar thumper on/off
  • Other suggestions gladly received and I'll see what I can do
Also, I believe this effectively removes the annoying restriction of only 16 feature groups since we can now command features individually in whatever order and combination we like. It doesn't remove the 32 feature restriction but it does make it much less likely to be an issue since we can control pumps directly to any speed or GPM (if pump is VSF) then we don't have to use precious features to access particular pump speeds we can just command a pump to whatever speed we want directly without using a feature. :)

Additionally all of the commands that are present in the Pentair app are also available via the IntelliCenter Commander and MQTT. So you can control your pumps, your heaters, lights, chemical controller, features, etc, etc.

So that's the theory.
In practice, the code is working. We have the Commander, an MQTT server (other better MQTT servers are available), a viewer which is just a simple console app visualising messages from the MQTT bus sent out from the IntelliCenter and a UI which is a console app that allows you to select the command you wish to perform by selecting a series of options (really just for testing, not meant as a permanent way of sending commands.
I would place the current state one notch above a proof of concept but not really ready for public beta (is that alpha?? 🤔:confused:).

Major to do items:
  • Enable subscribing to capture status changes and publish to MQTT
  • Rework the MQTT topic layout and message encoding to be more standardised and easier to understand
  • Various code clean ups and feature adds (ability to select a 'body of water' i.e. pool or spa' and Pentair seems to have made controlling pumps via their unofficial API more complicated than it needed to be so this needs a bit more investigation to make it fit for public consumption)
  • Upload code to Github
For those that are interested, it is written in C# targeting the latest .net framework. I believe it will all work in .netCore except the telnet library I am using is not compatible with core. I plan on fixing this to make the whole thing work in .netCore to hopefully allow it to run on Linux boxes.

@kyleaa - You mentioned using websockets requires port 6680. I would prefer to use websockets vs Telnet since it seems more well suited to an always open connection where we want to listen in to the Pentair bus as well as add commands. However, I created a connection tester for @MyAZPool including attempting to connect via websockets on 6680 but it failed to connect. Do you have more information on how to establish a websockets connection to the IntelliCenter?

Ok, that's enough for one post...
:D
Hi mcqwerty
WOW. Thank you sir!!! :salut:
r..
 

kyleaa

Silver Supporter
May 26, 2019
8
Nevada
@MyAZPool do you have PIN authentication enabled on your system? I wonder if that could be the cause of connection issues on websockets and ignored messages on telnet.
 

mcqwerty

Active member
Aug 27, 2018
30
TN
issues on websockets and ignored messages on telnet
Hi @kyleaa,
we were able to establish a connection with Telnet but my websockets test failed. That's why I was wondering if you had details of how to connect with websockets on 6680 since I know the connection via Telnet on 6681 is good.

Thanks!
 
  • Like
Reactions: MyAZPool

MyAZPool

Gold Supporter
Jul 3, 2018
964
Arizona
Hi mcqwerty and kyleaa
I quoted two posts below that are over in the My DIYHomeBrew Pool Automation Controller thread.
These posts are regarding the use of higher-end thermistors.
Just something to think about for the future once a UI can be fully developed to replace the IntelliCenter UI. The reason that I bring this topic up is because the current Pentair thermistors are junk and are not very accurate.
Just food for thought for the future. :)
Thanks.
r.