FHEM Forum

FHEM => Automatisierung => Thema gestartet von: chriz77 am 08 Oktober 2017, 13:09:06

Titel: Steckdose automatisch abschalten
Beitrag von: chriz77 am 08 Oktober 2017, 13:09:06
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?
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: Otto123 am 08 Oktober 2017, 13:27:06
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
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: chriz77 am 08 Oktober 2017, 20:01:34
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?
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: Otto123 am 08 Oktober 2017, 20:07:18
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
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: chriz77 am 08 Oktober 2017, 20:57:37
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.
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: chriz77 am 08 Oktober 2017, 21:01:55
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?
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: Otto123 am 08 Oktober 2017, 21:04:35
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
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: chriz77 am 08 Oktober 2017, 21:15:08
Zitat
Du meinst der Logeintrag fhem(Log 1, "Aus"); wird auch geschrieben?
Genau.

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

Zitat
Ok 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...  :(
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: Otto123 am 08 Oktober 2017, 21:18:47
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
Titel: Antw:Steckdose automatisch abschalten
Beitrag von: Otto123 am 08 Oktober 2017, 21:39:29
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.