AI-on-the-edge-device mit Userreading

Begonnen von hugo, 16 Februar 2025, 23:06:39

Vorheriges Thema - Nächstes Thema

hugo

Hallo,
mein Wasserzähler mit  AI-on-the-edge-device funtkioniert soweit. Allerdings funktioniert mein Userreading nicht.
Was wollte ich.
Durch das userReadings möchte ich zum einen "myVerbrauchAkt" zwischen 2 Werten die Differenz ermitteln und bei "myVerbrauchSTD" will ich den Verbrauch pro Stunde ermitteln, Dieser Wert solle alle Stunde auf Null gesetzt werden. Was ja mit einem "setreading WasserUhr myVerbrauchAkt 0" ja möglich ist.
Das Problem ist, das der Wert myVerbrauchAkt keine Werte erhält. Habe ich irgenwo einen Schreibfehler oder wo liegt mein Problem

define WasserUhr MQTT2_DEVICE WasserUhr
attr WasserUhr room MQTT2_DEVICE
attr WasserUhr stateFormat raw
attr WasserUhr userReadings myVerbrauchAkt difference { ReadingsVal("WasserUhr","value",0)},myVerbrauchSTD { ReadingsVal("WasserUhr","myVerbrauchSTD",0) + ReadingsVal("WasserUhr","myVerbrauchAkt",0)}
#   STATE      002.782
#   TYPE       MQTT2_DEVICE
#   eventCount 1053
#     2025-02-16 19:48:55   hostname        WasserUhr
#     2025-02-16 19:48:55   interval        5.0
#     2025-02-16 22:53:54   myVerbrauchAkt  0
#     2025-02-16 22:53:54   myVerbrauchSTD  0.0089999999999999
#     2025-02-16 22:53:54   pre             2.782
#     2025-02-16 22:53:54   rate            0.000000
#     2025-02-16 22:53:54   status          Flow finished
#     2025-02-16 18:42:23   subscriptions   WasserUhr/ctrl/flow_start WasserUhr/ctrl/set_prevalue
#     2025-02-16 22:53:54   value           2.782
#     2025-02-16 22:53:54   wifiRSSI        -41
#   hmccu:
#
setstate WasserUhr 002.782
setstate WasserUhr 2025-02-16 19:48:55 MAC A8:42:E3:9E:C1:48
setstate WasserUhr 2025-02-16 22:53:54 changeabsolut 0.000
setstate WasserUhr 2025-02-16 22:53:54 connection connected
setstate WasserUhr 2025-02-16 22:53:54 error no error
setstate WasserUhr 2025-02-16 22:53:54 freeMem 823775
setstate WasserUhr 2025-02-16 19:48:55 hostname WasserUhr
setstate WasserUhr 2025-02-16 19:48:55 interval 5.0
setstate WasserUhr 2025-02-16 22:53:54 myVerbrauchAkt 0
setstate WasserUhr 2025-02-16 22:53:54 myVerbrauchSTD 0.0089999999999999
setstate WasserUhr 2025-02-16 22:53:54 pre 2.782
setstate WasserUhr 2025-02-16 22:53:54 rate 0.000000
setstate WasserUhr 2025-02-16 22:53:54 rate_per_digitalization_round 0.000
setstate WasserUhr 2025-02-16 22:53:54 rate_per_time_unit 0.000000
setstate WasserUhr 2025-02-16 22:53:54 raw 002.782
setstate WasserUhr 2025-02-16 22:53:54 status Flow finished
setstate WasserUhr 2025-02-16 18:42:23 subscriptions WasserUhr/ctrl/flow_start WasserUhr/ctrl/set_prevalue
setstate WasserUhr 2025-02-16 22:53:54 timestamp 2025-02-16T22:53:25+0100
setstate WasserUhr 2025-02-16 22:53:54 uptime 11156
setstate WasserUhr 2025-02-16 22:53:54 value 2.782
setstate WasserUhr 2025-02-16 22:53:54 wifiRSSI -41


Gruß
Raspi 3 mit CUL HM-MOD-UART; nanoCUL
Homematic: HM-SEC-SCo 5x;HM-LC-SW1-BA-PCB 3x;HM-Dis-EP-WM55; HM-LC-SW4-PCB; ARLO;
Somfy RTS Rollo 14x; Alexa; GardenaSmartDevice; Stromzähler(GPIO); shelly1; shelly2.5;Wasserzähler(GPIO);Brennerstuhlsteckdosen;

Beta-User

Zitat von: hugo am 16 Februar 2025, 23:06:39wo liegt mein Problem
Würde mal das Thema "trigger" bei userReadings nachschlagen.

Weitere Stichworte:
- statistics
- delta-h (bei SVG)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hugo

#2
Irgendwie stehe ich auf dem Schlauc.

attr WasserUhr userReadings xmyVerbrauch difference { ReadingsVal("WasserUhr", "value", 0)}

liefert immer 0 zurück.
Habe das auch schon mit anderen Device z.B Strom getestet mit gleichenm Ergebnis

attr Strom userReadings xmyVerbrauch difference { ReadingsVal("Strom", "Bezug", 0)}

 { ReadingsVal("Strom", "Bezug", 0)}  in der Commandozeile liefert einen Wert zurück

Was mir jetzt beim Strom aufgefallen ist, dass ganz kurz ein Wert kommt und dann wirde auf 0 gestellt wird.

Raspi 3 mit CUL HM-MOD-UART; nanoCUL
Homematic: HM-SEC-SCo 5x;HM-LC-SW1-BA-PCB 3x;HM-Dis-EP-WM55; HM-LC-SW4-PCB; ARLO;
Somfy RTS Rollo 14x; Alexa; GardenaSmartDevice; Stromzähler(GPIO); shelly1; shelly2.5;Wasserzähler(GPIO);Brennerstuhlsteckdosen;

Beta-User

Verfolge das mal im Eventmonitor - ich behaupte, deine 0-These ist falsch ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hugo

Hier der Eventmonitor:

2025-02-18 19:29:10 OBIS Strom Bezug: 34846.5
2025-02-18 19:29:10 OBIS Strom xmyVerbrauch: 0.19999999999709
2025-02-18 19:29:10 OBIS Strom Verbrauch: 0.19999999999709
2025-02-18 19:29:10 OBIS Strom myBezug: 34846.5
2025-02-18 19:29:11 OBIS Strom xmyVerbrauch: 0
2025-02-18 19:29:11 OBIS Strom Verbrauch: 0

Raspi 3 mit CUL HM-MOD-UART; nanoCUL
Homematic: HM-SEC-SCo 5x;HM-LC-SW1-BA-PCB 3x;HM-Dis-EP-WM55; HM-LC-SW4-PCB; ARLO;
Somfy RTS Rollo 14x; Alexa; GardenaSmartDevice; Stromzähler(GPIO); shelly1; shelly2.5;Wasserzähler(GPIO);Brennerstuhlsteckdosen;

Beta-User

Ja. Also nicht "immer 0", oder?

Nochmal: "trigger" nachlesen...

(Anderes Device und im Ausgangspost nicht gezeigte readingList übersehen wir einfach mal ..)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hugo

Dnke erstmal für deine Hilfe.

Das Device habe ich geändert, da nicht ständig Wasser verbraucht wird und Strom gerad jetzt verbraucht wird.
Das mit dem trigger habe ich jetzt schon öfters gelesen, aber irgendwie nicht verstanden.

hier das userReadings vom Strom:

xmyVerbrauch difference { ReadingsVal("Strom", "Bezug", 0)},
Verbrauch difference { ReadingsNum("Strom", "Bezug", 0)},

Raspi 3 mit CUL HM-MOD-UART; nanoCUL
Homematic: HM-SEC-SCo 5x;HM-LC-SW1-BA-PCB 3x;HM-Dis-EP-WM55; HM-LC-SW4-PCB; ARLO;
Somfy RTS Rollo 14x; Alexa; GardenaSmartDevice; Stromzähler(GPIO); shelly1; shelly2.5;Wasserzähler(GPIO);Brennerstuhlsteckdosen;

tobi01001

ZitatIf <trigger> is given, then all processing for this specific user reading is only done if one of the just updated "reading: value" combinations matches <trigger>, which is treated as a regexp.

Bedeutet im Umkehrschluss (und nachdem dein Device Events nicht einschränkt), dass ein jedes Event von WasserUhr - jede MQTT Nachricht - das userreading aktualisiert eben weil kein Trigger angegeben ist. Wenn man den trigger beispielsweise auf das im userReading selbst relevante Reading setzt (siehe z.B. https://fhem.de/commandref.html#attributes und das gelbe und grüne Kästchen hier: https://wiki.fhem.de/wiki/UserReadings), wird das Ergebnis eventuell schon anders ausschauen. Wenn allerdings der neue Wert dem alten entspricht und dennoch ein Event auslöst (z.B. im Eventmonitor beobachten), müsstest du das noch über z.B. event-on-change-reading einschränken - wobei das initial und per Definition von "difference" erstmal korrekt ist. Keine Änderung: Differenz 0 - wie du ja schon gesehen hast.

Aber wofür brauchst du die Differenz zwischen zwei Werten und dann auch nur wenn sich der Wert ändert? Das erschließt sich mir nicht ganz, aber das ist ja nicht die Frage. Vielleicht wäre das statistics Modul an der Stelle auch interessant für dich...
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

hugo

Herzlichen Dank, denke jetzt habe ich userReadings begriffen. Vielleicht!

ZitatAber wofür brauchst du die Differenz zwischen zwei Werten und dann auch nur wenn sich der Wert ändert? Das erschließt sich mir nicht ganz, aber das ist ja nicht die Frage. Vielleicht wäre das statistics Modul an der Stelle auch interessant für dich...
Bisher habe ich den Wasserverbrauch mit einem Pulszähler und GPIO überwacht. Dies ist jetzt nicht mehr möglich, deshalb AI-on-the-edge. Die Impulse wurde in eimen HourCounter übergeben. Mit einem DoIf wurde der appCountsPerHourTemp Wert überprüft und je nach Anzahl der Werte Aktionen ausgeführt. Der appCountsPerHourTemp wird ja jede Stunde wieder auf Null gesetzt was für meine Anwendung in Ordung war.

Mein Ansatz war jetzt ein userReadings mit difference aufzubauen und dieses zu überprüfen und nach einer Stunde wieder auf Null zu setzen. Leider haben hier meine Fhemkentnisse versagt.
Vielleicht kann jemand von Euch mir einen Ansatz oder Möglichkeit aufzeigen, wie ich das umsetzen kann.

Gruß Josef

Nachsatz: Habe das heute vormittag geschrieben und nicht abgesandt, wie blöd kann man sein.
Raspi 3 mit CUL HM-MOD-UART; nanoCUL
Homematic: HM-SEC-SCo 5x;HM-LC-SW1-BA-PCB 3x;HM-Dis-EP-WM55; HM-LC-SW4-PCB; ARLO;
Somfy RTS Rollo 14x; Alexa; GardenaSmartDevice; Stromzähler(GPIO); shelly1; shelly2.5;Wasserzähler(GPIO);Brennerstuhlsteckdosen;

tobi01001

OK, was du dann suchst ist entweder das statistics Modul - das kann das für dich erledigen:
stat_Energy_total Hour: 95.247000000 Day: 1718.997000000 Month: 30035.913000001 Year: 87194.549000003 2025-02-19 19:45:12
stat_Energy_totalDay 1718.997000000 2025-02-19 19:45:12
stat_Energy_totalDayLast 2759.907000000 2025-02-18 23:59:55
stat_Energy_totalLast Hour: 126.278000000 Day: 2759.907000000 Month: 57158.636000002 Year: 575848.932000006 2025-02-19 18:59:55
stat_Energy_totalMonth 30035.913000001 2025-02-19 19:45:12
stat_Energy_totalMonthLast 57158.636000002 2025-01-31 23:59:55
stat_Energy_totalYear 87194.549000003 2025-02-19 19:45:12
stat_Energy_totalYearLast 575848.932000006 2024-12-31 23:59:55
stat_PowerDay Min: 0.0 Avg: 86.9 Max: 286.1 2025-02-19 19:45:12
stat_PowerDayAvg 86.9 2025-02-19 19:45:12
stat_PowerDayAvgLast 114.9 2025-02-18 23:59:55
stat_PowerDayLast Min: 0.0 Avg: 114.9 Max: 407.4 2025-02-18 23:59:55
stat_PowerDayMax 286.1 2025-02-19 19:45:12
stat_PowerDayMaxLast 407.4 2025-02-18 23:59:55

Oder wenn du ein userreading verwenden möchtest, könntest du ein monotonic userreading erstellen und das jede Stunde auf 0 setzen....
difference, zeigt nur das delta zwischen zwei Werten - was dir dafür nicht hilft.

Viele Wege führen nach Rom. Leider führen noch mehr oft in eine Sackgasse ;-)
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.