Sebastian hat euch in seinem Artikel „DIY-Homematic LCD Statusdisplay“ ein sehr interessantes DIY-Projekt vorgestellt. Wenn ihr das LCD Statusdisplay zusammen gebaut habt, möchte ich euch in diesem Artikel beschreiben, wie ihr verschiedene Informationen (Temperaturen, Luftfeuchtigkeit, usw.) auf dem Statusdisplay ausgeben könnt. Ich möchte euch hier erklären, wie ihr diverse Datenpunkte von HomeMatic Aktoren auslesen und den Wert auf dem LCD Display darstellen könnt.

Der Artikel zeigt beide Möglichkeiten auf, aus dem HomeMatic heraus HTTP Befehle abzuschicken. Zum einen die Variante über das AddOn Cux-Daemon (kurz: CUx-D) und zweitens die Variante über SYSTEM.EXEC. In dem Artikel „AddOn CUx-Daemon (CUxD) – System.Exec ersetzen“ habe ich die Unterschiede im Detail beschrieben. Beides funktioniert, meine Empfehlung ist aber CUxD zu verwenden.

Allgemeines

Ein HomeMatic Gerät hat immer einen oder mehrere Kanäle, über diese Kanäle können Informationen über den Status bzw. die Steuerung vorgenommen werden kann.

Über diese Kanäle wird die eigentliche Funktionalität des Geräts realisiert und abgebildet. Kanäle können in zwei Kategorien eingeteilt werden:

  • Sensoren (Sender) haben eine überwachende Funktion. Sie überwachen einen Zustand, wie zum Beispiel die Temperatur oder Luftfeuchtigkeit und generieren bei Bedarf Ereignisse.
  • Aktoren (Empfänger) haben dagegen eine ausführende Funktion. Aktoren verändern den Zustand eines Objektes. So können Dimmaktoren z.B. eine Lampe dimmen.

Sowohl Sensoren als auch Aktoren besitzen einen Zustand. Dieser Zustand kann auch mittels eines HomeMatic-Scriptes abgefragt bzw. verändert werden. Dazu verfügt jeder Kanal über einen oder mehrere sogenannte Datenpunkte. Ein Datenpunkt symbolisiert einen Teil des Zustandes eines Kanals.

Ein Datenpunkt verfügt immer über einen Namen und einen Datentyp. Auch die Zugriffsart muss für jeden Datenpunkt immer definiert sein. Alle übrigen Attribute sind optional.

Datenpunkte – Quelle eQ-3 Script Dokumentation

Datentypen

Ein Datenpunkt ist von einem bestimmten Datentyp. Hier werden fünf verschiedene Datentypen unterschieden:

  • action
  • boolean
  • float
  • integer
  • option

Datenpunkte Kombi Wetterstation

Da ich in diesem Artikel die Datenpunkte der HomeMatic Kombi Wetterstation auswerten möchte, habe ich mir diese einmal angeschaut und nachfolgend aufgelistet. Die Kombi Wetterstation hat zwei Kanäle und je Kanal verschiedene Datenpunkte. Die Datenpunkte für den Kanal 0 sind für uns nicht von Interesse. Wir möchten lediglich die Datenpunkte des Kanals 1 auswerten.

Datenpunkte Kanal 0:

  • BidCos-RF.NEQ0343825:0.CONFIG_PENDING
  • BidCos-RF.NEQ0343825:0.DEVICE_IN_BOOTLOADER
  • BidCos-RF.NEQ0343825:0.LOWBAT
  • BidCos-RF.NEQ0343825:0.RSSI_DEVICE
  • BidCos-RF.NEQ0343825:0.RSSI_PEER
  • BidCos-RF.NEQ0343825:0.STICKY_UNREACH
  • BidCos-RF.NEQ0343825:0.UNREACH
  • BidCos-RF.NEQ0343825:0.UPDATE_PENDING

Datenpunkte Kanal 1:

  • BidCos-RF.NEQ0343825:1.BRIGHTNESS
  • BidCos-RF.NEQ0343825:1.HUMIDITY
  • BidCos-RF.NEQ0343825:1.RAINING
  • BidCos-RF.NEQ0343825:1.RAIN_COUNTER
  • BidCos-RF.NEQ0343825:1.SUNSHINEDURATION
  • BidCos-RF.NEQ0343825:1.TEMPERATURE
  • BidCos-RF.NEQ0343825:1.WIND_DIRECTION
  • BidCos-RF.NEQ0343825:1.WIND_DIRECTION_RANGE
  • BidCos-RF.NEQ0343825:1.WIND_SPEED

Erklärung der Datenpunkte:

BidCos-RF gibt an, das es sich um ein HomeMatic Funk Gerät handelt
NEQ0343825 Ist die Seriennummer meiner Kombi Wetterstation (müsst ihr im Script anpassen)
1 Kanal Nummer
TEMPERATURE Datenpunkt Name

Darstellung in WebUI

Datenpunkte Kombi Wetterstation – Quelle: Technikkram.net

Im Screenshot aus der WebUI könnt ihr sehen, das es sich genau um die neun Datenpunkte handelt, die ich oben aufgelistet habe. Die Datenpunkte haben lediglich einen englischen Namen, was von den Angaben in der WebUI abweicht.

Datenpunkt Temperatur auslesen via Script (CUxD)

Nachfolgend findet ihr ein Script, mit dem ich als erstes das LCD Display inhaltlich lösche. Anschließend wir ein fester Text in die Zeile eins des Displays geschrieben. Im dritten Schritt lese ich den Datenpunkt „TEMPERATURE“ meiner Kombi Wetterstation aus (aktuelle Temperatur) und schreibe diese in bestimmter Art formatiert in die Zeile zwei des LCD Displays.

Erklärung:

In der ersten Zeile wird der Befehl zum Löschen des LCD Displays in die Variable „url“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die euer LCD Display in eurem Netzwerk hat. In der zweiten Zeile wird mit den entsprechenden CUxD Command der Befehl aus „url“ abgeschickt.

In der dritten Zeile wird ein neuer Befehl mit dem festen Text „TEMP      Garten“ in die Variabe „url“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die euer LCD Display in eurem Netzwerk hat. In der vierten Zeile wird mit den entsprechenden CUxD Command der Befehl aus „url“ abgeschickt. Damit wird die 1 Zeile des LCD Displays beschrieben.

In der fünften Zeile wird der Inhallt des Datenpunktes „TEMPERATURE“ meiner Kombi Wetterstation in die Variable „Kombi01“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die euer LCD Display in eurem Netzwerk hat. Auch müsst ihr die Seriennummer eurer Wetterstation eintragen. Mit dem Command „ToString(2)“ begrenze ich die Ausgabe der Temperatur auf 2 Nachkomma Stellen. In der sechsten Zeile wird ein neuer Befehl mit dem Inhalt der Variable „Kombi01“ und dem Hex-Wert für das Grad Celsius Zeichen (%C2%B0) in die Variabe „url“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die eurer LCD Display in eurem Netzwerk hat. In der siebten Zeile wird mit den entsprechenden CUxD Command der Befehl aus „url“ abgeschickt. Damit wird die 2 Zeile des LCD Displays beschrieben.

Hier seht ihr das Ergebnis des Scripts mit dem AddOn CUx-Daemon

Datenpunkt Temperatur auslesen via Script (System.Exec)

Die Methode mit System.Exec funktioniert auch, es gibt aber Probleme, welche ich hier ausführlich beschrieben habe. Mein Empfehlung ist daher solche Aktivitäten mit CUxD zu  erledigen. Im obigen Artikel wird auch die Installation des AddOns CUx-Daemon beschrieben.

Nachfolgend findet ihr ein Script, mit dem ich als erstes das LCD Display inhaltlich lösche. Anschließend wir ein fester Text in die Zeile eins des Displays geschrieben. Im dritten Schritt lese ich den Datenpunkt „TEMPERATURE“ meiner Kombi Wetterstation aus (aktuelle Temperatur) und schreibe diese in bestimmter Art formatiert in die Zeile zwei des LCD Displays.

Erklärung:

In der ersten beiden Zeilen sind Pflichtangaben bei Verwendung von „System.Exec“. In der dritten Zeile wird der Befehl zum Löschen des LCD Displays in die Variable „url“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die euer LCD Display in eurem Netzwerk hat. In der vierten Zeile wird mit den entsprechenden CUxD Command der Befehl aus „url“ abgeschickt.

In der fünften Zeile wird ein neuer Befehl mit dem festen Text „TEMP      Garten“ in die Variabe „url“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die euer LCD Display in eurem Netzwerk hat. In der sechsten Zeile wird mit den entsprechenden CUxD Command der Befehl aus „url“ abgeschickt. Damit wird die 1 Zeile des LCD Displays beschrieben.

In der siebten Zeile wird der Inhallt des Datenpunktes „TEMPERATURE“ meiner Kombi Wetterstation in die Variable „Kombi01“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die euer LCD Display in eurem Netzwerk hat. Auch müsst ihr die Seriennummer eurer Wetterstation eintragen. Mit dem Command „ToString(2)“ begrenze ich die Ausgabe der Temperatur auf 2 Nachkomma Stellen. In der achten Zeile wird ein neuer Befehl mit dem Inhalt der Variable „Kombi01“ und dem Hex-Wert für das Grad Celsius Zeichen (%C2%B0) in die Variabe „url“ geschrieben. Ihr müsst hier natürlich die IP Adresse eintragen, die eurer LCD Display in eurem Netzwerk hat. In der neunten Zeile wird mit den entsprechenden CUxD Command der Befehl aus „url“ abgeschickt. Damit wird die 2 Zeile des LCD Displays beschrieben.

Ergebnis ist natürlich das Gleiche, nur über System.Exec

Zusammenfassung

Mit den obigen Informationen und Beispielen solltet ihr in der Lage sein, beliebige Datenpunkte aus der Kombi Wetterstation auszulesen und auf dem LCD Display anzuzeigen. Das Gleiche ist natürlich auch mit anderen Aktoren möglich, beispielsweise mit dem Homematic Funk-Wandthermostat oder auch dem Homematic IP Wandthermostat

Bei HomeMatic IP Aktoren müsst ihr aber „BidCos-RF“ im Script durch „HmIP-RF“ ersetzen. Sonst könnt ihr die Datenpunkte nicht auslesen. Viel Spass beim ausprobieren.

Beispiel Programm zum Anzeigen diverser Informationen

In dem folgenden Programm lese ich verschiedene Datenpunkte (Temperatur und Luftfeuchtigkeit) und zeige diese im Abstand von 5 Sekunden auf dem LCD Display an.

Als Besonderheit schalte ich das LCD Display EIN, wenn der Bewegungsmelder eine Bewegung erkennt. Das LCD Display wird eingeschaltet, gelöscht und dann werden die Werte angezeigt. Am Ende wird das LCD Display wieder ausgeschaltet.

Nachfolgend seht ihr das WebUI Programm, in dem in zeitlicher Abfolge verschiedene Scripte zum Auslesen von Datenpunkten gestartet werden.

© Technikkram.net

In dem folgenden Screenshot seht ihr im Detail die ersten beiden Skripte und die Bedingung mit dem Bewegungsmelder. Wenn euch diese Art des Ausdruckes von Programmen gefällt, so empfehle ich euch folgenden Artikel. Da erfahrt ihr mehr über das wirklich tolle AddOn „Programme Drucken“.

© Technikkram.net

Video der Programm Ausgaben

Nachfolgend findet ihr noch ein kurzes Video, wo ihr das Ergebnis aus oben beschriebenen Programm anschauen könnt

Fazit

Das LCD Display ist ein wirklich interessantes DIY Projekt und einfach über Script anzusprechen. Wir experimentieren zur Zeit mit weiteren Displays und Erweiterungen (Taster bzw. Bewegungsmelder) und werden darüber berichten.

 

8 Kommentare
  1. Avatar
    Werner Wagner sagte:

    Hallo Werner,
    Dein Projekt habe ich mit Erfolg umgesetzt. Vielen Dank für Deine Arbeit. Als Display nutze ich ein LCD2004. Da ich Temperaturwerte anzeige, möchte ich diese rechtsbündig setzen. Ist so etwas möglich z.Bsp. durch ein Script, welches die Stringlänge vor dem Senden ermittelt und damit den Aufsatzpunkt (rueck) berechnet?

    string url = „http://192.168.xxx.xx/control?cmd=LCD,1,'“#rueck#“‚,'“#istTemp#“‚%DFC“;

    Gruss Werner W.

    Antworten
  2. Avatar
    Michael Meuther sagte:

    Hallo Werner
    ich habe nun als Alternative deinen Vorschlag mit „System.exec“ geteste. Das läuft bei mir auf Anhieb!
    Das Problem liegt wohl bei CuXD. Ich weiß aber leider nicht wo….
    Viele Grüße
    Michael

    Antworten
  3. Avatar
    Michael Meuther sagte:

    Hallo Werner
    Ich habe mir diese Statusanzeige nun gebaut und kann sie auch über IP ansprechen und verändern.
    Bei der Nutzung mit Homematic klemmt es aber.
    Ausgangspunkt:
    Cuxd ist installiert, ein Gerät unter system angelernt, CCU3 neu gebootet.
    Programm geschrieben, Skript geschrieben, aber nichts passiert.
    Das Skript sieht so aus:
    string url = „http://192.168.150.20/control?cmd=LCDCMD,clear“;
    dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“);

    string url = „http://192.168.150.20/control?cmd=LCD,1,1,Tempertur Garten“;
    dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“);

    string Temp_Park = dom.GetObject(„BidCos-RF.JEQ0267520:1.TEMPERATURE“).Value().ToString(2);
    string url = „http://192.168.150.20/control?cmd=LCD,2,1,'“#Temp_Park#“‚ %C2%B0C“;
    dom.GetObject(„CUxD.HM-CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“);

    CuXD ist installiert, ein Gerät unter 28System angelernt mit der bezeichnung CUX2800001. Danach CCU3 neu gebootet.
    wenn ich das Porgramm ausführe passiert leider nichts…
    In CuXD unter Info, Full Syslog fand ich folgendes:

    Jan 29 14:09:14 ccu3-webui local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: string url = „http://192.168.150.20/control?cmd=LCDCMD,clear“; dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); string url = „http://192.168.150.20/control?cmd=LCD,1,1,Tempertur Garten“; dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); string Temp_Park = dom.GetObject(„BidCos-RF.JEQ0267520:1.TEMPERATURE“).Value().ToString(2); string url = „http://192.1
    8.150.20/control?cmd=LCD,2,1,'“#Temp_Park#“‚ %C2%B0C“; dom.GetObject(„CUxD.HM-CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); [iseESPexec.cpp:12649]
    Jan 29 14:11:10 ccu3-webui local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: string url = „http://192.168.150.20/control?cmd=LCDCMD,clear“; dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); string url = „http://192.168.150.20/control?cmd=LCD,1,1,Tempertur Garten“; dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); string Temp_Park = dom.GetObject(„BidCos-RF.JEQ0267520:1.TEMPERATURE“).Value().ToString(2); string url = „http://192.1
    8.150.20/control?cmd=LCD,2,1,'“#Temp_Park#“‚ %C2%B0C“; dom.GetObject(„CUxD.HM-CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); [iseESPexec.cpp:12649]
    Jan 29 14:11:15 ccu3-webui local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: string url = „http://192.168.150.20/control?cmd=LCDCMD,clear“; dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); string url = „http://192.168.150.20/control?cmd=LCD,1,1,Tempertur Garten“; dom.GetObject(„CUxD.CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); string Temp_Park = dom.GetObject(„BidCos-RF.JEQ0267520:1.TEMPERATURE“).Value().ToString(2); string url = „http://192.1
    8.150.20/control?cmd=LCD,2,1,'“#Temp_Park#“‚ %C2%B0C“; dom.GetObject(„CUxD.HM-CUX2800001:1.CMD_EXEC“).State(„wget -q -O /dev/null ‚“#url#“‚“); [iseESPexec.cpp:12649]
    Die Fehlermeldungen kann ich leider nicht interpretieren…
    Hast du da eine Idee?
    Viele Grüße und Dank für die Mühe!!
    Michael

    Antworten
  4. Avatar
    Michael Meuther sagte:

    Hallo Werner, ich finde das Projekt super toll! Ich habe das Problem, dass ich einige Temperatursensoren an meine Holzheizunh verbaut habe mit deren Hilfe ich verschiedene Kreisläufe steuere. Ich würde aber gern die Temeraturen sehen können. Dafür sind diese Anzeigen super. Wo erfahre ich allerdings die Datenpunkte der Sensoren (HM-WDS30-T-O)?
    Ein kurzer Hinweiss wäre Super!
    Vielen Dank Michael

    Antworten
    • Werner
      Werner sagte:

      Hi Michael,

      für den von dir aufgeführten Aktor HM-WDS30-T-O existieren nur zwei Kanäle (0 und 1) mit den nachfolgenden Datenpunkten:

      BidCos-RF:0.CONFIG_PENDING
      BidCos-RF:0.LOWBAT
      BidCos-RF:0.RSSI_DEVICE
      BidCos-RF:0.RSSI_PEER
      BidCos-RF:0.STICKY_UNREACH
      BidCos-RF:0.UNREACH
      BidCos-RF:1.TEMPERATURE

      Ich hoffe das hilft dir und denke lediglich der Datenpunkt für die Temperatur ist für dich von Interesse.

      Gruss
      Werner

      Antworten
  5. Avatar
    Richard sagte:

    Hallo Werner,
    habe das DIY-Homematic LCD Statusdisplay projekt mit erfolg umgesetzt,hat Spaß gemacht, auch das mit den Scripten klappte prima. Ein Frage hätte ich: Bei dir steht die Abfrage der Aktoren im Vordergrund, geht dies auch mit Systemvariablen als Abfrage ??
    Gruß
    Richard

    Antworten
    • Werner
      Werner sagte:

      Hallo Richard,

      verstehe ich deine Frage richtig, das du auf dem Display den Inhalt einer Systemvariable anzeigen möchtest?

      Gruss
      Werner

      Antworten
      • Avatar
        Richard sagte:

        Hallo Werner, du hast mich schon verstanden, genau das meinte ich. Ich hatte wohl Interesse die Temperatur und Luftfeuchte aus den Variablen, die ich aus den Online Wetterdaten( OWM ) beziehe, mit anzuzeigen.
        Gruß
        Richard

        Antworten

Dein Kommentar

An Diskussion beteiligen?
Hinterlasse uns Deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere die Speicherung der Daten.