[Anleitung] - Sonoff T1 EU - Rollosteuerung mit Modul 44_ROLLO

Begonnen von 87insane, 04 Juli 2018, 16:08:34

Vorheriges Thema - Nächstes Thema

87insane

Hab noch drei oder vier zuhause. EU/UK Varianten. Unterscheiden sich nur vom Einbaurahmen. EU = runde Rückseite, UK = eckige Rückseite.
Wenn du Interesse hast....

Bei weiteren Fragen oder aber Verbesserungen oder Wünschen, einfach melden :)

Werde bei Zeit auch mal einen Schalter so nachbauen, dass er reagiert wie ein originaler Gira Schalter. Da ich diese vorher verbaut hatte, ist das sonst natürlich Umgewöhnung. Zudem hat ja jeder andere Vorlieben. Die neuen ESPeasy Firmwares unterstützen von Werk aus z.B. doppelten Tastendruck oder aber langen Tastendruck.

Gestern habe ich das alles in meine Alexa-Fhem Integration eingebunden. Alexa denkt zwar das seie eine Glühbirne, was aber egal ist, da man das Rollo so mit % Angaben steuern kann. Das ist für mich sogar perfekt.

Tedious

Ich hatte überall Vestamatic Rolltec verbaut (waren schon beim Kauf im Haus). Im Wohnbereich habe ich überall HM verbaut, das funktioniert auch tadellos. Habe aber in ein paar Zimmern (z.B. Bad und Büro) noch welche, und bei denen ist mir HM zu teuer (gehen automatisch zeitgesteuert, hab ich noch nie drauf gedrückt). Da wäre diese Lösung ausreichend, ansprechend und günstig.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

87insane

Wohl wahr!

Allerdings immer daran denken - Die Sonoff Schalter passen nicht in z.B. Jäger Busch oder Gira Einbaurahmen. Im Bad hab ich z.B. noch zwei Steckdosen direkt in einem dreier-Verbund mit dem Rolladen Schalter. Da kann ich keinen Sonoff T1 verbauen. Die anderen sind alle separat und da geht es natürlich. Interessanter Weise finden die Leute die Sonoff Schalter alle sehr schön und edel. An allen Stellen, an denen man kein Feedback durch den Schalter benötigt, ist das super. Habe aber auch stellen an denen ich es mag den Schalter zu spüren - Da muss ich mir für die Sonoffs noch etwas einfallen lassen.

Tedious

Die sitzen alle alleine am Fenster in einer tiefen UP Dose - ist also unproblematisch.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

87insane

#19
Guten Morgen zusammen,

habe ein kleines Update gepostet am Anfang (Beitrag 2).

Habe aber auch eine Frage. Aktuell habe ich für die Übergabe der Rollo Positionen ein notify. Dieses ist aber für jedes Rollo und jeweils auf/ab einzeln. Ich hätte lieber eins für alle, wenn so was geht. Hat einer der Hardcore-Fhem-Admins eine Idee? Anbei, wie es aktuell ist:

define az_rollo_manuell_ab notify ESPEasy_az_rollo:strom_output_runter:.* {\
if ($EVTPART1 eq "on" && Value("az_rollo") ne "drive-down") {\
  fhem("set az_rollo extern closed");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("az_rollo") eq "drive-down") {\
  fhem("set az_rollo extern stop");;;;\
}\
}

define az_rollo_manuell_auf notify ESPEasy_az_rollo:strom_output_hoch:.* {\
if ($EVTPART1 eq "on" && Value("az_rollo") ne "drive-up") {\
  fhem("set az_rollo extern open");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("az_rollo") eq "drive-up") {\
  fhem("set az_rollo extern stop");;;;\
}\
}


define sz_rollo_manuell_ab notify ESPEasy_sz_rollo:strom_output_runter:.* {\
if ($EVTPART1 eq "on" && Value("sz_rollo") ne "drive-down") {\
  fhem("set sz_rollo extern closed");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("sz_rollo") eq "drive-down") {\
  fhem("set sz_rollo extern stop");;;;\
}\
}

define sz_rollo_manuell_auf notify ESPEasy_sz_rollo:strom_output_hoch:.* {\
if ($EVTPART1 eq "on" && Value("sz_rollo") ne "drive-up") {\
  fhem("set sz_rollo extern open");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("sz_rollo") eq "drive-up") {\
  fhem("set sz_rollo extern stop");;;;\
}\
}


define wz_rollo_manuell_ab notify ESPEasy_wz_rollo:strom_output_runter:.* {\
if ($EVTPART1 eq "on" && Value("wz_rollo") ne "drive-down") {\
  fhem("set wz_rollo extern closed");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("wz_rollo") eq "drive-down") {\
  fhem("set wz_rollo extern stop");;;;\
}\
}

define wz_rollo_manuell_auf notify ESPEasy_wz_rollo:strom_output_hoch:.* {\
if ($EVTPART1 eq "on" && Value("wz_rollo") ne "drive-up") {\
  fhem("set wz_rollo extern open");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("wz_rollo") eq "drive-up") {\
  fhem("set wz_rollo extern stop");;;;\
}\
}


define k_rollo_manuell_ab notify ESPEasy_k_rollo:strom_output_runter:.* {\
if ($EVTPART1 eq "on" && Value("k_rollo") ne "drive-down") {\
  fhem("set k_rollo extern closed");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("k_rollo") eq "drive-down") {\
  fhem("set k_rollo extern stop");;;;\
}\
}

define k_rollo_manuell_auf notify ESPEasy_k_rollo:strom_output_hoch:.* {\
if ($EVTPART1 eq "on" && Value("k_rollo") ne "drive-up") {\
  fhem("set k_rollo extern open");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("k_rollo") eq "drive-up") {\
  fhem("set k_rollo extern stop");;;;\
}\
}


Wenn man dies in ein notify für alle Rollos packen könnte, wäre es schöner in meinen Augen. ABER - geht es dann auch noch wenn man alle Rollos auf einmal hoch / runter fährt? Danke schon mal an alle, die mich hier unterstützen.

Beta-User

Zitat von: 87insane am 21 Januar 2019, 08:03:20
Habe aber auch eine Frage. Aktuell habe ich für die Übergabe der Rollo Positionen ein notify. Dieses ist aber für jedes Rollo und jeweils auf/ab einzeln. Ich hätte lieber eins für alle, wenn so was geht. Hat einer der Hardcore-Fhem-Admins eine Idee?
Man braucht kein Hardcore-Admin zu sein, schon gleich nicht, da bei dir die Namensgebung ja sehr standardisiert ist:

Schritt 1:
Laß das notify auf ESPEasy_az_rollo:strom_output_(runter|hoch):.* reagieren. Dann mußt du eben noch je einen Zweig für jedes $EVTPART0 bauen.

Schritt 2:
Da das Zieldevice schon im Namen des auslösenden Geräts steckt, mußt du nur den ersten Teil ("ESPEasy_") wegschneiden. Das verkürzte Ergebnis würde ich in eine Variable packen (z.B. my $target) und kannst das dann weiterverwenden:
set $target extern stop

Zum Wegschneiden mal hier austoben: http://regex101.com/
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

#21
Hi Beta-User,

es müsste dann ja in diese Richtung gehen:

1 define rollo_manuell notify ESPEasy_.*_rollo:strom_output_(runter|hoch):.* {\
2 if ($EVTPART1 eq "on" && Value("rName") ne "drive-up / drive-down") {\
3  fhem("set rName extern open / closed");;;;\
4 }\
5 elsif ($EVTPART1 eq "off" && Value("rName") eq "drive-up / drive-down") {\
6  fhem("set rNAME extern stop");;;;\
7 }\
8 }


Zeile 1: Sieht für mich okay aus
Zeile 2: rName = Rollo Name. Wie kann ich alleine mit Regex aus einem gefundenem "ESPEasy_.*_rollo" ein .*_rollo machen? Ich bekomme es hin zu suchen aber leider nicht im gleichen Schritt zu kürzen. Muss hier substr o.Ä. genutzt werden (Gefunden wird z.B. ESPEasy_.*_rollo und ich muss die 8 Stellen am Anfang weg bekommen)? Die Logik hinter dem ganzen hier ist mir klar aber ich habe nach wie vor erhebliche Probleme mit der Syntax und diversen Befehlen, die ich einfach nicht kenne. Die Browser Tabs sind mittlerweile schon so klein, dass es schwer wird die an zu klicken :-P
drive-up oder drive-down - Wie kann ich das entsprechend korrekte einsetzen? Was ich sehe, wäre das anhand von strom_output_runter/hoch fest zu machen. Sowas wie: WENN strom_output_runter DANN drive-down. Wüsste aber nicht, wie ich das noch da rein bekäme.
Zeile 3: Gleiches Thema wie in Zeile 2. Hier nur für closed und open.
Zeile 4: OK
Zeile 5: Siehe Zeile 2
Zeile 6: Siehe Zeile 2 + stop bleibt hier bei runter oder hoch gleich. Also ist nur der Name das Problem hier.
Zeile 7: OK
Zeile 8: OK


EDIT:
So sieht ein Event aus:
2019-01-21 14:11:22 ESPEasy ESPEasy_az_rollo strom_output_runter: on

Beta-User

Zeile 1 ist ok. Aber danach geht's durcheinander...

Zitat von: Beta-User am 21 Januar 2019, 08:25:05
Schritt 1:
[...] Dann mußt du eben noch je einen Zweig für jedes $EVTPART0 bauen.
Versuche doch erst mal Schritt 1 zu machen ;) . Also erst mal ohne Generalisierung des Namens.

Was steht denn wohl in $EVTPART0 drin?
In dieser ersten Unterscheidung läßt du erst mal _nur für ein Rollo_ die beiden notify für dieses eine Rollo aufgehen.

Erst wenn das klappt kommt als nächstes ein "Vorspann" dazu, in dem dann der Name des Zieldevices aus dem $NAME extrahiert wird. Z.B., indem das "ESPEasy_" duch "" ersetzt wird; ungetestet etwa so: my $setDevice = $NAME;
$setDevice =~ tr/^ESPEasy_//;
Wenn das mit dem $setDevice extrahieren klappt, mußt du nur noch den konkreten Namen in deinem konkreten "beide-Events-notify" weiter unten durch die Variable ersetzen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

#23
Fast immer antwortest du mir, wenn ich Hilfe brauche. Immer wenn du antwortest, lese ich die Antwort x mal und versuche sie zu verstehen.
Das liegt weniger an deiner Antwort als das ich eben keine Ahnung habe wie du das gerade in deinem Kopf hast.

ZitatVersuche doch erst mal Schritt 1 zu machen ;) . Also erst mal ohne Generalisierung des Namens.
Dann hätte ich direkt bei drive-up / drive-down und open closed ein Problem. Da ich nicht weiß wie ich dem beibringe was das notify wählen muss.
Leider reicht meine Phantasie nicht um mir in dem Konstrukt weitere IFs ein zu bauen.

$EVTPART0 sollte in dem Fall "strom_output_runter:" sein oder?
Deswegen habe ich überall EVTPART1 stehen. Dort sollte ja nur "on" stehen.
(Siehe meinen Post und das EDIT vor deiner Antwort)

ZitatIn dieser ersten Unterscheidung läßt du erst mal _nur für ein Rollo_ die beiden notify für dieses eine Rollo aufgehen.
Hier schreibst du wieder von zwei notify. Das würde ja dann dem entsprechen, was schon da steht und auch so läuft:

define az_rollo_manuell_ab notify ESPEasy_az_rollo:strom_output_runter:.* {\
if ($EVTPART1 eq "on" && Value("az_rollo") ne "drive-down") {\
  fhem("set az_rollo extern closed");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("az_rollo") eq "drive-down") {\
  fhem("set az_rollo extern stop");;;;\
}\
}

define az_rollo_manuell_auf notify ESPEasy_az_rollo:strom_output_hoch:.* {\
if ($EVTPART1 eq "on" && Value("az_rollo") ne "drive-up") {\
  fhem("set az_rollo extern open");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("az_rollo") eq "drive-up") {\
  fhem("set az_rollo extern stop");;;;\
}\
}


Wenn ich nun hier sage: notify ESPEasy_az_rollo:strom_output_(runter|hoch):.* würde ich es ja schon zu einem notify zusammen fassen. Dann fehlen mir aber die Dinge wie schon oben genannt...drive-up/down, closed und open.

Jetzt bin ich verwirrt!

Was den zweiten Teil deiner Antwort angeht - den hab ich verstanden. Da komme ich nur leider ohne Teil 1 nicht hin.

EDIT:
Was open und close usw angeht sollte es dann ja ca so gehen:

if ($EVTPART0 eq strom_output_hoch set my $richtung = drive-up, set my $zustand = open)
if ($EVTPART0 eq strom_output_runter set my $richtung = drive-down, set my $richtung = closed)


Syntax  :-\

Beta-User

Sorry, wenn ich es nicht schaffe, meine Gedanken selbsterklärend in Worte zu fassen oder in bereits fertigen code. Das Ganze sollte eigentlich so sein, dass man (spätestens) mit etwas wiki- oder commandref-Lektüre dahinter kommt, wie es genau sein soll.

Nochmal zurück zu Schritt 1: Ziel ist, _ein_ notify zu haben, das für _einen_ Rollladen beide Taster auswerten soll und dabei den aktuellen Status berücksichtigen. Das paßt mit der Regex "ESPEasy_az_rollo:strom_output_(runter|hoch):.*"

Dabei kann es bei dieser Regex (dem Suchmuster lt. wiki-Artikel: https://wiki.fhem.de/wiki/Notify#Anweisung) 4 Fälle geben, nämlich 2 unterschiedliche $EVTPART0 (beide Taster) und 2 $EVTPART1 (je on/off).

Also benötigst du eine Strukutur, die in etwa so aussieht:if ($EVTPART0 eq <erster Taster>) {
  if ($EVTPART1 eq "on") {
     ...
  } elsif ($EVTPART1 eq "off") {
     ...
  }
} elsif ($EVTPART0 eq <zweiter Taster>) {
  if ($EVTPART1 eq "on") {
     ...
  } elsif ($EVTPART1 eq "off") {
     ...
  }
}

Um sowas ggf. auf- und auszubauen, empfiehlt es sich, zwischendurch mal was zu loggen, der Link für ein Beispiel (mit ganze $EVENT, das geht aber auch mit den Teilen) ist in dem obigen Wiki-link. Damit kann man insbesondere besser nachvollziehen, ob da dann für die Prüfung mit eq ein Doppelpunkt rein soll oder nicht (oder ob man der Einfachheit halber nur auf das Vorkommen von Bruchstücken wie "runter" oder "hoch" sucht mit "=~/runter/"&Co).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

Guten Morgen zusammen,

zuerst einmal:
ZitatSorry, wenn ich es nicht schaffe, meine Gedanken selbsterklärend in Worte zu fassen oder in bereits fertigen code. Das Ganze sollte eigentlich so sein, dass man (spätestens) mit etwas wiki- oder commandref-Lektüre dahinter kommt, wie es genau sein soll.
Ich möchte an dieser Stelle betonen, das es von meiner Seite aus kein Angriff war sondern eher Bewunderung!
Es gab hier vor kurzem ein Webinar bezüglich FHEM. Ggf. gibt es ja nochmal eins für PERL oder FHEM und das Programmieren mit Beispielen. Würde mich sofort anmelden. Ggf. magst du ja auch etwas zeigen. Du bist immer einer der Ersten die allen helfen hier. Überleg es dir mal wenn du magst. Ich wäre sofort dabei!

ZitatNochmal zurück zu Schritt 1: Ziel ist, _ein_ notify zu haben, das für _einen_ Rollladen beide Taster auswerten soll und dabei den aktuellen Status berücksichtigen. Das paßt mit der Regex "ESPEasy_az_rollo:strom_output_(runter|hoch):.*"
Mein Ziel wäre es für alle Rollos nur ein notify zu haben. Ich vermute du meintest das hier erstmal nur damit man nicht direkt x Fehler drin hat und nach und nach dann kleiner vom Code her wird. Hab anbei mal meine Vorstellung und ggf. sogar schon funktionsfähig. Kann ich leider nicht testen, da ich aktuell keinen FHEM Zugang habe.


define rollo_manuell notify ESPEasy_.*_rollo:strom_output_(runter|hoch):.* {\
my $richtung = '';
my $zustand = '';
my $geraet = $NAME;
$geraet =~ tr/^ESPEasy_//;

if ($EVTPART0 eq "strom_output_hoch") {
  $richtung = "drive-up";
  $zustand = "open";
}
if ($EVTPART0 eq "strom_output_runter") {
  $richtung = "drive-down";
  $zustand = "closed";
}

if ($EVTPART1 eq "on" && Value("$geraet") ne "$richtung") {
  fhem("set $geraet extern $zustand");
}
elsif ($EVTPART1 eq "off" && Value("$geraet") eq "$richtung") {
  fhem("set $geraet extern stop");
}
}


Zum einen, wäre super wenn einer mal einen Blick drauf werfen könnte....
Auf der anderen Seite, würde mich interessieren (allgemein), ob FHEM auch bei mehreren Rollos, die gleichzeitig geschaltet werden, so damit umgehen kann?

Danke!

Beta-User

Zitat von: 87insane am 22 Januar 2019, 07:51:28
Zum einen, wäre super wenn einer mal einen Blick drauf werfen könnte....
Auf der anderen Seite, würde mich interessieren (allgemein), ob FHEM auch bei mehreren Rollos, die gleichzeitig geschaltet werden, so damit umgehen kann?
Moin,

vorab: das "End-notify" soll und wird auf alle passenden Events reagieren und dann je einzeln eine Aktion starten. Wenn also die Events eindeutig sind, sollte das kein Problem geben.
Allerdings frage ich mich, wie du gleichzeitig so viele Schalter drücken willst ;) .

Was den code angeht, solltest du das wie bereits vorgeschlagen Schritt für Schritt machen und nicht alles auf einmal, da passieren leicht Fehler bzw. es ist auch schwieriger festzustellen, an was es hängt. Hier hast du m.E. einen Logikfehler eingebaut...

Zitat von: 87insane am 22 Januar 2019, 07:51:28
Mein Ziel wäre es für alle Rollos nur ein notify zu haben.
Das ist das Ziel von Schritt 2, in Schritt 1 sollte erst mal nur ein notify auf beide Varianten reagieren, allerdings nur von einem Rolladen. Also immer noch meine Empfehlung: gehe erst den ersten Schritt, baue ggf. ein paar Log-Ausgaben ein (und später wieder aus, wenn du sie nicht mehr brauchst)...

Das funktioniert aber leider nicht so gut ohne konkrete Zugriffsmöglichkeit auf FHEM ;) , also übe dich in Geduld!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

Moin moin,

die Telekom hat meine Leitung nun wieder zum laufen bekommen. Jetzt kann es weiter gehen :)

ZitatAllerdings frage ich mich, wie du gleichzeitig so viele Schalter drücken willst
Naja - Die Steuerung an sich läuft ja auch über Alexa usw.... Diese sendet an FHEM und FHEM wiederrum sendet per event an den jeweiligen Schalter. Für den Schalter ist es dann so als wäre tatsächlich ein Knopf betätigt worden. Hat den Vorteil, dass auch die Rules auf dem Schalter mit machen. Somit würde ich mit einer Routine "Alle Rollos runter/hoch" immer direkt alle gleichzeitig schalten. Das klappt aktuell auch. Hatte nur Sorge, dass es mit einer Rule ggf. nicht geht, da ich nicht genau weiß wie FHEM die Dinge ab arbeitet.

ZitatWas den code angeht, solltest du das wie bereits vorgeschlagen Schritt für Schritt machen und nicht alles auf einmal, da passieren leicht Fehler bzw. es ist auch schwieriger festzustellen, an was es hängt. Hier hast du m.E. einen Logikfehler eingebaut...
Bin ich bei dir und hatte heute Morgen den Drang es mal komplett auf zu schreiben, um zu gucken wo ich ggf. hängen bleibe. Zum einen lese ich noch diverse Anleitungen zum Thema Regex und versuche diese zu verstehen und zum anderen finde ich gerade das ein echt unverständliches Thema....
Wo ist in deinen Augen der Logik Fehler? Ich weiß es aus deinen anderen Beiträge...Du versuchst gerne Freiraum zu lassen, damit die Leute es auch selber lernen und nicht du alleine die ganzen FHEMs installierst ;) Hab ich schon verstanden. Ist auch gut so!


ZitatDas ist das Ziel von Schritt 2, in Schritt 1 sollte erst mal nur ein notify auf beide Varianten reagieren, allerdings nur von einem Rolladen. Also immer noch meine Empfehlung: gehe erst den ersten Schritt, baue ggf. ein paar Log-Ausgaben ein (und später wieder aus, wenn du sie nicht mehr brauchst)...
Wie man das am Ende zwecks Debug anpasst, loggt oder sonst was ist im besten Fall nicht von Nöten. Sollte es so sein, kann ich wenigstens das :)

Beta-User

Zitat von: 87insane am 22 Januar 2019, 14:30:33
[...] da ich nicht genau weiß wie FHEM die Dinge ab arbeitet.
Die Abarbeitung aller Aufgaben ist streng linear, und eigentlich sollte auch nichts verloren gehen. Lektüreempfehlung: https://wiki.fhem.de/wiki/Fhem.pl
Schwierig wird es eigentlich erst, wenn FHEM zu langsam wird, (vornehmlich, weil irgendwas blockiert) und dann Daten ggf. nicht rechtzeitig von irgendwelchen Interfaces abgeholt werden.
ZitatWo ist in deinen Augen der Logik Fehler?
Ich habe nur schnell drüber geschaut und gesehen, dass es eben nicht in dem Stil ist, erst mal die zwei "hoch/runter"-notify zu ersetzten und jedes praktisch unverändert in einem $EVTPART0-Zweig zu behandeln, sondern geändert. Daher weiß ich nicht, ob man den Fall
elsif ($EVTPART1 eq "off" && Value("$geraet") ne "$richtung")braucht oder nicht ;) . Scheint nicht der Fall zu sein...
Grundsätzlich würde ich aber immer dazu raten, erst mal die Logikstruktur im Kern so zu belassen, wie sie ist, und dann nach und nach zu generalisieren und erst danach nochmal über die Grundstruktur nachzudenken - und dabei dann alle Kombinationen gedanklich durchzuspielen, selbst wenn man am Ende zu dem Schluß kommt, es ist - für den aktuellen Anwendungsfall - irrelevant.
Für mich ist das einfacher und nicht gleich so abstrakt; da muß halt jeder seinen Weg finden :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

#29
Es werden in der original Logik nur die genannten Fälle benötigt.

Das hier wäre ganz original aus dem Wiki zum Modul:

define rollo_manuell_auf DOIF ([meinRollo_Kanal1] eq "on" and [?meinRolloModul] ne "drive-up") (set meinRolloModul extern open) DOELSEIF ([meinRollo_Kanal1] eq "off" and [?meinRolloModul] eq "drive-up") (set meinRolloModul extern stop)
define rollo_manuell_ab  DOIF ([meinRollo_Kanal2] eq "on" and [?meinRolloModul] ne "drive-down") (set meinRolloModul extern closed) DOELSEIF ([meinRollo_Kanal2] eq "off" and [?meinRolloModul] eq "drive-down") (set meinRolloModul extern stop)


Das hier ist schon der angepasste Fall (das geht auch) von mir bzw. auch uns beiden. In einem anderen Thread hier sprachen wir darüber:

define az_rollo_manuell_ab notify ESPEasy_az_rollo:strom_output_runter:.* {\
if ($EVTPART1 eq "on" && Value("az_rollo") ne "drive-down") {\
  fhem("set az_rollo extern closed");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("az_rollo") eq "drive-down") {\
  fhem("set az_rollo extern stop");;;;\
}\
}

define az_rollo_manuell_auf notify ESPEasy_az_rollo:strom_output_hoch:.* {\
if ($EVTPART1 eq "on" && Value("az_rollo") ne "drive-up") {\
  fhem("set az_rollo extern open");;;;\
}\
elsif ($EVTPART1 eq "off" && Value("az_rollo") eq "drive-up") {\
  fhem("set az_rollo extern stop");;;;\
}\
}


Und das hier wäre in meinen Augen dann, das neue (allerdings weiß ich hier noch nicht ob das mit dem Trimmen usw geht. Das muss ich noch testen):

define rollo_manuell notify ESPEasy_.*_rollo:strom_output_(runter|hoch):.* {\
my $richtung = '';
my $zustand = '';
my $geraet = $NAME;
$geraet =~ tr/^ESPEasy_//;

if ($EVTPART0 eq "strom_output_hoch") {
  $richtung = "drive-up";
  $zustand = "open";
}
if ($EVTPART0 eq "strom_output_runter") {
  $richtung = "drive-down";
  $zustand = "closed";
}

if ($EVTPART1 eq "on" && Value("$geraet") ne "$richtung") {
  fhem("set $geraet extern $zustand");
}
elsif ($EVTPART1 eq "off" && Value("$geraet") eq "$richtung") {
  fhem("set $geraet extern stop");
}
}


Also von 1-3 hat sich ja schon einiges geändert. Bis auf das Deklarieren der Variablen und das Trimmen bin ich fast sicher das es so geht. Bin echt gespannt....