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.
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,
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.