[GELÖST] Mehr userReadings als Gerätereadings, warum?

Begonnen von midiwidi, 01 Januar 2017, 23:14:26

Vorheriges Thema - Nächstes Thema

midiwidi

Ich benutze userReadings um aus Gas- und Stromzählerwerten den Verbrauch pro Zeit zu erzeugen.
Dafür nutze ich einen ESP8266 der die erfassten Zählerstände alle 15min über Mosquitto an FHEM übergibt. Die Definition sieht wie folgt aus:


define ESP1_HW_Raum MQTT_DEVICE
attr ESP1_HW_Raum IODev Mosquitto
attr ESP1_HW_Raum subscribeReading_EnergyCounter /hooks/devices/1/SensorData/EnergyCounter
attr ESP1_HW_Raum subscribeReading_GasCounter /hooks/devices/2/SensorData/GasCounter
#der Energiezählerstand wird alle 15min (1/4 h) vom ESP in kWh gesendet. Um von kWh auf W zu kommen wird deshalb mit 1000/4=250 multipliziert
attr ESP1_HW_Raum userReadings GasUsage difference {ReadingsVal("ESP1_HW_Raum","GasCounter",0)*4}, Power difference {ReadingsVal("ESP1_HW_Raum","EnergyCounter",0)*250}
attr ESP1_HW_Raum stateFormat EnergyCounter kWh, Power W, GasCounter m&sup3, GasUsage m&sup3/h
attr ESP1_HW_Raum DbLogInclude EnergyCounter,GasCounter,Power,GasUsage


Ich hätte erwartet, dass für jeden Gas- bzw. Energiezählerwert (EnergyCounter, GasCounter) jetzt genau ein Differenzwert vom userReading erzeugt wird (Power, GasUsage), aber es gibt mehrere mit dem Wert 0. Siehe hier:


sqlite> select * from history WHERE DEVICE is 'ESP1_HW_Raum' AND READING is 'EnergyCounter' OR READING is 'Power' order by TIMESTAMP;
2017-01-01 21:45:04|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 21:54:42|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 21:54:42|ESP1_HW_Raum|MQTT_DEVICE|EnergyCounter: 46179.58|EnergyCounter|46179.58|
2017-01-01 21:54:42|ESP1_HW_Raum|MQTT_DEVICE|Power: 57.5|Power|57.5|
2017-01-01 21:55:42|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 21:55:42|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 22:09:43|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 22:09:43|ESP1_HW_Raum|MQTT_DEVICE|EnergyCounter: 46179.69|EnergyCounter|46179.69|
2017-01-01 22:09:43|ESP1_HW_Raum|MQTT_DEVICE|Power: 27.5|Power|27.5|
2017-01-01 22:10:43|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 22:10:43|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 22:24:44|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 22:24:44|ESP1_HW_Raum|MQTT_DEVICE|EnergyCounter: 46179.80|EnergyCounter|46179.80|
2017-01-01 22:24:44|ESP1_HW_Raum|MQTT_DEVICE|Power: 27.5|Power|27.5|
2017-01-01 22:25:44|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|
2017-01-01 22:25:44|ESP1_HW_Raum|MQTT_DEVICE|Power: 0|Power|0|


und hier


sqlite> select * from history WHERE DEVICE is 'ESP1_HW_Raum' AND READING is 'GasCounter' OR READING is 'GasUsage' order by TIMESTAMP;
2017-01-01 21:45:04|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 21:54:42|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 21:54:42|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 21:55:42|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 21:55:42|ESP1_HW_Raum|MQTT_DEVICE|GasCounter: 2109.95|GasCounter|2109.95|
2017-01-01 21:55:42|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0.0399999999990541|GasUsage|0.0399999999990541|
2017-01-01 22:09:43|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:09:43|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:10:43|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:10:43|ESP1_HW_Raum|MQTT_DEVICE|GasCounter: 2109.95|GasCounter|2109.95|
2017-01-01 22:10:43|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:24:44|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:24:44|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:25:44|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:25:44|ESP1_HW_Raum|MQTT_DEVICE|GasCounter: 2109.99|GasCounter|2109.99|
2017-01-01 22:25:44|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0.159999999999854|GasUsage|0.159999999999854|
2017-01-01 22:39:45|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|
2017-01-01 22:39:45|ESP1_HW_Raum|MQTT_DEVICE|GasUsage: 0|GasUsage|0|


Bei den userReadings ist kein Trigger angegeben. Deshalb sollte doch eigentlich das userReading getriggert werden, wenn ein Gerätereading ankommt und es deswegen zu jedem Gerätereading genau ein userReading geben. Was übersehe ich oder mache ich falsch? Diese Nullen würde ich gerne loswerden da mein Plot sonst nur aus lauter Spikes besteht.

http://www.midiwidi.de/download/StromGasVerbrauch.png

justme1968

wenn du keinen trigger angibst wird das userReading durch jede reading änderung getriggert. d.h. auch durch readings die nicht dein basis reading sind. dann ergibt difference natürlich 0 weil sich nichts geändert hat. d.h. du solltest für jedes user reading den trigger mit angeben: attr ESP1_HW_Raum userReadings GasUsage:GasCounter.* difference {ReadingsVal("ESP1_HW_Raum","GasCounter",0)*4}, Power:EnergyCounter.* difference {ReadingsVal("ESP1_HW_Raum","EnergyCounter",0)*250}

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

midiwidi

Danke Andre, das funktioniert jetzt einwandfrei.
Ohne Angabe eines Triggers ist es also so, dass jedes Reading eines Geräts ein userReading triggert? Also wenn ein Thermometer die Readings temperature, hymidity und batteryState hat würde ein userReading dieses Gerätes das temperature benutzt also auch durch Updates der Readings humidity und batteryState getriggert?

justme1968

#3
genau. ein user reading 'weiss' nicht ob und von welchem reading es abhängt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

midiwidi

Danke für die Erklärung und die schnelle Hilfe.