Bringen DOIF und Co Performance-Vorteile?

Begonnen von Baumi, 25 Januar 2016, 14:09:08

Vorheriges Thema - Nächstes Thema

Baumi

Ich hab' ein paar Jahre Perl-Erfahrung, und es fällt mir viel leichter, if-Abfragen oder Ähnliches in vertrautem Perl-Code zu schreiben als mich in die Syntax von DOIF, WeekdayTimer und Co einzuarbeiten. (Womit ich die Arbeit der Modul-Autoren nicht schlechtreden will – das sind tolle, leistungsfähige Werkzeuge; nur kann ich eben mit ihnen nicht so gut umgehen wie mit Perl.)

Darum nutze ich auf FHEM-Seite so gut wie nur at und notify, um Perl-Routinen anzustoßen. Alles Weitere wird dann mit Value(), ReadingsVal() und Ähnlichem erledigt, mit denen entschieden wird, ob etwas zu tun ist oder nicht, und falls mal eine verzögerte Reaktion auf einen Aufruf nötig ist, definiere ich per fhem() ein at-Kommando, das einmalig zur richtigen Zeit ausgeführt wird.

Das hat den Vorteil, dass ich den Code sofort verstehe, aber natürlich den Nachteil, dass die Entscheidungslogik teils in FHEM und teils in den Perl-Routinen steckt (die damit auch öfter mal aufgerufen werden, um einfach nur festzustellen, dass sie nichts zu tun haben). Damit kann ich aber leben. Da ich allerdings gerade vom Mac auf einen raspi 2 als Plattform umsteige, frage ich mich, ob meine Methode zu Performance-Engpässen führen könnte, weil die komplexeren FHEM-Kommandos vielleicht irgendwelche Optimierungen nutzen, die mir im Moment entgehen.

Einfaches Beispiel: Ich habe eine Routine, die anhand des Schlafzimmerlichts sowie einiger weiterer Werte – Uhrzeit, Status anderer Lichter und Geräte in der Wohnung – entscheidet, ob gerade jemand wach ist oder nicht. Vereinfacht gesagt: Wenn am späten Abend alle Lampen aus sind, schlafen die Leute wohl, und zwar so lange bis morgens die Schlafzimmerlampe wieder angeht.
Dafür wird im Moment bei jedem Schaltvorgang der Schlafzimmerlampe ein notify aufgerufen, das dann in Perl die restlichen Werte und Readings überprüft und ggf. den Anwesenheitsstatus anpasst. Mit einem DOIF könnte ich viele (oder sogar alle?) dieser Tests wahrscheinlich auf FHEM-Seite machen lassen, würde allerdings für mich eine Menge Lesbarkeit verlieren. Gäbe es da einen signifikanten Performance-Gewinn gegenüber meiner Methode oder kommt es letztlich aufs Selbe heraus?

marvin78

#1
Das kommt wohl darauf an, wie genau (im Detail) du es umgesetzt hast. Man könnte es dann sicher analysieren und vergleichen. Am Ende ist DOIF aber auch in Perl geschrieben. Ob der mögliche mininale Performance-Gewinn den Aufwand rechtfertigt (hier geht es ja vermutlich nicht um millionen von Daten), eine solche Analyse zu machen, kann ich nicht beurteilen.

ich bin der Meinung, dass man, wenn man Perl kann, mit notify, at und Co. deutlich flexibler ist, als mit DOIF. Für den Anfänger und den, der sich nicht so genau mit FHEM und Perl auseinander setzen möcht, ist DOIF eine gute Hilfe, um einfache und etwas komplexere Dinge umzusetzen. Am Ende ist es aber nicht sinnvoll, funktionierende Dinge auf eine neue Basis zu setzen, wenn sich an der Funktion nichts ändern soll.