Hallo,
ich versuche gerade eine Nachricht (incl. Verbrauchskosten) zu schicken, wenn die Waschmaschine fertig ist.
Ich bekomme aber immer eine Fehlermeldung beim speichern:
syntax error at (eval 35783) line 1, near "WMA_Pwr_start:"
Global symbol "$ges" requires explicit package name at (eval 35783) line 9.
syntax error at (eval 35783) line 12, near "}}"
Wahrscheinlich was ganz simples, aber ich werde nicht schlau draus. Die Dummies etc. aber sollten passen. Hab mich bei verschiedenen Quellen des Codes bedient.
WK.WMA_Pwr:power:.* {my $ges = ((Value([n_WK.WMA_Pwr_start:start_pwr]) - Value([WK.WMA_Pwr:energy]))*Value([HA.StrompreisEUR]))
if (ReadingsNum("WK.WMA_Pwr", "power", 0) > 10 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "off") {
fhem("setreading n_WK.WMA_Pwr_start running on");
fhem("setreading n_WK.WMA_Pwr_start start_pwr [WK.WMA_Pwr:energy]");
}
if (ReadingsNum("WK.WMA_Pwr", "power", 0) < 3 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "on") {
fhem("setreading n_WK.WMA_Pwr_start running off");
fhem("setreading n_WK.WMA_Pwr_start Kosten $ges");
fhem("set TelegramBot send Waschmaschine fertig ([n_WK.WMA_Pwr_start:Kosten] €)");
}
}
Dein Aufruf der Value Funktion ist total falsch.
my $value = Value(DEVICENAME);
Hi,
also ich habe das auch noch nicht ganz geschnallt, an manchen Stellen in FHEM geht tatsächlich sowas -> [n_WK.WMA_Pwr_start:start_pwr] also [<device>:<reading>]
Aber Du bist auf Perl Ebene, da geht nur ReadingsVal("<device>","<reading>","<default>")
Value liefert lediglich den state zurück und kein reading.
Gruß Otto
Sogenannte SetMagic Aufrufe gehen nur in Verbindung mit dem set Befehl und natürlich nur auf fhem Ebene.
oh Mann, das lese ich jetzt zum ersten mal :-[ -> SetMagic, set-magic oder set magic (habe mehrere Schreibweisen gefunden)
[DEVICENAME:READING]
Diese Schreibweise geht also im:
set Befehl
DOIF
IF
Richtig?
Gruß Otto
Genau. Wurde so zu sagen bisschen von DOIF abgekuckt. Du kannst also Deinem set Befehl Werte mitgeben die aktuell beim ausführen des Befehles ausgelesen werden.
Zitat von: CoolTux am 11 Juni 2017, 20:17:01
Genau. Wurde so zu sagen bisschen von DOIF abgekuckt.
Schön das wir das mal geklärt haben, genau diesen Eindruck hatte ich irgendwie ;D als ich mal irgendwann vor "ewiger" Zeit festgestellt habe das das geht ;)
Zitat von: CoolTux am 11 Juni 2017, 19:43:51
Dein Aufruf der Value Funktion ist total falsch.
my $value = Value(DEVICENAME);
OK, das funktioniert für WK.WMA_Pwr und HA.StrompreisEUR.
Aber was mach ich mit [n_WK.WMA_Pwr_start:start_pwr], hier hab ich den Anfangswert von WK.WMA_Pwr in ein reading gepackt.
WK.WMA_Pwr:power:.* {my $ges = ((Value([n_WK.WMA_Pwr_start:start_pwr]) - Value(WK.WMA_Pwr)) * Value(HA.StrompreisEUR))
if (ReadingsNum("WK.WMA_Pwr", "power", 0) > 10 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "off") {
fhem("setreading n_WK.WMA_Pwr_start running on");
fhem("setreading n_WK.WMA_Pwr_start start_pwr [WK.WMA_Pwr:energy]");
}
if (ReadingsNum("WK.WMA_Pwr", "power", 0) < 3 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "on") {
fhem("setreading n_WK.WMA_Pwr_start running off");
fhem("setreading n_WK.WMA_Pwr_start Kosten $ges");
fhem("set TelegramBot send Waschmaschine fertig ([n_WK.WMA_Pwr_start:Kosten] €)");
}
}
Zitat von: Nielsiwilsi am 11 Juni 2017, 20:46:40
OK, das funktioniert für WK.WMA_Pwr und HA.StrompreisEUR.
Aber was mach ich mit [n_WK.WMA_Pwr_start:start_pwr], hier hab ich den Anfangswert von WK.WMA_Pwr in ein reading gepackt.
ReadingsVal statt Value verwenden. Steht ebenfals im Perl Teil der Commandref.
ReadingsVal ??? hatte ich das zu ausführlich geschrieben? :-[
Hi, wieder was gelernt. :-)
Die erste Zeile ist nun OK.
syntax error at (eval 38040) line 2, near ") {"
Global symbol "$ges" requires explicit package name at (eval 38040) line 9.
syntax error at (eval 38040) line 12, near "}}"
WK.WMA_Pwr:power:.* {my $ges = ((ReadingsVal(n_WK.WMA_Pwr_start,start_pwr,"0") - ReadingsVal(WK.WMA_Pwr,energy,"0")) * ReadingsVal(HA.StrompreisEUR,state,"0.2205"))
if (ReadingsNum("WK.WMA_Pwr", "power", 0) > 10 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "off") {
fhem("setreading n_WK.WMA_Pwr_start running on");
fhem("setreading n_WK.WMA_Pwr_start start_pwr [WK.WMA_Pwr:energy]");
}
if (ReadingsNum("WK.WMA_Pwr", "power", 0) < 3 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "on") {
fhem("setreading n_WK.WMA_Pwr_start running off");
fhem("setreading n_WK.WMA_Pwr_start Kosten $ges");
fhem("set TelegramBot send Waschmaschine fertig ([n_WK.WMA_Pwr_start:Kosten] €)");
}
}
ReadingsVal("","","") >:(
Die erste Zeile ist überhaupt nicht ok
Am Ende der ersten Zeile ein ; machen und alle Devicenamen in " " oder ' '
fhem("set TelegramBot send Waschmaschine fertig [n_WK.WMA_Pwr_start:Kosten] €");
Und die letzte Zeile Mal so probieren
Zitat von: CoolTux am 11 Juni 2017, 21:17:05
Und die letzte Zeile Mal so probieren
Scheint aber zu funktionieren. Ich werde es trotzdem mal testen, wenn meine Frau wieder eine Maschine wäscht.
ZitatWaschmaschine fertig (0.0882000000003209 €)
Hab noch was an der Logik geändert und die Berechnung in die zweit if gepackt.
WK.WMA_Pwr:power:.* {
if (ReadingsNum("WK.WMA_Pwr", "power", 0) > 10 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "off") {
fhem("setreading n_WK.WMA_Pwr_start running on");
fhem("setreading n_WK.WMA_Pwr_start start_pwr [WK.WMA_Pwr:energy]");
}
if (ReadingsNum("WK.WMA_Pwr", "power", 0) < 3 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "on") {
my $ges = ((ReadingsVal("WK.WMA_Pwr","energy",0) - ReadingsVal("n_WK.WMA_Pwr_start","start_pwr",0)) * ReadingsVal("HA.StrompreisEUR","state","0.2205"));
fhem("setreading n_WK.WMA_Pwr_start running off");
fhem("setreading n_WK.WMA_Pwr_start end_pwr [WK.WMA_Pwr:energy]");
fhem("setreading n_WK.WMA_Pwr_start Kosten $ges");
fhem("set TelegramBot send Waschmaschine fertig ([n_WK.WMA_Pwr_start:Kosten] €)");
}
}
Vielen Dank an Alle, die mir gestern beim Debuggen geholfen haben. Jetzt funktioniert es.
ZitatWaschmaschine fertig (0.35374815 €)
Und zwar mir folgenden finalem Code, Voraussetzung ist ein HM-ES-PMSw1-Pl zur Strommessung und ein TelegramBot zum schicken der Nachricht:
defmod HA.StrompreisEUR dummy
attr HA.StrompreisEUR room Haus
setstate HA.StrompreisEUR 0.2205
defmod WK.WMA_Pwr CUL_HM 12345678
attr WK.WMA_Pwr room Waschkeller
defmod n_WK.WMA_Pwr_start notify WK.WMA_Pwr:power:.* {\
if (ReadingsNum("WK.WMA_Pwr", "power", 0) > 10 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "off") {\
fhem("setreading n_WK.WMA_Pwr_start running on");;\
fhem("setreading n_WK.WMA_Pwr_start start_pwr [WK.WMA_Pwr:energy]");;\
}\
if (ReadingsNum("WK.WMA_Pwr", "power", 0) < 3 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "on") {\
my $ges = (((ReadingsVal("WK.WMA_Pwr","energy",0)/1000) - (ReadingsVal("n_WK.WMA_Pwr_start","start_pwr",0))/1000) * ReadingsVal("HA.StrompreisEUR","state","0.2205"));;\
fhem("setreading n_WK.WMA_Pwr_start running off");;\
fhem("setreading n_WK.WMA_Pwr_start end_pwr [WK.WMA_Pwr:energy]");;\
fhem("setreading n_WK.WMA_Pwr_start Kosten $ges");;\
fhem("set TelegramBot send Waschmaschine fertig ([n_WK.WMA_Pwr_start:Kosten] €)");;\
}\
}
attr n_WK.WMA_Pwr_start room Waschkeller
Schön, dass es jetzt funktioniert. Schreibst du dann bitte noch [Gelöst] vor das Subject des ersten Posts?
Ich habe persönlich Bauchweh mit dem Codebeispiel. Es ist nicht FHEMWEB Konform und wird, so übernommen, Fehler verursachen. Es wäre zu wünschen wenn man die Codebeispiele für das FHEMWEB entsprechend an passt, so das Anfänger damit sofort arbeiten können.
Grüße
Sorry Leon,
ich sehe jetzt da gar kein Bezug zu FHEMWEB? Bist Du im richtigen Thread? :-[
Gruß Otto
Zitat von: Nielsiwilsi am 13 Juni 2017, 00:28:54
defmod n_WK.WMA_Pwr_start notify WK.WMA_Pwr:power:.* {\
if (ReadingsNum("WK.WMA_Pwr", "power", 0) > 10 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "off") {\
fhem("setreading n_WK.WMA_Pwr_start running on");;\
fhem("setreading n_WK.WMA_Pwr_start start_pwr [WK.WMA_Pwr:energy]");;\
}\
if (ReadingsNum("WK.WMA_Pwr", "power", 0) < 3 && ReadingsVal("n_WK.WMA_Pwr_start", "running", "off") eq "on") {\
my $ges = (((ReadingsVal("WK.WMA_Pwr","energy",0)/1000) - (ReadingsVal("n_WK.WMA_Pwr_start","start_pwr",0))/1000) * ReadingsVal("HA.StrompreisEUR","state","0.2205"));;\
fhem("setreading n_WK.WMA_Pwr_start running off");;\
fhem("setreading n_WK.WMA_Pwr_start end_pwr [WK.WMA_Pwr:energy]");;\
fhem("setreading n_WK.WMA_Pwr_start Kosten $ges");;\
fhem("set TelegramBot send Waschmaschine fertig ([n_WK.WMA_Pwr_start:Kosten] €)");;\
}\
}
attr n_WK.WMA_Pwr_start room Waschkeller
Guten Morgen Otto,
Genau das meine ich. Kein Bezug zu FHEMWEB sondern Code für fhem.cfg. und das finde ich persönlich nicht gut. Wir wollen ja das Anfänger nicht in der cfg rum fummeln sondern alles über das Webinterface machen, dann müssen wir auch im Forum und im Wiki darauf achten das Codebeispiele für die DEF von FHEMWEB geeignet sind und nicht für fhem.cfg. Weißt was ich meine?
Grüße
Guten Morgen Leon,
ok jetzt verstehe ich :) aber Du hast nicht ganz recht: Schau mal ganz oben -> defmod
Ist für mich ein sicheres Zeichen das der Code über die Raw Def kopiert ist. So gesehen finde ich diesen Weg als einen sehr Guten!
Man sollte vielleicht immer mal wieder auf diese relativ neue Methode hinweisen 8)
Gruß Otto
Zitat von: Otto123 am 14 Juni 2017, 09:09:28
Guten Morgen Leon,
ok jetzt verstehe ich :) aber Du hast nicht ganz recht: Schau mal ganz oben -> defmod
Ist für mich ein sicheres Zeichen das der Code über die Raw Def kopiert ist. So gesehen finde ich diesen Weg als einen sehr Guten!
Man sollte vielleicht immer mal wieder auf diese relativ neue Methode hinweisen 8)
Gruß Otto
Musste ich doch glatt erstmal schauen. Habe die Raw Def nie benutzt. Hast Recht dort erscheint es auch so. Kann ich dann einfach den Code in die Raw Def kopieren und er speichert das?
Zitat von: CoolTux am 14 Juni 2017, 09:46:52
Musste ich doch glatt erstmal schauen. Habe die Raw Def nie benutzt. Hast Recht dort erscheint es auch so. Kann ich dann einfach den Code in die Raw Def kopieren und er speichert das?
Jaaa genau das geht (http://heinz-otto.blogspot.de/2017/02/fhem-die-kommandozeile-wird-gro.html)! 8) Offenbar schon seit irgendwann Ende letzten Jahres ...
Dann Danke ich Dir ganz doll Otto für den Hinweis. Werde das mal in meine Tip für den Umgang mit FHEM ohne fhem.cfg übernehmen.
Grüße
Leon