Hallo,
heute möchte ich mein Verständnis für den "trigger"-Befehl erweitern ..
Probiere schon ewig damit herum, FHEM liefert auch immer ein Ergebnis ... leider aber nie das, was ich erwarte oder wünsche.
Es geht um den Zuhause-Status. Ich möchte gerne diverse Funkschalter schalten, Temperaturen für Heizung setzen, und bald noch viel mehr, wenn ich zuhause bin.
Derzeit gibt es 3 Arten, wie ich gerne den Status setzen möchte:
1. per Taster (S4A)
- Taste 1 = Status 1
- Taste 2 = Status 2
- Taste 3 = Status 3
- Taste 4 = Status 4
2. Per WLAN ( die Anwesenheitserkennung funktioniert)
- Handy im WLAN = Status 1
- Handy nicht im WLAN = Status 2
3. ( Todo, bisher nicht implementiert) Googlekalender: Bei Feierabend (= Terminende) Status 1
Nun habe ich mir die Stati wie folgt zusammengebastelt:
# Status 1:
set HomeStatus 1;;set FHT80B3_BUERO desired-temp 20;;set FHT80B3_BAD desired-temp 22;;set FHT80B3_WOHNEN desired-temp 21;;set FHT80B3_SCHLAFEN desired-temp 19;;
# Status 2:
set HomeStatus 2;;set FHT80B3_BUERO desired-temp 17;;set FHT80B3_BAD desired-temp 20;;set FHT80B3_WOHNEN desired-temp 19;;set FHT80B3_SCHLAFEN desired-temp 16;;
Dann habe ich ein notify definiert:
define Zuhause notify S4ABTN1:on set HomeStatus 1;;set FHT80B3_BUERO desired-temp 20;;set FHT80B3_BAD desired-temp 22;;set FHT80B3_WOHNEN desired-temp 21;;set FHT80B3_SCHLAFEN desired-temp 19;;
define Unterwegs notify S4ABTN1:off set HomeStatus 2;;set FHT80B3_BUERO desired-temp 17;;set FHT80B3_BAD desired-temp 20;;set FHT80B3_WOHNEN desired-temp 19;;set FHT80B3_SCHLAFEN desired-temp 16;;
Damit kann ich mit dem S4A zwischen den Stati hin und her schalten, funktioniert einwandfrei.
Jetzt kommt der Watchdog für die WLAN-Erkennung ins Spiel:
define wdP watchdog Handy_Stephan:present 00:10:00 Handy_Stephan:absent set K3_WOHNEN_AUDIO on;; trigger wdA .
attr wdP regexp1WontReactivate 1
define wdA watchdog Handy_Stephan:absent 00:10:00 Handy_Stephan:present set K3_WOHNEN_AUDIO off;; trigger wdP .
attr wdA regexp1WontReactivate 1
Dieser Watchdog schaltet so wie er ist K3 an, wenn ich heim komme und aus, wenn ich gehe. Funktioniert einwandfrei.
Jetzt möchte ich aber, dass der Watchdog ebenfalls zusätzlich meinen Status ändert. Dafür (dachte ich) gibt es ja den Befehl trigger.
Also habe ich ausprobiert (im Web-Interface und in der Telnet-Konsole:
trigger Zuhause
trigger Zuhause .
trigger S4ABTN1 ( oder so ähnlich, gibt aber nen Fehler
dann habe ich mir diesen Code aus der Commandref zu Herzen genommen:
Notify can be used to store macros for manual execution. Use the trigger command to execute the macro. E.g.
fhem> define MyMacro notify MyMacro { Log 1, "Hello"}
fhem> trigger MyMacro
Nur, der machts ja nicht unbedingt einfacher (auf welches der beiden MyMacro bezieht sich das trigger?)
Also habe ich meinen Code umgeschrieben:
define Zuhause notify Zuhause set HomeStatus 1;;set FHT80B3_BUERO desired-temp 20;;set FHT80B3_BAD desired-temp 22;;set FHT80B3_WOHNEN desired-temp 21;;set FHT80B3_SCHLAFEN desired-temp 19;;
define Unterwegs notify Unterwegs set HomeStatus 2;;set FHT80B3_BUERO desired-temp 17;;set FHT80B3_BAD desired-temp 20;;set FHT80B3_WOHNEN desired-temp 19;;set FHT80B3_SCHLAFEN desired-temp 16;;
siehe da, ich kann mit
trigger Zuhause
trigger Unterwegs
schalten. Nur leider nicht mehr mit dem Taster S4A.
Also habe ich getippt:
define SchalteMeinenHomeStatusWennIchAufDenTasterDrücke1 notify S4ABTN1:on trigger Zuhause
define SchalteMeinenHomeStatusWennIchAufDenTasterDrücke1 notify S4ABTN1:off trigger Unterwegs
Dreimal dürft ihr raten, es funktioniert natürlich *nicht* *tilt* ;-(
Wo liegt mein Fehler?
lg
stephan
Bezugnehmend auf deine letzten Codezeilen setzt du fälschlicherweise den Trigger auf die Bezeichnung und nicht auf das auslösende Event!!!
Zitatdefine Zuhause notify Zuhause set HomeStatus 1;;set FHT80B3_BUERO desired-temp 20;;set FHT80B3_BAD desired-temp 22;;set FHT80B3_WOHNEN desired-temp 21;;set FHT80B3_SCHLAFEN desired-temp 19;;
define Unterwegs notify Unterwegs set HomeStatus 2;;set FHT80B3_BUERO desired-temp 17;;set FHT80B3_BAD desired-temp 20;;set FHT80B3_WOHNEN desired-temp 19;;set FHT80B3_SCHLAFEN desired-temp 16;;
würde man triggern mit:
trigger Zuhause
trigger Unterwegs
Zitatdefine Zuhause notify S4ABTN1:on set HomeStatus 1;;set FHT80B3_BUERO desired-temp 20;;set FHT80B3_BAD desired-temp 22;;set FHT80B3_WOHNEN desired-temp 21;;set FHT80B3_SCHLAFEN desired-temp 19;;
define Unterwegs notify S4ABTN1:off set HomeStatus 2;;set FHT80B3_BUERO desired-temp 17;;set FHT80B3_BAD desired-temp 20;;set FHT80B3_WOHNEN desired-temp 19;;set FHT80B3_SCHLAFEN desired-temp 16;;
trigger S4ABTN1 on
trigger S4ABTN1 off
MfG, MisterEltako.
Hi,
trigger S4ABTN1 on
aaaah ^ da war der Fehler ;-/
Danke !!
lg
stephan
Hi, ich muss hier leider nochmal anknüpfen:
Ich hab ein Device
KNX101.I01_BWM_Garage_WHG_Lichtgruppe
mit (u.a.) dem Reading
get_G1
dazu hab ich ein notify:
KNX101.I01_BWM_Garage_WHG_Lichtgruppe:getG1:.* set FS20_Garage on
Mit dem Befehl
trigger KNX101.I01_BWM_Garage_WHG_Lichtgruppe on
reagiert es nicht (Ich hab ja auch nicht das Reading getG1 angesprochen)
trigger KNX101.I01_BWM_Garage_WHG_Lichtgruppe:getG1 on
erhalte ich die Fehlermeldung
Please define KNX101.I01_BWM_Garage_WHG_Lichtgruppe:getG1 first
Internals:
DEF 2/1/0:dpt1 tul
DEVNAME KNX101.I01_BWM_Garage_WHG_Lichtgruppe
IODev tul
LASTInputDev tul
MSGCNT 2350
NAME KNX101.I01_BWM_Garage_WHG_Lichtgruppe
NR 739
NTFY_ORDER 50-KNX101.I01_BWM_Garage_WHG_Lichtgruppe
STATE off
TYPE KNX
tul_MSGCNT 2350
tul_RAWMSG C01165w0210000
tul_TIME 2017-12-13 12:35:46
GADDR:
1 2/1/0
GCODE:
1 02100
Helper:
DBLOG:
state:
logdb:
TIME 1513165617.63149
VALUE on
MODEL:
1 dpt1
READINGS:
2017-12-13 12:35:46 getG1 off
2017-12-13 12:35:46 last-sender 1/1/101
2017-12-13 12:35:46 state off
READINGSNAME:
Attributes:
DbLogInclude state
IODev tul
event-on-update-reading state
listenonly 1
room KNX
Wie kann ich mein Notify testen?
Idee: at hat ein set ... execNow bekommen. Vielleicht wäre das auch was für notify?
Grüße,
Stephan
Hi,
man kann Trigger doch relativ gut testen. Du machst den Eventmonitor auf (wichtigstes Werkzeug für notify) setzt den Filter und setzt in einem zweiten Fenster deinen Trigger Befehl.
https://wiki.fhem.de/wiki/Event_monitor
Beispiel:
Ich habe einen dummy Lamp
Ich setze den Filter auf Lamp.*
Ich setze einen trigger Lamp on ab
Im Eventmonitor kommt: 2017-12-13 12:53:20 dummy Lamp on
Du brauchst einen Event KNX101.I01_BWM_Garage_WHG_Lichtgruppe getG1:<irgendetwas>
Beachte! Der erste ":" ist der Trenner zwischen Gerät und Reading, der erscheint nicht im Event sondern gehört zum Filter in notify. Der zweite ":" ist Bestandteil des Events!
https://fhem.de/commandref_DE.html#notify
Bist Du sicher, das zum Reading get_G1 wirklich der Event get_G1:<BalBla> gehört? Also mit Doppelpunkt?
Alternativ sollte doch auch ein setreading KNX101.I01_BWM_Garage_WHG_Lichtgruppe getG1 BlaBla
gehen?
https://fhem.de/commandref_DE.html#setreading
Gruß Otto
Hallo Otto,
Danke für den Schubser.
mit
trigger KNX101.I01_BWM_Garage_WHG_Lichtgruppe getG1:on
hats dann funktioniert, ich ergänze das im Wiki. Obwohl mir das ausdrücklich nicht intuitiv erscheint 8)
Um noch kurz auf deine Ausführungen einzugehen:
define Lamp dummy
trigger Lamp on
ist natürlich absolut korrekt. Der Unterschied zu meinem Fall ist, dass ich auf ein einzelnes(spezielles) Reading triggern möchte, und nicht auf "state".
Um "setreading gehts ja ausdrücklich *nicht*, obwohl das das natürlich ebenfalls funktioniert. Allerdings ist hier zu beachten, dass der Inhalt des Readings angefasst wird...
Danke und Grüße,
Stephan
Der Unterschied zu meinem Beispiel war mir absolut klar. Ich wollte Dir ja nur zeigen was trigger wirklich macht und wie man ihm zusehen kann.
Warum geht es mit setreading nicht?
ZitatDer Befehl setzt das Reading <reading> auf den Wert <value> ohne Signale an das betroffene Gerät zu senden, generiert aber Ereignisse und die übliche eventMap und stateFormat Umwandlung wird auch durchgeführt.
S
Ein
setreading Lamp RemainingUsableLevel 12
erzeugt bei mir diesen Event:
2017-12-13 13:18:58 dummy Lamp RemainingUsableLevel: 12
Ob das mit dem ersten und dem zweiten ":" intuitiv ist oder nicht. Es ist einfach so ;D Wenn man verstanden hat woher es kommt ist es egal.
Es gibt auch viele die machen nur ein regEx auf den Event im notify, ohne "Gerätename:" Obwohl es in der commandref so explizit nicht steht funktioniert das. Aber ist es dann intuitiver?
Gruß Otto
Hi,
Ich wollte Dir ja nur zeigen was trigger wirklich macht und wie man ihm zusehen kann.
Hast du, und ich habs verstanden :)
Warum geht es mit setreading nicht?
Ich schrieb nicht, dasses *mit* setreading nicht geht, sondern dass es nicht *um* setreading geht ...
Grüße,
Stephan
Sorry hab ich nicht richtig gelesen. Aber der "Test" trigger für dein notify würde so "perfekt" erzeugt.
Dann nimm es wenigstens als Antwort auf Deine Frage
ZitatWie kann ich mein Notify testen?
:D
Gruß Otto