I finally have control (though limited and growing) of my Infinity HVAC system and want to share what I did to make it work. I know there is a plugin in the works, but personally I have been trying to integrate this thing since install over a year ago and this wasn't too bad to setup in the meantime while I wait for the plugin to have full control. I work from home, so the automation of the HVAC for home/away isn't really of concern for me, and the thermostat itself actually does a really good job of maintaining the system without a lot of intervention. My main goal (that my wife really wanted back from our old system), was to have the system turn on and off depending on if the windows/doors were opened (I have a delay of 2 minutes of anything opened before it turns off, so that it doesn't just turn off if you are walking into the house). And return to it's previous state once the house was closed up again.
I warn you, this is a hack, but I have to say, probably one of the most reliable things I have in my automation setup right now. Also I will share my scripts i created, but realize, I am not a coder and though there might be better ways to create the scripts, they do work for my needs without issue . Google was very kind to me in building them.
Things you will need:
- Raspberry Pi (easiest to setup and use, but anything with linux can be used depending on your skills in linux)
- Infinitude software, someone else much smarter then me reverse engineered the carrier protocol. It basically tricks your thermostat to think its calling home thru a proxy change on the thermostat itself
- You can also get a USB to RS485 adapter if you want to connect into the serial communication on the heater, but honestly, I didn't see the need or hassle. You don't need it to control the heater.
- You have to have the WIFI version of the carrier infinity thermostat for this to work as well.
Ok first, get the communication going with your heater and the Pi. Go to this location and download everything. There is also a very good write up on how to install it on the Pi and get up and running:
https://github.com/nebulous/infinitude
Here is the direct link for the install instructions for the Pi:
https://github.com/nebulous/infinitu...%28raspbian%29
Once you have it installed and the thermostat setup changed to point to your new Pi (adjust the proxy setting in the wifi setup, not the physical address to carrier. This got me initially, and it will default back ). You should be able to go to the website your Pi created and see all the data coming from your heater and even control things like setpoints from it. Once this is done, the hard work is completed!
Now to work on the integration into Homeseer. First lets get the data from the heater into HS. This is where I created a script to scrape the XML files that are hosted and updated on the Pi.
You have two XML files that include all data you would ever want. You can adjust the scripts to add things I didn't if you want, or remove things I put in you don't think is needed.
The two files are at this location:
http://{Pi IP and port}/systems.xml (includes everything related to the heater and also the settings for the different profiles)
http://{Pi IP and port}/status.xml (Includes the data for the zones, mainly what I use to receive data)
Also there is JSON files if that is your preference at the same locations labeled systems.json and status.xml. I have attached mine so you can see the data that can be accessed.
Create all the virtual devices you need to house the info you scrape from the XML files and adjust the script accordingly to parse it into the proper devices. Create an event to run the script, I have mine set to run every minute. It's not real time, but close enough and is only for visual needs, has no impact on the actual control of the heater.
Now the part to actually control the heater. It is a very limited rest command structure. Things to keep in mind:
- The heater will not take the updated settings you send to it unless the thermostat is in a resting state (don't play with it. I think this is by design that if someone is in front of it, to ignore outside setting changes. At first i thought the changes were not working, but found if I just left the thing alone, it would adjust)
- You cannot turn the heater on/off. I have put in a request with the designer of infinitude on the github site to have this added
- Changing to different profiles does require that a hold until is in place. Meaning if you are currently in your program for "Home" and you want to force it to away that is outside of its normal schedule, it will force a 3 hour hold until, or you can extend this by adding it into the rest command you send. Again I think this is by design on the system itself.
What i did to pseudo control on/off of my heater is i utilize the manual profile. This does limit my other abilities to adjust remotely the temperature, but once on/off control is added into the rest commands, I will change how I do things and regain being able to utilize manual profile to temporary adjust the temperature if wanted.
I have the manual profile set for heat to 55 degrees and cool at 90 degrees, both temps are extreme enough that the heater would never turn on if in the manual profile. This is how I mimic on/off.
I setup two events, one attached to a timer that starts when the doors are opened and turns the heater off if the 2 min threshold is hit. And another that puts the heater back to normal once everything is closed.
In the events (run immediate script), I send one of these two commands:
Turns heater off:
&hs.GetURL("10.0.254.204","/api/1/hold?activity=manual&hold=on",FALSE,3000)
You can see this sets it to manual and turns hold on (hold status has to change for the profile to change)
Turns heater on:
&hs.GetURL("10.0.254.204","/api/1/hold?activity=home&hold=off",FALSE,3000)
Turns hold off and changes activity back to home. Really the activity change doesn't matter if you turn hold off, since it will just go back to whatever profile is programmed for the time, but is needed in the URL to make the change happen. This command also sets the heater to sleep in the evenings if sleep is normally what is happening at that time.
Here is the details from the github wiki on the rest commands:
Set current activity thusly:
/api/yourZoneIdMostLikely1/hold?activity=(home|away|sleep|wake|manual)&until=HH:MM&hold =(on|off)
Edit settings for each activity like so:
/api/yourZoneIdMostLikely1/activity/(home|away|sleep|wake|manual)?htsp=99&clsp=60&fan=(high|med| low|off)
Files attached:
hvac.txt - Script to scrape XML files (change to .vb once downloaded)
status.xml - From Infinitude
systems.xml - From Infinitude
I warn you, this is a hack, but I have to say, probably one of the most reliable things I have in my automation setup right now. Also I will share my scripts i created, but realize, I am not a coder and though there might be better ways to create the scripts, they do work for my needs without issue . Google was very kind to me in building them.
Things you will need:
- Raspberry Pi (easiest to setup and use, but anything with linux can be used depending on your skills in linux)
- Infinitude software, someone else much smarter then me reverse engineered the carrier protocol. It basically tricks your thermostat to think its calling home thru a proxy change on the thermostat itself
- You can also get a USB to RS485 adapter if you want to connect into the serial communication on the heater, but honestly, I didn't see the need or hassle. You don't need it to control the heater.
- You have to have the WIFI version of the carrier infinity thermostat for this to work as well.
Ok first, get the communication going with your heater and the Pi. Go to this location and download everything. There is also a very good write up on how to install it on the Pi and get up and running:
https://github.com/nebulous/infinitude
Here is the direct link for the install instructions for the Pi:
https://github.com/nebulous/infinitu...%28raspbian%29
Once you have it installed and the thermostat setup changed to point to your new Pi (adjust the proxy setting in the wifi setup, not the physical address to carrier. This got me initially, and it will default back ). You should be able to go to the website your Pi created and see all the data coming from your heater and even control things like setpoints from it. Once this is done, the hard work is completed!
Now to work on the integration into Homeseer. First lets get the data from the heater into HS. This is where I created a script to scrape the XML files that are hosted and updated on the Pi.
You have two XML files that include all data you would ever want. You can adjust the scripts to add things I didn't if you want, or remove things I put in you don't think is needed.
The two files are at this location:
http://{Pi IP and port}/systems.xml (includes everything related to the heater and also the settings for the different profiles)
http://{Pi IP and port}/status.xml (Includes the data for the zones, mainly what I use to receive data)
Also there is JSON files if that is your preference at the same locations labeled systems.json and status.xml. I have attached mine so you can see the data that can be accessed.
Create all the virtual devices you need to house the info you scrape from the XML files and adjust the script accordingly to parse it into the proper devices. Create an event to run the script, I have mine set to run every minute. It's not real time, but close enough and is only for visual needs, has no impact on the actual control of the heater.
Now the part to actually control the heater. It is a very limited rest command structure. Things to keep in mind:
- The heater will not take the updated settings you send to it unless the thermostat is in a resting state (don't play with it. I think this is by design that if someone is in front of it, to ignore outside setting changes. At first i thought the changes were not working, but found if I just left the thing alone, it would adjust)
- You cannot turn the heater on/off. I have put in a request with the designer of infinitude on the github site to have this added
- Changing to different profiles does require that a hold until is in place. Meaning if you are currently in your program for "Home" and you want to force it to away that is outside of its normal schedule, it will force a 3 hour hold until, or you can extend this by adding it into the rest command you send. Again I think this is by design on the system itself.
What i did to pseudo control on/off of my heater is i utilize the manual profile. This does limit my other abilities to adjust remotely the temperature, but once on/off control is added into the rest commands, I will change how I do things and regain being able to utilize manual profile to temporary adjust the temperature if wanted.
I have the manual profile set for heat to 55 degrees and cool at 90 degrees, both temps are extreme enough that the heater would never turn on if in the manual profile. This is how I mimic on/off.
I setup two events, one attached to a timer that starts when the doors are opened and turns the heater off if the 2 min threshold is hit. And another that puts the heater back to normal once everything is closed.
In the events (run immediate script), I send one of these two commands:
Turns heater off:
&hs.GetURL("10.0.254.204","/api/1/hold?activity=manual&hold=on",FALSE,3000)
You can see this sets it to manual and turns hold on (hold status has to change for the profile to change)
Turns heater on:
&hs.GetURL("10.0.254.204","/api/1/hold?activity=home&hold=off",FALSE,3000)
Turns hold off and changes activity back to home. Really the activity change doesn't matter if you turn hold off, since it will just go back to whatever profile is programmed for the time, but is needed in the URL to make the change happen. This command also sets the heater to sleep in the evenings if sleep is normally what is happening at that time.
Here is the details from the github wiki on the rest commands:
Set current activity thusly:
/api/yourZoneIdMostLikely1/hold?activity=(home|away|sleep|wake|manual)&until=HH:MM&hold =(on|off)
Edit settings for each activity like so:
/api/yourZoneIdMostLikely1/activity/(home|away|sleep|wake|manual)?htsp=99&clsp=60&fan=(high|med| low|off)
Files attached:
hvac.txt - Script to scrape XML files (change to .vb once downloaded)
status.xml - From Infinitude
systems.xml - From Infinitude
Comment