[Problem umgangen] userreadings scheint nicht zu gehen

Begonnen von andies, 13 November 2017, 15:27:03

Vorheriges Thema - Nächstes Thema

andies

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?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

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.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

JensS

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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

andies

 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
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

JensS

@ DeeSPe: Danke für die Info. Wieder was dazu gelernt.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.