Hauptmenü

Triggerndes Device Reading

Begonnen von FHEMAN, 05 Juni 2023, 15:12:16

Vorheriges Thema - Nächstes Thema

FHEMAN

Hi zusammen,

ich vermute zwar stark, dass es schon irgendwo eine passende Antwort gibt, aber ich habe sie leider nicht gefunden - und zwar auf die Frage:

Gibt es eine im DOIF integrierte Möglichkeit, an das aktuell triggernde Device Reading heranzukommen?

Ich habe im Bedingungsteil mehrere Abfragen in der Art
([Inverter:Temp1] > 70 or [Inverter:Temp2] > 70 or [Inverter:Temp3] > 70  or [Inverter:HEALTH_ID] !~ "51|311")
und möchte nun wissen, welches Reading zur Ausführung geführt hat. Also quasi das letzte e_DEVICE_READING. Das Device alleine ist mir zu wenig.

Ist das möglich?

$EVENT bzw. $EVENTS liefert mir anscheinend immer nur alle Readings.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Damian

Alles, was in einem Eventblock an das DOIF-Modul geliefert wird, wird in den $EVENTS-Variablen abgelegt, die muss man dann selbst nach passenden Readings durchsuchen.

Einen Filter für User gibt es im DOIF nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEMAN

Also bliebe mir eigentlich nur, jeweils eine Bedingung pro Device-Reading zu erstellen? Oder an der Stelle einfach ein Notify zu verwenden und dort dann ganz old-school das EVENT auszuwerten.

Vielleicht passt aber an meinem DOIF auch irgendetwas anderes noch nicht, denn der Ausführungsteil wird ständig getriggert, obwohl der Bedingungsteil nicht true sein dürfte. Quelldevice ist ein HTTPMOD-Device:

Internals:
  CFGFN     
  DEF        ([SMASTPX15:INV_TEMP1] > 73 or [SMASTPX15:INV_TEMP2] > 73 or [SMASTPX15:INV_TEMP3] > 73 or [SMASTPX15:SPOT_FEHLERSTROM] > 0.02 or [SMASTPX15:SPOT_ISOLATION] > 1250 or   
[SMASTPX15:INV_HEALTH] ne "307")({
## or [SMASTPX15:INV_EVENT] !~ "51|311"
    SendMessage("SMA STPX15 ", "$DEVICE", "Pushover", "silent")
})
  FUUID      647cf067-f33f-6078-3d5c-4969ed50e2f48d6e
  MODEL      FHEM
  NAME      doif.Inverter.Health
  NOTIFYDEV  global,SMASTPX15
  NR        34631
  NTFY_ORDER 50-doif.Inverter.Health
  STATE      cmd_1
  TYPE      DOIF
  VERSION    27616 2023-05-25 17:55:36
  eventCount 100
  READINGS:
    2023-06-05 16:50:58  Device          SMASTPX15
    2023-06-05 16:50:58  cmd            1
    2023-06-05 16:50:58  cmd_event      SMASTPX15
    2023-06-05 16:50:58  cmd_nr          1
    2023-06-05 16:50:58  e_SMASTPX15_INV_TEMP1 62
    2023-06-05 16:50:58  e_SMASTPX15_INV_TEMP2 60
    2023-06-05 16:47:58  e_SMASTPX15_INV_TEMP3 58
    2023-06-05 16:50:58  e_SMASTPX15_SPOT_FEHLERSTROM 0.014
    2023-06-05 14:50:32  mode            enabled
    2023-06-05 16:50:58  state          cmd_1
  Regex:
    accu:
    bar:
    barAvg:
    collect:
    cond:
      SMASTPX15:
        0:
          INV_HEALTH ^SMASTPX15$:^INV_HEALTH:
          INV_TEMP1  ^SMASTPX15$:^INV_TEMP1:
          INV_TEMP2  ^SMASTPX15$:^INV_TEMP2:
          INV_TEMP3  ^SMASTPX15$:^INV_TEMP3:
          SPOT_FEHLERSTROM ^SMASTPX15$:^SPOT_FEHLERSTROM:
          SPOT_ISOLATION ^SMASTPX15$:^SPOT_ISOLATION:
  attr:
    cmdState:
    wait:
    waitdel:
  condition:
    0          ::ReadingValDoIf($hash,'SMASTPX15','INV_TEMP1') > 73 or ::ReadingValDoIf($hash,'SMASTPX15','INV_TEMP2') > 73 or ::ReadingValDoIf($hash,'SMASTPX15','INV_TEMP3') > 73 or ::ReadingValDoIf($hash,'SMASTPX15','SPOT_FEHLERSTROM') > 0.02 or ::ReadingValDoIf($hash,'SMASTPX15','SPOT_ISOLATION') > 1250 or      ::ReadingValDoIf($hash,'SMASTPX15','INV_HEALTH') ne "307"
  do:
    0:
      0          {      SendMessage("SMA STPX15 ", "$DEVICE", "Pushover", "silent") }
    1:
  helper:
    NOTIFYDEV  global,SMASTPX15
    event      SPOT_UDC1: 481,SPOT_UDC2: 365,SPOT_UDC3: 448,SPOT_IDC1: 8.039,SPOT_IDC2: 7.324,SPOT_IDC3: 3.934,INV_TEMP1: 62,INV_TEMP2: 60,SPOT_FREQ: 49.99,SPOT_FEHLERSTROM: 0.014,SPOT_PAC: 8303,SPOT_PACTOT: 4314,SPOT_PDC1: 3864,SPOT_PDC2: 2674,SPOT_PDC3: 1763,SPOT_PDC1_TODAY: 62810.0762474723,SPOT_PDC2_TODAY: 17753.7757915573,SPOT_PDC3_TODAY: 21334.5799232438
    globalinit 1
    last_timer 0
    sleeptimer -1
    timerdev  SMASTPX15
    timerevent SPOT_UDC1: 481,SPOT_UDC2: 365,SPOT_UDC3: 448,SPOT_IDC1: 8.039,SPOT_IDC2: 7.324,SPOT_IDC3: 3.934,INV_TEMP1: 62,INV_TEMP2: 60,SPOT_FREQ: 49.99,SPOT_FEHLERSTROM: 0.014,SPOT_PAC: 8303,SPOT_PACTOT: 4314,SPOT_PDC1: 3864,SPOT_PDC2: 2674,SPOT_PDC3: 1763,SPOT_PDC1_TODAY: 62810.0762474723,SPOT_PDC2_TODAY: 17753.7757915573,SPOT_PDC3_TODAY: 21334.5799232438
    triggerDev SMASTPX15
    DOIF_eventa:
      cmd_nr: 1
      cmd: 1
      cmd_event: SMASTPX15
      cmd_1
    DOIF_eventas:
      cmd_nr: 1
      cmd: 1
      cmd_event: SMASTPX15
      state: cmd_1
    timerevents:
      SPOT_UDC1: 481
      SPOT_UDC2: 365
      SPOT_UDC3: 448
      SPOT_IDC1: 8.039
      SPOT_IDC2: 7.324
      SPOT_IDC3: 3.934
      INV_TEMP1: 62
      INV_TEMP2: 60
      SPOT_FREQ: 49.99
      SPOT_FEHLERSTROM: 0.014
      SPOT_PAC: 8303
      SPOT_PACTOT: 4314
      SPOT_PDC1: 3864
      SPOT_PDC2: 2674
      SPOT_PDC3: 1763
      SPOT_PDC1_TODAY: 62810.0762474723
      SPOT_PDC2_TODAY: 17753.7757915573
      SPOT_PDC3_TODAY: 21334.5799232438
    timereventsState:
      SPOT_UDC1: 481
      SPOT_UDC2: 365
      SPOT_UDC3: 448
      SPOT_IDC1: 8.039
      SPOT_IDC2: 7.324
      SPOT_IDC3: 3.934
      INV_TEMP1: 62
      INV_TEMP2: 60
      SPOT_FREQ: 49.99
      SPOT_FEHLERSTROM: 0.014
      SPOT_PAC: 8303
      SPOT_PACTOT: 4314
      SPOT_PDC1: 3864
      SPOT_PDC2: 2674
      SPOT_PDC3: 1763
      SPOT_PDC1_TODAY: 62810.0762474723
      SPOT_PDC2_TODAY: 17753.7757915573
      SPOT_PDC3_TODAY: 21334.5799232438
    triggerEvents:
      SPOT_UDC1: 481
      SPOT_UDC2: 365
      SPOT_UDC3: 448
      SPOT_IDC1: 8.039
      SPOT_IDC2: 7.324
      SPOT_IDC3: 3.934
      INV_TEMP1: 62
      INV_TEMP2: 60
      SPOT_FREQ: 49.99
      SPOT_FEHLERSTROM: 0.014
      SPOT_PAC: 8303
      SPOT_PACTOT: 4314
      SPOT_PDC1: 3864
      SPOT_PDC2: 2674
      SPOT_PDC3: 1763
      SPOT_PDC1_TODAY: 62810.0762474723
      SPOT_PDC2_TODAY: 17753.7757915573
      SPOT_PDC3_TODAY: 21334.5799232438
    triggerEventsState:
      SPOT_UDC1: 481
      SPOT_UDC2: 365
      SPOT_UDC3: 448
      SPOT_IDC1: 8.039
      SPOT_IDC2: 7.324
      SPOT_IDC3: 3.934
      INV_TEMP1: 62
      INV_TEMP2: 60
      SPOT_FREQ: 49.99
      SPOT_FEHLERSTROM: 0.014
      SPOT_PAC: 8303
      SPOT_PACTOT: 4314
      SPOT_PDC1: 3864
      SPOT_PDC2: 2674
      SPOT_PDC3: 1763
      SPOT_PDC1_TODAY: 62810.0762474723
      SPOT_PDC2_TODAY: 17753.7757915573
      SPOT_PDC3_TODAY: 21334.5799232438
  internals:
  readings:
    all        SMASTPX15:INV_TEMP1 SMASTPX15:INV_TEMP2 SMASTPX15:INV_TEMP3 SMASTPX15:SPOT_FEHLERSTROM SMASTPX15:SPOT_ISOLATION SMASTPX15:INV_HEALTH
  trigger:
  uiState:
  uiTable:
Attributes:
  do        always
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Damian

Wenn es zur Ausführung kommt, dann muss sie wahr sein, das so sicher, wie das Amen in der Kirche.

Du sieht nur die Werte der triggernden Event-Readings unter e_.... Abgefragt werden mit or aber auch Werte die gerade nicht getriggert haben. Eine dieser Abfragen ist dann eben wahr - musst einfach bei dir nachschauen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEMAN

Muss wohl so sein, da will ich dir lieber nicht widersprechen ;)
Aber dass das Verhalten bei OR anders ist und dass Werte true sein können, die dann nicht als Reading mit e-Präfix auftauchen, außer man nutzt den "?"-Präfix, war mir neu. Wieder was dazu gelernt.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Damian

Es geht hier nur um eine Bedingung, die komplett von Perl ausgewertet wird, egal von wem der Trigger kam.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Du kannst ja auch die Events abfragen. Dran denken, wenn du vergleichen willst (>70), musst du einen Vorgabewert mit übergeben. Da es immer nur ein Event gleichzeitig gibt, kann auch nur einer triggern.