Verständnis für "trigger"

Begonnen von abc2006, 21 Mai 2013, 16:44:51

Vorheriges Thema - Nächstes Thema

abc2006

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

FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

MisterEltako

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.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

abc2006

Hi,

trigger S4ABTN1 on


aaaah ^ da war der Fehler ;-/
Danke !!

lg
stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

abc2006

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
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Otto123

#4
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

abc2006

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
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

abc2006

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
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz