FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Nielsiwilsi am 11 Juni 2017, 19:37:45

Titel: [Gelöst] Syntax hilfe bei notify
Beitrag von: Nielsiwilsi am 11 Juni 2017, 19:37:45
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] €)");
     }
}
Titel: Antw:Syntax hilfe bei notify
Beitrag von: CoolTux am 11 Juni 2017, 19:43:51
Dein Aufruf der Value Funktion ist total falsch.
my $value = Value(DEVICENAME);
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Otto123 am 11 Juni 2017, 19:57:22
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
Titel: Antw:Syntax hilfe bei notify
Beitrag von: CoolTux am 11 Juni 2017, 20:03:27
Sogenannte SetMagic Aufrufe gehen nur in Verbindung mit dem set Befehl und natürlich nur auf fhem Ebene.
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Otto123 am 11 Juni 2017, 20:11:43
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
Titel: Antw:Syntax hilfe bei notify
Beitrag von: CoolTux am 11 Juni 2017, 20:17:01
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.
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Otto123 am 11 Juni 2017, 20:22:17
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  ;)
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Nielsiwilsi am 11 Juni 2017, 20:46:40
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] €)");
     }
}
Titel: Antw:Syntax hilfe bei notify
Beitrag von: igami am 11 Juni 2017, 20:50:48
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.
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Otto123 am 11 Juni 2017, 20:51:32
ReadingsVal ??? hatte ich das zu ausführlich geschrieben?  :-[
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Nielsiwilsi am 11 Juni 2017, 21:07:05
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] €)");
     }
}
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Otto123 am 11 Juni 2017, 21:14:17
ReadingsVal("","","")  >:(

Die erste Zeile ist überhaupt nicht ok
Titel: Antw:Syntax hilfe bei notify
Beitrag von: CoolTux am 11 Juni 2017, 21:17:05
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
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Nielsiwilsi am 11 Juni 2017, 21:51:31
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] €)");
     }
}
Titel: Antw:Syntax hilfe bei notify
Beitrag von: Nielsiwilsi am 13 Juni 2017, 00:28:54
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
Titel: Antw:Syntax hilfe bei notify
Beitrag von: KernSani am 13 Juni 2017, 22:08:58
Schön, dass es jetzt funktioniert. Schreibst du dann bitte noch [Gelöst] vor das Subject des ersten Posts?
Titel: Antw:[Gelöst] Syntax hilfe bei notify
Beitrag von: CoolTux am 13 Juni 2017, 22:24:59
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
Titel: Antw:[Gelöst] Syntax hilfe bei notify
Beitrag von: Otto123 am 13 Juni 2017, 22:38:49
Sorry Leon,

ich sehe jetzt da gar kein Bezug zu FHEMWEB? Bist Du im richtigen Thread?  :-[

Gruß Otto
Titel: Antw:Syntax hilfe bei notify
Beitrag von: CoolTux am 14 Juni 2017, 05:40:20
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
Titel: Antw:[Gelöst] Syntax hilfe bei notify
Beitrag 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
Titel: Antw:[Gelöst] Syntax hilfe bei notify
Beitrag von: CoolTux am 14 Juni 2017, 09:46:52
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?
Titel: Antw:[Gelöst] Syntax hilfe bei notify
Beitrag von: Otto123 am 14 Juni 2017, 09:49:05
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 ...
Titel: Antw:[Gelöst] Syntax hilfe bei notify
Beitrag von: CoolTux am 14 Juni 2017, 10:15:48
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