ReadingsChange auf state funktioniert nicht

Begonnen von freetz, 02 April 2018, 15:16:14

Vorheriges Thema - Nächstes Thema

freetz

Hallo zusammen,

hier nun hoffentlich im richtigen Board:
Ich versuche, bei meinen MAX!-Thermostaten das Reading von "off" auf "5.0" umzuwandeln, damit sich diverse Module nicht über den nicht-numerischen Wert beklagen. Ich weiß auch, dass es da andere Möglichkeiten gibt, das zu tun, aber mit ReadingsChange kann ich das mit einem Eintrag für alle Thermostate machen. Meine Config:

defmod MAX_off_conversion readingsChange _.*hermostat (desiredTemperature|state) off 5.0
attr MAX_off_conversion addStateEvent 1


Die Umwandlung des Readings "desiredTemperature" klappt auch einwandfrei, nur bleibt bei state der vom MAX-Modul übermittelte "off"-Wert erhalten. Ich dachte, dass addStateEvent 1 das Problem lösen würde, aber anscheinend tut es das nicht (oder ich habe den korrekten Einsatz noch nicht verstanden).

Freue mich über jede Hilfe!

F.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

rudolfkoenig

addStateEvent sollte state aendern, aber STATE nicht.

Kannst du bitte ein list von einem "problematischen" MAX Garaet hier einstellen, und auch ein Umwandlungsversuch von readingsChange, mit "attr MAX_off_conversion verbose 5".

freetz

Danke für die schnelle Rückmeldung und sorry, dass ich mich nicht früher gemeldet habe, irgendwie habe ich diesmal keine E-Mail-Benachrichtigung bekommen (was an TapATalk liegen kann, was selbst wiederum nicht 100%ig zuverlässig zu laufen scheint).

Es soll nur "state" gesetzt werden (entsprechend der obigen Regex). Hier ist die list-Ausgabe eines der betroffenen Thermostate:
Internals:
   DEF        HeatingThermostat 0b89a0
   IODev      MAX_CUL
   LASTInputDev MAX_CUL
   MAX_CUL_MSGCNT 42
   MAX_CUL_TIME 2018-04-05 12:08:58
   MSGCNT     42
   NAME       Bad_oben_Thermostat
   NR         72
   RSSI       -59.5
   STATE      off °C
   TYPE       MAX
   addr       0b89a0
   backend    MAX_CUL
   dstsetting 1
   mode       1
   rferror    0
   type       HeatingThermostat
   Helper:
     DBLOG:
       desiredTemperature:
         logdb:
           TIME       1522922938.55897
           VALUE      5.0
       temperature:
         logdb:
           TIME       1522922441.35289
           VALUE      14.9
       valveposition:
         logdb:
           TIME       1522922441.35289
           VALUE      0
   READINGS:
     2017-07-02 22:49:39   LastBackup      ok
     2018-04-05 12:08:58   RSSI            -59.5
     2018-04-05 12:08:58   TempDiff        #FF5050
     2016-12-28 14:09:21   TimeInformationHour 4
     2018-04-05 12:08:58   battery         ok
     2016-12-28 14:21:35   boostDuration   60
     2016-12-28 14:21:36   boostValveposition 100
     2016-12-28 19:52:54   comfortTemperature 20.0
     2016-12-28 14:21:33   decalcification Sat 12:00
     2018-04-05 12:08:58   desiredTemperature 5.0
     2016-12-28 14:21:40   ecoTemperature  17.0
     2016-12-28 14:08:56   groupid         0
     2016-12-28 14:21:33   maxValveSetting 100
     2016-12-28 14:21:50   maximumTemperature 21.5
     2016-12-28 14:21:47   measurementOffset 0.0
     2016-12-28 14:21:33   minimumTemperature off
     2018-04-05 12:08:58   mode            manual
     2018-04-05 12:08:55   msgcnt          124
     2018-04-05 12:08:58   state           off °C
     2018-04-05 12:00:41   temperature     14.9
     2016-12-28 14:21:33   valveOffset     0
     2018-04-05 12:08:58   valveposition   0
     2016-12-28 20:03:39   weekprofile-0-Sat-temp 17.0 °C  /  20.0 °C  /  17.0 °C  /  17.0 °C
     2016-12-28 20:03:39   weekprofile-0-Sat-time 00:00-07:00  /  07:00-23:00  /  23:00-23:55  /  23:55-00:00
     2016-12-28 20:03:39   weekprofile-1-Sun-temp 17.0 °C  /  20.0 °C  /  17.0 °C  /  17.0 °C
     2016-12-28 20:03:39   weekprofile-1-Sun-time 00:00-07:00  /  07:00-23:00  /  23:00-23:55  /  23:55-00:00
     2016-12-28 20:03:39   weekprofile-2-Mon-temp 17.0 °C  /  20.0 °C  /  17.0 °C  /  17.0 °C
     2016-12-28 20:03:39   weekprofile-2-Mon-time 00:00-07:00  /  07:00-23:00  /  23:00-23:55  /  23:55-00:00
     2016-12-28 20:03:39   weekprofile-3-Tue-temp 17.0 °C  /  20.0 °C  /  17.0 °C  /  17.0 °C
     2016-12-28 20:03:39   weekprofile-3-Tue-time 00:00-07:00  /  07:00-23:00  /  23:00-23:55  /  23:55-00:00
     2016-12-28 20:03:39   weekprofile-4-Wed-temp 17.0 °C  /  20.0 °C  /  17.0 °C  /  17.0 °C
     2016-12-28 20:03:39   weekprofile-4-Wed-time 00:00-07:00  /  07:00-23:00  /  23:00-23:55  /  23:55-00:00
     2016-12-28 20:03:39   weekprofile-5-Thu-temp 17.0 °C  /  20.0 °C  /  17.0 °C  /  17.0 °C
     2016-12-28 20:03:39   weekprofile-5-Thu-time 00:00-07:00  /  07:00-23:00  /  23:00-23:55  /  23:55-00:00
     2016-12-28 20:03:39   weekprofile-6-Fri-temp 17.0 °C  /  20.0 °C  /  17.0 °C  /  17.0 °C
     2016-12-28 20:03:39   weekprofile-6-Fri-time 00:00-07:00  /  07:00-23:00  /  23:00-23:55  /  23:55-00:00
     2016-12-28 14:21:33   windowOpenDuration 15
     2016-12-28 14:21:49   windowOpenTemperature 12.0
   internals:
     interfaces thermostat;battery;temperature
Attributes:
   DbLogExclude state
   IODev      MAX_CUL
   Thermostate WohnungOben
   event-min-interval temperature:1800,valveposition:1800,desiredTemperature:1800
   event-on-change-reading battery,temperature,valveposition,desiredTemperature
   room       Bad oben,MAX
   userReadings TempDiff { if (ReadingsNum("Bad_oben_Thermostat","temperature",0) >= ReadingsNum("Bad_oben_Thermostat","desiredTemperature",0)) { return "#FF5050" } else { return "#6699FF" } }

   userattr   Thermostate Thermostate_map structexclude


Das ist die Log-Ausgabe mit Level 5:
2018.04.05 16:45:23 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 151727) line 1.
2018.04.05 16:45:23 3: eval: { if (ReadingsNum("Bad_oben_Thermostat","temperature",0) >= ReadingsNum("Bad_oben_Thermostat","desiredTemperature",0)) { return "#FF5050" } else { return "#6699FF" } }
2018.04.05 16:45:23 5: Changing Bad_oben_Thermostat:desiredTemperature on via MAX_off_conversion
2018.04.05 16:45:52 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 151732) line 1.
2018.04.05 16:45:52 3: eval: { if (ReadingsNum("Bad_oben_Thermostat","temperature",0) >= ReadingsNum("Bad_oben_Thermostat","desiredTemperature",0)) { return "#FF5050" } else { return "#6699FF" } }
2018.04.05 16:45:52 5: Changing Bad_oben_Thermostat:desiredTemperature off via MAX_off_conversion


Und das der Mitschnitt des Event-Logs:
2018-04-05 16:45:22 CUL CUL_CUBE credit10ms: 35878
2018-04-05 16:45:22 structure AlleThermostate off °C
2018-04-05 16:45:22 structure WohnungOben off °C
2018-04-05 16:45:22 MAX Bad_oben_Thermostat desiredTemperature on
2018-04-05 16:45:23 structure AlleThermostate on °C
2018-04-05 16:45:23 structure WohnungOben on °C
2018-04-05 16:45:23 MAX Bad_oben_Thermostat desiredTemperature: on
2018-04-05 16:45:51 CUL CUL_CUBE credit10ms: 35797
2018-04-05 16:45:51 structure AlleThermostate on °C
2018-04-05 16:45:51 structure WohnungOben on °C
2018-04-05 16:45:51 MAX Bad_oben_Thermostat desiredTemperature off
2018-04-05 16:45:52 structure AlleThermostate off °C
2018-04-05 16:45:52 structure WohnungOben off °C
2018-04-05 16:45:52 MAX Bad_oben_Thermostat desiredTemperature: 5.0


Ich hoffe, das hilft weiter - im Backend wird jedenfalls die desiredTemperature sofort von "off" auf 5.0 gewechselt, nur halt nicht bei state...

Danke nochmal und Gruß,

F.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

frank

mit den event attributen im thermostat hast du die events für state ausgeschaltet.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

freetz

Argh! Ich hatte schon gedacht, dass es irgendwas bei mir sein wird, aber sowas... Danke auf jeden Fall für die schnelle und hilfreiche Hilfe :)!
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

freetz

Jetzt klappt es zwar, dass das state Reading auch geändert wird, aber das Problem, was ich ursächlich damit lösen wollte, bleibt bestehen, denn ich bekomme weiterhin im Log die Fehlermeldung
2018.04.05 17:10:53 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 152178) line 1.
2018.04.05 17:10:53 3: eval: { if (ReadingsNum("Bad_oben_Thermostat","temperature",0) >= ReadingsNum("Bad_oben_Thermostat","desiredTemperature",0)) { return "#FF5050" } else { return "#6699FF" } }


ReadingsNum macht aus "off" anscheinend "" noch bevor ReadingsChange greifen kann. Dabei habe ich die NTFY_ORDER schon auf 00 gesetzt:
Internals:
   DEF        _.*hermostat (desiredTemperature|state) off 5.0
   NAME       MAX_off_conversion
   NR         205
   NTFY_ORDER 00-MAX_off_conversion
   STATE      active
   TYPE       readingsChange
   READINGS:
     2018-04-05 16:53:25   state           active
Attributes:
   addStateEvent 1


Kann ich da noch was tun oder ist ReadingsChange für diesen Einsatzzweck nicht vorgesehen?
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

rudolfkoenig

ZitatReadingsNum macht aus "off" anscheinend "" noch bevor ReadingsChange greifen kann.
Das ist mAn ein Fehler, ich habe den Code geaendert, so dass ReadingsNum statt "" default zurueckliefert.

ZitatDabei habe ich die NTFY_ORDER schon auf 00 gesetzt:
Das ist sinnlos: userReadings werden vor dem Verschicken des Events generiert, und readingsChange arbeitet mit Events.