FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mba am 15 April 2016, 20:16:17

Titel: Syntax Problem im notify
Beitrag von: mba am 15 April 2016, 20:16:17
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
Titel: Antw:Syntax Problem im notify
Beitrag von: marvin78 am 15 April 2016, 20:41:16
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")}
}
Titel: Antw:Syntax Problem im notify
Beitrag von: mba am 15 April 2016, 20:58:54
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")}
}
Titel: Antw:Syntax Problem im notify
Beitrag von: marvin78 am 15 April 2016, 21:00:26
Wofür ist denn die Klammer um $NAME? Ich denke, die gehört dort nicht hin. In keinem Fall.
Titel: Antw:Syntax Problem im notify
Beitrag von: mba am 15 April 2016, 21:04:03
der name wurde nicht aufgelöst ohne, aber ich hatte auch so viel ausprobiert.
ich mache sie mal weg
Titel: Antw:Syntax Problem im notify
Beitrag von: mba am 15 April 2016, 21:05:29
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.
Titel: Antw:Syntax Problem im notify
Beitrag von: marvin78 am 15 April 2016, 21:07:56
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.
Titel: Antw:Syntax Problem im notify
Beitrag von: justme1968 am 15 April 2016, 21:14:12
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
Titel: Antw:Syntax Problem im notify
Beitrag von: mba am 15 April 2016, 21:22:50
perl ist neuland für mich
ich danke euch beiden, so funktioniert es auch

grüße Marco