Hallo,
ich habe 2 Wechselrichter und möchte nun die Daten wie Gesamtertrag und aktuelle Stromproduktion addieren.
Zur Erfassung der Daten habe ich an einem Wechselrichter einen Fritz dect Zwischenstecker und an dem anderen (Hoymiles) eine openDTU die per mqtt die Daten an fhem schickt.
Meine Idee wäre nun ein dummy zu erstellen und alle 10min die readings der beiden devices abzurufen und zu addieren.
Leider stehe ich da völlig auf dem ,,Schlauch" wie ich das umsetzen kann.
Vielleicht hat Jemand Lust zu helfen.
Gruß Holger
Warum "aller 10 Minuten"? In welchen Intervallen liefen die beiden Aktoren?
Zitat von: The-Holgi am 18 März 2023, 11:01:14
Meine Idee wäre nun ein dummy zu erstellen und alle 10min die readings der beiden devices abzurufen und zu addieren.
Leider stehe ich da völlig auf dem ,,Schlauch" wie
Ein at definieren, das alle 10 Minuten läuft, mit ReadingsNum() die beiden Werte holt und addiert und das Ergebnis dann mit setreading irgendwohin schreibt. Ob man dafür tatsächlich ein dummy braucht, wage ich zu bezweifeln.
Ebenso glaube ich, dass sich die Aufgabe auch anders (einfacher) lösen lässt. Aber dazu hast Du zu wenige Informationen geliefert.
Hallo,
alle 10min weil mir das reichen würde.
Ein dummy device weil mir sonst nichts eingefallen ist wo man die Werte schreiben/abrufen könnte.
Eine einfachere Lœsung wäre natürlich wünschenswert.
Hier mal ein list von den devices, wobei der Wechselrichter bei der openDTU noch nicht in Betrieb ist.
Internals:
DEF Fritzbox:11657_0358133 microphone,powerMeter,tempSensor,switch
FUUID 5f2d7d47-f33f-6571-e72a-cb1c51e7024f3847
Fritzbox_MSGCNT 6645
Fritzbox_TIME 2023-03-19 13:18:46
IODev Fritzbox
LASTInputDev Fritzbox
MSGCNT 6645
NAME FBDECT_Fritzbox_11657_0358133
NR 361
STATE Temperatur: 14.5 C (measured) <br> KWH: 163.081 <br> Power: 498.76 W
TYPE FBDECT
eventCount 6644
id 11657_0358133
props microphone,switch,powerMeter,tempSensor,switch
Helper:
DBLOG:
energy:
myDbLog:
TIME 1679228326.95317
VALUE 163081
power:
myDbLog:
TIME 1679228326.95317
VALUE 498.76
READINGS:
2023-03-19 13:18:46 AIN 11657 0358133
2023-03-19 13:18:46 FBNAME Balkonkraftwerk
2023-03-19 13:18:46 FBPROP microphone,switch,powerMeter,tempSensor,switch
2023-03-19 13:18:46 FBTYPE FRITZ!DECT 210
2023-02-24 19:21:13 Gesamt 140.845
2023-03-19 13:18:46 ID 17
2023-02-24 11:21:05 IODev Fritzbox
2023-03-19 13:18:46 KWh 163.081
2023-03-19 13:18:46 devicelock yes
2023-03-19 13:18:46 energy 163081 Wh
2023-03-19 13:18:46 fwversion 04.25
2023-03-19 13:18:46 locked no
2023-03-19 13:18:46 mode manuell
2023-03-19 13:18:46 power 498.76 W
2023-03-19 13:18:46 present yes
2023-03-19 13:18:46 state on
2023-03-19 13:18:46 tempadjust 0.0 C
2023-03-19 13:18:46 temperature 14.5 C (measured)
2023-03-19 13:18:46 voltage 238.990 V
hmccu:
Attributes:
IODev Fritzbox
alias Fritzdect210
event-min-interval power:120
event-on-update-reading energy,power,voltage
genericDeviceType switch
room FBDECT,Laube,Steckdosen
stateFormat Temperatur: temperature <br> KWH: KWh <br> Power: power
userReadings KWh {ReadingsNum("FBDECT_Fritzbox_11657_0358133","energy",0)/1000}
Internals:
CID OpenDTU_10258016
DEF OpenDTU_10258016
FUUID 63ef976a-f33f-6571-62b7-451a040b984aad95
IODev myBroker2
LASTInputDev myBroker2
MSGCNT 123019
NAME MQTT2_OpenDTU_10258016
NR 505
STATE ???
TYPE MQTT2_DEVICE
eventCount 25411
myBroker2_CONN myBroker2_192.168.178.150_50806
myBroker2_MSGCNT 123019
myBroker2_TIME 2023-03-05 13:38:58
READINGS:
2023-02-24 11:21:05 IODev myBroker2
2023-02-17 16:06:43 attrTemplateVersion 20221215
2023-03-05 13:38:31 hostname OpenDTU
2023-03-05 13:38:31 ip 192.168.178.150
2023-03-05 13:38:31 last_update 0
2023-03-05 13:38:31 producing 0
2023-03-05 13:38:31 reachable 0
2023-03-05 13:38:31 rssi -61
2023-03-05 13:38:31 solar_114183722234_name HoymilesHM600
2023-03-05 13:38:58 status offline
2023-03-05 13:38:30 uptime 8435
Attributes:
event-on-change-reading .*
icon solar
model hoymiles_opendtu_microinverter
readingList 114183722234/0/powerdc:.* powerdc
114183722234/0/yieldday:.* yieldday
114183722234/0/yieldtotal:.* yieldtotal
114183722234/0/voltage:.* voltage
114183722234/0/current:.* current
114183722234/0/power:.* power
114183722234/0/frequency:.* frequency
114183722234/0/temperature:.* temperature
114183722234/0/powerfactor:.* powerfactor
114183722234/0/efficiency:.* efficiency
114183722234/0/reactivepower:.* reactivepower
114183722234/1/voltage:.* voltage1
114183722234/1/current:.* current1
114183722234/1/power:.* power1
114183722234/1/irradiation:.* irradiation1
114183722234/1/yieldday:.* yieldday1
114183722234/1/yieldtotal:.* yieldtotal1
114183722234/2/voltage:.* voltage2
114183722234/2/current:.* current2
114183722234/2/power:.* power2
114183722234/2/irradiation:.* irradiation2
114183722234/2/yieldday:.* yieldday2
114183722234/2/yieldtotal:.* yieldtotal2
114183722234/name:.* name
114183722234/status/reachable:.* reachable
114183722234/status/producing:.* producing
114183722234/status/last_update:.* last_update
OpenDTU_10258016:solar/dtu/uptime:.* uptime
OpenDTU_10258016:solar/dtu/ip:.* ip
OpenDTU_10258016:solar/dtu/hostname:.* hostname
OpenDTU_10258016:solar/dtu/rssi:.* rssi
OpenDTU_10258016:solar/114183722234/name:.* solar_114183722234_name
OpenDTU_10258016:solar/114183722234/status/reachable:.* reachable
OpenDTU_10258016:solar/114183722234/status/producing:.* producing
OpenDTU_10258016:solar/114183722234/status/last_update:.* last_update
OpenDTU_10258016:solar/dtu/status:.* status
room MQTT2_DEVICE
setList on:noArg 114183722234/cmd/power 1
off:noArg 114183722234/cmd/power 0
reboot:noArg 114183722234/cmd/restart 1
limit_non_persistent_abs 114183722234/cmd/limit_persistent_absolute $EVTPART1
limit_non_persistent_pct:slider,2,1,100 114183722234/cmd/limit_persistent_relative $EVTPART1
limit_persistent_abs 114183722234/cmd/limit_nonpersistent_absolute $EVTPART1
limit_persistent_pct:slider,2,1,100 114183722234/cmd/limit_nonpersistent_relative $EVTPART1
setStateList on off
Gruß Holger
Ich frage, weil die beiden Devices ja Events beim Update erzeugen und Fhem Event basiert arbeitet. Insofern kann man einfach ein DOIF nehmen, was auf beide Events reagiert und das Ergebnis als sein Status nimmt.
Ob Fhem oder Perl Mode ist dabei egal, Perl würde hier weniger Attribute benötigen.
Kannst du das vielleicht näher beschreiben ? Hab jetzt so gar keine Vorstellung wie so ein DOIF aussehen könnte.
DOIF {set_State([dev1:readingA] + [dev2:readingB])}
Hm, irgendwie werde ich immer noch nicht so richtig schlau daraus. Der Befehl sollte ja den state vom DOIF auf die addition der beiden Werte setzen. Nur wie oder wodurch wird das DOIF getriggert?
Durch Events deiner Readings.
Ok, das sieht ja schonmal gut aus. Besten Dank für eure Hilfe. Allerdings mit der Meldung: condition c01: Argument "0.89 W" isn't numeric in addition
Vermutlich weil beim reading das "W" mitgeliefert wird.
Zitat von: The-Holgi am 19 März 2023, 13:27:25alle 10min weil mir das reichen würde.
Ein dummy device weil mir sonst nichts eingefallen ist wo man die Werte schreiben/abrufen könnte.
Eine einfachere Lœsung wäre natürlich wünschenswert.
Ich würde einfach ein notify definieren, das auf die beiden gewünschten readings triggert und das immer dann, wenn sich eines der readings ändert, die Summe neu berechnet und in ein Summen-reading schreibt. Dieses reading kann sogar ganz einfach im notify selbst abgelegt werden, dann braucht man keinen dummy. Einem reading-Wert sieht man in einem ReadingsNum() später nicht an, aus welchem devicetype er stammt.
Zitat von: The-Holgi
Vermutlich weil beim reading das "W" mitgeliefert wird.
/quote]Zitat von: The-Holgi am 21 März 2023, 18:22:50Vermutlich weil beim reading das "W" mitgeliefert wird.
Genau. Wie solche Werte formatiert werden können, steht ja in der CommandRef.
[/quote]
Genau. Wie solche Werte formatiert werden können, steht ja in der CommandRef.
[/quote]
Ok mit $number sollte ja im DOIF nach Zahlen gefiltert werden. Nur wie sieht die syntax dazu aus?
{set_State([FBDECT_Fritzbox_11657_0358133:power $number] + [MQTT2_solar_114183722234:power])}
Klappt leider nicht, finde auch keine näheren Infos dazu.
Du hast etwas bei Aggregationsfunktionen gefunden, das benutzt du aber nicht.
Was du willst, findest du hier: https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen
Hm, OK das hatte ich garnicht gefunden.
Habe es nun so probiert:
{set_State([FBDECT_Fritzbox_11657_0358133:power:d] + [MQTT2_solar_114183722234:power])}
Bringt jedoch die gleiche Warnung. Habe ich da etwas falsch verstanden?
Die Syntax ist korrekt. Aber war da nicht noch ein Reading?
Ja, aber das schickt im Moment keine Werte. Also die DTU ist offline
Zitat von: The-Holgi am 22 März 2023, 17:14:59Ja, aber das schickt im Moment keine Werte. Also die DTU ist offline
Es wird aber bei der Addition benutzt - das reicht schon.
Ach so, OK hab es jetzt mal so geändert:
{set_State([FBDECT_Fritzbox_11657_0358133:power:d] + [MQTT2_solar_114183722234:power:d])}
Die Meldung kommt weiterhin. Kann es vielleicht daran liegen, dass bis jetzt noch garkeine "Werte" vom 2. reading gekommen sind?
Zitat von: The-Holgi am 22 März 2023, 18:27:20Ach so, OK hab es jetzt mal so geändert:
{set_State([FBDECT_Fritzbox_11657_0358133:power:d] + [MQTT2_solar_114183722234:power:d])}
Die Meldung kommt weiterhin. Kann es vielleicht daran liegen, dass bis jetzt noch garkeine "Werte" vom 2. reading gekommen sind?
Wenn die Meldung
condition c01: Argument "0.89 W" isn't numeric in addition
weiterhin kommt, dann kann sie nicht von dieser Definition sein.
Die letzten Fehlermeldungen sahen so aus und kamen immer wenn daten von der Fritzdect kamen:
2023.03.22 18:23:58.864 1: PERL WARNING: Argument "" isn't numeric in addition (+) at (eval 3572457) line 1.
2023.03.22 18:23:58.864 3: eval: stromdf: warning in condition c01
Zitat von: The-Holgi am 22 März 2023, 18:55:58Die letzten Fehlermeldungen sahen so aus und kamen immer wenn daten von der Fritzdect kamen:
2023.03.22 18:23:58.864 1: PERL WARNING: Argument "" isn't numeric in addition (+) at (eval 3572457) line 1.
2023.03.22 18:23:58.864 3: eval: stromdf: warning in condition c01
Das ist doch nicht die Meldung, die du vorher gepostet hast. Das ist eine andere Meldung! Das bedeutet, dass ein Reading leer ist, also vermutlich nicht vorhanden ist.
Ja, die Meldung vorher war bevor ich das DOIF geändert habe. Hatte dann garnicht genau gesehen/gelesen was sich an der Meldung geändert hat.
Dann kœnnte es ja vielleicht tatsächlich daran liegen, das vom 2. devive bisher keine readings gekommen sind.
Zitat von: The-Holgi am 22 März 2023, 21:29:08Ja, die Meldung vorher war bevor ich das DOIF geändert habe. Hatte dann garnicht genau gesehen/gelesen was sich an der Meldung geändert hat.
Dann kœnnte es ja vielleicht tatsächlich daran liegen, das vom 2. devive bisher keine readings gekommen sind.
So ist das. Du kannst für den Fall auch einen Default-Wert angeben.
[MQTT2_solar_114183722234:power:d,0]
Das werde ich morgen gleich umsetzen.
Besten Dank für die geduldige Hilfe.