Berechnung im Ausführungsteil notify - HILFE - ich kapier es nicht

Begonnen von Stonemuc, 12 September 2022, 17:38:54

Vorheriges Thema - Nächstes Thema

Stonemuc

Hallo liebe Leute, ich bin vermutlich wieder mal zu doof, die einfachsten Dinge hinzubekommen.
Ich habe mir einen dummy angelegt. Dieser heißt Verbrauchsmeter.

nun möchte ich mit zwei notify berechnete Werte in den dummy schreiben - aber irgendwie bin ich zu doof für die Berechnung der Werte. Kann mich jemand auf den richtigen Weg bringen?

Hier mal meine zwei notify - im dummy Verbrauchsmeter steht dann anstatt einer Zahl, die ich eigentlich erwarte, z.B. {return (ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0)}

define VB1 notify Stromzaehler_Einspeisung:power:.* set Verbrauchsmeter {return (ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0)}
define VB2 notify Stromzaehler_Verbrauch:power:.* set Verbrauchsmeter {return ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0)}

Was mache ich falsch?
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Beta-User

Zitat von: Stonemuc am 12 September 2022, 17:38:54
Was mache ich falsch?
Syntax unzulässig mischen.... Du beginnst mit FHEM-sets und machst dann mit Perl weiter.

Vermutlich ginge es so:
define VB1 notify Stromzaehler_Einspeisung:power:.*|Stromzaehler_Verbrauch:power:.* set Verbrauchsmeter {(ReadingsNum('Stromzaehler_Einspeisung','power',0) - ReadingsNum('Stromzaehler_Verbrauch','power',0))}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

MadMax-FHEM

#2
Naja, so wie es aussieht kann man fhem-Befehle (das set) und Perl (die Berechnung) nicht mischen, so wie es aussieht macht eben fhem aus deinem Code:

set Verbrauchsmeter "Text" (mit Text ist deine Berechnung)...

Evtl. so:


define VB1 notify Stromzaehler_Einspeisung:power:.* {my $value = ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0);; fhem("set Verbrauchsmeter $value")}

EDIT: korrigiert, also fhem-Befehl ergänzt ;) Danke TomLee! (peinlich 8)  )

Wobei jetzt wo ich es copy/pasted habe: es fehlt mindestens eine runde Klammer oder es ist eine zu viel je nachdem ;)

Zitat
(ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0)
es gehen 3 auf aber nur 2 zu ;)

Dann natürlich wie immer: warum einen dummy?
Aber das muss jeder selber wissen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee


define VB1 notify Stromzaehler_Einspeisung:power:.* {my $value = ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0);; set Verbrauchsmeter $value}


Ausprobiert ?  :P

Eher so mit fhem-Befehl Funktion in Perl:

{my$v=ReadingsNum("Demo","Demo",0) - ReadingsNum("Demo","test",0);; fhem("set Demo state $v")}




MadMax-FHEM

Zitat von: TomLee am 12 September 2022, 18:08:17

define VB1 notify Stromzaehler_Einspeisung:power:.* {my $value = ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0);; set Verbrauchsmeter $value}


Ausprobiert ?  :P

Eher so mit fhem-Befehl Funktion in Perl:

{my$v=ReadingsNum("Demo","Demo",0) - ReadingsNum("Demo","test",0);; fhem("set Demo state $v")}

Äh, ja klar, mist, der fhem-Befehl ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Stonemuc

Vielen Dank...hab es mit der Lösung von TomLee hinbekommen.

Jetzt mach ich das mit FHEM ja schon knapp drei Jahre, aber dieses PERL/FHEM Kommandogemische bekomme ich einfach nicht hin - bzw. es so hin, dass ich gerade eben nicht mische.

define VB1 notify Stromzaehler_Einspeisung:power:.* {my$SE=ReadingsNum("Stromzaehler_Einspeisung","power",0) - ReadingsNum("Stromzaehler_Verbrauch","power",0);; fhem("set Verbrauchsmeter state $SE")}
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Stonemuc

Und noch eine Frage....wie baue ich so eine Berechnung jetzt in ein at ein?

define StromETag at *23:58 setreading Stromzaehler_Einspeisung Tageseinspeisung ([Stromzaehler_Einspeisung:energy0] - [Stromzaehler_Einspeisung:Vortag])


Ergibt leider bei mir im reading dann z.B. (567.5 - 563.0) - muss da irgendwo noch ein return rein?
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

MadMax-FHEM

Zitat von: Stonemuc am 12 September 2022, 20:04:28
Und noch eine Frage....wie baue ich so eine Berechnung jetzt in ein at ein?

define StromETag at *23:58 setreading Stromzaehler_Einspeisung Tageseinspeisung ([Stromzaehler_Einspeisung:energy0] - [Stromzaehler_Einspeisung:Vortag])


Ergibt leider bei mir im reading dann z.B. (567.5 - 563.0) - muss da irgendwo noch ein return rein?

Genauso, nur statt set eben setreading...
...allerdings nutze ich die setMagic (glaub ich heißt das) nicht.
Nimm halt auch ReadingsNum...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Stonemuc

Zitat von: MadMax-FHEM am 12 September 2022, 20:05:59
Genauso, nur statt set eben setreading...
...allerdings nutze ich die setMagic (glaub ich heißt das) nicht.
Nimm halt auch ReadingsNum...

Gruß, Joachim

Okay...jetzt hab ich es verstanden....der komplette Ausführungsteil kommt dann quasi "hinten dran"
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Stonemuc

Und welche Klammern setze ich dann bei "komplexeren" Berechnungen? Wenn ich z.B. den Eigenverbrauch berechnen will? Mit der Formel :Eigenverbrauchsquote (in %) =
(Erzeugung – Einspeisung) / Erzeugung * 100

define Eigenverbrauch at *23:59 {my$EV=(ReadingsNum("Wechselrichter","Daily.Energy.Last",0) - ReadingsNum("Stromzaehler_Einspeisung","Tageseinspeisung",0))/(ReadingsNum("Wechselrichter","Daily.Energy.Last",0)*100));; fhem("setreading Verbrauchsmeter Eiegenverbrauch $EV")}

Das klappt nämlich nicht
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

MadMax-FHEM

#11
Wie bei Matheaufgaben halt auch, inkl. Rechenregeln: Punkt vor Strich...

Jedes ReadingsNum ist quasi wie eine Zahl.

Die Klammern stimmen ja auch mit Zahlen nicht: Anzahl (erneut) falsch: eine mehr zu als auf...

EDIT: wenn du ein "leeres" at/notify/... anlegst, also "define nName notify RegeX {}" und dann per Klick auf DEF bearbeitest und CodeMirror aktiviert hast, dann siehst du das und es wird auch geprüft vor dem Abspeichern... Alternative: externer Editor mit "Klammernzähler" und dann wenn es passt nach fhem "übernehmen"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Stonemuc

Ja..die Klammer war es...aber eigentlich eine auf zu wenig :)

Zitat von: MadMax-FHEM am 12 September 2022, 21:31:18
Wie bei Matheaufgaben halt auch, inkl. Rechenregeln: Punkt vor Strich...

Jedes ReadingsNum ist quasi wie eine Zahl.

Die Klammern stimmen ja auch mit Zahlen nicht: Anzahl (erneut) falsch: eine mehr zu als auf...

EDIT: wenn du ein "leeres" at/notify/... anlegst, also "define nName notify RegeX {}" und dann per Klick auf DEF bearbeitest und CodeMirror aktiviert hast, dann siehst du das und es wird auch geprüft vor dem Abspeichern... Alternative: externer Editor mit "Klammernzähler" und dann wenn es passt nach fhem "übernehmen"...

Gruß, Joachim
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

MadMax-FHEM

Zitat von: Stonemuc am 12 September 2022, 22:36:04
Ja..die Klammer war es...aber eigentlich eine auf zu wenig :)

Das kommt drauf an...
...bzw. geht es generell mit weniger Klammern auch...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Stonemuc

Naja..hauptsache es ist fast so wie ich es möchte. Gut wäre jetzt noch, wenn ich die Nachkommastelle mit sprintf irgendwie formatieren könnte...am besten auf 2 Nachkommastellen..aber wo kommt das dann hin? Das ist auch wieder etwas, was ich nicht verstehe....

fhem("setreading Verbrauchsmeter Autarkie $Aut")
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe