Hallo,
für meine Fenster-Thermostatsteuerung habe ich ein DOIF erstellt.
Wenn das Fenster öffnet wird der Betriebsmodus des Thermostats ausgelsen und in einem Reading gespeichert, bevor das Thermostat auf OFF gesetzt wird. Wird das Fenster wieder geschlossen wird das Thermstats auf den im Reading gespeicherten Betriebsmodus gesetzt:
([ZWave_SENSOR_NOTIFICATION_38:zustand] eq "open")
(set $SELF rstate [ZWave_THERMOSTAT_2:thermostatMode])
(set ZWave_THERMOSTAT_2 tmOff)
DOELSE
(set ZWave_THERMOSTAT_2 [$SELF:rstate])
Das funktioniert soweit auch, nur ist der ausgelesene Betriebsmodus klein geschrieben, der Modus zum setzen muss aber groß geschrieben werden...
Ich muss also z.B. aus
heating -> Tm
Heating machen.
Mit Perl ist dies über
ucfirst möglich, wenn ich in die Commandline eingebe:
{"Tm".ucfirst(ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","zustand","heating"))}
bekomme ich als Ausgabe mein gewolltes Ergebniss:
TMHeating
Allerdings scheitere ich dies in dem DOIF umzusetzen und den mit Perl bearbeiten Wert in einem Reading zu spiecher.
Ich hab es mit
set_Reading versucht, aber das funktioniert nicht :/
([ZWave_SENSOR_NOTIFICATION_38:zustand] eq "open")
(set_Reading("rstate",{"Tm".ucfirst(ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","zustand","heating"))}))
(set ZWave_THERMOSTAT_2 tmOff)
DOELSE
(set ZWave_THERMOSTAT_2 [$SELF:rstate])
Fehlermeldung:
Zitat
2020-09-29 00:52:15 DOIF Steu_FenHeiz_Bad error: set_Reading("rstate",{"Tm".ucfirst(ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","zustand","heating"))}): Unknown command set_Reading("rstate",{"Tm".ucfirst(ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","zustand","heating"))}), try help.
Kann jemand weiterhelfen?
Schau dir bitte die Commanref zum Perl Modus noch mal genau an.
define di_rc_tv DOIF {if ([remotecontol:"on"]) {fhem_set"tv on"} else {fhem_set"tv off"}}
Um den gesamten Block ist eine geschweifte Klammer und es wird if Else verwendet anstatt DOELSE.
Hi,
oder Du bleibst im normal Modus und verwendest den guten alten FHEM set magic Syntax. Nicht getestet:
([ZWave_SENSOR_NOTIFICATION_38:zustand] eq "open")
(setreading $SELF rstate {("Tm".ucfirst(ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","zustand","heating")))})
(set ZWave_THERMOSTAT_2 tmOff)
DOELSE
(set ZWave_THERMOSTAT_2 [$SELF:rstate])
Gruß Otto
Zitat von: Otto123 am 29 September 2020, 11:50:54
Hi,
oder Du bleibst im normal Modus und verwendest den guten alten FHEM set magic Syntax. Nicht getestet:
([ZWave_SENSOR_NOTIFICATION_38:zustand] eq "open")
(setreading $SELF rstate {("Tm".ucfirst(ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","zustand","heating")))})
(set ZWave_THERMOSTAT_2 tmOff)
DOELSE
(set ZWave_THERMOSTAT_2 [$SELF:rstate])
Gruß Otto
nur, dass set Magic hier gar nicht zum Zuge kommt, weil es die ursprüngliche Syntax von DOIF ist, aber das muss ja keiner Wissen ;)
Danke für eure Hilfe,
ich habe es inzwischen hinbekommen mit:
({fhem "setreading $SELF rstate tm".ucfirst(ReadingsVal("ZWave_SENSOR_NOTIFICATION_2","zustand","heating"))})
Der Vorschlag von Otto funktionert ebenfalls und gefällt mir zudem noch besser, danke dafür :)