statistics: Keine Berechnung negativer Delta eines dummy durch notify set...

Begonnen von GunterB, 07 Juli 2026, 10:05:22

Vorheriges Thema - Nächstes Thema

GunterB

Hallo,

das statistics berechnet keine negativen Deltawerte eines dummy state wenn dieses aus einem notify per set dekrementiert wird.
Wird der dummy durch ein at dekrementiert funktioniert die Berechnung.
Positive Werte werden aus dem at und notify korrekt berechnet.

Kann mir da einer helfen? Ich stehe mal wieder auf dem Schlauch!

Ich habe folgendes Minimalbeispiel, welches nicht funktioniert:
Code (Minimalbeispiel) Auswählen
defmod Test0001_neg dummy
attr Test0001_neg readingList state
attr Test0001_neg room 0.1_Test
attr Test0001_neg setList state

defmod statTest0001_ValDelta statistics Test0001_neg
attr statTest0001_ValDelta deltaReadings state
attr statTest0001_ValDelta limitDecimals 4
attr statTest0001_ValDelta room 0.1_Test
attr statTest0001_ValDelta singularReadings .*:state:Delta:(Day|Month|Year)

defmod atTest0001_neg at +*00:00:05 {\
my $nval= ReadingsNum("Test0001_neg", "state", 0);;\
$nval-=0.001;;\
##fhem("set Test0001_neg $nval");;\
}
attr atTest0001_neg room 0.1_Test

defmod nfTest0001_neg notify atTest0001_neg:state.* {\
my $nval= ReadingsNum("Test0001_neg", "state", 0);;\
$nval-=0.001;;\
fhem("set Test0001_neg $nval");;\
}
attr nfTest0001_neg room 0.1_Test

tomcat.x

Hallo,

ist die Ursache vielleicht folgendes (aus der Commandref), weil statistics ein event braucht?

"Achtung: setreading generiert kein Event für ein Gerät X, falls es aus einem notify für Gerät X aufgerufen wurde. In so einem Fall könnte man auf "sleep 0.1; setreading X Y Z" ausweichen."

Der Workaround mit sleep erzeugt ein temporäres at. Da funktioniert das dann.

Viele Grüße
Thomas
FHEM: 6.4 auf Raspi 4B, Raspbian (noch Buster), Perl v5.28.1 mit Sender/Empfänger: 3 x CULv3, Duofern Stick
Gateways: FRITZ!Box 6591 (OS: 8.25), Trädfri, ConBee 2,  piVCCU (HM-MOD-RPI-PCB), OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo, UNIRoll

GunterB

Das set erzeugt einen Event im dummy. Das statistics reagiert auch darauf und schreibt die Statistikwerte. Das funktioniert generell, nur nicht bei negativen Werten, da sind die Statistikwerte einfach falsch.

Wenn dann dürfte es ja generell nicht funktionieren...

Eventmonitor und Log sprechen ja nicht dafür, dass es keine Event Trigger gibt.

Code (Events) Auswählen
2026-07-07 15:12:10.358 statistics statTest0001_ValDelta Updated stats for: Test0001_neg
2026-07-07 15:12:10.360 dummy Test0001_neg -3.606
2026-07-07 15:12:10.360 dummy Test0001_neg statState: Hour: 0.000 Day: 0.089 Month: 0.089 Year: 0.089 (since: 2026-07-07_09:54:36 )
2026-07-07 15:12:10.360 dummy Test0001_neg statStateDay: 0.089
2026-07-07 15:12:10.360 dummy Test0001_neg statStateMonth: 0.089
2026-07-07 15:12:10.360 dummy Test0001_neg statStateYear: 0.089
2026-07-07 15:12:10.361 at atTest0001_neg Next: 15:12:15
2026-07-07 15:12:15.353 statistics statTest0001_ValDelta Updated stats for: Test0001_neg
2026-07-07 15:12:15.354 dummy Test0001_neg -3.607
2026-07-07 15:12:15.354 dummy Test0001_neg statState: Hour: 0.000 Day: 0.089 Month: 0.089 Year: 0.089 (since: 2026-07-07_09:54:36 )
2026-07-07 15:12:15.354 dummy Test0001_neg statStateDay: 0.089
2026-07-07 15:12:15.354 dummy Test0001_neg statStateMonth: 0.089
2026-07-07 15:12:15.354 dummy Test0001_neg statStateYear: 0.089
2026-07-07 15:12:15.354 at atTest0001_neg Next: 15:12:20
2026-07-07 15:12:20.357 statistics statTest0001_ValDelta Updated stats for: Test0001_neg
2026-07-07 15:12:20.360 dummy Test0001_neg -3.608
2026-07-07 15:12:20.360 dummy Test0001_neg statState: Hour: 0.000 Day: 0.089 Month: 0.089 Year: 0.089 (since: 2026-07-07_09:54:36 )
2026-07-07 15:12:20.360 dummy Test0001_neg statStateDay: 0.089
2026-07-07 15:12:20.360 dummy Test0001_neg statStateMonth: 0.089
2026-07-07 15:12:20.360 dummy Test0001_neg statStateYear: 0.089
2026-07-07 15:12:20.360 at atTest0001_neg Next: 15:12:25

2026.07.07 15:14:20.352 5: statistics statTest0001_ValDelta: DoStatistics.455 Assigned reading 'state' from attribute 'deltaReadings' to statistic type 2.
2026.07.07 15:14:20.353 4: statistics statTest0001_ValDelta: doStatisticDelta.778 Calculating delta statistics for 'Test0001_neg:state = -3.632'
2026.07.07 15:14:20.353 5: statistics statTest0001_ValDelta: doStatisticDelta.882 Set '.Test0001_neg:state'='LastValue: -3.632 ShowDate: 6 DecPlaces: 3'
2026.07.07 15:14:20.353 5: statistics statTest0001_ValDelta: doStatisticDelta.888 Set 'statState'='Hour: 0.000 Day: 0.089 Month: 0.089 Year: 0.089 (since: 2026-07-07_09:54:36 )'
2026.07.07 15:14:20.353 5: statistics statTest0001_ValDelta: storeSingularReadings.1177 Set statStateDay = 0.089
2026.07.07 15:14:20.353 5: statistics statTest0001_ValDelta: storeSingularReadings.1177 Set statStateMonth = 0.089
2026.07.07 15:14:20.353 5: statistics statTest0001_ValDelta: storeSingularReadings.1177 Set statStateYear = 0.089
2026.07.07 15:14:20.354 5: statistics statTest0001_ValDelta: Notify.301 Notification of 'Test0001_neg' received. Update statistics.
2026.07.07 15:14:25.352 5: statistics statTest0001_ValDelta: DoStatistics.455 Assigned reading 'state' from attribute 'deltaReadings' to statistic type 2.
2026.07.07 15:14:25.352 4: statistics statTest0001_ValDelta: doStatisticDelta.778 Calculating delta statistics for 'Test0001_neg:state = -3.633'
2026.07.07 15:14:25.353 5: statistics statTest0001_ValDelta: doStatisticDelta.882 Set '.Test0001_neg:state'='LastValue: -3.633 ShowDate: 6 DecPlaces: 3'
2026.07.07 15:14:25.353 5: statistics statTest0001_ValDelta: doStatisticDelta.888 Set 'statState'='Hour: 0.000 Day: 0.089 Month: 0.089 Year: 0.089 (since: 2026-07-07_09:54:36 )'
2026.07.07 15:14:25.353 5: statistics statTest0001_ValDelta: storeSingularReadings.1177 Set statStateDay = 0.089
2026.07.07 15:14:25.353 5: statistics statTest0001_ValDelta: storeSingularReadings.1177 Set statStateMonth = 0.089
2026.07.07 15:14:25.353 5: statistics statTest0001_ValDelta: storeSingularReadings.1177 Set statStateYear = 0.089
2026.07.07 15:14:25.354 5: statistics statTest0001_ValDelta: Notify.301 Notification of 'Test0001_neg' received. Update statistics.

tomcat.x

Alles klar, ich hatte da wohl das ...
Zitat von: GunterB am 07 Juli 2026, 10:05:22Positive Werte werden aus dem at und notify korrekt berechnet.
... übersehen.
FHEM: 6.4 auf Raspi 4B, Raspbian (noch Buster), Perl v5.28.1 mit Sender/Empfänger: 3 x CULv3, Duofern Stick
Gateways: FRITZ!Box 6591 (OS: 8.25), Trädfri, ConBee 2,  piVCCU (HM-MOD-RPI-PCB), OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo, UNIRoll