FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wendeling am 21 Januar 2018, 11:14:54

Titel: [gelöst]DOIF einfacher gestalten
Beitrag von: wendeling am 21 Januar 2018, 11:14:54
Hallo,
ich habe mir für meine Rollosteuerung ein DOIF zusammengestellt.
Leider habe ich wenig Erfahrung, deshalb sehr einfach gestaltet.
Gib es eine Möglichkeit diese lange Programmierung durch $ oder soetwas erheblich zu vereinfachen ?



Hier mein bisheriges Werk :


efmod EG_ROLLO_Wohnzimmer_Sammler DOIF ([EG_Rollo_Wohnzimmer:command] =~ "closed")\
(set EG_Rollo_Wohnzimmer_Tuer closed)\
(set EG_Rollo_Wohnzimmer_g_Fenster closed)\
(set EG_Rollo_Wohnzimmer_Fenster closed)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "open")  \
(set EG_Rollo_Wohnzimmer_Tuer open)\
(set EG_Rollo_Wohnzimmer_g_Fenster open)\
(set EG_Rollo_Wohnzimmer_Fenster open)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "half")  \
(set EG_Rollo_Wohnzimmer_Tuer half)\
(set EG_Rollo_Wohnzimmer_g_Fenster half)\
(set EG_Rollo_Wohnzimmer_Fenster half)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "stop")  \
(set EG_Rollo_Wohnzimmer_Tuer stop)\
(set EG_Rollo_Wohnzimmer_g_Fenster stop)\
(set EG_Rollo_Wohnzimmer_Fenster stop)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-0")  \
(set EG_Rollo_Wohnzimmer_Tuer position 0)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 0)\
(set EG_Rollo_Wohnzimmer_Fenster position 0)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-10")  \
(set EG_Rollo_Wohnzimmer_Tuer position 10)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 10)\
(set EG_Rollo_Wohnzimmer_Fenster position 10)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-20")  \
(set EG_Rollo_Wohnzimmer_Tuer position 20)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 20)\
(set EG_Rollo_Wohnzimmer_Fenster position 20)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-30")  \
(set EG_Rollo_Wohnzimmer_Tuer position 30)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 30)\
(set EG_Rollo_Wohnzimmer_Fenster position 30)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-40")  \
(set EG_Rollo_Wohnzimmer_Tuer position 40)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 40)\
(set EG_Rollo_Wohnzimmer_Fenster position 40)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-50")  \
(set EG_Rollo_Wohnzimmer_Tuer position 50)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 50)\
(set EG_Rollo_Wohnzimmer_Fenster position 50)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-60")  \
(set EG_Rollo_Wohnzimmer_Tuer position 60)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 60)\
(set EG_Rollo_Wohnzimmer_Fenster position 60)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-70")  \
(set EG_Rollo_Wohnzimmer_Tuer position 70)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 70)\
(set EG_Rollo_Wohnzimmer_Fenster position 70)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-80")  \
(set EG_Rollo_Wohnzimmer_Tuer position 80)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 80)\
(set EG_Rollo_Wohnzimmer_Fenster position 80)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-90")  \
(set EG_Rollo_Wohnzimmer_Tuer position 90)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 90)\
(set EG_Rollo_Wohnzimmer_Fenster position 90)\
\
DOELSEIF ([EG_Rollo_Wohnzimmer:command] =~ "position-100")  \
(set EG_Rollo_Wohnzimmer_Tuer position 100)\
(set EG_Rollo_Wohnzimmer_g_Fenster position 100)\
(set EG_Rollo_Wohnzimmer_Fenster position 100)


Gruß
Wendelin
Titel: Antw:DOIF einfacher gestalten
Beitrag von: betateilchen am 21 Januar 2018, 11:50:24
nimm ein notify und eine Funktion in der 99_myUtils.pm
Titel: Antw:DOIF einfacher gestalten
Beitrag von: Ellert am 21 Januar 2018, 11:52:07
Wenn es keine weiteren Geräte gibt die mit EG_Rollo_Wohnzimmer_ beginnen, dann kannst Du über devspec Regexp alle 3 Geräte mit einem set-Befehl ansprechen

set EG_Rollo_Wohnzimmer_.* <wert>

Mehr Infos http://fhem.de/commandref_DE.html#devspec
Titel: Antw:DOIF einfacher gestalten
Beitrag von: JensS am 21 Januar 2018, 20:40:21
...demnach sollte es so funktionieren:
define EG_Rollo_Wohnzimmer_Sammler notify EG_Rollo_Wohnzimmer.command:.* {my $a = $EVTPART1;;$a=~ s/-/ /g;;fhem("set EG_Rollo_Wohnzimmer_.* $a")}

Gruß Jens
Titel: Antw:DOIF einfacher gestalten
Beitrag von: Ellert am 22 Januar 2018, 08:50:17
Ja, fürs DOIF sähe es inklusive "extended set magic" so aus

EG_ROLLO_Wohnzimmer_Sammler DOIF ([EG_Rollo_Wohnzimmer:command] =~ "closed|open|half|stop|\d?\d?0")
   (set EG_Rollo_Wohnzimmer_.* {([EG_Rollo_Wohnzimmer:command] =~ /(closed|open|half|stop|\d?\d?0)/;;$1)})

mit spezifischer Rexexp, um unerwünschte Zwischenzustände auszuschliessen
ggf. do always , abhängig von den tatsächlichen Events
ggf. reicht ein Semikolon
in set ... [...] ggf. Anführungszeichen "[...]"
Titel: Antw:DOIF einfacher gestalten
Beitrag von: wendeling am 22 Januar 2018, 10:20:26
Hallo,
habe nun notify genommen. Funktioniert super !

Vielen Dank!

Gruß
Wendelin

Da muss ich noch viel lernen !!