FHEM Forum

FHEM => Automatisierung => Thema gestartet von: midiwidi am 01 Januar 2017, 23:14:26

Titel: [GELÖST] Mehr userReadings als Gerätereadings, warum?
Beitrag von: midiwidi am 01 Januar 2017, 23:14:26
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 (http://www.midiwidi.de/download/StromGasVerbrauch.png)
Titel: Antw:Mehr userReadings als Gerätereadings, warum?
Beitrag von: justme1968 am 01 Januar 2017, 23:37:53
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
Titel: Antw:Mehr userReadings als Gerätereadings, warum?
Beitrag von: midiwidi am 02 Januar 2017, 14:14:33
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?
Titel: Mehr userReadings als Gerätereadings, warum?
Beitrag von: justme1968 am 02 Januar 2017, 14:17:06
genau. ein user reading 'weiss' nicht ob und von welchem reading es abhängt.
Titel: Antw:Mehr userReadings als Gerätereadings, warum?
Beitrag von: midiwidi am 02 Januar 2017, 14:19:27
Danke für die Erklärung und die schnelle Hilfe.