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.
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".
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.
mit den event attributen im thermostat hast du die events für state ausgeschaltet.
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 :)!
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?
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.