Global symbol "$hm" requires explicit package name at

Begonnen von msfox, 17 Januar 2018, 10:45:26

Vorheriges Thema - Nächstes Thema

msfox

Aus https://wiki.fhem.de/wiki/Notify habe ich folgendes abgewandeltes Beispiel, mit dem Ziel die Lüftung (AP310) zwischen 9:00 und 10:00 auf Level3 laufen zu lassen, sonst je nach Luftfeuchte:

defmod LueftungSet notify AP310:FanSpeedLevel:.* ZWave_SENSOR_NOTIFICATION_2:humidity:.* {  \
my $hm = sprintf("%02d:%02d", $hour, $min);;\
{Log 1, "Luftfeucht: $EVTPART1 Zeit: $hour"};;;;\
if ( $hm gt "9:00" && $hm lt "10:00") {fhem("set AP310 FanSpeedLevel L3")}\
elsif ($EVTPART1 > 65) {fhem("set AP310 FanSpeedLevel L4")}   \
elsif ($EVTPART1 > 60) {fhem("set AP310 FanSpeedLevel L3")}   \
elsif ($EVTPART1 > 45) {fhem("set AP310 FanSpeedLevel L2")}  \
else {fhem("set AP310 FanSpeedLevel L1")} }
attr LueftungSet alias Lüftungssteuerung

Im Log erscheint:

2018.01.17 10:36:29 1: ERROR evaluating my $NAME='AP310';my $EVTPART0='FanSpeedLevel:';my $EVENT='FanSpeedLevel: L2';my $TYPE='Pluggit';my $EVTPART1='L2';my $SELF='LueftungSet';{Log 1, "Luftfeucht: $EVTPART1 Zeit: $hour"};
if ( $hm gt "9:00" && $hm lt "10:00") {fhem("set AP310 FanSpeedLevel L3")}
elsif ($EVTPART1 > 65) {fhem("set AP310 FanSpeedLevel L4")}
elsif ($EVTPART1 > 60) {fhem("set AP310 FanSpeedLevel L3")}
elsif ($EVTPART1 > 45) {fhem("set AP310 FanSpeedLevel L2")}
else {fhem("set AP310 FanSpeedLevel L1")} }: Global symbol "$hm" requires explicit package name at (eval 44485) line 2.
[b]Global symbol "$hm" requires explicit package name at (eval 44485) line 2.[/b]
Unmatched right curly bracket at (eval 44485) line 6, at end of line
syntax error at (eval 44485) line 6, near "} }"


Ursprünglich sah es mal so aus:

defmod LueftungSet notify ZWave_SENSOR_NOTIFICATION_2:humidity:.* {  \
my $hm = sprintf("%02d:%02d", $hour, $min);;\
if ( $hm gt "9:00" && $hm lt "10:00") {fhem("set AP310 FanSpeedLevel L3")}\
elsif ($EVTPART1 > 65) {fhem("set AP310 FanSpeedLevel L4")}   \
elsif ($EVTPART1 > 60) {fhem("set AP310 FanSpeedLevel L3")}   \
elsif ($EVTPART1 > 45) {fhem("set AP310 FanSpeedLevel L2")}  \
else {fhem("set AP310 FanSpeedLevel L1")} }
attr LueftungSet alias Lüftungssteuerung

Das ging gestern mit den Werten zwischen 18:00 und 18:30 mal. heute morgen ist nix passiert.
Das Problem ist auch das das ZWave-Modul sehr selten die Luftfeuchte sendet. Daher braucht ich ein Event, welches häufiger auslöst.

Brause

kann das sein das in deiner neu eingefügten log-Zeile hinten 2 Semikolon zu viel sind.
die Zeile ist die einziegste Änderung die ich sehe,

msfox

#2
Die zwei musste ich im FHEMWEB setzen und beim Speichern wurden dann vier draus.
Aktuell sieht es so aus:

defmod LueftungSet notify (AP310:FanSpeedLevel:.*|ZWave_SENSOR_NOTIFICATION_2:humidity:.*) {\
my $hm = sprintf("%02d:%02d", $hour, $min);;;;\
my $humidity = ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","humidity",1);;;;\
my @humidity_array = split(/ /,$humidity);;;;\
my $hum = $humidity_array[0];;;;\
{Log 3, "Luftfeucht: $hum Zeit: $hm "}\
if ( $hm gt "9:00" && $hm lt "10:00") {fhem("set AP310 FanSpeedLevel L3")}\
elsif ($hum > 65) {fhem("set AP310 FanSpeedLevel L4")}\
elsif ($hum > 60) {fhem("set AP310 FanSpeedLevel L3")}\
elsif ($hum > 40) {fhem("set AP310 FanSpeedLevel L2")}\
else {fhem("set AP310 FanSpeedLevel L1")} }
attr LueftungSet alias Lüftungssteuerung


Das geht soweit, nur noch zwei Frage:
- Wodurch entsteht die Fehlermeldung wie im Betreff?
- Wie kann das noch kürzer / schöner machen
insb. das hier:

my $hm = sprintf("%02d:%02d", $hour, $min);;;;\
my $humidity = ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","humidity",1);;;;\
my @humidity_array = split(/ /,$humidity);;;;\
my $hum = $humidity_array[0];;;;\

auf $humidity kommt z.B. 33 % zurück. Die % müssen aber weg.

Noch eine Korrektur am Rande:
Es muss...

$hm gt "09:00" && $hm lt "10:00")

heißen. Mit 9:00 klappt es nicht. Darum ging es abends, aber morgens nicht.