GELÖST: notify nur bei reading änderung

Begonnen von fl_Indigo, 05 April 2017, 09:50:47

Vorheriges Thema - Nächstes Thema

Beta-User

@Cooltux:
Danke für die Klarstellung, wieder was gelernt!
(Im ersten if fehlt m.E. noch eine ")" nach $NAME))

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

automatisierer

#16
Zitat von: fl_Indigo am 05 April 2017, 12:54:26
die variante mit DOIF hab ich auch probiert, das löst ebenfalls alle 5 minuten eine meldung aus...
Ok, hast recht. Liegt an der Event-Auswertung - wenn du Readings Auswertest, dann funktioniert es aber.

define n_Heizung_Anforderung_Pelletsofen_Telegram DOIF
([Temperaturen:AnforderungPelletsofen] eq "EIN") (set TelegramBot message Pelletsofen gestartet!)
DOELSEIF
([Temperaturen:AnforderungPelletsofen] eq "AUS") (set TelegramBot message Pelletsofen gestoppt!)


EDIT:
alles zurück! völliger blödsinn! ohne 'do always' funktioniert es, egal ob du Events oder Readings auswertest. Ich hatte nen Fehler in meinem testDOIF.

Es muss allerdings mehr als ein Zweig vorhanden sein. Also einen DOIF Zweig für AN und einen für AUS. Und nicht nur ein Zweig der auf AN und AUS triggert.




fl_Indigo

einen herzlichen dank an den profi, das notify tut jetzt was es soll! :)

danke für eure zeit!

fl_Indigo

muss mich nochmal korrigieren: das notify von cooltux funzt auch nicht, wieder alle 5min eine message :|

dafür funktioniert die zweite DOIF vom automatisierer jetzt wie sie soll! danke dafür!

automatisierer

das erste hätte aber auch funktionieren müssen... egal.

wenn das Notify von CoolTux nicht funzt - wäre es möglich, dass 'AnforderungPelletsofen' noch andere Zustände als 'AN' und 'AUS' hat?
Bei dem DOIF wäre das egal, da das nach einer triggerung durch 'AN' nur durch eine triggerung durch 'AUS' den Zustand wechselt.

fl_Indigo

nöp, das reading kann nur EIN oder AUS sein

egal, es funzt...

automatisierer

nö, nicht egal! so was juckt mich.

glaube jetzt hab ichs.
OldValue($NAME) ne "EIN"
$NAME dürfte in diesem Fall mit 'Temperaturen' gefüllt sein, du wolltest aber das OldValue von 'Temperaturen:AnforderungPelletsofen' haben.

fl_Indigo

ja, so stünde es ja auch in der commandref...

CoolTux

Auszug aus Commandref
[quote]
Value(<devicename>)
gibt den Status eines Gerätes zurück (entsprechend dem Ausdruck in Klammern, den Sie beim List-Befehl sehen).

OldValue(<devicename>)
OldTimestamp(<devicename>)
gibt den vorherigen Wert/Zeitstempel des Gerätes zurück.


Man müsste nun halt Mal schauen was genau in EVTPARTX oder EVENT genau drin steht. Also entweder Eventmonitor aufmachen und schauen oder eine Logausgaben beim Notify erzwingen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fl_Indigo

also im eventmonitor kommt nix sinnvolles, außer das das notify getriggert und erfolgreich ausgeführt wurde...
das notify hab ich jetzt mal mit verbose 5 attributiert...

im log steht das hier:

2017.04.05 19:22:17 5: Triggering n_Heizung_Anforderung_Pelletsofen_Telegram
2017.04.05 19:22:17 4: n_Heizung_Anforderung_Pelletsofen_Telegram exec { if ($EVTPART1 eq "EIN" && OldValue($NAME) ne "EIN") {fhem("set TelegramBot message Pelletsofen gestartet!");;} elsif ($EVTPART1 eq "AUS" && OldValue($NAME) ne "AUS") {fhem("set TelegramBot message Pelletsofen gestoppt!");; } }


aber nix von werten in den variablen, wie komm ich an die ran?

CoolTux

Im Eventmonitor stehen nur die Events. Da wird nichts mit Trigger Notify gezeigt. Wenn zum Beispiel ein Reading neu geschrieben wird kann ein Event ausgelöst werden.

Mach mal

Log 1, $EVENT;

Noch vor der ersten Bedingung
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fl_Indigo

OK, ein log auf $EVENT liefert folgendes im log:

2017.04.05 20:34:25 5: Triggering n_Heizung_Anforderung_Pelletsofen_Telegram
2017.04.05 20:34:25 4: n_Heizung_Anforderung_Pelletsofen_Telegram exec { Log 1, $EVENT;; if ($EVTPART1 eq "EIN" && OldValue($NAME) ne "EIN") {fhem("set TelegramBot message Pelletsofen gestartet!");;} elsif ($EVTPART1 eq "AUS" && OldValue($NAME) ne "AUS") {fhem("set TelegramBot message Pelletsofen gestoppt!");; } }
2017.04.05 20:34:25 1: AnforderungPelletsofen: AUS

somit müsste die erste änderung auf $EVENTPART2 lauten anstatt PART1 um den richtigen wert zu vergleichen

ein log auf $NAME liefert folgendes:

2017.04.05 20:39:40 5: Triggering n_Heizung_Anforderung_Pelletsofen_Telegram
2017.04.05 20:39:40 4: n_Heizung_Anforderung_Pelletsofen_Telegram exec { Log 2, $NAME;; if ($EVTPART1 eq "EIN" && OldValue($NAME) ne "EIN") {fhem("set TelegramBot message Pelletsofen gestartet!");;} elsif ($EVTPART1 eq "AUS" && OldValue($NAME) ne "AUS") {fhem("set TelegramBot message Pelletsofen gestoppt!");; } }
2017.04.05 20:39:40 2: Temperaturen

und da liegt das eigentliche problem: das verhalten ist wie in der commandref beschrieben, OldValue geht nur aufs device, und nicht aufs reading...

CoolTux

$EVTPART1  war richtig, da wir mit 0 beginnen.
Und oldValue geht nicht auf das Device sondern auf STATE vom Device.
Wäre ja mal interessant wie der dann ist.

Log 1, 'oldValue ist ' . oldValue($DEVICE);
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fl_Indigo

die syntax frisst mir die DEF nicht, --> "Global symbol "$DEVICE" requires explicit package name at (eval 412991) line 1."

CoolTux

Zitat von: fl_Indigo am 06 April 2017, 06:16:04
die syntax frisst mir die DEF nicht, --> "Global symbol "$DEVICE" requires explicit package name at (eval 412991) line 1."

Sorry mein Fehler. War gedanklich bei symbolischer Erklärung

Änder mal $DEVICE in $NAME so wie Du es ja weiter oben schon mal richtig gemacht hast.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net