Ich habe ein Gerät, das meine Gasheizung ausliest (selbst geschriebenes Modul, was aber nicht so wichtig ist - hoffentlich, https://forum.fhem.de/index.php/topic,78101.0.html):
Internals:
DEF 192.168.2.105 3002 /opt/fhem/FHEM/Vclient.cfg 900
FILE /opt/fhem/FHEM/Vclient.cfg
INTERVAL 900
IP 192.168.2.105
NAME Viessmann
NR 141
PORT 3002
STATE Haus: H+WW | Wohnz:H+WW
TYPE VCLIENT
Helper:
DBLOG:
Aussentemperatur:
DbLog:
TIME 1510582275.0705
VALUE 7.2
Kesseltemperatur:
DbLog:
TIME 1510582275.48845
VALUE 45.5
Warmwassertemperatur:
DbLog:
TIME 1510582274.57225
VALUE 45.0
READINGS:
2017-11-13 15:11:15 Aussentemperatur 7.2
2017-11-13 00:08:04 BetriebHaus H+WW
2017-11-13 00:08:04 BetriebWohnz H+WW
2017-11-07 16:48:21 Ferienbeginn Do,01.01.1970
2017-11-07 16:48:22 Ferienende Do,01.01.1970
2017-11-13 15:11:15 Kesseltemperatur 45.5
2017-11-07 16:48:23 RaumsollHaus 20.0
2017-11-07 16:48:21 RaumsollHausRed 10.0
2017-11-07 16:48:22 RaumsollWohnz 20.0
2017-11-07 16:48:20 RaumsollWohnzRed 10.0
2017-11-13 15:11:15 Starts 166452.0
2017-11-13 00:08:04 StartsBisGestern 166446.0
2017-11-13 15:11:14 Stunden 16093.8
2017-11-13 00:08:04 StundenBisGestern 16084.1
2017-11-13 00:08:04 VerhaeltnisStartsStunden 0.000000
2017-11-08 21:45:00 Vorlauftemperatur 47.0
2017-11-07 16:48:22 WarmwasserSoll 60.0
2017-11-07 16:48:23 Warmwasser_1Montag 06:00-09:10 | 12:00-12:30 | 15:30-16:00 | 19:00-20:30
2017-11-07 16:48:20 Warmwasser_2Dienstag 06:00-09:00 | 12:00-12:30 | 15:30-16:00 | 19:00-20:30
2017-11-07 16:48:21 Warmwasser_3Mittwoch 06:00-09:00 | 12:00-12:30 | 15:30-16:00 | 19:00-20:30
2017-11-07 16:48:23 Warmwasser_4Donnerstag 06:00-09:00 | 12:00-12:30 | 15:30-16:00 | 19:00-20:30
2017-11-07 16:48:22 Warmwasser_5Freitag 06:00-09:00 | 12:00-12:30 | 15:30-16:00 | 19:00-20:40
2017-11-07 16:48:21 Warmwasser_6Samstag 08:00-11:00 | 14:00-15:00 | 17:00-20:30
2017-11-07 16:48:21 Warmwasser_7Sonntag 08:00-13:10 | 16:00-17:00 | 18:50-20:30
2017-11-13 15:11:14 Warmwassertemperatur 45.0
2017-11-03 19:39:12 last_set_command OK
2017-11-13 15:11:15 state disconnected
Attributes:
userReadings StartsNurGestern:StartsBisGestern.* difference { ReadingsVal($name,"StartsBisGestern",0) },
StundenNurGestern:StundenBisGestern.* difference { ReadingsVal($name,"StundenBisGestern",0) },
VerhaeltnisStartsStunden:StartsBisGestern.* {sprintf("%1f", ReadingsVal($name,"StartsNurGestern",0)/ReadingsVal($name,"StundenNurGestern",1))}
Mit userreadings will ich nicht nur sämtliche Brennerstarts bis Gestern auslesen, sondern die, die nur gestern erfolgten. Mache ich das mit einem userreading, geht das. Sobald ich aber zwei davon einbaue, gibt es ein Problem und nichts passiert:
userReadings StartsNurGestern:StartsBisGestern.* difference { ReadingsVal($name,"StartsBisGestern",0) },
StundenNurGestern:StundenBisGestern.* difference { ReadingsVal($name,"StundenBisGestern",0) },
VerhaeltnisStartsStunden:StartsBisGestern.* {sprintf("%1f", ReadingsVal($name,"StartsNurGestern",0)/ReadingsVal($name,"StundenNurGestern",1))}
Weiß jemand, was da faul ist?
Also ich habe das jetzt so gelöst (und ich vermute, dass es ein Problem im Programmcode von FHEM ist, denn zwei difference userreadings scheinen nicht zu gehen): Zuerst habe ich einen dummy hinzugefügt, der die letzten und die vorletzten Zahlenwerte enthält:
defmod Viessmann2 dummy
attr Viessmann2 stateFormat {sprintf("%.1f", (ReadingsNum($name, "Starts_T_1", 0)-ReadingsNum($name, "Starts_T_2", 0))/(ReadingsNum($name, "Stunden_T_1", 0)-ReadingsNum($name, "Stunden_T_2", 0)))." (".sprintf("%.0f", ReadingsNum($name, "Starts_T_1", 0)-ReadingsNum($name, "Starts_T_2", 0))." Starts)"}
attr Viessmann2 userReadings Starts_T_2, Starts_T_1, Stunden_T_1, Stunden_T_2
Hinzu kommen zwei notify, die diese Werte dann setzen. Einmal
defmod Viessmann_Starts notify Viessmann:StartsBisGestern:.* { fhem("setreading Viessmann2 Starts_T_2 [Viessmann2:Starts_T_1]");;fhem("setreading Viessmann2 Starts_T_1 [Viessmann:StartsBisGestern]")}
und dann
defmod Viessmann_Stunden notify Viessmann:StundenBisGestern:.* {fhem("setreading Viessmann2 Stunden_T_2 [Viessmann2:Stunden_T_1] ");;fhem("setreading Viessmann2 Stunden_T_1 [Viessmann:StundenBisGestern]")}
Beides zusammen läuft dann und gibt mir das Verhältnis Starts/Stunde sowie die Anzahl der Starts gestern aus.
Sollte in einem Reading auswertbar sein. Vorausgesetzt, die Zeit geht nicht rückwärts. ;)
attr Viessmann userReadings StartsNurGestern {(ReadingsVal($name,"Starts",undef)-ReadingsVal($name,"StartsBisGestern",undef))}, StundenNurGestern {(ReadingsVal($name,"Stunden",undef)-ReadingsVal($name,"StundenBisGestern",undef))}, VerhaeltnisStartsStunden {(ReadingsVal($name,"StartsNurGestern",undef)/ReadingsVal($name,"StundenNurGestern",undef))." Starts/Stunde"}
Gruß Jens
Zitat von: dirigent am 28 November 2017, 21:24:47
Sollte in einem Reading auswertbar sein. Vorausgesetzt, die Zeit geht nicht rückwärts. ;)
attr Viessmann userReadings StartsNurGestern {(ReadingsVal($name,"Starts",undef)-ReadingsVal($name,"StartsBisGestern",undef))}, StundenNurGestern {(ReadingsVal($name,"Stunden",undef)-ReadingsVal($name,"StundenBisGestern",undef))}, VerhaeltnisStartsStunden {(ReadingsVal($name,"StartsNurGestern",undef)/ReadingsVal($name,"StundenNurGestern",undef))." Starts/Stunde"}
Gruß Jens
Ich würde bei Rechnungen immer ReadingsNum statt ReadingsVal verwenden.
Sehr ungünstig ist es auch bei Rechnungen als Default undef mitzugeben, das kann ins Auge gehen.
Dann lieber 0 oder 1, je nach Rechnung.
Gruß
Dan
Ich glaube, so einfach ist das nicht. Die Starts werden alle fünf Minuten gelesen, die StartsBisGestern dagegen nur um Mitternacht. Deswegen wollte ich die difference nutzen, das ging aber nicht bei zwei verschiedenen Readings.
Gesendet vom iPhone mit Tapatalk Pro
@ DeeSPe: Danke für die Info. Wieder was dazu gelernt.
Gruß Jens