FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: brown78 am 05 Oktober 2019, 09:15:27

Titel: Anweisungen im Reading
Beitrag von: brown78 am 05 Oktober 2019, 09:15:27
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?
Titel: Antw:Anweisungen im Reading
Beitrag von: Damian am 05 Oktober 2019, 11:01:00
Wenn im Reading Command_Auto der ganze FHEM-Befehl zusammengebaut ist, dann sollte im Ausführungsteil ([$SELF:Command_Auto]) funktionieren.
Titel: Antw:Anweisungen im Reading
Beitrag 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
Titel: Antw:Anweisungen im Reading
Beitrag von: Damian am 05 Oktober 2019, 11:18:45
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.
Titel: Antw:Anweisungen im Reading
Beitrag von: brown78 am 05 Oktober 2019, 11:36:11
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
Titel: Antw:Anweisungen im Reading
Beitrag von: Damian am 05 Oktober 2019, 11:47:44
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
Titel: Antw:Anweisungen im Reading
Beitrag von: brown78 am 05 Oktober 2019, 12:04:38
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")}
Titel: Antw:Anweisungen im Reading
Beitrag von: brown78 am 07 Oktober 2019, 10:53:06
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.
Titel: Antw:Anweisungen im Reading
Beitrag von: Damian am 07 Oktober 2019, 11:09:27
Das

[$SELF:auto_cmd; setreading $SELF boost off];

kann so nicht funktionieren.

Dann eher so:

[$SELF:auto_cmd]; setreading $SELF boost off;
Titel: Antw:Anweisungen im Reading
Beitrag von: brown78 am 07 Oktober 2019, 11:18:20
 ::) 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.