Hauptmenü

Anweisungen im Reading

Begonnen von brown78, 05 Oktober 2019, 09:15:27

Vorheriges Thema - Nächstes Thema

brown78

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?

Damian

Wenn im Reading Command_Auto der ganze FHEM-Befehl zusammengebaut ist, dann sollte im Ausführungsteil ([$SELF:Command_Auto]) funktionieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

brown78

Gibt es da eine Begrenzung der Zeichenlänge? Im Reading bekomme ich nicht alles angezeigt und auch den error no right Bracket

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

brown78

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

brown78

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")}

brown78

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.

Damian

Das

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

kann so nicht funktionieren.

Dann eher so:

[$SELF:auto_cmd]; setreading $SELF boost off;
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

brown78

 ::) 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.