UDP Transformer - moving_minmaxavg (shipped)

Der UDP-Transformer moving_minmaxavg ist ein gleitender Mittelwert und Mininalwert und Maximalwert und Summen-Baustein.

Die Besonderheit ist, dass er wahlweise nach Anzahl der Aufrufe, oder auf Basis der Zeit den Mittelwert berechnet.

Zum Verständnis:

  • Bei der Berechnung nach Anzahl werden wie gewöhnlich alle Werte summiert und durch die Anzahl dividiert, egal wann die Werte geliefert wurden.
  • Bei der Berechnung nach Zeit wird der Mittelwert über die Zeitdauer gerechnet. Verbleibt der erste Wert für 9 Sekunden auf 1, und der zweite Wert für 1 Sekunde auf 10, ist der zeitliche Mittelwert 1,9 (das arithmetische Mittel wäre 5,5).

Da es in Loxone recht komplex ist, auf Basis eines Zeitintervalles einen Analogausgang zu triggern, ist die Methode Zeit die eher einzusetzende. 

Es gibt zwei Arten von Requests:

  • Wert übertragen → Wert übertragen inkl. Einstellungen → Aktuelle Berechnung wird übermittelt
  • Nur Ergebnis abfragen →Aktuelle Berechnung wird übermittelt

Rückgabe

In den Settings ist Zeitbasis (time oder count) sichbar, sowie die Anzahl oder Zeitdauer (range##_time in Sekunden, oder range##_count als maximale Datenanzahl).

Weiters kommen alle erfassten Daten (diese müssen nicht einzeln abgerufen werden). Der Mittelwert von avg wird unterschiedlich berechnet abhängig von der Basis (Zeit "time" oder Anzahl "count").

outofrange kann nur bei der Basis Zeit auf 1 gehen, wenn kein Datensatz mehr innerhalb des Zeitrahmens liegt. In diesem Fall wird trotzdem der neueste Datensatz aufgehoben und dessen Werte übermittelt. 

Datenspeicherung

Die Zwischenspeicherung der Daten erfolgt auf dem LoxBerry auf der SD-Karte ("überlebt" einen Reboot) im Verzeichnis /opt/loxberry/data/plugins/mqttgateway/transform/datastore/moving_avg_<topic>.json

Beachte, dass bei der Speicherung nach Methode Zeit alle Datensätze der gesamten Zeitdauer aufbewahrt bleiben, unabhängig davon, wieviele Datensätze das sind. 

Wert übertragen   

Als Schlüssel zur Identifikation dient das Topic. Es können mehrere gleitende Mittelwerte mit unterschiedlichen Einstellungen unter verschiedenen Topics betrieben werden.

### ZEITBASIS (time)
# Temperatur <v.2> übermitteln und den gleitenden Mittelwert der letzten 60 Minuten berechnen
retain moving_minmaxavg temp/wohnzimmer set:<v.2> base:time range:1h
 
# Minimale/Maximale Außentemperatur der letzten 7 Tage 
retain moving_minmaxavg temp/outdoor set:<v.2> base:time range:7d
 
### ANZAHL-BASIS (count)
# Gleitendes Minimum/Maximum/Mittelwert der letzten Strommessungen
retain moving_minmaxavg power/washingmachine set:<v.2> base:count range:30

Bei der Basis Anzahl (base:count) gibt der range an, wieviele Datensätze gespeichert werden sollen (range:30 = 30 Datensätze)

Bei der Basis Zeit (base:time) gibt der range die Zeit in Sekunden an, wie lange die Daten berechnet werden sollen. Dabei gibt es Abkürzungen für längere Intervalle:

  • 5m = 5 Minuten
  • 3h = 3 Stunden
  • 1d = 1 Tag
  • 2w = 2 Wochen
  • 1M = 1 Monat (nicht Kalendermonat, sondern 30 Tage!)
  • 2Y = 2 Jahre (nicht Kalenderjahre, sondern 2x365 Tage!) 

Bei jeder Datenübertragung mit set:<Wert> wird implizit immer das aktuelle Ergebnis berechnet.

Werte nur abrufen

Während bei Basis Anzahl (base:count) das recht wenig Sinn macht, ist das aber bei der Zeitbasis (base:time) relevant.

Der gleitende Mittelwert wird immer vom ältesten Datensatz bis zum JETZT berechnet, somit ändert sich der gleitende Mittelwert kontinuierlich, auch wenn kein neuer Wert übertragen wird.

Anwendungbeispiel:

  

# Temperatur <v.2> abrufen (die oben als Beispiel gesetzt wurde)
retain moving_minmaxavg temp/wohnzimmer get

Anwendungsbeispiel

Erster Virtueller Ausgangs-Befehl (Digital=Nein):

publish moving_minmaxavg temp/at set:<v.2> base:time range:24h

Der Wert wird implizit von Loxone übertragen immer wenn sich die Temperatur am Fühler ändert. Dabei wird auch jedesmal eine Neuberechnung und -übertragung zurück zum MS durchgeführt. 

Zweiter Virtueller Ausgangs-Befehl (Digital=Ja):

publish moving_minmaxavg temp/at get

Stündlich (Stundenimpuls) wird ans gleiche Topic ein get gesendet, um die Berechnungen zu aktualisieren, auch wenn kein neuer Wert gekommen sein sollte.

Virtueller Eingang (Digital=Nein):

Name entsprechend dem Absendetopic (siehe Incoming Overview)

Hier  steht das gleitende Maximum.