DOIF + setLIST + $SELF im Perl-Modus

Begonnen von peter_w, 26 Mai 2022, 19:47:18

Vorheriges Thema - Nächstes Thema

peter_w

Hallo zusammen,
nachdem einige DOIFs eine Größe erreicht haben die extrem unhandlich ist, habe ich entdeckt dass es im Perl-Modus so schöne Sachen wie Templates und Subfunktionen gibt.
Das ist jetzt der Anreiz den Modus mal anzugehen den ich bisher immer umgangen habe.

Ich habe dafür mal eines der komplexen DOIFs "entkernt"  und das DEF mit einer kleinen Testdefinition versehen.

Was ich im ersten Schritt erreichen will: Über die Web Oberfläche mit dem Parameter "$SELF:OpMode" ein Gerät manuell zu schalten.
Das schaut so aus:

{
if ( [Abwesend] eq "ja") ## nobody at home switch off
{
fhem_set "DL_Statusled_Led_13 led off", fhem_set "K_Dehumid3 off" #1 Urlaub
}
elsif ([$SELF:OpMode] eq "Off") ## Manual off
{
(fhem_set "DL_Statusled_Led_13 led off", fhem_set "K_Dehumid3 off") #2 OFF
}
elsif ([$SELF:OpMode] eq "On") ## Manual on
{
(fhem_set "DL_Statusled_Led_13 led red", fhem_set "K_Dehumid3 on") #2 ON
}
}


Wenn ich jetzt das webCmd bediene und von "Off" auf "On" schalte sollte ein Trockner anspringen. Im "normalen DOIF Modus" klappt das prima, mit dem Perl Modus regt sich leider nichts. Das Modul bleibt auch auf dem Status "initialized" stehen.

Hier das komplette device:

nternals:
   .AttrList  disable:0,1 loglevel:0,1,2,3,4,5,6 notexist checkReadingEvent:0,1 addStateEvent:1,0 weekdays setList:textField-long readingList DOIF_Readings:textField-long event_Readings:textField-long uiState:textField-long uiTable:textField-long event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading
   DEF        {
if ( [Abwesend] eq "ja") ## nobody at home switch off
{
fhem_set "DL_Statusled_Led_13 led off", fhem_set "K_Dehumid3 off" #1 Urlaub
}
elsif ([$SELF:OpMode] eq "Off") ## Manual off
{
(fhem_set "DL_Statusled_Led_13 led off", fhem_set "K_Dehumid3 off") #2 OFF
}
elsif ([$SELF:OpMode] eq "On") ## Manual on
{
(fhem_set "DL_Statusled_Led_13 led red", fhem_set "K_Dehumid3 on") #2 ON
}
}
   FUUID      6140bc80-f33f-9f5a-d1a9-5364a9e936df6ae4
   MODEL      Perl
   NAME       DoK_Feuchte3
   NOTIFYDEV  global,Abwesend,DoK_Feuchte3
   NR         1093
   NTFY_ORDER 50-DoK_Feuchte3
   STATE      initialized
   TYPE       DOIF
   VERSION    26020 2022-05-03 16:28:02
   .attreour:
     KWS_TempSens:KWS_Humidity
   .attrminint:
   READINGS:
     2022-05-06 14:29:42   MaxVal          57
     2022-05-06 14:29:50   MedVal          54
     2022-05-06 14:29:54   MinVal          52
     2022-05-26 19:20:31   OpMode          Off
     2022-05-25 12:06:55   RoomSelect      Werkstatt
     2022-05-26 19:18:14   mode            enabled
     2022-05-26 19:18:14   state           initialized
   Regex:
     accu:
     collect:
     cond:
       Abwesend:
         0:
           &STATE     ^Abwesend$
       DoK_Feuchte3:
         0:
           OpMode     ^DoK_Feuchte3$:^OpMode:
   attr:
     cmdState:
       0:
         away1
       1:
         off2
       10:
         normal11
       11:
         dry12
       12:
         wet13
       13:
         normal14
       14:
         dry15
       15:
         wet16
       16:
         normal17
       17:
         dry18
       18:
         Fenster19
       2:
         on3
       3:
         wet4
       4:
         normal5
       5:
         dry6
       6:
         wet7
       7:
         normal8
       8:
         dry9
       9:
         wet10
     wait:
     waitdel:
   condition:
     0         
if ( ::InternalDoIf($hash,'Abwesend','STATE') eq "ja") {
fhem_set "DL_Statusled_Led_13 led off", fhem_set "K_Dehumid3 off" #1 Urlaub
}
elsif (::ReadingValDoIf($hash,'DoK_Feuchte3','OpMode') eq "Off") {
(fhem_set "DL_Statusled_Led_13 led off", fhem_set "K_Dehumid3 off") #2 OFF
}
elsif (::ReadingValDoIf($hash,'DoK_Feuchte3','OpMode') eq "On") {
(fhem_set "DL_Statusled_Led_13 led red", fhem_set "K_Dehumid3 on") #2 ON
}

   helper:
     NOTIFYDEV  global,Abwesend,DoK_Feuchte3
     globalinit 1
     last_timer 0
     sleeptimer -1
   internals:
     all         Abwesend:STATE
   perlblock:
     0          block_01
   readings:
     all         DoK_Feuchte3:OpMode
   uiState:
   uiTable:
Attributes:
   DbLogExclude state
   alias      DOIF Entfeuchter schwarz
   cmdState   away1|off2|on3|wet4|normal5|dry6|wet7|normal8|dry9|wet10|normal11|dry12|wet13|normal14|dry15|wet16|normal17|dry18|Fenster19
   event-on-update-reading KWS_TempSens:KWS_Humidity
   readingList MinVal MaxVal MedVal RoomSelect OpMode
   room       20_Waschküche,Luftfeuchte Keller
   setList    MinVal:slider,45,1,70 MedVal:slider,45,1,70 MaxVal:slider,45,1,70 RoomSelect:Idi,Bad,Musikzimme,Waschkueche,Werkstatt OpMode:Auto,On,Off Trockner:K_Dehumid1,K_Dehumid2,K_Dehumid3 LED:DL_Statusled_Led_13,DL_Statusled_Led_14,DL_Statusled_Led_15
   verbose    5
   webCmd     MinVal:MedVal:MaxVal:RoomSelect:OpMode:Trockner:LED


Hat Jemand eine Idee was ich falsch mache ?

Danke Peter
Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

Damian

DOIF besitzt das ui_State-Attribut, damit kannst du in der Statuszeile alle FHEM-Widgets nutzen, ohne dafür die ganzen Attribute wie readingList, setList und webCmd  definieren zu müssen.

Warum es bei dir nicht funktioniert, kann ich aus der Definition nicht erkennen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF