[Gelöst] Syntax hilfe bei notify

Begonnen von Nielsiwilsi, 11 Juni 2017, 19:37:45

Vorheriges Thema - Nächstes Thema

Nielsiwilsi

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] €)");
     }
}

CoolTux

Dein Aufruf der Value Funktion ist total falsch.
my $value = Value(DEVICENAME);
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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

CoolTux

Sogenannte SetMagic Aufrufe gehen nur in Verbindung mit dem set Befehl und natürlich nur auf fhem Ebene.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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  ;)
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

Nielsiwilsi

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] €)");
     }
}

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Otto123

ReadingsVal ??? hatte ich das zu ausführlich geschrieben?  :-[
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

Nielsiwilsi

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] €)");
     }
}

Otto123

ReadingsVal("","","")  >:(

Die erste Zeile ist überhaupt nicht ok
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

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Nielsiwilsi

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] €)");
     }
}

Nielsiwilsi

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