NodeMCU Firmata Relais nach Tastendruck schalten

Begonnen von thx2k, 17 Februar 2017, 21:37:44

Vorheriges Thema - Nächstes Thema

thx2k

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

schka17

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
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

thx2k

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

schka17

Nun, da fehlt die Regex auf die das notify triggern soll, also der Teil zwischen notify und {


Sent from my iPad using Tapatalk
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

thx2k

#4
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

schka17

#5
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
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

thx2k

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

schka17

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
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000