Hallo zusammen,
ich bin derzeit etwas am experimentieren meiner Heizungkörper/Fenstersteuerung. Momentand habe ich 2 DOIFs und eine LightScene für jedes Fenster/Heizkörper.
Jetzt dachte ich, mit einem DOIF und ReadingsList usw. kann ich das schon ganz gut in einem DOIF abbilden, allerdings würde ich die
setcmd Anweisung1; Anweisung2
Zeilen aus den LightScenes gerne in ein Reading packen und dann mit
([Bedingung1] eq "Auto")($SELF:Command_Auto)
ausführen, statt die ganzgen Anweisungen hier eingeben zu müssen. Würde so etwas überhaupt gehen?
Wenn im Reading Command_Auto der ganze FHEM-Befehl zusammengebaut ist, dann sollte im Ausführungsteil ([$SELF:Command_Auto]) funktionieren.
Gibt es da eine Begrenzung der Zeichenlänge? Im Reading bekomme ich nicht alles angezeigt und auch den error no right Bracket
Zitat von: brown78 am 05 Oktober 2019, 11:10:22
Gibt es da eine Begrenzung der Zeichenlänge? Im Reading bekomme ich nicht alles angezeigt und auch den error no right Bracket
Poste mal den Output vom list von deiner Definition insb. vom Inhalt des Readings.
hier das list:
Internals:
CFGFN
DEF ([$SELF:heating_mode] eq "Auto") ([$SELF:auto_command])
FUUID 5d982d23-f33f-47f9-f5d4-866672d82a988497
MODEL FHEM
NAME ctl_kueche_aio
NOTIFYDEV global,ctl_kueche_aio
NR 1962
NTFY_ORDER 50-ctl_kueche_aio
STATE cmd_1
TYPE DOIF
VERSION 20268 2019-09-28 21:00:39
OLDREADINGS:
READINGS:
2019-10-05 11:33:49 auto_command {fhem("set HM_Kueche_Clima controlMode auto
2019-10-05 11:34:12 boost off
2019-10-05 07:44:04 boost_command 0
2019-10-05 07:53:19 boost_duration 00:03:00
2019-10-05 07:53:22 boost_threshold 18.5
2019-10-05 07:56:41 boost_wait 00:05:00
2019-10-05 11:34:56 cmd 1
2019-10-05 11:34:56 cmd_event ctl_kueche_aio
2019-10-05 11:34:56 cmd_nr 1
2019-10-05 11:34:56 error no right bracket
2019-10-05 07:44:11 fenster_command 0
2019-10-05 11:33:57 heating_mode Auto
2019-10-05 11:34:43 mode enabled
2019-10-05 07:44:20 sommer_command 0
2019-10-05 11:34:56 state cmd_1
2019-10-05 07:56:37 window_mode Auto
Regex:
accu:
cond:
ctl_kueche_aio:
0:
heating_mode ^ctl_kueche_aio$:^heating_mode:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'ctl_kueche_aio','heating_mode') eq "Auto"
do:
0:
0 [ctl_kueche_aio:auto_command]
1:
helper:
DEVFILTER ^global$|^ctl_kueche_aio$
NOTIFYDEV global|ctl_kueche_aio
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
readings:
all ctl_kueche_aio:heating_mode
uiState:
uiTable:
Attributes:
devStateIcon .*:rc_BLANK
readingList heating_mode boost_duration boost_threshold boost_wait boost
setList heating_mode:Auto,Fenster,Boost,Sommer boost_duration:00:00:05,00:00:30,00:01:00,00:01:30,00:02:00,00:02:30,00:03:00,00:03:30,00:04:00,00:04:30,00:05:00,00:05:30,00:06:00,00:06:30,00:07:00 boost_threshold:15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0 boost_wait:00:00:05,00:00:30,00:01:00,00:01:30,00:02:00,00:02:30,00:03:00,00:03:30,00:04:00,00:04:30,00:05:00,00:05:30,00:06:00,00:06:30,00:07:00 boost:on,off
webCmd heating_mode:boost_duration:boost_threshold:boost_wait:boost
webCmdLabel Heizmodus:Boost Dauer:nicht über Raumtemperatur:nach Fenster offen:Status
Naja, du musst erst mal schaffen das Reading sauber zu belegen.
2019-10-05 11:33:49 auto_command {fhem("set HM_Kueche_Clima controlMode auto
ja genau das ist mein Problem.
setreading ctl_kueche_aio auto_command {fhem("set HM_Kueche_Clima controlMode auto; set HM_Kueche_Clima burstXmit; setreading ctl_kueche_aio boost off")}
Ach, die ";" müssen gedoppelt werden... Zumindest funktioniert es mit:
setreading ctl_kueche_aio auto_command {fhem("set HM_Kueche_Clima controlMode auto;; set HM_Kueche_Clima burstXmit;; setreading ctl_kueche_aio boost off")}
Ich habe hier immer noch etwas Probleme. Der "Code " im DOIF sieht so aus:
([$SELF:heating_mode] eq "Auto")([$SELF:auto_cmd; setreading $SELF boost off]; delete tmr_flur_thresh) DOELSEIF
([$SELF:heating_mode] eq "Fenster")([$SELF:window_cmd]; setreading $SELF boost off; define tmr_flur_thresh at +[$SELF:threshold] setreading $SELF boost on) DOELSEIF
([$SELF:heating_mode] eq "Boost")([$SELF:boost_cmd]; setreading $SELF boost off; define tmr_flur_boost at +[$SELF:duration] setreading $SELF heating_mode Auto) DOELSEIF
([$SELF:heating_mode] eq "Sommer")([$SELF:summer_cmd]; setreading $SELF boost off; delete tmr_flur_thresh)
Und das sind die Readings dazu:
READINGS:
2019-10-07 06:49:50 auto_cmd set HM_Flur_Clima controlMode auto; set HM_Flur_Clima burstXmit
2019-10-07 10:44:23 boost on
2019-10-07 06:47:26 boost_cmd set HM_Flur_Clima controlManu on; set HM_Flur_Clima burstXmit
2019-10-07 10:44:25 cmd 1
2019-10-07 10:44:25 cmd_event ctl_flur_aio
2019-10-07 10:44:25 cmd_nr 1
2019-10-07 09:43:57 duration 00:01:30
2019-10-07 10:44:25 e_ctl_flur_aio_heating_mode Auto
2019-10-07 10:44:25 error ; delete tmr_flur_thresh: Please define tmr_flur_thresh first
2019-10-07 10:44:25 heating_mode Auto
2019-10-07 10:44:40 last_cmd cmd_1
2019-10-07 10:44:40 mode disabled
2019-10-07 10:44:40 state disabled
2019-10-07 06:51:21 summer_cmd set HM_Flur_Clima controlMode auto; set HM_Flur_Clima desired-temp off; set HM_Flur_Clima burstXmit
2019-10-07 10:40:50 temperature 23.0
2019-10-07 10:19:15 threshold 00:00:05
2019-10-07 06:46:48 window_cmd set HM_Flur_Clima controlManu off; set HM_Flur_Clima desired-temp off; set HM_Flur_Clima burstXmit
Es wird aber nicht jedes *_cmd ausgeführt. Liegt das an:
2019-10-07 10:44:25 error ; delete tmr_flur_thresh: Please define tmr_flur_thresh first
Wie kann ich das abfangen? Wenn ich die HM Devices per LightScene ansteuere gibt das zwar nen Eintrag im LOG, der Code wird aber ausgeführt.
Das
[$SELF:auto_cmd; setreading $SELF boost off];
kann so nicht funktionieren.
Dann eher so:
[$SELF:auto_cmd]; setreading $SELF boost off;
::) Oh man, das hab ich glatt übersehen. Jetzt scheint es soweit zu klappen. Gibt es bei so eine Vorgehensweise noch was zu beachten? event-on-change-reading oder checkReadingEvent?
Die einzelnen heating_modes können per Hand (webCmd) geschaltet werden und automatisiert von einem weiteren DOIF - in Kombination von Fensterkontakten und Temperatursensoren.