[gelöst] Reading wird nicht (richtig) aktualisiert

Begonnen von tndx, 04 November 2023, 15:51:41

Vorheriges Thema - Nächstes Thema

Damian

#15
Zitat von: tndx am 05 November 2023, 20:19:59Ich denke aber schon, denn das entsprechende Reading im Device (HWR_Stromzaehler_IEC_02.energyIEC_kWh) wird aktualisiert, die Übertragung in Doif wird ja durch Doif gesteuert, auch das Anlegen des Readings. Irgendwo hier zwischen scheint es verloren zu gehen. Irgendeine Möglichkeit, das zu Debuggen?

Du musst nur den Event-Log beobachten, dass die Readings existieren und per Timer Sachen berechnet werden, ist unabhängig davon ob es Events gibt oder nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tndx

#16
Gerade im Event-Log gehabt:

2023-11-05 23:58:27 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.hour: 0.509
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_01 energyIEC: 2681055
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_01 powerIEC: 66000
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_01 energyIEC_kWh: 268.11
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_02 energyIEC: 14964234

Hieran sieht man, dass das Reading
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_02 energyIEC: 14964234im Device aktualisiert wurde, damit auch das User-Reading
HWR_Stromzaehler_IEC_02 energyIEC_kWhAber im Doif wird nur
HWR_Stromzaehler_IEC_01.energyIEC_kWh.houraktualisiert, warum?

P.S.: paar Minuten später kam das, offenbar timergesteuert:
2023-11-06 00:00:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.last_hour: 0.509
2023-11-06 00:00:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.hour: 0
2023-11-06 00:00:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.day: 20.22
2023-11-06 00:00:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-06 00:00:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.hour: 0
2023-11-06 00:00:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.day: 3.4

Damian

#17
Zitat von: tndx am 06 November 2023, 00:06:59Gerade im Event-Log gehabt:

2023-11-05 23:58:27 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.hour: 0.509
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_01 energyIEC: 2681055
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_01 powerIEC: 66000
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_01 energyIEC_kWh: 268.11
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_02 energyIEC: 14964234

Hieran sieht man, dass das Reading
2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_02 energyIEC: 14964234im Device aktualisiert wurde, damit auch das User-Reading
HWR_Stromzaehler_IEC_02 energyIEC_kWhAber im Doif wird nur
HWR_Stromzaehler_IEC_01.energyIEC_kWh.houraktualisiert, warum?
Mit

2023-11-05 23:58:27 CUL_HM HWR_Stromzaehler_IEC_02 energyIEC: 14964234
wurde nicht HWR_Stromzaehler_IEC_02 energyIEC_kWh aktualisiert, sondern HWR_Stromzaehler_IEC_02 energyIEC  vom User-Reading sehe ich kein Event ;)


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tndx

Dann kommen wir wohl dem Problem schon näher, aber noch kann ich nicht erkennen, warum das so ist. Beides sind User-Readings, das eine generiert ein Event, das andere nicht  ???
Zugegeben, bei dem ersten User-Reading wird noch ein anderes Reading mit berechnet:
<HWR_Stromzaehler_IEC_01, also Bezug>
powerIEC_kWh {if(ReadingsVal($name,"powerIEC","???") < 1000000) {sprintf("%.2f",ReadingsVal($name,"powerIEC","???")/100000)} else{ sprintf("%.2f",(ReadingsVal($name,"powerIEC","???")-4294967295)/10000)}}, energyIEC_kWh {sprintf("%.2f",ReadingsVal($name,"energyIEC","???")/10000)}

Und vom "HWR_Stromzaehler_IEC_01 powerIEC_kWh" sehe ich auch kein Event ???

Bei dem zweiten wird nur ein Reading berechnet:
<HWR_Stromzaehler_IEC_02, also Einspeisung>
energyIEC_kWh {sprintf("%.2f",ReadingsVal($name,"energyIEC","???")/10000)}

Ich verstehe nur noch Bahnhof ???
Nun sehe ich ja ein, dass das offenbar nichts mehr mit Doif zu tun hat, aber vielleicht kannst du hier trotzdem noch weiterhelfen. Zur Erklärung: ich nutze die Userreadings, um die Werte in Kilowattstunden umzurechnen. Sicher kann ich das auch irgendwo im Doif machen, aber so sollte das ja auch funktionieren.

Damian

Um etwas überprüfen zu können, musst du schon die ganze Definition inklusive der User-Reading posten, am besten als Ausgabe von list. User-Readings gehören zu FHEM, also am besten das Problem im Automatisierungsboard posten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

frank

die liste der userreadings soll komma getrennt sein.
deine liste wird durch komma plus leerzeichen getrennt.

in fhem.log gibt es keine meldungen?

powerIEC_kWh {if(ReadingsVal($name,"powerIEC","???") < 1000000) {sprintf("%.2f",ReadingsVal($name,"powerIEC","???")/100000)} else{ sprintf("%.2f",(ReadingsVal($name,"powerIEC","???")-4294967295)/10000)}}, energyIEC_kWh {sprintf("%.2f",ReadingsVal($name,"energyIEC","???")/10000)}
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

tndx

Komma plus Leerzeichen sollte wohl kein Problem sein, denn die Readings werden ja aktualisert. Trotzdem werde ich das auch noch bereinigen.

Aber ich denke, ich habe das Problem gefunden, es lag an den "event-on-change" Attributen in den Quell-Devices. Die waren zwar bei beiden gleich falsch, und trotzden hat das bei einem funktioniert, aber da gibt es noch andere Unterschiede. Nachdem ich die Readings explizit bei "event-on-change" aufgenommen habe, und "event-on-update" ganz entfernt habe, scheint es zu funktionieren, sowohl mit den Events als auch mit dem Doif.

Danke für eure Unterstützung!