Hallo
Habe auf ein NodeMCU auf dem ESP8266 Firmata geflashed und in Fhem eingebunden.
FRM_D0 (GPIO16) ist als Ausgang definiert und FRM_D4 GPIO2 als Eingang.
ich kann per Fhem den Ausgang schalten und der Eingang wird auch registriert wenn ich den daran angeschlossen Taster betätige.
Jetzt wollte ich eine IF Abfrage machen, dass der Ausgang geschalten wird, wenn ich den Taster betätige.
Der Eingang hat die Readings "reading" on bzw. off und "state" Initialized
Ich habe vermutlich nen Syntaxfehler denn es passiert nichts.
Im Notify steht folgendes:
{if(ReadingsVal(FRM_D4,"reading","")eq"off")
{"set FRM_D0 on"}else{"set FRM_D0 off"}}
Vielen Dank im Voraus
Mit freundlichen Grüßen Christian
Zitat von: thx2k am 17 Februar 2017, 21:37:44
Hallo
Habe auf ein NodeMCU auf dem ESP8266 Firmata geflashed und in Fhem eingebunden.
FRM_D0 (GPIO16) ist als Ausgang definiert und FRM_D4 GPIO2 als Eingang.
ich kann per Fhem den Ausgang schalten und der Eingang wird auch registriert wenn ich den daran angeschlossen Taster betätige.
Jetzt wollte ich eine IF Abfrage machen, dass der Ausgang geschalten wird, wenn ich den Taster betätige.
Der Eingang hat die Readings "reading" on bzw. off und "state" Initialized
Ich habe vermutlich nen Syntaxfehler denn es passiert nichts.
Im Notify steht folgendes:
{if(ReadingsVal(FRM_D4,"reading","")eq"off")
{"set FRM_D0 on"}else{"set FRM_D0 off"}}
Vielen Dank im Voraus
Mit freundlichen Grüßen Christian
Wie sieht der Event im Eventmonitor aus?
Wie ist das komplette list des notify?
Was steht im Logfile? Dort könntest du den Syntaxfehler sehen wenn du den verbose Level entsprechend einstellst.
Sent from my iPad using Tapatalk
Hallo
Im Eventmonitor kommt nach drücken des Tasters folgendes
FRM_IN FRM_D4 reading: off
und nach loslassen dann wieder
FRM_IN FRM_D4 reading: on
Das notify wurde so angelegt
define Schalter1Notify notify {if(ReadingsVal(FRM_D4,"reading")eq"off")\
{"set FRM_D0 on"}else{"set FRM_D0 off"}}
Gruß Christian
Nun, da fehlt die Regex auf die das notify triggern soll, also der Teil zwischen notify und {
Sent from my iPad using Tapatalk
Hallo schka17
Vielen Dank für den Denkanstoß
Hab folgendes probiert
FRM_D4:reading:.*{if(ReadingsVal(FRM_D4,"reading")eq"off")
{"set FRM_D0 on"}else{"set FRM_D0 off"}}
Aber es regt sich nichts, hab glaub irgendwo noch nen Denkfehler.
Gruß Christian
edit*
Manchmal kann es so einfach sein ::)
ZitatFRM_D4:reading:.* set FRM_D0 toggle
Aber ich bekomm es mit If einfach nicht hin, falls da noch jemand nen Hinweis hat, was ich falsch mache, wäre ich auch nicht böse :D
Bin jetzt echt nicht der regex spezialist, aber kann gut sein dass die regex noch immer nicht passt. Wenn du denn verbose level auf 4 setzt müsstest du im logfile sehen ob das notify getriggert wird. Ich würde auch das notify anders aufbauen, du bekommst ja den Event mit, ist also nicht notwendig nochmal das Readingsvalue abzufragen, also den Event auswerten, entweder $EVENT splitten oder mit $EVTPARTxxx.
Aber wenn ich mir das ganze notify ansehe bin ich mir auch nicht sicher ob die else Zeile so stimmt.
Schau mal im logfile ob du da nicht Syntaxfehler bekommst
Sent from my iPad using Tapatalk
Hallo
Habs inzwischen als Taster so gelöst, also im Prinzip wie ein Stromstoßrelais
FRM_D4:reading:.on set FRM_D0 toggle
und wenn ein Schalter angeschlossen wird mit folgendem Code
FRM_D4:reading:.* set FRM_D0 toggle
Mit $EVENT bin ich irgendwie nicht weiter gekommen, könntest du mir da ein Beispiel zeigen wie das aussehen müsste?
Gruß Christian
Hi
Ist auch in der commendref recht gut beschrieben
notify
Define
define <name> notify <pattern> <command>
Execute a command when received an event for the definition <pattern>. If <command> is enclosed in {}, then it is a perl expression, if it is enclosed in "", then it is a shell command, else it is a "plain" fhem.pl command (chain). See the trigger command for testing it. Examples:
define b3lampV1 notify btn3 set lamp $EVENT
define b3lampV2 notify btn3 { fhem "set lamp $EVENT" }
define b3lampV3 notify btn3 "/usr/local/bin/setlamp "$EVENT""
define b3lampV3 notify btn3 set lamp1 $EVENT;;set lamp2 $EVENT
define wzMessLg notify wz:measured.* "/usr/local/bin/logfht $NAME "$EVENT""
define LogUndef notify global:UNDEFINED.* "send-me-mail.sh "$EVENT""
Notes:
<pattern> is either the name of the triggering device, or devicename:event.
<pattern> must completely (!) match either the device name, or the compound of the device name and the event. To identify the events use the inform command from the telnet prompt or the "Event Monitor" link in the browser (FHEMWEB), and wait for the event to be printed. See also the eventTypes device.
in the command section you can access the event:
The variable $EVENT will contain the complete event, e.g. measured-temp: 21.7 (Celsius)
$EVTPART0,$EVTPART1,$EVTPART2,etc contain the space separated event parts (e.g. $EVTPART0="measured-temp:", $EVTPART1="21.7", $EVTPART2="(Celsius)". This data is available as a local variable in perl, as environment variable for shell scripts, and will be textually replaced for FHEM commands.
$NAME and $TYPE contain the name and type of the device triggering the event, e.g. myFht and FHT
Was hast du mit $EVENT probiert und was war die Fehlermeldung?
Sent from my iPad using Tapatalk