Die Commandref zu DOIF soll umgeschrieben werden

Begonnen von Damian, 28 September 2018, 20:33:49

Vorheriges Thema - Nächstes Thema

Damian

#15
Ich gebe euch recht, dass die neue Syntax für den einen oder anderen DOIF-Anhänger zunächst unlogisch erscheint - man hat sich schließlich  an DOIF ... DOELSEIF... gewöhnt.

Im Grunde hat die neue Syntax gar keine Strukturvorgaben innerhalb eines Blocks, man könnte sagen:

{irgendetwas in Perl mit Ereignis-, Zeittriggern}

Dadurch ergeben sich ungeahnte Möglichkeiten, die die meisten zunächst nicht sehen.

Wenn man dann noch weiß, dass man beliebig viele dieser Blöcke innerhalb eines DOIFs angeben kann, und jeder davon unabhängig von den restlichen ist, dann kann es durchaus eine Vereinfachung bei umfangreicheren Projekten sein. Im FHEM-Modus muss man alles, was in einem DOIF steckt in eine Abhängigkeit bringen. Wenn aber in einem Projekt Dinge völlig unabhängig stattfinden sollen, dann musste man bisher mehrere DOIFs definieren. Viele versuchen ihr komplexes Projekt aber dennoch in ein DOIF zu packen und erzeugen  im FHEM-Modus künstliche Abhängigkeiten, die sie dann nicht mehr durchschauen. Spätestens bei 10 DOELSEIF-Zweigen schaue ich mir die geposteten Probleme hier nicht mehr an, weil ich sie selber nicht mehr durchblicke.

Natürlich hat der FHEM-Modus seine Vorteile bei einfachen Dingen, die vereinfachte Syntax habe ich mir ja schließlich selbst ausgedacht :). Im Perl-Modus ist die Syntax eben von Perl vorgegeben. Im Übrigen: der do always Modus ist im Perl-Modus ist immer an ;)

Spätestens, wenn einer eine komfortable Rollladensteuerung (die X-te) oder Heizungssteuerung im Perl-Modus programmiert, werden die eigentlichen Vorteile klar.

Wie dem auch sei, ich habe die Commanderref angepasst. Für den FHEM-User ändert sich nicht viel, bei allen elementaren Beispielen im FHEM-Modus ist jetzt auch ein Beispiel im Perl-Modus dazugekommen (dieses ist als solches gekennzeichnet). Im Abschnitt Perlmodus gibt es ein Inhaltsverzeichnis, welches auf die Punkte des FHEM-Modus verweist, die auch den Perlmodus betreffen.

siehe Commandref im Anhang.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Ich würde auf Dummys in den Beispielen verzichten, sondern Benutzerreadings im DOIF verwenden, diese Beispiele verleiten sonst dazu Dummys als Variablenersatz zu verwenden.

Also statt
define time dummy
set time 08:00

define di_time DOIF ([[time]])(set lamp on)
attr di_time do always

ohne Dummy
define di_time DOIF ([[$SELF:T_time]])(set lamp on)
attr di_time do always

setreading di_time T_time 08:00

Damian

Zitat von: Ellert am 30 September 2018, 20:54:49
Ich würde auf Dummys in den Beispielen verzichten, sondern Benutzerreadings im DOIF verwenden, diese Beispiele verleiten sonst dazu Dummys als Variablenersatz zu verwenden.

Also statt
define time dummy
set time 08:00

define di_time DOIF ([[time]])(set lamp on)
attr di_time do always

ohne Dummy
define di_time DOIF ([[$SELF:T_time]])(set lamp on)
attr di_time do always

setreading di_time T_time 08:00


ja, das ist sicherlich ein Relikt aus alter Zeit, als DOIF alle Readings beim Initialisieren gelöscht hat.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Christoph Morrison

Zitat von: Damian am 30 September 2018, 18:16:05
siehe Commandref im Anhang.

Wir haben übrigens mit dem Wiki eine komfortable Möglichkeit, solche Texte gemeinsam zu bearbeiten ohne hier immer wieder Versionen runter- und hochladen zu müssen.

Ellert

Die Diskussion im Wiki ist zu umständlich und die Wikisyntax ist nicht ist kompatibel zur Commandref.

Damian

Zitat von: Christoph Morrison am 30 September 2018, 20:59:12
Wir haben übrigens mit dem Wiki eine komfortable Möglichkeit, solche Texte gemeinsam zu bearbeiten ohne hier immer wieder Versionen runter- und hochladen zu müssen.

Klar. Hier geht es aber um die Commandref (die möchte ich nicht gemeinsam bearbeiten ;) ). Zum Thema Wiki hatte wir schon eine Diskussion, danach mussten die anfänglichen Einträge von Dritten zu DOIF gelöscht werden, weil sie falsch waren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Das mit dem Auslagern aus der Commandref hatte ich schon vor vielen Monden geschrieben, da hatte DOIF noch nicht (gefühlt) die Hälfte beansprucht. Inzwischen schon. Wenn man da etwas sucht, scrollt man sich kaputt. Ober bekommt 3000 Treffer, weil der Suchbegriff auch in anderen Devices vorhanden ist.

Auch wenn Damian (zu Recht) stolz auf den Perl-Mode ist, aber der "Echte" Perl-Programmierer greift dann wahrscheinlich doch lieber auf notifys und/oder myUtils zurück. Ich (!) werde den Perl-Modus vllt. für ein paar Spezialfälle einsetzen, wenn überhaupt.

Damian

Zitat von: Per am 01 Oktober 2018, 13:35:37
Das mit dem Auslagern aus der Commandref hatte ich schon vor vielen Monden geschrieben, da hatte DOIF noch nicht (gefühlt) die Hälfte beansprucht. Inzwischen schon. Wenn man da etwas sucht, scrollt man sich kaputt. Ober bekommt 3000 Treffer, weil der Suchbegriff auch in anderen Devices vorhanden ist.

Auch wenn Damian (zu Recht) stolz auf den Perl-Mode ist, aber der "Echte" Perl-Programmierer greift dann wahrscheinlich doch lieber auf notifys und/oder myUtils zurück. Ich (!) werde den Perl-Modus vllt. für ein paar Spezialfälle einsetzen, wenn überhaupt.

Ich werde jetzt auch nicht meine bisherigen DOIF-Definitionen umstellen, weil es den Perl-Modus gibt. Alles was man mit zwei Zeilen erledigen kann, lässt sich sicherlich einfacher im FHEM-Modus erledigen und das ist auch gut so. Immerhin kümmert sich im FHEM-Modus DOIF auch um den Status :)

Dennoch ist es wichtig, die neuen Möglichkeiten publik zu machen, damit etwas Neues auch eine Chance bekommt. Bei uiTable z. B. fehlt noch eine gute Einsteiger-Doku - deswegen wird es bisher von den meisten ignoriert.

Hätte ich die DOIF-Doku nicht von Anfang an so auf den Anfänger zugeschnitten gestaltet, hätte dieses Modul sicherlich viel weniger Anhänger gefunden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

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