(ERLEDIGT) DOIF für Temperaturen "verlangsamen" bzw verzögern?

Begonnen von misux, 10 November 2020, 08:33:14

Vorheriges Thema - Nächstes Thema

misux

Hallo!

Ich habe ein DOIF das meine beide Außentemperatrusensoren zusammenfasst und den Durchschnitt errechnet. Diese Berechnung findet allerdings alls gefühlt 3 Sekunden statt...  Kann man das irgendwie verlangsamen das er den "state" Wert alle ca 5Minuten aktualisiert?
Spart man sich doch bestimmt Reccourcen usw...

Vielen DANK!

Hier ein List vom DOIF:
nternals:
   DEF        ##
   FUUID      5dbc7bc3-f33f-84b4-0d60-d122a76b25983825
   MODEL      FHEM
   NAME       DOIFTempDurschnitt
   NOTIFYDEV  TempAussenCarport,global,TempAussenEingang
   NR         212
   NTFY_ORDER 50-DOIFTempDurschnitt
   STATE      4.05
   TYPE       DOIF
   VERSION    22398 2020-07-14 09:32:05
   READINGS:
     2019-11-01 19:38:59   cmd             0
     2019-11-01 19:38:59   mode            enabled
     2020-11-10 08:28:57   state           4.05
   Regex:
     STATE:
       TempAussenCarport:
         STATE:
           temperature ^TempAussenCarport$:^temperature:
       TempAussenEingang:
         STATE:
           temperature ^TempAussenEingang$:^temperature:
     accu:
   condition:
   do:
     0:
   helper:
     DEVFILTER  ^global$|^TempAussenCarport$|^TempAussenEingang$
     NOTIFYDEV  global|TempAussenCarport|TempAussenEingang
     event      battery: ok,temperature: 4.1,humidity: 89,T: 4.1 H: 89
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev TempAussenEingang
     DOIF_eventa:
       4.05
     DOIF_eventas:
       state: 4.05
     triggerEvents:
       battery: ok
       temperature: 4.1
       humidity: 89
       T: 4.1 H: 89
     triggerEventsState:
       battery: ok
       temperature: 4.1
       humidity: 89
       state: T: 4.1 H: 89
   perlblock:
   uiState:
   uiTable:
Attributes:
   event-min-interval 300
   room       DOIF,Wetter
   state      {([TempAussenCarport:temperature]+[TempAussenEingang:temperature])/2}

Damian

Zitat von: misux am 10 November 2020, 08:33:14
Hallo!

Ich habe ein DOIF das meine beide Außentemperatrusensoren zusammenfasst und den Durchschnitt errechnet. Diese Berechnung findet allerdings alls gefühlt 3 Sekunden statt...  Kann man das irgendwie verlangsamen das er den "state" Wert alle ca 5Minuten aktualisiert?
Spart man sich doch bestimmt Reccourcen usw...

Vielen DANK!

Hier ein List vom DOIF:
nternals:
   DEF        ##
   FUUID      5dbc7bc3-f33f-84b4-0d60-d122a76b25983825
   MODEL      FHEM
   NAME       DOIFTempDurschnitt
   NOTIFYDEV  TempAussenCarport,global,TempAussenEingang
   NR         212
   NTFY_ORDER 50-DOIFTempDurschnitt
   STATE      4.05
   TYPE       DOIF
   VERSION    22398 2020-07-14 09:32:05
   READINGS:
     2019-11-01 19:38:59   cmd             0
     2019-11-01 19:38:59   mode            enabled
     2020-11-10 08:28:57   state           4.05
   Regex:
     STATE:
       TempAussenCarport:
         STATE:
           temperature ^TempAussenCarport$:^temperature:
       TempAussenEingang:
         STATE:
           temperature ^TempAussenEingang$:^temperature:
     accu:
   condition:
   do:
     0:
   helper:
     DEVFILTER  ^global$|^TempAussenCarport$|^TempAussenEingang$
     NOTIFYDEV  global|TempAussenCarport|TempAussenEingang
     event      battery: ok,temperature: 4.1,humidity: 89,T: 4.1 H: 89
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev TempAussenEingang
     DOIF_eventa:
       4.05
     DOIF_eventas:
       state: 4.05
     triggerEvents:
       battery: ok
       temperature: 4.1
       humidity: 89
       T: 4.1 H: 89
     triggerEventsState:
       battery: ok
       temperature: 4.1
       humidity: 89
       state: T: 4.1 H: 89
   perlblock:
   uiState:
   uiTable:
Attributes:
   event-min-interval 300
   room       DOIF,Wetter
   state      {([TempAussenCarport:temperature]+[TempAussenEingang:temperature])/2}


Die Einschränkung sollte auf der Senderseite sein, also bei den Sensoren.

Meine Vorgehensweise ist solchen Fällen: beim Sender das Attribut event-on-change-reading .* und
event_min_interval 300 zu setzen

Damit erreicht man, dass nur wichtige Änderungen durchkommen, ansonsten spätestens nach 300 Sekunden ein Trigger kommt, wenn Temperatur sich nicht ändern sollte.

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

Christoph Morrison

Zitat von: Damian am 10 November 2020, 09:49:51
Die Einschränkung sollte auf der Senderseite sein, also bei den Sensoren.

Wundert mich, dass du nichts zum Thema Aggregatsfunktion geschrieben hast.

Zitatstate      {([TempAussenCarport:temperature]+[TempAussenEingang:temperature])/2}

https://commandref.fhem.de/commandref_DE.html#DOIF_aggregation → #avg

Damian

#3
Zitat von: Christoph Morrison am 10 November 2020, 09:53:32
Wundert mich, dass du nichts zum Thema Aggregatsfunktion geschrieben hast.

https://commandref.fhem.de/commandref_DE.html#DOIF_aggregation → #avg

naja, Aggregationsfunktionen können das Übel an dieser Stelle nicht verhindern, sie können nur auf der DOIF-Seite etwas bewirken und das ist in diesem Fall zu spät.

Es ist schon schlimm genug, wenn ein Temperatursensor per Funk alle drei Sekunden sendet, zusätzlich kommt die unnötige Eventlast im System hinzu.

Das Schreiben eines Readings mit Event produziert zig-mal mehr Last im System also ohne Event.


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

misux

Alles klar! Sind beide in allen Sensoren gesetzt! Vielen Dank!

Christoph Morrison

Zitat von: Damian am 10 November 2020, 10:02:27
naja, Aggregationsfunktionen können das Übel an dieser Stelle nicht verhindern, sie können nur auf der DOIF-Seite etwas bewirken und das ist in diesem Fall zu spät.

Nee, darum ging es mir nicht, eher darum, dass misux den Durchschnitt selbst berechnet, anstatt die eingebauten Aggregatsfunktionen zu verwenden - und spätestens beim nächsten hinzugefügten Temperatursensor vergisst, die Werte durch 3 zu teilen, anstatt durch 2. Manuelle Arbeit < Automatische Arbeit.

Christoph Morrison