Ad Widget

Collapse

Trigger Problem: Since Furnace started has temp decreased by >= 1

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • ironstorm
    Junior Member
    • Apr 2010
    • 6

    #1

    Trigger Problem: Since Furnace started has temp decreased by >= 1

    Hi All,

    I am trying to write a trigger that will fire only if the temperature has dropped by 1 degree since the furnace started. This will start an action that "reboots" the furnace.

    I have defined "hvac_heating" (0 = off, 1 = on) and "temperature" (float) items. I need something that does the logical equivalent of:

    temperature.last(0) + 1 > temperature.last(hvac_heating.last(value=0).clock)

    Any ideas how I can make a trigger that does this?

    -G
  • jan.garaj
    Senior Member
    Zabbix Certified Specialist
    • Jan 2010
    • 506

    #2
    PROBLEM when temperature went down more than 1 and the furnace is started (it's not exactly what do you want, but IMHO it's your case):
    Code:
    [temperature.abschange()}<-1 and {hvac_heating.last()}=1
    You can't specify "variable" in trigger function - last(hvac_heating.last(value=0).clock).
    Devops Monitoring Expert advice: Dockerize/automate/monitor all the things.
    My DevOps stack: Docker / Kubernetes / Mesos / ECS / Terraform / Elasticsearch / Zabbix / Grafana / Puppet / Ansible / Vagrant

    Comment

    • ironstorm
      Junior Member
      • Apr 2010
      • 6

      #3
      Unfortunately that doesn't work.

      There are a couple additional challenges:
      1. temperature can decrease slightly between when the "call for heat" that starts the furnace and when the temperature starts to rise in the house (blower comes on, heat comes on, fan comes on, warm air starts to come out the vents)
      2. temperature is unlikely to change by a whole degree between data points, meaning that abschange or delta between last() and prev() will never get a 1.0 value change (we will instead see several 0.2 changes).
      3. the rate at which the temperature rises is variable in that depends on starting temperature, outside temperature, etc. So I can't just say, if has a delta of -0.2 ten minutes after furnace started we have a problem


      i.e. this is the trigger I'm currently using... which doesn't fully address the problems either (and it takes a long time to kick-in):
      Code:
      {Template Device Nest Thermostat:nest.autoaway.min(1h)}=0  and
      {Template Device Nest Thermostat:nest.hvac_heating.min(20m)}=1 
      and {Template Device Nest Thermostat:nest.temperature.count(20m)} > 1
      and {Template Device Nest Thermostat:nest.temperature.last(0)} <= {Template Device Nest Thermostat:nest.temperature.min(20m)}
      and {Template Device Nest Thermostat:nest.temperature.last(0)} < {Template Device Nest Thermostat:nest.target_temperature.last(0)}
      Originally posted by jan.garaj
      PROBLEM when temperature went down more than 1 and the furnace is started (it's not exactly what do you want, but IMHO it's your case):
      Code:
      [temperature.abschange()}<-1 and {hvac_heating.last()}=1
      You can't specify "variable" in trigger function - last(hvac_heating.last(value=0).clock).
      https://www.zabbix.com/documentation...gers/functions

      Comment

      • ironstorm
        Junior Member
        • Apr 2010
        • 6

        #4
        I think I've figured out a hack that will do the job...

        Create a calculated item ("nest.temperature_at_hvac_change") that changes when the furnace starts or stops and copies it's own previous value at all other times.
        1. create the calculated item "nest.temperature_at_hvac_change", set the formula to a valid/supported value i.e. last("nest.temperature") or 20.0
        2. activate the item and make sure it appears with it's supported value in the "Latest Data"... This will establish a history value that will be needed to keep the item from becoming non-supported when it calls last() on itself.
        3. edit the item with the following formula:
          Code:
          (last("nest.temperature") * (not (last("nest.hvac_heating") = prev("nest.hvac_heating")))) 
          + (last("nest.temperature_at_hvac_change") * (last("nest.hvac_heating") = prev("nest.hvac_heating")))


        The formula will cause the item take on the current temperature value whenever the furnace starts or stops, and when the furnace is not starting or stopping it will copy it's own last value to be its new value.

        In this way, the trigger I needed should hopefully work:
        Code:
        {Template Device Nest Thermostat:nest.hvac_heating.min(10m)}=1 
        and (not {Template Device Nest Thermostat:nest.temperature.nodata(10m)})
        and 1 + {Template Device Nest Thermostat:nest.temperature.last(0)} <= {Template Device Nest Thermostat:nest.temperature_at_hvac_change.last()}
        Fingers are crossed, I hope it works.
        Last edited by ironstorm; 22-12-2014, 05:38. Reason: missing brackets on last()

        Comment

        Working...