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