kevkmartin Posted February 7, 2012 Posted February 7, 2012 I finally got my Insteon / Venstar 2491Tup and running. It works well in the admin panel, properly reporting and updating. My next project wit it was going to be setting up a simple daily "Climate Control" e-mail notification. I set up a custom notification. The goal was to include the current Heat and Cool Setpoints, as well as the number of cycles of heating / cooling called for that day. I set up two (non-state) variables Heat_Cycles_Today, and Cool_Cycles_Today. I also wrote two simple programs: Update_Cool_Cycle_Count If Status 'Thermostat / 14.67.A7 - Cool Control' is On Then $Cool_Cycles_Today +=1 $Cool_Cycles_Today Init To $Cool_Cycles_Today Else No Actions Update_Heat_Cycle_Count If Status 'Thermostat / 14.67.A7 - Heat Control' is On Then $Heat_Cycles_Today +=1 $Heat_Cycles_Today Init To $Heat_Cycles_Today Else No Actions At midnight, I received my first status e-mail; it reported NO Heat or Cool Cycles. I know the heat came on that day. My first thought was that I needed to query the thermostat to pick up the Heat Status, so I wrote a program (and ran it) that queried the Thermostat once a minute. At midnight, I received my second status e-mail; it still reported NO Heat or Cool Cycles. I* have also found NO way (programmaticly) to retrieve the current heat / cool set points. Any help?
ronbo Posted February 7, 2012 Posted February 7, 2012 do you reset the cycles after sendding the notification? Ron
ronbo Posted February 7, 2012 Posted February 7, 2012 The reason I ask, is that I have seen if I do a notification with a variable, and then change the variable. the notification shows the new value, unless I insert a wait before updating or resetting the variable.. I guess this is due tot he fact the the ISY is a state driven machine
kevkmartin Posted February 7, 2012 Author Posted February 7, 2012 Yes. In the program that sends the daily notification, I reset both counts to 0 and to init to 0.
ronbo Posted February 7, 2012 Posted February 7, 2012 Try putting a wait 3 seconds before resetting the variables
kevkmartin Posted February 7, 2012 Author Posted February 7, 2012 I can actually look at the variables in the console and see that they are not updating. I can also see that neither program has ever evaluated to TRUE.
ronbo Posted February 7, 2012 Posted February 7, 2012 If Control 'Main Floor - Heat Control' is switched On Then $Int_12 += 1 $Int_12 Init To $Int_12 Else - No Actions - (To add one, press 'Action') I just tried the above, and manually made the heat come on and off, and my variable incremented each time.
ronbo Posted February 7, 2012 Posted February 7, 2012 Note I am using control... Not Status. I dont think status caused the expression to be evaluated, but I could be wrong
LeeG Posted February 7, 2012 Posted February 7, 2012 The Status has to change for Status to trigger a program. Repetitive Heat-Control Ons do not trigger with Status as there is no change in Status.
ronbo Posted February 7, 2012 Posted February 7, 2012 If it goes from on to off to on isnt that a change
LeeG Posted February 7, 2012 Posted February 7, 2012 A change in Status triggers the Program. The evaluation of the If for True or False determines whether the Then or Else clause runs.
kevkmartin Posted February 7, 2012 Author Posted February 7, 2012 So... How do I accomplish my objective of counting how many times in a day the heat comes on? The t-stay is running in "auto" mode with a heat and cool set point. I rarely do anything to it "manually".
LeeG Posted February 7, 2012 Posted February 7, 2012 Use If Control rather than If Status. If Control triggers every time the command is received. If Status triggers only when a change in Status occurs.
ronbo Posted February 7, 2012 Posted February 7, 2012 I guess what you're getting to is that the status actually never goes off it's just that an on command is sent every time the heating system comes on
LeeG Posted February 7, 2012 Posted February 7, 2012 I don't know what the tstat sends when. If Status was not working and a command is sent when the heat comes On it is because there was no corresponding heat Off. The Status MUST change for an If Status to trigger a Program. The Event Viewer will show what commands are flowing from the tstat. That will show what the tstat sends when the heat cycles.
Teken Posted February 8, 2012 Posted February 8, 2012 I am subscribing to this as I am trying to figure out how to accomplish the same goal. I have four of these TSTATS deployed right now and want to know when they turn on / off. This will allow me more insight as to the state of the home. Teken . . .
kevkmartin Posted February 8, 2012 Author Posted February 8, 2012 Solved it (at least one part)!!! This certainly wasn't obvious to me, so I hope it helps others. Instead of using the control or status of the Heat or Cool nodes, I noticed that there was an option in the program pull down for the MAIN thermostat node called "Calling For Heat" and "Calling For Cool". When I changed my if statements to look at THOSE... worked like a champ!!! Now... can anyone help figure out how to get the current set points (and possibly even the fan status) into variables so that the can be included in my report?
Teken Posted February 8, 2012 Posted February 8, 2012 Solved it (at least one part)!!! This certainly wasn't obvious to me, so I hope it helps others. Instead of using the control or status of the Heat or Cool nodes, I noticed that there was an option in the program pull down for the MAIN thermostat node called "Calling For Heat" and "Calling For Cool". When I changed my if statements to look at THOSE... worked like a champ!!! Now... can anyone help figure out how to get the current set points (and possibly even the fan status) into variables so that the can be included in my report? Would you mind posting up the final code once its confirmed to be working. As I have the same needs and requirements as well. Teken . . .
kevkmartin Posted February 8, 2012 Author Posted February 8, 2012 Solved it (at least one part)!!! This certainly wasn't obvious to me, so I hope it helps others. Instead of using the control or status of the Heat or Cool nodes, I noticed that there was an option in the program pull down for the MAIN thermostat node called "Calling For Heat" and "Calling For Cool". When I changed my if statements to look at THOSE... worked like a champ!!! Now... can anyone help figure out how to get the current set points (and possibly even the fan status) into variables so that the can be included in my report? Would you mind posting up the final code once its confirmed to be working. As I have the same needs and requirements as well. Teken . . . Sure. Here's what I ended up with: Define variables (non-state): $Cool_Cycles_Today $Heat_Cycles_Today Define Custom Notification: Climate_Status Programs: Update_Cool_Cycle_Count If Status 'Thermostat / 14.67.A7 - Main' is Calling for Cool Then $Cool_Cycles_Today +=1 $Cool_Cycles_Today Init To $Cool_Cycles_Today Else No Actions Update_Heat_Cycle_Count If Status 'Thermostat / 14.67.A7 - Main' is Calling For Heat Then $Heat_Cycles_Today +=1 $Heat_Cycles_Today Init To $Heat_Cycles_Today Else No Actions Send_Climate_Status_And_Reset_Variables If Time is 11:59:30PM Then Set 'Thermostat / 14.67.A7 - Main' Query Send Notification to 'kevkmartin e-mails' content 'Climate Status' $Heat_Cycles_Today = 0 $Heat_Cycles_Today Init To 0 $Cool_Cycles_Today = 0 $Cool_Cycles_Today Init To 0 Else No Actions Let me know if you need anything else (or figure out how to get the current set-points and fan condition).
oceanman93 Posted February 11, 2012 Posted February 11, 2012 To get a Thermostat temperature (or set point) value into a variable, here's a way although It's not pretty but it works. I created dozens of mini programs to set the state variable $S_1stThermostat to the current status of the 1st floor thermostat. Each program is a particular temperature. Here's one example for 57 degrees. I created one for each temperature from 55 degrees to 85 degrees (probably need higher ones for the summer, at least on the 2nd floor). I know that chews up a lot of programs but that's the best I could come up with at the moment. I also send a status message every morning that tells me the temperature of my beer keg, chest freezer, whether the house is in "Leave" or "Return" state, and now both Thermostat temperature and set points! Makes me feel good when I get that text message from ISY every morning knowing it is healthy and so is my house. If Status '1st Flr Tstat - Main' is 57° (Temperature) Then $S_1stThermostat = 57 Else - No Actions - (To add one, press 'Action')
andyf0 Posted February 12, 2012 Posted February 12, 2012 I use If Status in programs for both of my thermostats and it works well. I don't believe it's possible to get consecutive ONs from the thermostat without there being a matching OFF.
hoopty Posted February 13, 2012 Posted February 13, 2012 Thanks kevkmartin for the slick counting program! That gave me an idea to add a counter to accumulate runtime as well. The entire setup can be found here: viewtopic.php?f=26&t=8081
oceanman93 Posted February 13, 2012 Posted February 13, 2012 To get a Thermostat temperature (or set point) value into a variable, here's a way although It's not pretty but it works. I created dozens of mini programs to set the state variable $S_1stThermostat to the current status of the 1st floor thermostat. Each program is a particular temperature. Here's one example for 57 degrees. I created one for each temperature from 55 degrees to 85 degrees (probably need higher ones for the summer, at least on the 2nd floor). I know that chews up a lot of programs but that's the best I could come up with at the moment. I also send a status message every morning that tells me the temperature of my beer keg, chest freezer, whether the house is in "Leave" or "Return" state, and now both Thermostat temperature and set points! Makes me feel good when I get that text message from ISY every morning knowing it is healthy and so is my house. If Status '1st Flr Tstat - Main' is 57° (Temperature) Then $S_1stThermostat = 57 Else - No Actions - (To add one, press 'Action') After sleeping on this more, I came up with a much better way eliminating all of these programs and even more that I would have eventually needed for the cooling season. By using REST to pull the Thermostat information and then again using REST to assign those pulled values back to ISY variables, I can do the same thing with a script and 8 lines of code. I already have some other scripts running on my iMac so it will be very easy to integrate these into them. I searched far and wide for REST syntax for Thermostats and finally found everything necessary. First, pull the thermostat temperature (using ST for status) and set points (CLISPH for Heat set point, CLISPC for Cooling set point) and assign to temporary variables in the script. Note that the NODE address must include %20 for the spaces. My 1st floor Thermostat Insteon address is 11.BE.42 so the NODE_ADDRESS used below would be 11%20BE%2042%201 where that last 1 is the first component of the Thermostat device (others being Heat Control, Cool Control & Fan Control). # # get ISY Thermostat temperature & set points and assign to temporary variables # 1stthermtemp=`curl -u : -s http:///rest/nodes//ST | cut -f6 -d' '| cut -c12-13` 1stthermset=`curl -u : -s http:///rest/nodes//CLISPH | cut -f6 -d' '| cut -c12-13` 2ndthermtemp=`curl -u : -s http:///rest/nodes//ST | cut -f6 -d' '| cut -c12-13` 2ndthermset=`curl -u : -s http:///rest/nodes//CLISPH | cut -f6 -d' '| cut -c12-13` My example looked like the following (without the space after http: in order for it to not create an automatic link here): 1stthermtemp=`curl -u myuser:mypassword -s http: //192.168.15.152:5052/rest/nodes/11%20BE%2042%201/ST | cut -f6 -d' '| cut -c12-13` I then take these acquired values and set them back to ISY variables where I can make use of them in programs! The ISY_variable_type is a 1 for Integer variables, 2 for State variables. Note that the variables must first be created in ISY and then take the ID number assigned by ISY and plug it into ISY_variable_ID. They are sequentially assigned by ISY. # # set ISY variables # curl -u : -s http:///rest/vars/set///$1sttermtemp > /dev/null curl -u : -s http:///rest/vars/set///$1stthermset > /dev/null curl -u : -s http:///rest/vars/set///$2ndthermtemp > /dev/null curl -u : -s http:///rest/vars/set///$2ndthermset >/dev/null My example looked like the following using state variable type (2) and variable ID 15 (without the space after http: in order for it to not create an automatic link here): curl -u myuser:mypassword -s http: //192.168.15.152:5052/rest/vars/set/2/15/$1sttermtemp > dev/null One can do so much with the rest interface. Hope this helps out others.
Recommended Posts