Piston override with manual user input


#1

1) Give a description of the problem
I’m using motion based occupancy to control the two thermostats in my house. It works well during our typical daily routine, however there are times when I would like to override the piston or portions of the piston based on manual user input. I’m trying to understand how I can set up webcore to “see” when a user has manually changed a temp setting on the thermostat.

2) What is the expected behavior?
I would like the piston to either pause or take different action when ST detects that a device (thermostat temp in this case) has been manually changed.

3) What is happening/not happening?
Currently, the piston continues to monitor motion and change thermostat settings based on the piston settings, even after the thermostat temperature has been manually changed. I need to be able to detect a device variable (?) that tells webcore that the thermostat has received user input and now needs to do something different.

Any suggestions?


#2

A very quick and dirty solution would be to check the currently set temp against all the values the piston is known to set and if that’s not one in the list, simply exit. Then you’d have to bring the set temp to one of the normal values for the piston to resume. You can go a step further and use a piston tile that gets set when a value “outside” of the normal list is detected and that sets a tile to say it’s suspended. After that, you can watch the tile click and reset the set temp when you tap the tile in the dashboard, therefore forcing a resume. Plenty of options, with various degrees of autonomy.


#3

I have a piston that does a 1 hour override on my automated temp if the set temp is changed via the thermostat, the app, or through Alexa. The way I accomplished this is by creating a couple of variables, @GroundFloorManualFlag and @GroundFloorManualTime. I have a piston that sets the flag to 1 and the time to $localnow plus 1 hour.

I then have my automation piston only run if the $localnow time is equal to or greater than the @GroundFloorManualTime. I had to add some set variable commands in the automation piston to set both the flag and time variables to 0 after the piston makes changes to the temp so that it won’t set a hold. It has been working quite nicely for the last few days.

I am now working on adding more automation based on presence and modes but the piston is getting a bit large and could probably benefit from some time spent optimizing.

Here is what I have done so far.


#4

Mccord42,

Thanks for the reply. Sorry its taken 7 months to finally get back to you. I must have missed it and then stepped away from the piston. I’m back now, and really appreciate the input, however this is a bit above my programming level, so if you’re still around I’m hoping you can provide a little more direction.

I guess I’ll ask one question at a time. I understand the manual set heat/cool that sets the 4 variables once there is a manual setpoint change. What I’m trying to understand is how the automation piston can run AFTER the variables have been changed to something greater than 1? If I’m understanding the logic, the first if/then(s) of the automation piston check to see if the @upstairs/groundfloorManualTime<=$localnow. However if there has been previous manual input, won’t this always be false and therefore never allow the flags to equal 0?


#5

Scratch my last reply. I figured out what you’re doing with respect to the variables. I didn’t recognize it was in essence, a timer. Manual setpoint input adds an hour to local time, and then an hour later local time is equal to upstairsmanual time again and the flag changes to 0. Very slick! I’m sure I will have more questions, but for now, I’m still chugging along! Thanks!