Gibt es Templates/globale/abstrakte DOIFs?

Begonnen von Cyber1000, 01 Dezember 2017, 12:02:47

Vorheriges Thema - Nächstes Thema

Cyber1000

Hallo,

Kann man vielleicht aus der Überschrift nicht genau rauslesen was ich eigentlich will, drum noch eine genauere Beschreibung. Ich beginne grad mit kleinen DOIF-Skripten, so wie "Waschmaschine fertig" und dgl.. (wie z.B. hier http://loescher-online.de/smarthome.html#waschmaschine und https://forum.fhem.de/index.php?topic=39498.0)

Ich wundere mich nur, dass man diese kleinen Snippets immer wieder schreiben muss, bei mir würden Waschmaschine/Trockner/Geschirrspüler eigentlich alle gleich aussehen (bis auf die Watt-Grenzwerte und das Wort "Trockner", "Waschmaschine", "Geschirrspüler" in der Fertigmeldung).
Also kann man DOIFs irgendwo global definieren und dann nur mehr Variablen einsetzen oder gibt es etwas anderes neben DOIFs, das das erfüllt?
Also eine Art Abstraktion, vielleicht bin ich auch nur zu lang in der Softwareentwicklung und das macht hier auch keiner :-)
Hab hier im Forum auch nichts gefunden was nach "Wiederverwendung", "Template" oder so aussieht, vielleicht auch nur falsch gesucht.

Wäre toll, wenn mir jemand mit mehr Erfahrung eine kurze Info geben kann.
Danke!

Fixel2012

Du kannst dir eine 99_myUtils.pm erstellen und darin eigene Perl Functionen schreiben und innerhalb Fhem beliebig aufrufen.

Oder aber du nimmst ein bereits definiertes DOIF, klickst unten auf raw definition, kopierst das und nutzt es als Vorlage um dir ein zweites ähnliches DOIF zu kreieren.

Aber die Optimale Lösung gibt es für deine Anforderung glaube ich nicht.

Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify


Fixel2012

Oh, gibt ja doch was!

Danke, wieder was gelernt.  :P
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Cyber1000

Danke für eure schnellen Antworten, werd ich mir morgen gleich ansehen.

Cyber1000

Konnte doch nicht auf morgen warten :-)


  • Händisch eine Datei geraetestatus.templ auf /opt/fhem angelegt
  • dann mit template geratestatus.templ {params} am fhem ausgeführt und meine Kommandos wurden ausgeführt, dummy devices, DOIFs angelegt usw.

Macht sicher Sinn, wenn man bestimmte Dinge auf immer die selbe Weise anlegen will, wenn man dann aber etwas ändern muss, muss man trotzdem alle angelegten Geräte, DOIFs usw. anpassen. Da könnte ein zentrales Perlskript vermutlich auch nachträgliche Änderungen einfacher machen (untestet). Ob ich mir das dann allerdings antun will ...

Ich glaub ich schreib mir ein template, das vereinfacht dann  das Anlegen von Geräten mit Statusübergängen.

Danke nochmal für die Antworten!

Damian

Zitat von: Cyber1000 am 01 Dezember 2017, 23:00:09
Konnte doch nicht auf morgen warten :-)


  • Händisch eine Datei geraetestatus.templ auf /opt/fhem angelegt
  • dann mit template geratestatus.templ {params} am fhem ausgeführt und meine Kommandos wurden ausgeführt, dummy devices, DOIFs angelegt usw.

Macht sicher Sinn, wenn man bestimmte Dinge auf immer die selbe Weise anlegen will, wenn man dann aber etwas ändern muss, muss man trotzdem alle angelegten Geräte, DOIFs usw. anpassen. Da könnte ein zentrales Perlskript vermutlich auch nachträgliche Änderungen einfacher machen (untestet). Ob ich mir das dann allerdings antun will ...

Ich glaub ich schreib mir ein template, das vereinfacht dann  das Anlegen von Geräten mit Statusübergängen.

Danke nochmal für die Antworten!

Es ist immer das gleiche Problem: So allgemein wie möglich, so knapp wie nötig.

Wenn sich etwas ändert an dem was man im Template definiert hat, dann muss man beim Template die Änderungen vornehmen bzw. verallgemeinern und die Definitionen über das Template neugenerieren statt sie alle manuell anzupassen.

Alternativ kann man ggf. DOIF-Definitionen selbst verallgemeinern, indem man über $SELF auf eigene Readings zugreift, statt auf Dummys, denn dann sind die Informationen trotz der gleichen Readingangabe DOIF-spezifisch. Die Angaben für externe Devices müssen natürlich schon von außen kommen, da kommt man wohl um Templates nicht herum.




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

Cyber1000

Ja ich hab mir jetzt (vorerst) 3 Templates gemacht:

  • Eines, das mir für ein Gerät Status/dazugehörige DOIFs/andere Dummies/Logs anlegt
  • Eines, das mir eine Benachrichtigung beim Status "done" raushaut. (Hab ich getrennt gemacht, da ich mitunter nicht bei allen Geräten Nachrichten will)
  • Eines, das bis auf das zwave-Gerät und das Log alle DOIFs/Dummies eines Gerät löscht, dann kann ich die wieder (nach einer eventuellen Änderung mit 1. anlegen)

Gut kleine Anpassungen musste ich fast überall machen danach, aber so ein template geht schon flott, jedes Gerät in etwa gleich aufgesetzt.
Gut ich denke damit kann ich arbeiten, zumindest redet jetzt Geschirrspüler, Trockner und Waschmaschine mit mir :-)

Danke nochmal für den Input!