[gelöst] trigger befehl löst ein DOIF nicht aus

Begonnen von Stelaku, 03 Juni 2022, 18:56:16

Vorheriges Thema - Nächstes Thema

Stelaku

Hallo alle zusammen

Ich habe ein normales DOIF im perl mode das auch funktioniert. Wenn ich aber zum testen einen trigger in der Komandozeile
eingebe wird das notwendige trigger Event im Eventmonitor sichtbar aber das DOIF löst nicht aus. Ich glaube ich sehen den Wald vor laute Bäumen nicht und hoffe das Ihr den Fehler sehen könnt.
einmal das List des DOIF

Internals:
   CFGFN     
   DEF        {
if ([haus.stromzaehler:power] > 0  and [?ESPEasy_Pumpe_Draussen_Status:Status] eq "on"){
fhem_set ("ESPEasy_Pumpe_Draussen_Status pulse 12 1 200")
}
}
   FUUID      629a1996-f33f-134a-7939-e5060d7b097fafc9
   MODEL      Perl
   NAME       di_pool
   NOTIFYDEV  haus.stromzaehler,global
   NR         792038
   NTFY_ORDER 50-di_pool
   STATE      initialized
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2022-06-03 18:34:06   Device          haus.stromzaehler
     2022-06-03 18:34:06   block_01        executed
     2022-06-03 18:34:06   e_haus.stromzaehler_power -1591.56
     2022-06-03 18:29:22   mode            enabled
     2022-06-03 18:29:22   state           initialized
   Regex:
     accu:
     collect:
     cond:
       haus.stromzaehler:
         0:
           power      ^haus.stromzaehler$:^power:
   condition:
     0         
if (::ReadingValDoIf($hash,'haus.stromzaehler','power') > 0  and ::ReadingValDoIf($hash,'ESPEasy_Pumpe_Draussen_Status','Status') eq "on"){
fhem_set ("ESPEasy_Pumpe_Draussen_Status pulse 12 1 200")
}

   helper:
     DEVFILTER  ^global$|^haus.stromzaehler$
     NOTIFYDEV  global|haus.stromzaehler
     event      power: -1591.56
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev haus.stromzaehler
     triggerEvents:
       power: -1591.56
     triggerEventsState:
       power: -1591.56
   internals:
   perlblock:
     0          block_01
   readings:
     all         haus.stromzaehler:power
   trigger:
   uiState:
   uiTable:
Attributes:
   room       ESPEasy

dieses DOIF löst aus wenn der Status des ESPEasy_Pumpe_Draussen_Status "on" ist und ein Event kommt von
haus.stromzaehler:power das > 0 ist.
Das funktioniert auch zumindestens wenn ich zur Zeit auf < 0 prüfe weil ja der power Wert wenn die Sonne Schein im minus
Bereich sich befindet.
Nun wollte ich zum testen einfach mal mit einen trigger aus der Komandozeile dieses DOIF zum testen auslösen lassen.
Eingabe in der Komandozeile

trigger haus.stromzaehler power: 100

Das DOIF juckt das aber nicht und die Pumpe läuft munter weiter.
hier mal eine Ausgabe aus dem Event Monitor für den o.g. trigger

2022-06-03 18:28:16 OBIS haus.stromzaehler power: 100

und hier mal einen Auszug aus den Eventmonitor wo ich auch den ESP mit anzeigen lassen
Zitat
2022-06-03 18:28:16 OBIS haus.stromzaehler power: 100               ## erster trigger Versuch ##
2022-06-03 18:28:36 OBIS haus.stromzaehler power_L1: -970.85   
2022-06-03 18:28:36 OBIS haus.stromzaehler power_L2: 260.29
2022-06-03 18:28:36 OBIS haus.stromzaehler power_L3: -984.78
2022-06-03 18:28:36 OBIS haus.stromzaehler power: -1695.34       ## normales Event vom Zähler ##
2022-06-03 18:28:50 OBIS haus.stromzaehler power: 100               ## zweiter trigger Versuch ##
2022-06-03 18:29:06 OBIS haus.stromzaehler power_L1: -970.05
2022-06-03 18:29:06 OBIS haus.stromzaehler power_L2: 264.16
2022-06-03 18:29:06 OBIS haus.stromzaehler power_L3: -981.15    ## normales Event auf das ich jetzt mit < 0 geprüft habe ##
2022-06-03 18:29:06 ESPEasy ESPEasy_Pumpe_Draussen_Status pulse 12 1 200## ESP wird geschaltet ##
2022-06-03 18:29:06 OBIS haus.stromzaehler power: -1687.04
2022-06-03 18:29:07 ESPEasy ESPEasy_Pumpe_Draussen_Status Status: off       ## ESP meldet off ##

Leider verstehe ich nicht warum mein trigger aus der Komandozeile nicht greift.
Vieleicht sieht einer meinen Denkfehler und kann mir auf die Sprünge helfen.

Viele Grüsse

Stephan

Stelaku

ich hab jetzt mal zum testen ein notify dafür erstellt.
hier ein List des notify

Internals:
   CFGFN     
   DEF        haus.stromzaehler:power:.* {
if ( ReadingsVal('haus.stromzaehler', 'power', 'undef') > 3000 ) {
fhem("set ESPEasy_Pumpe_Draussen_Status pulse 12 1 200")
}
}

   FUUID      629a63aa-f33f-134a-8347-02b29870391aa0e6
   NAME       poolnotify
   NOTIFYDEV  haus.stromzaehler
   NR         797668
   NTFY_ORDER 50-poolnotify
   REGEXP     haus.stromzaehler:power:.*
   STATE      2022-06-03 22:03:07
   TRIGGERTIME 1654286587.97952
   TYPE       notify
   READINGS:
     2022-06-03 22:01:08   state           active
     2022-06-03 22:03:07   triggeredByDev  haus.stromzaehler
     2022-06-03 22:03:07   triggeredByEvent power: 5000
Attributes:
   room       ESPEasy

dieses wurde durch einen trigger aus der Komandozeile mit power: 5000 getriggert.
der set Befehl wurde aber nicht ausgeführt.
Nun habe ich
ReadingsVal('haus.stromzaehler', 'power', 'undef') > 3000 )
mit
$EVTPART1
ersetzt.
hier das List des neuen notify

Internals:
   CFGFN     
   DEF        haus.stromzaehler:power:.* {
if ( $EVTPART1 > 3000 ) {
fhem("set ESPEasy_Pumpe_Draussen_Status pulse 12 1 200")
}
}

   FUUID      629a63aa-f33f-134a-8347-02b29870391aa0e6
   NAME       poolnotify
   NOTIFYDEV  haus.stromzaehler
   NR         797668
   NTFY_ORDER 50-poolnotify
   REGEXP     haus.stromzaehler:power:.*
   STATE      2022-06-03 22:04:55
   TRIGGERTIME 1654286695.51104
   TYPE       notify
   READINGS:
     2022-06-03 22:04:24   state           active
     2022-06-03 22:04:55   triggeredByDev  haus.stromzaehler
     2022-06-03 22:04:55   triggeredByEvent power: 5000
Attributes:
   room       ESPEasy

auch hier habe ich den selben trigger Befehl in der Komandozeile abgesetzt nur das es jetzt funktioniert
der set Befehl wird ausgeführt die Pumpe läuft los.
es sind beide male die selben Events aber es funktioniert nur mit $EVTPART1.

Damian

Zitat von: Stelaku am 03 Juni 2022, 18:56:16
Das DOIF juckt das aber nicht und die Pumpe läuft munter weiter.

Durch deinen Trigger wird zwar das DOIF-Device getriggert, aber im Reading [haus.stromzaehler:power] steht immer noch die ursprüngliche Zahl.

DOIF unterstützt auch reine Ereignistrigger (Angaben in Anführungszeichen, siehe Commandref), aber hier fragst du das Reading ab. All das ist in der Commandref zu DOIF beschrieben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stelaku

Hallo Damian

Vielen dank für Deine Antwort.
Manchmal ist man auch total vernagelt und läuft immer wieder in die falsch Richtung.

So wie Du es beschreibst funktioniert es und macht auch Sinn.
eine kleine Änderung und der Trigger aus der Kommandozeile funktioniert.


if (["haus.stromzaehler:power"] > 0

Ich komme immer wieder mit reine Ereignistrigger und Zustandsabfragen durcheinander.
Das erklärt auch das verhalten des notify.
Vielen dank für Deinen Denkanstoß

Viele Grüsse

Stephan