Expression in action

I’m certain there is another way around this, but it would be most helpful if we could do an expression on the set variable action (it may already be possible, but everything i have tried just yields a text value).

For example, i have a reactor that manages my thermostats and turns on ceiling fans to assist in moving the air more quickly. i thought it would be interesting to figure out how much time each of the fans is running. My original thought was to create a FanRunningTime and a FanLastOn variable and whenever the action for turning on the fan kicks on, capture the time() expression into FanLastOn. then when the action goes false, i could do an expression of FanRunningTime = FanRunningTime + ( time() - FanLastOn). this could give me a counter of how long the fans actually run. For not it’s for information only, but i can think of other scenarios where i could take an action on those variables to fire other reactors.

1 Like

Anywhere a “variable reference” is allowed of the form { variablename }, you can actually use an entire expression:

{ "The current temperature is " + ( variablename * 1.8 + 32 ) + "°F" }

I think there may be some spots in 3.5 where this doesn’t work (only a variable name is accepted between the braces), but for 3.6 I believe it works everywhere the brace syntax is allowed. At least that’s the intent.

that’s what i was missing!!! as always, many thanks!

Is there a way to add variable references to the notification text boxes? using the same example above (now that it’s working, thanks!) i wanted to get notified on a daily basis how long that fan was running. so i created a notfy action on a schedule and it would be great to be able to pass it a variable in either the body or subject field of the SMTP notification.

Please see the docs. That will tell you which notification actions support substitution, and which do not.

Thanks, i had read that, i guess it was more of a feature request than a question.

So that leaves me a bit confused. Do you see how to do what you are asking, or am I not understanding what you are asking?

sorry, been locked up for so long, my communication abilities are breaking down. Let me see if i can explain. in the current documentation for SMTP notifications, there does not seem to be a variable substitution mechanism for either the subject tor the body of the message. I have a variable where i capture the number of hours that a fan is running, i just wanted to email a notification to me with something like “The fan has been running {FanRunTime} hours.” I don’t see variable substitution on the SMTP section of the wiki only on the Prowl. hence the question/request.

Oh, my my my. Well, let me tell you. You are not wrong, and I am at once wrong, not wrong, maybe nuts, and definitely unhelpful… OK. Here’s reality:

  • Wrong: the documentation for 3.5 fails to note that variable substitution is allowed in the message body field (only) for SMTP.
  • Wrong, reprised: I would swear I put it in there, so perhaps more than being wrong, I may be losing my mind.
  • Not wrong: 3.6 allows substitution in the message body, recipient list, and subject for SMTP (this is also unhelpful, unless you happen to be trialing 3.6).

I hope THIS helps. :tired_face:

no worries at all, you are always most helpful and . i am testing on 3.6 (20070)… for some reason it is not actually replacing the variable>

SMTPDefaultSubject=“VERA REACTOR NOTIFICATION”; SMTPUsername="my_email@gmail.com"; SMTPPassword=“****”; SSL opt {“verify”:“none”,“mode”:“client”,“protocol”:“any”}
Activity grpr5u65eg.true
Notify method SM nid 10: users message “the fan ran for { FanTotalTime } minutes yesterday”; SMTPServer=“smtp.gmail.com”; SMTPPort=“465”; SMTPSender=“VERA ALERT my_email+vera-alert@gmail.com”; SMTPDefaultRecipient=“Sebastian my_email@gmail.com”;

no matter what i put on there, i only get the text “FanTotalTime”. below is the full summary in case it helps:

=====

*************************************************** REACTOR LOGIC SUMMARY REPORT ***************************************************
   Version: 3.6 config 20070 cdata 20045 ui 20085 pluginDevice 24 LuaXP 1.0.2enh
    System: Vera version 1.7.4970 (7.31) on Sercomm G450 ID 36 (Vera Plus); loadtime 1588522027/1588522036; systemReady 1588522041; ALTUI v2.49
       Env: Lua 5.1; JSON dkjson 2.5+LPeg; UnsafeLua=nil/true
Local time: 2020-05-03T16:20:13-0400; DST=1; Nags Head, North Carolina United States; formats %d/%m/%Y %H:%M:%S
House mode: plugin 1; system 1; tracking on
  Sun data: {"source":"int","civdawn":1588498781,"nautdawn":1588496783,"sunset":1588549848,"nautdusk":1588553502,"stamp":2020124,"latitude":35.858629,"astrodusk":1588555620,"longitude":-75.570285,"civdusk":1588551504,"astrodawn":1588494665,"sunrise":1588500437}
  Geofence: not running
        RS: 1587731496,1587752372,1587752931,1587766800,1587781262,1588052581,1588095833,1588165632,1588422603,1588522036
        NS: 0:X,1586816280:U,1586839260:D,946699020:U
************************************************************************************************************************************
Auto Thermostats (#37)
    Version 20045.100 05/03/20 16:12:09
    Message/status: Not tripped
    Variable/expressions
       0: heatSP                    [last "71"(string)]
       1: coolSP                    [last "73"(string)]
       2: heatLimit                max(55, heatSP) [last 71(number)]
       3: coolLimit                min(85, coolSP) [last 73(number)]
       4: homeCool                 73 [last 73(number)]
       5: nightCool                homeCool + 2 [last 75(number)]
       6: awayCool                 homeCool + 5 [last 78(number)]
       7: vacationCool             homeCool + 15 [last 88(number)]
       8: homeHeat                 homeCool - 2 [last 71(number)]
       9: nightHeat                homeHeat - 1 [last 70(number)]
      10: awayHeat                 homeHeat - 5 [last 66(number)]
      11: vacationHeat             homeHeat - 15 [last 56(number)]
      12: FanStart                  [last 1588534129(number)]
      13: FanTotalTime              [last "0"(string)] (exported)
    Condition group "Automated Thermostat Operation" (NUL)  false as of n/a <root>
      Z-?-comment "CALL AC COOLING OR HEATING" <condqgibtao>
      Z-T-group "UPSTAIRS Call Cooling" (AND)  TRUE as of 08:01:58 <grpqg15rsn>
      |     &-T-service Upstairs Temp (31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature >= {coolLimit} [73.50 => 73.00 at 16:02:59; T/T as of 08:01:58/08:01:58] <condqg1826x>
      Z-F-group "UPSTAIRS Call Heating" (AND)  false as of 06:31:58 <grpqg15soe>
      |     &-F-service Upstairs Temp (31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature <= {heatLimit} [73.50 => 73.00 at 16:02:59; F/F as of 06:31:58/06:31:58] <condqg2q5ni>
      Z-F-group "DOWNSTAIRS Call Cooling" (AND)  false as of 05-01.08:29:54 <grpr0epvsd>
      |     &-F-service Downstairs Therm (34) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature >= {coolLimit} [71.00 => 71.50 at 13:17:33; F/F as of 05-01.08:29:54/05-01.08:29:54] <condr0erdua>
      Z-F-group "DOWNSTAIRS Call Heating" (AND)  false as of 13:17:33 <grpr0eptwm>
      |     &-F-service Downstairs Therm (34) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature <= {heatLimit} [71.00 => 71.50 at 13:17:33; F/F as of 13:17:33/13:17:33] <condr0erecz>
      Z-?-comment "AC OPTIONS FOR SPECIFIC HOUSE MODES" <condqgicant>
      Z-T-group "Daytime Home" (AND)  TRUE as of 05:08:00 <grpqg3dcve>
      |     &-T-housemode in 1 [3 => 1 at 05:08:00; T/T as of 05:08:00/05:08:00] <condqg3dsu5>
      Z-F-group "Nightime Home" (AND)  false as of 05:08:00 <grpqg3eg9p>
      |     &-F-housemode in 3 [3 => 1 at 05:08:00; F/F as of 05:08:00/05:08:00] <condqg3eipk>
      Z-F-group "Away" (AND)  false as of 05-01.17:23:12 <grpqg3evko>
      |     &-F-housemode in 2 [3 => 1 at 05:08:00; F/F as of 05-01.17:23:12/05-01.17:23:12] <condqg3fbez>
      Z-F-group "Vacation" (AND)  false as of 04-19.19:17:20 <grpqg3f36g>
      |     &-F-housemode in 4 [3 => 1 at 05:08:00; F/F as of 04-19.19:17:20/04-19.19:17:20] <condqg3fc7k>
      Z-?-comment "FAN  ASSIST OPTIONS" <condqgicvnm>
      Z-F-group "FAN ON ASSIST" (OR)  for ge 60s false as of 16:03:08 <grpqgiepry>
      |     |-F-service Upstairs Thermostat (30) urn:micasaverde-com:serviceId:HVAC_OperatingState1/ModeState = Cooling for ge 60s [cooling => idle at 16:03:08; F/F as of 16:03:08/16:03:08] <condqnvktya>
      |     |-F-service Upstairs Thermostat (30) urn:micasaverde-com:serviceId:HVAC_OperatingState1/ModeState = Heating for ge 60s [cooling => idle at 16:03:08; F/F as of 05-02.05:48:02/05-02.05:48:02] <condqnvlb0w>
      Z-F-group "FAN RUNNING > 2 HRS" (AND)  false as of 13:16:59 <grpr5ub647>
      |     &-F-var FanTotalTime > 120 [44.743868132716 => 35.062397802212 at 16:12:09; F/F as of 13:16:59/13:16:59] <condr5ubkqs>
      Z-F-group "RESET FAN COUNTER" (AND)  false as of 12:07:17 <grpr5u65eg>
      |     &-F-interval 1d00h:00m [1588514400 => 1588522037 at 12:07:17; F/F as of 12:07:17/12:07:17] <condr5u6lpl>
      Z-?-comment "HOUSE MODE CHANGE" <condqk36n2u>
      Z-F-group "Manage Changing of House Mode" (OR)  false as of 05:08:03 <grpqnxlqi0>
      |     |-F-group "Changed During Heat" (AND)  false as of 05-02.05:09:05 <grpqnxluv2>
      |     |     &-F-service Upstairs Thermostat (30) urn:upnp-org:serviceId:HVAC_UserOperatingMode1/ModeStatus = HeatOn [heaton => coolon at 05:08:43; F/F as of 05:08:43/05:08:43] <condqnxmzdb>
      |     |     &-F-group "track mode and limit changes" (OR)  false as of 05:08:03 <grpqpta4a8>
      |     |     |     |-F-housemode in  [3 => 1 at 05:08:00; F/F as of 05:08:02/05:08:02] <condqnxlxli>
      |     |     |     |-F-var heatLimit change  [70 => 71 at 05:08:03; F/F as of 05:08:03/05:08:03] <condqptga5d>
      |     |-F-group "Changed during cool" (AND)  false as of 05:08:03 <grpqnxlwdd>
      |     |     &-T-service Upstairs Thermostat (30) urn:upnp-org:serviceId:HVAC_UserOperatingMode1/ModeStatus = CoolOn [heaton => coolon at 05:08:43; T/T as of 05:08:43/05:08:43] <condqnxnpju>
      |     |     &-F-group "track mode and limit changes" (OR)  false as of 05:08:03 <grpqptb4su>
      |     |     |     |-F-housemode in  [3 => 1 at 05:08:00; F/F as of 05:08:02/05:08:02] <condqnxmol3>
      |     |     |     |-F-var coolLimit change  [75 => 73 at 05:08:02; F/F as of 05:08:03/05:08:03] <condqptff0o>
    Activity grpqg3f36g.true
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="coolSP", NewValue="{vacationCool}" )
        Delay 2 inline
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="heatSP", NewValue="{vacationHeat}" )
        Notify method SM nid 8: users  message "Auto therm up -Set temps for VaCation"; SMTPServer="smtp.gmail.com"; SMTPPort="465"; SMTPSender="VERA ALERT <my_email+vera-alert@gmail.com>"; SMTPDefaultRecipient="Sebastian <my_email@gmail.com>"; SMTPDefaultSubject="VERA REACTOR NOTIFICATION"; SMTPUsername="my_email@gmail.com"; SMTPPassword="****"; SSL opt {"verify":"none","mode":"client","protocol":"any"}
    Activity grpr5ub647.true
        Notify method SM nid 9: users  message "The fan on assist upstairs has been running for more than 2 hours, please check the AC"; SMTPServer="smtp.gmail.com"; SMTPPort="465"; SMTPSender="VERA ALERT <my_email+vera-alert@gmail.com>"; SMTPDefaultRecipient="Sebastian <my_email@gmail.com>"; SMTPDefaultSubject="VERA REACTOR NOTIFICATION"; SMTPUsername="my_email@gmail.com"; SMTPPassword="****"; SSL opt {"verify":"none","mode":"client","protocol":"any"}
    Activity grpqnxluv2.true
        Delay 30 inline
        Run grpqg15soe.true
    Activity grpqg3eg9p.true
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="coolSP", NewValue="{nightCool}" )
        Delay 2 inline
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="heatSP", NewValue="{nightHeat}" )
        Notify method SM nid 6: users  message "Auto therm up -Set temps for Night"; SMTPServer="smtp.gmail.com"; SMTPPort="465"; SMTPSender="VERA ALERT <my_email+vera-alert@gmail.com>"; SMTPDefaultRecipient="Sebastian <my_email@gmail.com>"; SMTPDefaultSubject="VERA REACTOR NOTIFICATION"; SMTPUsername="my_email@gmail.com"; SMTPPassword="****"; SSL opt {"verify":"none","mode":"client","protocol":"any"}
    Activity grpr5u65eg.true
        Notify method SM nid 10: users  message "the fan ran for { FanTotalTime } minutes yesterday"; SMTPServer="smtp.gmail.com"; SMTPPort="465"; SMTPSender="VERA ALERT <my_email+vera-alert@gmail.com>"; SMTPDefaultRecipient="Sebastian <my_email@gmail.com>"; SMTPDefaultSubject="VERA REACTOR NOTIFICATION"; SMTPUsername="my_email@gmail.com"; SMTPPassword="****"; SSL opt {"verify":"none","mode":"client","protocol":"any"}
        Action type setvar? value=0, index=2, variable=FanTotalTime
    Activity grpqg3dcve.true
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="coolSP", NewValue="{homeCool}" )
        Delay 2 inline
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="heatSP", NewValue="{homeHeat}" )
        Notify method SM nid 5: users  message "Auto therm up - Set temps for home"; SMTPServer="smtp.gmail.com"; SMTPPort="465"; SMTPSender="VERA ALERT <my_email+vera-alert@gmail.com>"; SMTPDefaultRecipient="Sebastian <my_email@gmail.com>"; SMTPDefaultSubject="VERA REACTOR NOTIFICATION"; SMTPUsername="my_email@gmail.com"; SMTPPassword="****"; SSL opt {"verify":"none","mode":"client","protocol":"any"}
    Activity grpqgiepry.true
        Device Loft Fan (164) action urn:upnp-org:serviceId:SwitchPower1/SetTarget( newTargetValue="1" )
        Action type setvar? value={time()}, index=2, variable=FanStart
    Activity grpqg15soe.true
        Device Upstairs Thermostat (30) action urn:upnp-org:serviceId:HVAC_UserOperatingMode1/SetModeTarget( NewModeTarget="HeatOn" )
        Delay 2 inline
        Device Upstairs Thermostat (30) action urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/SetCurrentSetpoint( NewCurrentSetpoint="{heatLimit}" )
    Activity grpqnxlwdd.true
        Delay 30 inline
        Run grpqg15rsn.true
    Activity grpqg3evko.true
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="coolSP", NewValue="{awayCool}" )
        Delay 2 inline
        Device (self) action urn:toggledbits-com:serviceId:ReactorSensor/SetVariable( VariableName="heatSP", NewValue="{awayHeat}" )
        Notify method SM nid 7: users  message "Auto therm up -Set temps for Away"; SMTPServer="smtp.gmail.com"; SMTPPort="465"; SMTPSender="VERA ALERT <my_email+vera-alert@gmail.com>"; SMTPDefaultRecipient="Sebastian <my_email@gmail.com>"; SMTPDefaultSubject="VERA REACTOR NOTIFICATION"; SMTPUsername="my_email@gmail.com"; SMTPPassword="****"; SSL opt {"verify":"none","mode":"client","protocol":"any"}
    Activity grpqgiepry.false
        Device Loft Fan (164) action urn:upnp-org:serviceId:SwitchPower1/SetTarget( newTargetValue="0" )
        Action type setvar? value={ (FanTotalTime + ( time() - FanStart ) ) / 60 }, index=2, variable=FanTotalTime
    Activity grpr0epvsd.true
        Device Downstairs Therm (34) action urn:upnp-org:serviceId:HVAC_UserOperatingMode1/SetModeTarget( NewModeTarget="CoolOn", NewHeatSetpoint="{heatLimit}", NewCoolSetpoint="{coolLimit}" )
        Delay 2 inline
        Device Downstairs Therm (34) action urn:upnp-org:serviceId:TemperatureSetpoint1_Cool/SetCurrentSetpoint( NewCurrentSetpoint="{coolLimit}" )
    Activity grpr0eptwm.true
        Device Downstairs Therm (34) action urn:upnp-org:serviceId:HVAC_UserOperatingMode1/SetModeTarget( NewModeTarget="HeatOn" )
        Delay 2 inline
        Device Downstairs Therm (34) action urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/SetCurrentSetpoint( NewCurrentSetpoint="{heatLimit}" )
    Activity grpqg15rsn.true
        Device Upstairs Thermostat (30) action urn:upnp-org:serviceId:HVAC_UserOperatingMode1/SetModeTarget( NewModeTarget="CoolOn", NewHeatSetpoint="{heatLimit}", NewCoolSetpoint="{coolLimit}" )
        Delay 2 inline
        Device Upstairs Thermostat (30) action urn:upnp-org:serviceId:TemperatureSetpoint1_Cool/SetCurrentSetpoint( NewCurrentSetpoint="{coolLimit}" )
    Events
        2020-05-03 14:21:39: Device Upstairs Thermostat (#30) urn:micasaverde-com:serviceId:HVAC_OperatingState1/ModeState changed from "Idle" to "Cooling"
        2020-05-03 14:21:39: Sensor update starting
        2020-05-03 14:21:39: Condition condqnvktya test state changed from false to true
        2020-05-03 14:21:39: Condition condqnvktya holding evaluation state for check that duration >= 60 (60 to go)
        2020-05-03 14:21:39: Sensor update completed; 0.068s
        2020-05-03 14:22:39: Sensor update starting
        2020-05-03 14:22:39: Condition condqnvktya successfully sustained for at least 60 seconds (actual 60)
        2020-05-03 14:22:39: Condition condqnvktya evaluation state changed from false to true
        2020-05-03 14:22:39: Group FAN ON ASSIST test state changed from false to true
        2020-05-03 14:22:39: Group FAN ON ASSIST holding evaluation state for check that duration >= 60 (60 to go)
        2020-05-03 14:22:39: Sensor update completed; 0.094s
        2020-05-03 14:23:39: Sensor update starting
        2020-05-03 14:23:39: Condition condqnvktya successfully sustained for at least 60 seconds (actual 120)
        2020-05-03 14:23:39: Group FAN ON ASSIST successfully sustained for at least 60 seconds (actual 60)
        2020-05-03 14:23:39: Group FAN ON ASSIST evaluation state changed from false to true
        2020-05-03 14:23:39: Launching FAN ON ASSIST.true activity
        2020-05-03 14:23:39: Launching scene/activity grpqgiepry.true
        2020-05-03 14:23:39: Starting "grpqgiepry.true" group 1
        2020-05-03 14:23:39: Variable "FanStart" set to 1588530219; was 1588526348
        2020-05-03 14:23:39: Activity "grpqgiepry.true" finished
        2020-05-03 14:23:39: Sensor update completed; 0.134s
        2020-05-03 14:49:19: Device Upstairs Temp (#31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature changed from "74.00" to "73.50"
        2020-05-03 14:49:19: Sensor update starting
        2020-05-03 14:49:19: Condition condqnvktya successfully sustained for at least 60 seconds (actual 1660)
        2020-05-03 14:49:19: Group FAN ON ASSIST successfully sustained for at least 60 seconds (actual 1600)
        2020-05-03 14:49:19: Sensor update completed; 0.133s
        2020-05-03 15:07:29: Device Upstairs Temp (#31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature changed from "73.50" to "73.00"
        2020-05-03 15:07:29: Sensor update starting
        2020-05-03 15:07:29: Condition condqnvktya successfully sustained for at least 60 seconds (actual 2750)
        2020-05-03 15:07:29: Group FAN ON ASSIST successfully sustained for at least 60 seconds (actual 2690)
        2020-05-03 15:07:29: Sensor update completed; 0.110s
        2020-05-03 15:07:39: Device Upstairs Thermostat (#30) urn:micasaverde-com:serviceId:HVAC_OperatingState1/ModeState changed from "Cooling" to "Idle"
        2020-05-03 15:07:39: Sensor update starting
        2020-05-03 15:07:39: Condition condqnvktya test state changed from true to false
        2020-05-03 15:07:39: Condition condqnvktya evaluation state changed from true to false
        2020-05-03 15:07:39: Group FAN ON ASSIST test state changed from true to false
        2020-05-03 15:07:39: Group FAN ON ASSIST evaluation state changed from true to false
        2020-05-03 15:07:39: Launching FAN ON ASSIST.false activity
        2020-05-03 15:07:39: Launching scene/activity grpqgiepry.false
        2020-05-03 15:07:39: Starting "grpqgiepry.false" group 1
        2020-05-03 15:07:39: Variable "FanTotalTime" set to 44.743868132716; was 44.632087962963
        2020-05-03 15:07:39: Activity "grpqgiepry.false" finished
        2020-05-03 15:07:39: Sensor update completed; 0.111s
        2020-05-03 15:17:29: Device Upstairs Temp (#31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature changed from "73.00" to "73.50"
        2020-05-03 15:17:29: Sensor update starting
        2020-05-03 15:17:29: Sensor update completed; 0.072s
        2020-05-03 15:26:39: Device Upstairs Temp (#31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature changed from "73.50" to "74.00"
        2020-05-03 15:26:39: Sensor update starting
        2020-05-03 15:26:39: Sensor update completed; 0.075s
        2020-05-03 15:26:49: Device Upstairs Thermostat (#30) urn:micasaverde-com:serviceId:HVAC_OperatingState1/ModeState changed from "Idle" to "Cooling"
        2020-05-03 15:26:49: Sensor update starting
        2020-05-03 15:26:49: Condition condqnvktya test state changed from false to true
        2020-05-03 15:26:49: Condition condqnvktya holding evaluation state for check that duration >= 60 (60 to go)
        2020-05-03 15:26:49: Sensor update completed; 0.065s
        2020-05-03 15:27:49: Sensor update starting
        2020-05-03 15:27:49: Condition condqnvktya successfully sustained for at least 60 seconds (actual 60)
        2020-05-03 15:27:49: Condition condqnvktya evaluation state changed from false to true
        2020-05-03 15:27:49: Group FAN ON ASSIST test state changed from false to true
        2020-05-03 15:27:49: Group FAN ON ASSIST holding evaluation state for check that duration >= 60 (60 to go)
        2020-05-03 15:27:49: Sensor update completed; 0.088s
        2020-05-03 15:28:49: Sensor update starting
        2020-05-03 15:28:49: Condition condqnvktya successfully sustained for at least 60 seconds (actual 120)
        2020-05-03 15:28:49: Group FAN ON ASSIST successfully sustained for at least 60 seconds (actual 60)
        2020-05-03 15:28:49: Group FAN ON ASSIST evaluation state changed from false to true
        2020-05-03 15:28:49: Launching FAN ON ASSIST.true activity
        2020-05-03 15:28:49: Launching scene/activity grpqgiepry.true
        2020-05-03 15:28:49: Starting "grpqgiepry.true" group 1
        2020-05-03 15:28:49: Variable "FanStart" set to 1588534129; was 1588530219
        2020-05-03 15:28:49: Activity "grpqgiepry.true" finished
        2020-05-03 15:28:49: Sensor update completed; 0.172s
        2020-05-03 15:53:59: Device Upstairs Temp (#31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature changed from "74.00" to "73.50"
        2020-05-03 15:53:59: Sensor update starting
        2020-05-03 15:53:59: Condition condqnvktya successfully sustained for at least 60 seconds (actual 1630)
        2020-05-03 15:53:59: Group FAN ON ASSIST successfully sustained for at least 60 seconds (actual 1570)
        2020-05-03 15:53:59: Sensor update completed; 0.087s
        2020-05-03 16:02:59: Device Upstairs Temp (#31) urn:upnp-org:serviceId:TemperatureSensor1/CurrentTemperature changed from "73.50" to "73.00"
        2020-05-03 16:02:59: Sensor update starting
        2020-05-03 16:02:59: Condition condqnvktya successfully sustained for at least 60 seconds (actual 2170)
        2020-05-03 16:02:59: Group FAN ON ASSIST successfully sustained for at least 60 seconds (actual 2110)
        2020-05-03 16:02:59: Sensor update completed; 0.067s
        2020-05-03 16:03:08: Device Upstairs Thermostat (#30) urn:micasaverde-com:serviceId:HVAC_OperatingState1/ModeState changed from "Cooling" to "Idle"
        2020-05-03 16:03:08: Sensor update starting
        2020-05-03 16:03:08: Condition condqnvktya test state changed from true to false
        2020-05-03 16:03:08: Condition condqnvktya evaluation state changed from true to false
        2020-05-03 16:03:08: Group FAN ON ASSIST test state changed from true to false
        2020-05-03 16:03:08: Group FAN ON ASSIST evaluation state changed from true to false
        2020-05-03 16:03:08: Launching FAN ON ASSIST.false activity
        2020-05-03 16:03:08: Launching scene/activity grpqgiepry.false
        2020-05-03 16:03:08: Starting "grpqgiepry.false" group 1
        2020-05-03 16:03:08: Variable "FanTotalTime" set to 35.062397802212; was 44.743868132716
        2020-05-03 16:03:08: Activity "grpqgiepry.false" finished
        2020-05-03 16:03:08: Sensor update completed; 0.123s
        2020-05-03 16:12:09: Configuration changed!
        2020-05-03 16:12:09: Sensor update starting
        2020-05-03 16:12:09: Sensor update completed; 0.104s
        2020-05-03 16:12:11: { dev=37, action="RunScene", options={ stopRunningScenes=true, forceReactorScenes=true, contextDevice=37, stopPriorScenes=false }, sceneId="grpr5u65eg.true", event="action", scene="grpr5u65eg.true" }
        2020-05-03 16:12:11: Launching scene/activity grpr5u65eg.true
        2020-05-03 16:12:11: Starting "grpr5u65eg.true" group 1
        2020-05-03 16:12:13: Variable "FanTotalTime" set to "0"; was 35.062397802212
        2020-05-03 16:12:13: Activity "grpr5u65eg.true" finished
    Devices
        ZWave (1) urn:schemas-micasaverde-com:device:ZWaveNetwork:1 (19/0); parent 0; plugin -; mfg  model ; dev D_ZWaveNetwork.xml impl 
        Loft Dual Plug (163) urn:schemas-upnp-org:device:BinaryLight:1 (3/0); parent 1; plugin -; mfg  model ; dev D_BinaryLight1.xml impl 
        Upstairs Temp (31) urn:schemas-micasaverde-com:device:TemperatureSensor:1 (17/0); parent 30; plugin -; mfg  model ; dev D_TemperatureSensor1.xml impl 
        Upstairs Thermostat (30) urn:schemas-upnp-org:device:HVAC_ZoneThermostat:1 (5/1); parent 1; plugin -; mfg RT model CT100; dev D_HVAC_ZoneThermostat1.xml impl 
        Downstairs Therm (34) urn:schemas-upnp-org:device:HVAC_ZoneThermostat:1 (5/1); parent 1; plugin -; mfg RT model CT100; dev D_HVAC_ZoneThermostat1.xml impl 
        Loft Fan (164) urn:schemas-upnp-org:device:BinaryLight:1 (3/0); parent 163; plugin -; mfg  model ; dev D_BinaryLight1.xml impl 
    Watches
        Device #24 Reactor Master service urn:toggledbits-com:serviceId:Reactor variable HouseMode
        Device #31 Upstairs Temp service urn:upnp-org:serviceId:TemperatureSensor1 variable CurrentTemperature
        Device #37 Auto Thermostats service urn:toggledbits-com:serviceId:ReactorSensor variable TestHouseMode
        Device #30 Upstairs Thermostat service urn:micasaverde-com:serviceId:HVAC_OperatingState1 variable ModeState
        Device #34 Downstairs Therm service urn:upnp-org:serviceId:TemperatureSensor1 variable CurrentTemperature
        Device #37 Auto Thermostats service urn:toggledbits-com:serviceId:ReactorSensor variable cdata
        Device #30 Upstairs Thermostat service urn:upnp-org:serviceId:HVAC_UserOperatingMode1 variable ModeStatus
        Device #37 Auto Thermostats service urn:toggledbits-com:serviceId:ReactorSensor variable TestTime
the fan ran for { FanTotalTime } minutes yesterday

…isn’t the correct form… it should be {"the fan ran for " + FanTotalTime + " minutes yesterday"}

D’oh, one of these days i will stop making the same stupid mistakes. thanks again for the patience with my dumb ass…

Actually, I think that’s a natural assumption, it’s just not the direction this went. I did it this way because it is available to be consistent in more places… it’s harder to make the “mid-run” replacement work consistently and sensibly (for example, in a delay action, if the variable “five” is set to 5, should 1{five} result in a 15 second delay?). Once you get used to how it is… powerful…