Office Temperature control issues


#1
  1. Give a description of the problem
    When i’m in my office and my location is set to “work”, if the motion sensor temperature is greater than 73 in the summer months (lower than 69 in the winter months) then lower the set point of the thermostat, wait 15 min, and continue to do this until the temperature is correct.

My trouble is that i can’t figure out how to not have it continue to trigger every time i move. It starts just fine, it triggers the lower temp, and then starts to wait. then i move, and it starts again and lowers the temp…continually. how do i get it to wait and not continue to trigger on movement?

2) What is the expected behaviour?
Waits until 15 min, then checks again before lowering the temp set.

3) What is happening/not happening?
continually triggers based on movement, continually decrementing the temperature set (went to 55 before i noticed it the first time!)

**4) Post a Green Snapshot of the piston!

5) Attach logs after turning logging level to Full

6/22/2020, 7:42:15 PM +798ms
+1ms ╔Received event [Motion Office].temperature = 79.0 with a delay of 62ms
+67ms ║RunTime Analysis CS > 20ms > PS > 27ms > PE > 20ms > CE
+70ms ║Runtime (39081 bytes) successfully initialized in 27ms (v0.3.110.20191009) (68ms)
+71ms ║╔Execution stage started
+81ms ║║Comparison (enum) active is (string) active = true (1ms)
+83ms ║║Condition #44 evaluated true (8ms)
+87ms ║║Comparison (string) :e70b739fadc289f4c5a51fd48521624f: is (string) :e70b739fadc289f4c5a51fd48521624f: = true (2ms)
+88ms ║║Condition #31 evaluated true (4ms)
+89ms ║║Condition group #1 evaluated true (state did not change) (15ms)
+93ms ║║Comparison (time) 70935890 is_any = true (0ms)
+94ms ║║Time restriction check passed
+96ms ║║Condition #19 evaluated true (5ms)
+97ms ║║Cancelling statement #19's schedules...
+98ms ║║Condition group #18 evaluated true (state did not change) (7ms)
+104ms ║║Comparison (decimal) 79.0 is_greater_than (integer) 73 = true (2ms)
+106ms ║║Condition #38 evaluated true (5ms)
+107ms ║║Condition group #37 evaluated true (state did not change) (7ms)
+109ms ║║Cancelling statement #39's schedules...
+292ms ║║Executed physical command [Thermostat Upstairs].lowerCoolSetpoint() (179ms)
+293ms ║║Executed [Thermostat Upstairs].lowerCoolSetpoint (181ms)
+301ms ║║Skipped execution of physical command [Thermostat Upstairs].fanOn([]) because it would make no change to the device. (6ms)
+302ms ║║Executed [Thermostat Upstairs].fanOn (7ms)
+306ms ║║Executed virtual command [Thermostat Upstairs].wait (0ms)
+307ms ║║Requesting a wake up for Mon, Jun 22 2020 @ 7:57:16 PM EDT (in 900.0s)
+315ms ║╚Execution stage complete. (245ms)
+317ms ║Setting up scheduled job for Mon, Jun 22 2020 @ 7:57:16 PM EDT (in 899.992s)
+336ms ╚Event processed successfully (336ms)
6/22/2020, 7:41:43 PM +377ms
+1ms ╔Received event [Motion Office].temperature = 78.8 with a delay of 60ms
+61ms ║RunTime Analysis CS > 19ms > PS > 24ms > PE > 18ms > CE
+63ms ║Runtime (39081 bytes) successfully initialized in 24ms (v0.3.110.20191009) (61ms)
+64ms ║╔Execution stage started
+74ms ║║Comparison (enum) active is (string) active = true (1ms)
+76ms ║║Condition #44 evaluated true (8ms)
+79ms ║║Comparison (string) :e70b739fadc289f4c5a51fd48521624f: is (string) :e70b739fadc289f4c5a51fd48521624f: = true (1ms)
+81ms ║║Condition #31 evaluated true (4ms)
+82ms ║║Condition group #1 evaluated true (state did not change) (14ms)
+85ms ║║Comparison (time) 70903461 is_any = true (0ms)
+87ms ║║Time restriction check passed
+88ms ║║Condition #19 evaluated true (3ms)
+89ms ║║Cancelling statement #19's schedules...
+90ms ║║Condition group #18 evaluated true (state did not change) (6ms)
+95ms ║║Comparison (decimal) 78.8 is_greater_than (integer) 73 = true (1ms)
+97ms ║║Condition #38 evaluated true (5ms)
+98ms ║║Condition group #37 evaluated true (state did not change) (7ms)
+100ms ║║Cancelling statement #39's schedules...
+187ms ║║Executed physical command [Thermostat Upstairs].lowerCoolSetpoint() (83ms)
+188ms ║║Executed [Thermostat Upstairs].lowerCoolSetpoint (85ms)
+196ms ║║Skipped execution of physical command [Thermostat Upstairs].fanOn([]) because it would make no change to the device. (6ms)
+197ms ║║Executed [Thermostat Upstairs].fanOn (7ms)
+200ms ║║Executed virtual command [Thermostat Upstairs].wait (1ms)
+201ms ║║Requesting a wake up for Mon, Jun 22 2020 @ 7:56:43 PM EDT (in 900.0s)
+206ms ║╚Execution stage complete. (142ms)
+207ms ║Setting up scheduled job for Mon, Jun 22 2020 @ 7:56:43 PM EDT (in 899.995s)
+218ms ╚Event processed successfully (218ms)
6/22/2020, 7:41:31 PM +786ms
+1ms ╔Received event [Motion Office].temperature = 78.9 with a delay of 68ms
+95ms ║RunTime Analysis CS > 33ms > PS > 41ms > PE > 21ms > CE
+97ms ║Runtime (39081 bytes) successfully initialized in 41ms (v0.3.110.20191009) (95ms)
+98ms ║╔Execution stage started
+109ms ║║Comparison (enum) active is (string) active = true (1ms)
+111ms ║║Condition #44 evaluated true (9ms)
+115ms ║║Comparison (string) :e70b739fadc289f4c5a51fd48521624f: is (string) :e70b739fadc289f4c5a51fd48521624f: = true (2ms)
+116ms ║║Condition #31 evaluated true (4ms)
+117ms ║║Condition group #1 evaluated true (state did not change) (15ms)
+121ms ║║Comparison (time) 70891906 is_any = true (0ms)
+123ms ║║Time restriction check passed
+124ms ║║Condition #19 evaluated true (5ms)
+125ms ║║Cancelling statement #19's schedules...
+126ms ║║Condition group #18 evaluated true (state did not change) (7ms)
+133ms ║║Comparison (decimal) 78.9 is_greater_than (integer) 73 = true (1ms)
+134ms ║║Condition #38 evaluated true (5ms)
+135ms ║║Condition group #37 evaluated true (state did not change) (7ms)
+138ms ║║Cancelling statement #39's schedules...
+419ms ║║Executed physical command [Thermostat Upstairs].lowerCoolSetpoint() (277ms)
+420ms ║║Executed [Thermostat Upstairs].lowerCoolSetpoint (279ms)
+429ms ║║Skipped execution of physical command [Thermostat Upstairs].fanOn([]) because it would make no change to the device. (6ms)
+430ms ║║Executed [Thermostat Upstairs].fanOn (8ms)
+433ms ║║Executed virtual command [Thermostat Upstairs].wait (1ms)
+435ms ║║Requesting a wake up for Mon, Jun 22 2020 @ 7:56:32 PM EDT (in 900.0s)
+440ms ║╚Execution stage complete. (342ms)
+442ms ║Setting up scheduled job for Mon, Jun 22 2020 @ 7:56:32 PM EDT (in 899.994s)
+453ms ╚Event processed successfully (453ms)
6/22/2020, 7:40:27 PM +196ms
+1ms ╔Received event [Motion Office].temperature = 78.8 with a delay of 66ms
+65ms ║RunTime Analysis CS > 20ms > PS > 28ms > PE > 17ms > CE
+67ms ║Runtime (39081 bytes) successfully initialized in 28ms (v0.3.110.20191009) (65ms)
+68ms ║╔Execution stage started
+79ms ║║Comparison (enum) active is (string) active = true (2ms)
+80ms ║║Condition #44 evaluated true (8ms)
+84ms ║║Comparison (string) :e70b739fadc289f4c5a51fd48521624f: is (string) :e70b739fadc289f4c5a51fd48521624f: = true (1ms)
+86ms ║║Condition #31 evaluated true (4ms)
+87ms ║║Condition group #1 evaluated true (state did not change) (14ms)
+91ms ║║Comparison (time) 70827285 is_any = true (0ms)
+92ms ║║Time restriction check passed
+93ms ║║Condition #19 evaluated true (4ms)
+94ms ║║Cancelling statement #19's schedules...
+95ms ║║Condition group #18 evaluated true (state did not change) (7ms)
+101ms ║║Comparison (decimal) 78.8 is_greater_than (integer) 73 = true (1ms)
+103ms ║║Condition #38 evaluated true (5ms)
+104ms ║║Condition group #37 evaluated true (state did not change) (6ms)
+106ms ║║Cancelling statement #39's schedules...
+194ms ║║Executed physical command [Thermostat Upstairs].lowerCoolSetpoint() (84ms)
+195ms ║║Executed [Thermostat Upstairs].lowerCoolSetpoint (86ms)
+203ms ║║Skipped execution of physical command [Thermostat Upstairs].fanOn([]) because it would make no change to the device. (6ms)
+204ms ║║Executed [Thermostat Upstairs].fanOn (7ms)
+208ms ║║Executed virtual command [Thermostat Upstairs].wait (0ms)
+209ms ║║Requesting a wake up for Mon, Jun 22 2020 @ 7:55:27 PM EDT (in 900.0s)
+214ms ║╚Execution stage complete. (146ms)
+215ms ║Setting up scheduled job for Mon, Jun 22 2020 @ 7:55:27 PM EDT (in 899.995s)
+226ms ╚Event processed successfully (227ms)
6/22/2020, 7:39:44 PM +606ms
+2ms ╔Received event [Motion Office].motion = active with a delay of 67ms
+61ms ║RunTime Analysis CS > 19ms > PS > 26ms > PE > 15ms > CE
+63ms ║Runtime (39085 bytes) successfully initialized in 26ms (v0.3.110.20191009) (61ms)
+64ms ║╔Execution stage started
+71ms ║║Comparison (enum) active is (string) active = true (1ms)
+73ms ║║Cancelling condition #44's schedules...
+74ms ║║Condition #44 evaluated true (6ms)
+77ms ║║Comparison (string) :e70b739fadc289f4c5a51fd48521624f: is (string) :e70b739fadc289f4c5a51fd48521624f: = true (1ms)
+79ms ║║Condition #31 evaluated true (5ms)
+80ms ║║Cancelling condition #1's schedules...
+81ms ║║Condition group #1 evaluated true (state changed) (13ms)
+85ms ║║Comparison (time) 70784689 is_any = true (0ms)
+86ms ║║Time restriction check passed
+87ms ║║Condition #19 evaluated true (4ms)
+88ms ║║Cancelling statement #19's schedules...
+89ms ║║Condition group #18 evaluated true (state did not change) (7ms)
+98ms ║║Comparison (decimal) 78.7 is_greater_than (integer) 73 = true (2ms)
+100ms ║║Condition #38 evaluated true (8ms)
+101ms ║║Condition group #37 evaluated true (state did not change) (9ms)
+103ms ║║Cancelling statement #39's schedules...
+187ms ║║Executed physical command [Thermostat Upstairs].lowerCoolSetpoint() (80ms)
+188ms ║║Executed [Thermostat Upstairs].lowerCoolSetpoint (82ms)
+196ms ║║Skipped execution of physical command [Thermostat Upstairs].fanOn([]) because it would make no change to the device. (4ms)
+197ms ║║Executed [Thermostat Upstairs].fanOn (6ms)
+200ms ║║Executed virtual command [Thermostat Upstairs].wait (1ms)
+201ms ║║Requesting a wake up for Mon, Jun 22 2020 @ 7:54:44 PM EDT (in 900.0s)
+206ms ║╚Execution stage complete. (143ms)
+208ms ║Setting up scheduled job for Mon, Jun 22 2020 @ 7:54:44 PM EDT (in 899.995s)
+216ms ╚Event processed successfully (216ms)
6/22/2020, 7:39:06 PM +380ms
+2ms ╔Received event [Motion Office].motion = inactive with a delay of 67ms
+65ms ║RunTime Analysis CS > 19ms > PS > 27ms > PE > 18ms > CE
+67ms ║Runtime (39083 bytes) successfully initialized in 27ms (v0.3.110.20191009) (65ms)
+68ms ║╔Execution stage started
+75ms ║║Comparison (enum) inactive is (string) active = false (1ms)
+77ms ║║Cancelling condition #44's schedules...
+78ms ║║Condition #44 evaluated false (6ms)
+79ms ║║Cancelling condition #1's schedules...
+79ms ║║Condition group #1 evaluated false (state changed) (7ms)
+81ms ║╚Execution stage complete. (13ms)
+82ms ╚Event processed successfully (82ms)
6/22/2020, 7:39:04 PM +978ms
+0ms ╔Starting piston... (v0.3.110.20191009)
+326ms ║╔Subscribing to devices...
+364ms ║║Subscribing to Motion Office.motion...
+376ms ║║Subscribing to Home.mode...
+386ms ║║Subscribing to Motion Office.temperature...
+495ms ║║Subscribing to Thermostat Upstairs...
+496ms ║╚Finished subscribing (173ms)
+520ms ║Comparison (enum) active is (string) active = true (1ms)
+521ms ║Cancelling condition #44's schedules...
+528ms ║Comparison (string) :e70b739fadc289f4c5a51fd48521624f: is (string) :e70b739fadc289f4c5a51fd48521624f: = true (1ms)
+529ms ║Cancelling condition #1's schedules...
+534ms ║Comparison (time) 70745510 is_any = true (0ms)
+535ms ║Time restriction check passed
+539ms ║Cancelling statement #19's schedules...
+547ms ║Comparison (decimal) 78.7 is_greater_than (integer) 73 = true (2ms)
+561ms ║Comparison (decimal) 78.7 is_less_than (integer) 69 = false (1ms)
+574ms ╚Piston successfully started (573ms)

#2

You probably want to change your while to if or extend you wait. Most likely, it takes a while to cool off the area so just changing the set point doesn’t decrease the actual temperature and then the set point gets changed again.

Another option might be to also set a minimum set point in your while. So while Temp>73 and setpoint>70 or something like that. Then it will only lower the setpoint so far.


#3

thanks, but that’s actually not the problem. the problem seems to be that it’s triggering to execute again based on the motion sensor, not the wait. it starts to wait, but then if i move, the trigger takes over and it executes from the start again. it never finishes the wait.

I do like the idea of the setpoint >70 though…that may help.


#4

Well, you decided to create a piston with zero triggers… Whenever you do this, webCoRE turns all of your conditions into triggers. (seen by all the lightning bolts in the left margin)

This means your piston will execute (top to bottom) whenever any of these events happen:

  • Motion Sensor 7’s motion changes to active
  • Motion Sensor 7’s motion changes to inactive
  • Motion Sensor 7’s temperature changes to anything
  • Location Mode changes to anything

I prefer to make pistons with a single trigger, followed by as many conditions as I want.


In other words, I would either make a real trigger based on motion (IE: Changes to), or a real trigger based on temperature (IE: Rises above). That will keep all the others as proper conditions.


#5

I agree with @WCmore, your piston needs a precise trigger.

Some things to consider:

  • If you only want the temperature settings as described while working (location set to work). Motion may be redundant (one less trigger/condition to consider). How do you set location? I would use that as my trigger as long as you can rely on it getting set consistently. (i.e IF Location changes to work) The inner IF should then work but…

  • What happens after work is over? Do you want the setpoint to stay at whatever final value the piston achieved? That is what will happen currently. Do you have another piston that controls temp while in home mode?


#6

Thanks to all of you. Yes, i was coming back to say that your guidance around the trigger was what i needed. in combination with the suggestion to check the setpoint and never go below/above a set range as well, it’s working as expected now. to answer your question about what happens after work, i have another automation that deals with the temperature for other modes (home, away, etc). Those are all driven from the thermostat though, this is the only one that needs to be driven from the motion sensor, since the room bakes in the sun all day. :slight_smile:

thanks all again. you’ve been very helpful!