Hauptmenü

DOIF oder Perl Code

Begonnen von der_oBi, 26 September 2016, 07:06:08

Vorheriges Thema - Nächstes Thema

der_oBi

Hi zusammen,

ich arbeite bisher größtenteils mit eigenen Utils, in denen ich verschiedene if Abfragen durchführe, Variablen umforme etc.. Ausgelöst werden die durch notifys oder durch Userreadings.
Nun habe ich mich ein wenig mit DOIF beschäftigt und frage mich, ob DOIF nicht die schönere/bessere Lösung ist. Insbesondere die hinterlegte Statemachine mit cmd_1, cmd_2 etc. gefällt mir. Allein die Umformerei der Variablen stelle ich mir schwerer vor mithilfe von DOIF.

Hat eine der beiden Herangehensweise irgendwelche Vorteile oder Nachteile? Erzeugt der Perl-Code in den Utils evtl. mehr Last?

Gruß
Obi

Damian

Zitat von: der_oBi am 26 September 2016, 07:06:08
Hi zusammen,

ich arbeite bisher größtenteils mit eigenen Utils, in denen ich verschiedene if Abfragen durchführe, Variablen umforme etc.. Ausgelöst werden die durch notifys oder durch Userreadings.
Nun habe ich mich ein wenig mit DOIF beschäftigt und frage mich, ob DOIF nicht die schönere/bessere Lösung ist. Insbesondere die hinterlegte Statemachine mit cmd_1, cmd_2 etc. gefällt mir. Allein die Umformerei der Variablen stelle ich mir schwerer vor mithilfe von DOIF.

Hat eine der beiden Herangehensweise irgendwelche Vorteile oder Nachteile? Erzeugt der Perl-Code in den Utils evtl. mehr Last?

Gruß
Obi




Von der Performance wirst du keine nennenswerten Unterschiede feststellen.


Viele Ausdrücke sind kürzer zu formulieren, weil es für typische Ausdrücke, die man in FHEM benötigt, eigene Syntax gibt (Angaben in eckigen Klammern).

Ich habe es in erster Linie deswegen programmiert, weil mir für typische Automatisierungsaufgaben der ständige Wechsel zwischen Perl und FHEM zu umständlich erschien.

DOIF kann insbesondere eine Sache, die du mit at, notify und Perl in einer Definition nicht ohne weiteres schaffst - es kann gleichzeitig auf Ereignisse und auf Zeittrigger reagieren. 

Allerdings ist auch beim DOIF, insbesondere in den Bedingungen das Verständnis von Perl nützlich.

Welchen Weg du einschlägst, musst du schlussendlich selbst für dich entscheiden.


Gruß

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

der_oBi

Was ich vergessen habe zu erwähnen:
Mir gefällt an DOIF auch die Möglichkeit, Befehle zu verzögern.

Wie ich das in Perl umsetze (ohne FHEM zu blocken), ist mir noch nicht ganz klar. Meine einzige Idee wäre, ein einmaliges at zu definieren in dem der Befehl ausgeführt wird. Dieses müsste ich dann aber löschen, wenn innerhalb der Verzögerungszeit die Bedingung nicht mehr wahr ist. Irgendwie umständlich...

Gibt es da eine bessere Lösung in Perl Utils?

Damian

Zitat von: der_oBi am 26 September 2016, 14:33:03
Was ich vergessen habe zu erwähnen:
Mir gefällt an DOIF auch die Möglichkeit, Befehle zu verzögern.

Wie ich das in Perl umsetze (ohne FHEM zu blocken), ist mir noch nicht ganz klar. Meine einzige Idee wäre, ein einmaliges at zu definieren in dem der Befehl ausgeführt wird. Dieses müsste ich dann aber löschen, wenn innerhalb der Verzögerungszeit die Bedingung nicht mehr wahr ist. Irgendwie umständlich...

Gibt es da eine bessere Lösung in Perl Utils?

Normalerweise musst du dich selbst um das Löschen kümmern, ob bei at, sleep oder wenn du es selbst in Perl programmieren willst. Genau das habe ich auch programmiert - im DOIF-Modul ;)


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

der_oBi

Die Verzögerungen im DOIF sind also auch nur FHEM sleep befehle? Perl sleep blockt ja bekanntlich FHEM komplett, oder?


Gesendet von iPhone mit Tapatalk

Damian

Zitat von: der_oBi am 26 September 2016, 17:05:43
Die Verzögerungen im DOIF sind also auch nur FHEM sleep befehle? Perl sleep blockt ja bekanntlich FHEM komplett, oder?


Gesendet von iPhone mit Tapatalk

DOIF ist in Perl programmiert und das benutzt Funktionsaufrufe, die in fhem.pl zur Verfügung gestellt werden. Dieselben Aufrufe benutzen natürlich alle FHEM-Module oder FHEM-Befehle wie auch FHEM-Sleep und at. FHEM-Sleep blockiert nicht, wenn man unmittelbar danach mit Semikolon den Befehl angibt.


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

der_oBi

Aber um einen Befehl um zB 20 min zu verzögern ist doch sauberer mit at statt mit sleep zu lösen, oder?


Gesendet von iPhone mit Tapatalk

Damian

Zitat von: der_oBi am 27 September 2016, 06:58:54
Aber um einen Befehl um zB 20 min zu verzögern ist doch sauberer mit at statt mit sleep zu lösen, oder?


Gesendet von iPhone mit Tapatalk

Hinter at und FHEM-sleep steckt der selbe Funktionsaufruf.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der_oBi

Verdammte Axt!
Wieder was gelernt :)

Ich werde mir am WE mal anschauen ob ich meine bisherigen Utils auch mit DOIF umsetzen könnte.
Um meine Variablen umzuformen etc könnte ich ja auch per DOIF eine Perl-Sub aufrufen...


Gesendet von iPhone mit Tapatalk

Thyraz

Ich sehe keinen zwingenden Grund alles umzurüsten.

Ich habe bei mir Notifies für einfache Dinge, welche direkt einfache Befehle triggern.
At wird für einfache reine Zeitsteuerung verwendet.

DOIF für alles was in den anderen Fällen nicht mit einem einzigen notifiy / at funktionieren würde.
Der große Vorteil ist hier, alles an einem Fleck zu haben.
Oder eben Lösungen die wirklich eine Art State Machine sind.

MyUtils wird dennoch stark genutzt bei mir für Hilfsfunktionen, welche ich öfters benötige.
Diese Funktionen rufe ich dann in meinen Notifies / Doifs auf.

Z.B. eine Funktion, welche ein Array der Zuhause anwesenden Bewohner zurückliefert, oder den letzten Bewohner der das Haus verlassen hat.
Eine andere Funktion zum senden von PushMessages auf Handys.
Wieder eine andere liefert alle offenen Fenster etc.

So lassen sich Ereignisse und Reaktionen mit diesen Funktionen z.B. in DOIFs sehr leicht verknüpfen, ohne dass das DOIF durch den ganzen Code dahinter unübersichtlich wird.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

KernSani

Zitat von: Thyraz am 27 September 2016, 09:05:49
Ich sehe keinen zwingenden Grund alles umzurüsten.

Ich habe bei mir Notifies für einfache Dinge, welche direkt einfache Befehle triggern.
At wird für einfache reine Zeitsteuerung verwendet.
Umrüsten würde ich auch nicht (außer ich mache gerade eh größere Änderungen) aber alles was neu ist, mache ich mittlerweile mit DOIF. Die Erfahrung zeigt, dass aus der einfachen Zeitsteuerung schnell was komplexeres wird...
Zitat von: Thyraz am 27 September 2016, 09:05:49
MyUtils wird dennoch stark genutzt bei mir für Hilfsfunktionen, welche ich öfters benötige.
dito
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...