Steckdose automatisch abschalten

Begonnen von chriz77, 08 Oktober 2017, 13:09:06

Vorheriges Thema - Nächstes Thema

chriz77

Hallo FHEMler,

ich möchte meinen Trockner nach dem Trocknungsvorgang ausschalten. Dafür habe ich folgendes Notify geschrieben:


Plug1:power_now:.* {
     if (ReadingsNum("Plug1", "power_now", 0) > 10 && ReadingsVal("Plug1", "running", "off") eq "off") {
          fhem("setreading Plug1 running on");
          fhem(Log 1, "Ein");
     }

     if (ReadingsNum("Plug1", "power_now", 0) < 1 && ReadingsVal("Plug1", "running", "off") eq "on") {
          fhem("setreading Plug1 running off");
  fhem(Log 1, "Aus");
          fhem("set Plug1 off");
     }
}


Plug1 ist ein Ediplug SP2101W

Das Notify läuft bis auf den Ausschaltbefehl ohne Probleme. Über die Comandozeile läuft der off-Befehl.

Hat jemand eine Idee an was es liegen könnte?

Otto123

Hi,

Das zweite if wird nicht ausgeführt.
https://perldoc.perl.org/perlsyn.html#Compound-Statements

Tipp: Wenn Du die Zeile mit dem Log nicht mehr brauchst ist das FHEM IF deutlich kürzer und spart Dir den Wechsel nach Perl.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

chriz77

Meinst Du so:


Plug1:power_now:.*
DOIF(ReadingsNum("Plug1", "power_now", 0) > 10 && ReadingsVal("Plug1", "running", "off") eq "off")
(setreading Plug1 running on)
DOELSEIF(ReadingsNum("Plug1", "power_now", 0) < 1 && ReadingsVal("Plug1", "running", "off") eq "on")
(setreading Plug1 running off, set Plug1 off)


Damit gehts auf jeden Fall gar nicht. Was stimmt nicht?

Otto123

#3
Jetzt wirfst Du alles durcheinander.  :'(

würde ich den Perl Ausdruck so versuchen (nicht getestet):
{
     if (ReadingsNum("Plug1", "power_now", 0) > 10 && ReadingsVal("Plug1", "running", "off") eq "off") {
          fhem("setreading Plug1 running on");
          fhem(Log 1, "Ein");
     }
elsif (ReadingsNum("Plug1", "power_now", 0) < 1 && ReadingsVal("Plug1", "running", "off") eq "on") {
fhem("setreading Plug1 running off");
fhem(Log 1, "Aus");
fhem("set Plug1 off");
     }
}


Eventuell geht Dein Ausdruck auch wenn Du beide Perl Befehle (if und if) mit Semikolon trennst.

DOIF ist etwas völlig anderes. Ich  meinte als zweite Option IF -> https://fhem.de/commandref_DE.html#IF
auch wieder ungetestet etwa so IF([Plug1:power_now] > 10 && [Plug1:running] eq "off")(setreading Plug1 running on)
ELSE (IF([Plug1:power_now] < 1 && [Plug1:running] eq "on") (setreading Plug1 running off;set Plug1 off))


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

chriz77

Hallo Otto,

vielen Dank für Deine Hilfe! Beim Perl Ausdruck meinst Du "elsif" oder? elseif nimmt der Editor gar nicht an.
Damit erhalte ich genau das gleiche Ergebnis wie in meinem ersten Versuch mit 2x IF. Das Log wir in beiden Fällen geschrieben. Das Off geht nicht.

Zitat
IF([Plug1:power_now] > 10 && [Plug1:running] eq "off")(setreading Plug1 running on)
ELSE (IF([Plug1:power_now] < 1 && [Plug1:running] eq "on") (setreading Plug1 running off;set Plug1 off))

Das führt zum sofortigen Absturz meiner Fhem Installation. Muss ich erst in der fhem.cfg löschen sonst fährt Fhem nicht mehr hoch.

chriz77

Es muss an der Steckdose liegen, wenn ich statt dem OFF Befehlt einen IT-Aktor schalte geht es. Also kanns eigentlich nicht am Script liegen, oder?

Otto123

#6
Ja sorry, habe es geändert.
Du meinst der Logeintrag fhem(Log 1, "Aus"); wird auch geschrieben?

Absturz?
Wie gibst Du den Code ein? Über den DEF Editor oder die fhem.cfg direkt?

Edit: Ok wenn es so ist dann liegt es offenbar nur an Deinem Plug1?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

chriz77

ZitatDu meinst der Logeintrag fhem(Log 1, "Aus"); wird auch geschrieben?
Genau.

ZitatWie gibst Du den Code ein? Über den DEF Editor oder die fhem.cfg direkt?
Über DEF

ZitatOk wenn es so ist dann liegt es offenbar nur an Deinem Plug1?
Aber "set Plug1 off" geht über die Eingabezeile einwandfrei. Wo liegt dann da der Unterschied? Checks nicht...  :(

Otto123

#8
Sorry sehe es erst jetz -> fhem(Log 1, "Aus"); ist doch falsch?
{Log 1, "Aus"}

Also wird der set Befehl durch den falschen Eintrag eventuell nicht ausgeführt. Aber Da muss es doch einen Fehler im Log geben?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

#9
Habe gerade probiert: das mit dem Log geht so und so.
Egal, aber bei mir geht der Code aus Antwort #3 einwandfrei.
Gib mal bitte ein list Deiner aktuellen version.

Ich vermute Du hast eine Leerzeile im Code. Die darf nicht sein. Aber dann funktioniert das notify eigentlich gar nicht.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz