Mittelwert mit CCU einfach berechnen
Wer empfindliche Sensoren einsetzt und hiervon Aktionen abhängig macht wird das Thema kennen: Schon kleinste Schwankungen können eine Aktion auslösen. Hier bietet sich an, einen Mittelwert über eine Reihe von Messwerten zu bilden, um so die ganzen Daten etwas zu glätten. In meinem Fall geht es um einen Lichtsensor außen, der über den ganzen Tag je nach Bewölkung sehr sprunghafte Messwerte liefert. Wer Openhab z.B. mit Influxdb oder rrd4j nutzt kann hier sehr einfach mit dem Aufruf einer entsprechenden Java Funktion auf die Datenbank zugreifen und den Mittelwert zurückgeben lassen. Wer das aber mit der CCU machen möchte steht vor der Frage, wie man dies dort ohne langes Programmieren machen kann. Nach einiger Recherche zeige ich Euch hier eine sehr einfache und wirkungsvolle Möglichkeit, die gleichzeitig kaum Ressourcen nutzt.
Lösungsidee CUx-Daemon
Im ersten Moment wollte ich mittels Systemvariablen eine definierte Zahl von Sensorwerten in einem Array speichern und hierüber den Mittelwert bilden. Ich gestehe, dass ich keine Lust auf dieses Hantier mit dem Extrahieren und Ändern von Zeichenfolgen hatte und nach einer anderen Lösung gesucht habe.
Die hierfür notwendige Zusatzsoftware befindet sich allerdings bereits auf meiner CCU und heißt CUx-Daemon. Dabei ist der CUx-Daemon ein kleines Tool, welches zwischen der WebUI der CCU und dem Betriebssystem sitzt, d.h. es bietet viel mehr Zugriffe auf Funktionen und Möglichkeiten, die über die WebUI nicht erreichbar sind. Ich kann nur jedem unabhängig von der hier beschriebenen Verwendung die Zusatzsoftware zur Fehlersuche und Beboachtung des Gesamtsystems empfehlen.
Den CUx-Daemon findet Ihr über den folgenden Link im Hometaic Forum: CUX-Daemon Download und Dokumentation.
Ladet Euch auf jeden Fall die Dokumentation herunter, denn auf diese werde ich referenzieren.
Mit dem CUx-Daemon kann man auch Geräte anlegen, verändern, löschen und zwar in einer deutlich detaillierter Form als mit der WEBUI. Und hierüber kann man auch andere Geräte als Homematic oder Homematic IP Geräte anlegen und in die CCU integrieren.
Und genau dies werde ich tun, indem ich ein Gerät anlege. welches den Sensorwert des Lichtsensors erhält und die Eigenschaft besitzt, automatisch Mittelwert, Median, Max und Min Werte aus einer Zeitreihe zu ermitteln. Im Prinzip erzeuge ich hierzu ein Geräteobjekt, welches diese Fähigkeit besitzt und übergebe diesem zyklisch die Werte meines Sensors. Alles andere macht das Gerät und ich kann dieses anschließend wie jedes andere Gerät verwenden.
Gerät anlegen
Ruft als erstes den CUX-Daemon über die Systemsteuerung auf der CCU auf. Auf der Daemon-Startseite wählt oben links den Menüpunkt "Geräte". In der Dropdown-Liste "CUxD-Gerätetyp" wählt Ihr ganz unten den Typ 90 "Universal Wrapper Device" aus. Dieser besitzt die von mir oben beschriebenen Eigenschaften u.a. die Mittelwertbildung. Unter Kapitel 5.7.1. der CUx-Dokumentation ist das von mir benutzte Transform Objekt in der Doku beschrieben (wenn Ihr mehr wissen wollt).
Im darauf erscheinenden Fenster achtet Ihr bitte nur darauf, dass als Funktion "Transform" gewählt wurde, mehr ist nicht zu tun. Optional könnt Ihr noch das Bild wählen, das später für das Gerät in der CCU angezeigt wird. Drückt nun einfach "Gerät auf CCU erzeugen!".
Auf der rechten Seite wird unter "Aktueller Status" nun das Gerät angezeigt. Hier müsste so etwas wie "CUX28.... HM-RC-19 CUX28.... * KEY" erscheinen.
Ich habe jetzt ein neues Gerät erzeugt, welches sich nun im Posteingang der CCU befindet.
Seriennummer und Datenpunkt ermitteln
Damit wir das Gerät auf der CCU richtig parametrisieren können, brauche ich die Seriennummer des Gerätes, von dem ich Werte verarbeiten möchte. In meinem Fall ist das der Lichtsensor außen und hier die aktuelle Helligkeit, die ich dem neuen Gerät mitgeben möchte.
Auch hierfür gibt es eine kleine Zusatzsoftware, die ich empfehle, auf der CCU zu installieren. XML-API (einfach auf diesen Link klicken). Mit diesem Tool kann man alle Daten der CCU übersichtlich abfragen.
Das Tool ruft Ihr auf der CCU nach der Installation unter "Zusatzsoftware" und "XML-API Einstellung" auf.
In der folgenden Liste wählt Ihr "Statelist.cgi" aus und es erscheinen alle Geräte sowie Kanäle und Datenpunkte, die auf Eurer CCU angelegt wurden.
Sucht nun anhand des Namens des Gerätes den Abschnitt, in dem alle zugehörigen Kanäle und Datenpunkte registriert sind. In meinem Fall ist der Kanal mit dem Helligkeitswert der Kanal 1 und der Helligkeitswert wird intern unter "CURRENT_ILLUMINATION" gespeichert. Merkt Euch ebenfalls die Seriennummer des Gerätes.
Gerät auf CCU parametrisieren
Im nächsten Schritt müssen wir dem neu erzeugten Gerät im Posteingang nun mitteilen, welcher Werte von welchem anderen Gerät (Lichtsensor) empfangen werden soll.
Hierzu rufe ich im Posteingang der CCU das neue Gerät auf und gehen auf Einstellungen. Im folgenden Fenster müssen als erstes die Seriennummer des Gerätes sowie des Kanals angeben werden, von dem Werte empfangen werden sollen. Im vorigen Kapitel habe ich beschrieben, wie ich diesen Wert einfach ermittelt habe.
Zuerst gebe ich im Feld "HMSERIAL" die oben ermittelte Serien- und Kanalnummer ein. Dies erfolgt in folgender Form: <Sriennummer>:<Kanalnummer>.
Im Feld "HMDATAPT" wird der Name des Datenpunktes angegeben, in meinem Fall also "CURRENT_ILLUMINATION".
Unter "UNIT" kann ich noch eine Einheit als Text angeben, die nur für die Anzeige verwendet wird. Wenn hier nichts steht ist das auch egal.
Wer möchte kann nun noch einen Namen für den Datenpunkt in dem neuen Gerät vergeben, in meinem Fall heißt der Datenpunkt einfach "Status".
Da ich insgesamt über 5 Werte einen Mittelwert bilden möchte, gebe ich im Feld "HISTORY_BUFFER" die Zahl 5 ein.
Sofern Ihr über Stützpunkte interpolieren wollt, könnt Ihr die Anzahl der Stützpunkte hier angeben, oder alles so lassen wie es ist. Hierzu verweise ich wieder auf Kapitel 5.7.1, wenn jemand hier spezifischere Einstellungen vornehmen möchte. Im folgenden Screenshot findet Ihr alle von mir gemachten Angaben. Zu Testzwecken habe ich mein Gerät "AAA" genannt, damit ich es in der Geräteliste immer oben stehen habe. Das war alles und Ihr könnt das Gerät speichern, so dass es vom Posteingang in die Geräteliste übernommen wird.
Werte Aktualisieren
Wer sich das Gerät jetzt auf der CCU unter "Status und Bedienung" anschaut wird erschrocken feststellen, dass alle Angaben auf Null stehen. Denn es fehlt noch ein Schritt, der wunderbar in Kapitel 9 der CUx-Dameon Doku beschrieben ist (hab ich erst viel später entdeckt, da das weit hinten steht). Die Werte des Lichtsensors müssen per Programm zyklisch an das neue Gerät übergeben werden.
Hierzu müssen wir noch ein neues Gerät anlegen, welches für die Kommunkation erforderlich ist. Dazu wird - wie weiter oben beschrieben - einmalig über CUx-Daemon ein neues Gerät mit dem Gerätetyp 28 "System_Exec" angelegt und einfach ohne Modifikation der Einstellungen (Name kann geändert werden) aus dem Posteingang übernommen. In meinem Fall heißt dieses Gerät wie in der Doku "HMIP-POSTIT" und hat ebenfalls die im Beispiel aufgeführte Serienummer "CUX2801001". Der große Vorteil ist nun, dass dieses Systemgerät für die Übertragung weiterer Sensordaten von anderen Sensoren verwendet werden kann, ohne dass hier etwas geändert werden muss.Dieses Gerät sorgt nun grundsätzlich dafür, dass die Übertragung der Daten geregelt wird.
Nun muss noch festgelegt werden, wann eine Übertragung stattfinden soll. In meinem Fall soll das immer dann statfinden, wenn der Helligkeitswert aktualisiert wird. Das Programm sieht dann wie folgt aus und ruft ein kleines Script (aus der Anleitung in Kapitel 9) auf. In diesem Script müsste nur die Adresse des SYSTEM_EXEC Gerätes geändert werden, wenn diese bei Euch anders lautet.
Das Script sieht wie folgt aus:
Damit ist alles eingerichtet und Ihr solltet jetzt den Mittelwert, Median, Max- und Min Werte sehen.
Vorteil des Ganzen ist, dass ich nun beliebige solcher Berechnungen durchführen lassen kann, ohne das Ganze Prozedere vollständige nochmal zu durchlaufen. Insgesamt ist die Umsetzung sehr schnell gegangen (nachdem ich wusste, wo was steht).
Weitere Mittelwerte erzeugen
Die Erweiterung ist nun sehr simpel. Erzeugt für alle weiteren Mittelwertberechnungen ein neues "Transform"-Gerät wie oben beschrieben. Ergänzt in dem CCU3 Programm einfach, wann Ihr Daten übermitteln wollt als ODER Bedingung (i.d.R. bei Aktualisierung).. Alles andere macht nun die CCU mit dem CUx-Dameon Objekt selbständig. Ihr könnt die ermittelten Werte wie auch von anderen Geräten nun beliebig in Programmen oder zur Anzeige verwenden.
Noch ein Tipp:
Wenn Ihr per Programm Werte in den neuen "Transform" Geräten aktiv ändern wollt, dann achtet bei der Einrichtung darauf, dass der Parameter "USE_HMDATAPT" deaktiviert wird.
Servus aus Bayern,
vielen Dank für die detaillierte Anleitung. Das erste Gerät hat super geklappt (Durchschnitt Wind einer IP Wetterstation). Ich hatte schon das CuxD 28 Gerät und hab es nur angepasst.
Jetzt das Problem: Das 2. Gerät bekommt keine Daten (selbe Wetterstation nur Helligkeit). Mus ich für jedes Durchschnittsgerät ein CuxD 28 Knopf anlegen? Eigentlich doch nicht.
Aber wie mach ich das dann. Wäre um einen Tip Dankbar.
Grüße
Hallo Stefan,
das sollte alles mit dem einen CuXD 28 Device funktionieren. Ich vermute, Du hast das Programm noch nicht angepasst (Bild über dem Script), in dem die Änderung der Helligkeit Deiner Wetterstation den Trigger auslöst. Hier brauchst Du nur eine „Oder“-Bedingung auf der obersten Ebene ergänzen und als Bedingung die Helligkeit deiner Wetterstation mit der Option „Bei Aktualisierung auslösen“ ergänzen. Nachdem die ersten Werte von Deiner Wetterstation gesendet wurden, sollte in Deinem Objekt auch ein Wert auftauchen. Das selbe machst Du für jeden weiteren Sensor, den Du so verarbeiten möchtest.
Beste Grüße
Dieter
Hallo Dieter,
Deine einfach gestaltete Mittelswertsberechnung mit Hilfe von CuX-Daemon hat mich sehr interessiert, nur leider bekomme ich sie nicht zum Laufen. Unter der Überschrift „Werte aktualisieren“ bekomme ich beim Erstellen des Gerätetyps 28 „System_Exec“ nicht das Gerät mit der Endung „POSTIT“. Muss nicht irgendwo noch ein Bezug zum Sensor aufgebaut werde. Vielen Dank im Voraus.
Hallo Jörg,
POSTIT ist kein Gerät sondern ein CCU-Programm mit einem Scriptcode. Auslöser ist immer der Sensorwert, den Du mitteln möchtest und der dann von dem Script verarbeitet wird. Schau nochmal bitte in die Anleitung, da sind Script und Programm beschrieben.
Dieter