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
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.
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.
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