[gelöst]DOIF einfacher gestalten

Begonnen von wendeling, 21 Januar 2018, 11:14:54

Vorheriges Thema - Nächstes Thema

wendeling

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

betateilchen

nimm ein notify und eine Funktion in der 99_myUtils.pm
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Ellert

#2
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

JensS

#3
...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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Ellert

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 "[...]"

wendeling

Hallo,
habe nun notify genommen. Funktioniert super !

Vielen Dank!

Gruß
Wendelin

Da muss ich noch viel lernen !!