Hauptmenü

DOIF richtig einsetzen

Begonnen von FHEM16, 08 Juli 2018, 14:09:48

Vorheriges Thema - Nächstes Thema

FHEM16

Hallo zusammen,

ich bin gerade dabei meine Konfiguration aufzuräumen und vor allem zu optimieren. Leider bin ich mir unsicher, wie ich meine DOIF's am besten einrichte :(
Es gibt keine Funktionsprobleme und ich möchte die DOIF's nur richtig und optimal einsetzen.

Beispiel: Ich möchte ein DOIF aufgrund der aktuellen Helligkeit ausführen und möchte z.B. 20 Helligkeitswerte abfragen.

Lösung 1: Ich erstelle 1 DOIF und frage alle Helligkeitswerte in diesem DOIF über DOELSEIF ab
Lösung 2: Ich erstelle für jeden Helligkeitswert ein eigenes DOIF

Frage: Welche Lösung wäre hier zu empfehlen?

Vielen Dank im Voraus für Eure Empfehlung und Erklärung!

Viele Grüße
Fhem16

betateilchen

Zitat von: FHEM16 am 08 Juli 2018, 14:09:48
und ich möchte die DOIF's nur richtig und optimal einsetzen.

weglassen  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Zitat von: FHEM16 am 08 Juli 2018, 14:09:48
Hallo zusammen,

ich bin gerade dabei meine Konfiguration aufzuräumen und vor allem zu optimieren. Leider bin ich mir unsicher, wie ich meine DOIF's am besten einrichte :(
Es gibt keine Funktionsprobleme und ich möchte die DOIF's nur richtig und optimal einsetzen.

Beispiel: Ich möchte ein DOIF aufgrund der aktuellen Helligkeit ausführen und möchte z.B. 20 Helligkeitswerte abfragen.

Lösung 1: Ich erstelle 1 DOIF und frage alle Helligkeitswerte in diesem DOIF über DOELSEIF ab
Lösung 2: Ich erstelle für jeden Helligkeitswert ein eigenes DOIF

Frage: Welche Lösung wäre hier zu empfehlen?

Vielen Dank im Voraus für Eure Empfehlung und Erklärung!

Viele Grüße
Fhem16

Es kommt darauf an, ob du 20 unabhängige Aktoren bedienen willst oder z. B. nur einen. Selbst bei einem würde man vermutlich die 20 Stufen in Abhängigkeit berechnen lassen, dann würde man auch mit einem Zweig auskommen.

Auf allgemeine Fragen gibt es leider nur allgemeine Antworten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM16

Ich habe gedacht es ist einfach zu sagen, welche Lösung bei vielen Abfragen zu bevorzugen ist.
Leider kenne ich die Unterschiede für die beiden Lösungen um diese zu bewerten und würde daher meine aktuelle Umsetzung etwas genauer bechreiben.

Ziel: Abhängig von der Aussenhelligkeit und weiteren Werten (z.B. Jahreszeit, Uhrzeit) sollen verschiedene Lampen über das LightScene Module geschalten werden.
Die Abfragen sollen schnell erfolgen und Fhem so wenig wie möglich belasten.

Aktuell Umsetzung: Der gemessene Helligkeitswert wird gemessen und über ein DOIF (mit mehreren DOELSEIF) wird ein Helligkeitsbereich in einem Dummy gespeichert z.B. helligkeitkeit1000, helligkeitkeit900, helligkeitkeit800...
Sobald ein neuer Helligkeitswert in dem Dummy gespeichert wurde (dieser Wert wird auch woanders benötigt), wird über ein anderes DOIF (wieder mit mehreren DOELSEIF) der Wert "gefunden" und die entsprechende LightScene gesetzt.

Somit werden relative viele DOIF/DOELSEIF genutzt um nur die LightScene (aufgrund der aktuellen Situation) zu setzen und ich suche hier die "beste" Umsetzung.

Sollte noch etwas unklar sein bitte melden :)

Viele Dank und viele Grüße
Fhem16

Damian

Ob du alles über ein DOIF abdeckst oder über mehrere, ist Geschmackssache. Dinge, die nicht miteinander zusammenhängen, würde ich in mehreren DOIFs unterbringen.

Ob du viele DOIFs hast oder wenige, macht nicht viel aus. Pro Definition kommen ein paar Kilobyte dazu, der Code liegt nur einmal im Speicher. Das Wachen eines DOIFs kostet auf meinem System 0,03 Millisekunden pro Event - kann man vernachlässigen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM16

Vielen Dank Damian für die hilfreiche Information!

ZitatDinge, die nicht miteinander zusammenhängen, würde ich in mehreren DOIFs unterbringen.
So war damals auch mein Gedanke und daher habe ich für eine Aufgabe alles in ein DOIF (mit mehren DOELSEIF) gepackt.

Ich war mir jetzt nur nicht sicher da ich dachte: Es geht vielleicht schneller, wenn direkt immer die erste Bedingung in einem DOIF zutrifft und nicht erst nach mehreren DOELSEIF.

Nochmals vielen Dank und viele Grüße
Fhem16

Damian

Zitat von: FHEM16 am 09 Juli 2018, 00:15:17
Vielen Dank Damian für die hilfreiche Information!
So war damals auch mein Gedanke und daher habe ich für eine Aufgabe alles in ein DOIF (mit mehren DOELSEIF) gepackt.

Ich war mir jetzt nur nicht sicher da ich dachte: Es geht vielleicht schneller, wenn direkt immer die erste Bedingung in einem DOIF zutrifft und nicht erst nach mehreren DOELSEIF.

Nochmals vielen Dank und viele Grüße
Fhem16

Natürlich, es wird auch etwas schneller, aber über einen Gewinn im Bereich von Millisekunden würde ich mir erst mal keine Gedanken machen. Wichtiger sind dann eher Abfragen im Modul selbst. Abfragen, die z. B. auf jedes Device reagieren z. B. [:"bla"], produzieren mehr Last als solche, die nur auf bestimme Devices reagieren [<device>:"bla"].
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: FHEM16 am 08 Juli 2018, 18:54:35
... und Fhem so wenig wie möglich belasten.
Mit DOIFtools kannst Du eine Eventstatistik erstellen, damit können Geräte identifiziert weden, die viele Events erzeugen. Bei diesen Geräten können dann eventbeschränkende Attribute (event-on- ...) gesetzt werden, um die Systemlast zu senken.

Mehr dazu https://wiki.fhem.de/wiki/DOIFtools#Erfassen_und_Auswerten_von_Statistikdaten