Hauptmenü

Syntax Problem im notify

Begonnen von mba, 15 April 2016, 20:16:17

Vorheriges Thema - Nächstes Thema

mba

Hallo zusammen,
ich verzweifel langsam und hoffe mir kann jemand helfen.
mein funktionierendes notify:
Modbus1_Slave1.:ShutterButtonBlock:.* {
if ($EVTPART1 eq "1")
{fhem ("setreading ($NAME)_Shutter. nState locked;")}
else
{fhem ("setreading ($NAME)_Shutter. nState unlocked;sleep 3;setreading ($NAME)_Shutter. nState lastrun")}
}


Das lastrun am ende möchte ich mit einem Reading Wert ersetzen, was mir aber nicht gelingen will.
Wenn ich folgenden Code im Webinterface ausführe, wird das Reading angezeigt
{ReadingsVal("Modbus1_Slave11_Shutter1","nLast","na")}
also habe ich das notify so geändert:
Modbus1_Slave1.:ShutterButtonBlock:.* {
if ($EVTPART1 eq "1")
{fhem ("setreading ($NAME)_Shutter. nState locked;")}
else
{fhem ("setreading ($NAME)_Shutter. nState unlocked;sleep 3;setreading ($NAME)_Shutter. nState {ReadingsVal("($NAME)_Shutter.","nLast","na")} ")}
}

aber das notify funktioniert dann nicht mehr

ich habe jede menge an Variationen probiert mit {fhem (..)}, in () usw.
im Log immer Syntaxfehler:
n_ShutterButtonBlock return value: syntax error at (eval 3821) line 5, near ""setreading ($NAME)_Shutter. nState unlocked;sleep 3;setreading ($NAME)_Shutter. nState {ReadingsVal("("

wenn ich die " durch ' ersetze funktioniert das notify wieder,
Modbus1_Slave1.:ShutterButtonBlock:.* {
if ($EVTPART1 eq "1")
{fhem ("setreading ($NAME)_Shutter. nState locked;")}
else
{fhem ("setreading ($NAME)_Shutter. nState unlocked;sleep 3;setreading ($NAME)_Shutter. nState {ReadingsVal('($NAME)_Shutter.','nLast','na')} ")}
}

aber als wert wird  "{ReadingsVal('(Modbus1_Slave11)_Shutter.','nLast','na')}" gesetzt

ist bestimmt nur ein Syntax Problem
Grüße Marco
Tinkerboard für FHEM, Modbus RTU via RS485 mit Arduino Slaves, ZWAVE mit Razberry Modul

marvin78

Modbus1_Slave1.:ShutterButtonBlock:.* {
my $lastrun=ReadingsVal("Modbus1_Slave11_Shutter1","nLast","na");
if ($EVTPART1 eq "1")
{fhem ("setreading ($NAME)_Shutter. nState locked;")}
else
{fhem ("setreading ($NAME)_Shutter. nState unlocked;sleep 3;setreading ($NAME)_Shutter. nState $lastrun")}
}

mba

Hallo Marvin,

dank dir, dein code funktioniert, da es aber mehrere slaves und manchmal 2 rolladen betrifft habe ich wie folgt abgeändert.
Dann setzt er aber nur noch "na"

Modbus1_Slave1.:ShutterButtonBlock:.* {
my $lastrun=ReadingsVal("($NAME)_Shutter.","nLast","na");
if ($EVTPART1 eq "1")
{fhem ("setreading ($NAME)_Shutter. nState locked;")}
else
{fhem ("setreading ($NAME)_Shutter. nState unlocked;sleep 3;setreading ($NAME)_Shutter. nState $lastrun")}
}
Tinkerboard für FHEM, Modbus RTU via RS485 mit Arduino Slaves, ZWAVE mit Razberry Modul

marvin78

Wofür ist denn die Klammer um $NAME? Ich denke, die gehört dort nicht hin. In keinem Fall.

mba

der name wurde nicht aufgelöst ohne, aber ich hatte auch so viel ausprobiert.
ich mache sie mal weg
Tinkerboard für FHEM, Modbus RTU via RS485 mit Arduino Slaves, ZWAVE mit Razberry Modul

mba

mit dem code:
Modbus1_Slave1.:ShutterButtonBlock:.* {
my $lastrun=ReadingsVal("$NAME_Shutter.","nLast","na");
if ($EVTPART1 eq "1")
{fhem ("setreading ($NAME)_Shutter. nState locked;")}
else
{fhem ("setreading ($NAME)_Shutter. nState unlocked;sleep 3;setreading ($NAME)_Shutter. nState $lastrun")}
}

folgender fehler:
n_ShutterButtonBlock return value: Global symbol "$NAME_Shutter" requires explicit package name at (eval 4210) line 2.
Tinkerboard für FHEM, Modbus RTU via RS485 mit Arduino Slaves, ZWAVE mit Razberry Modul

marvin78

#6
Bitte ein wenig mit Perl beschäftigen. Das liegt natürlich daran, dass Perl denkt, dass die Variable nicht $NAME sondern $NAME_shutter heißt. Diese gibt es nicht. Das löst du durch die Anführungszeichen und konkatenierung von Strings.


ReadingsVal($NAME."_Shutter","nLast","na");


Edit: In den anderen Fällen klappt das übrigens wegen devspec.

justme1968

wenn perl bei der interpolation mit einem variablennamen nicht klar kommt weil das ende nicht erkannt wird kann man die variable innerhalb eines strings so schreiben:"... ${NAME}_Shutter ..."

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mba

perl ist neuland für mich
ich danke euch beiden, so funktioniert es auch

grüße Marco
Tinkerboard für FHEM, Modbus RTU via RS485 mit Arduino Slaves, ZWAVE mit Razberry Modul