Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

l1ss1
Beiträge: 79
Registriert: 23.04.2014, 21:36
System: CCU
Hat sich bedankt: 3 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von l1ss1 » 10.01.2021, 23:23

@Black @FBK2904: danke für die guten Ansätze. Deswegen liebe ich dieses Forum. Manchmal ist man zu dicht am Thema. Aktualisierung wenn jemand im Bad ist. Klingt perfekt. Präsenzmelder ich komme.

Und es ist jetzt doch ne Uhr 😜
Aktuell 40 HomeMatic-Komponenten im Einsatz (16 HMwired-Aktoren).
ioBroker auf Raspberry Pi 3

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von jp112sdl » 11.01.2021, 08:46

Auf dem Display im Idle-Zustand die Uhrzeit anzuzeigen ist aus meiner Sicht gar kein seltener use-case.

Da hat man bei der Firmware etwas gepennt.
Die CCU sendet die Uhrzeit ohnehin mehrmals am Tag durch die Luft... da hätte sich auch das ePaper Display dran bedienen können.
Und schon könnte man die Uhrzeit verwenden, ohne sie jedes Mal (aktuell) ans Display senden zu müssen.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von ecky78 » 11.01.2021, 17:04

Zusätzlich zur Koppelung an die Anwesenheit im Bad habe ich noch eine Rundung der Temperaturen eingebaut, d.h. die werden jetzt (wie im Auto) nur noch in 0,5°C-Schritten angezeigt. Spart auch Updates.
Grüße,
Ecky

RobMatic
Beiträge: 10
Registriert: 06.02.2021, 14:26
System: CCU
Wohnort: Visselhövede
Hat sich bedankt: 1 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von RobMatic » 06.02.2021, 15:02

Thialf hat geschrieben:
04.07.2016, 21:50
Super, vielen Dank fürs Skript!
Ich hab noch ein paar Performance-Verbesserungen dran gemacht. Die Stringlängenberechnungen muss er pro Zeile ja nur einmalig durchführen und bei der Substitution merkt er sich, ob er das Zeichen schon gefunden hat. Aber trotzdem braucht die Abarbeitung des Skripts noch ganze 7s (vorher 9s), (das Senden ans Display hab ich für die Messung deaktiviert). Immernoch recht viel. Die ganzen Kommentare im Skript benötigen allerdings auch viel Zeit zur Abarbeitung. Das ist schon eine sehr komische und ineffiziente Skriptsprache.
Eigtl. sollte ELV uns eine Funktion ähnlich system.Date zur Verfügung stellen, die die Konvertierung durchführt. Mit einer ordentlichen Programmiersprache sollte das in Millisekunden zu erledigen sein. Wenn ich mal Zeit finde, bau ich ein bash-Script, damit kämen wir vielleicht auf unter eine Sekunde.

Code: Alles auswählen

!! Universalprogramm zum Füllen des HM-Disp-EP-WM55
!! (c) DrTob
!! Version 1.10

string zeile2 = system.Date("%H:%M ");
string icon2  = "0x87";

integer wd = system.Date("%u").ToInteger();
string wdstr;
if (wd == 1){wdstr = "Mo";}
if (wd == 2){wdstr = "Di";}
if (wd == 3){wdstr = "Mi";}
if (wd == 4){wdstr = "Do";}
if (wd == 5){wdstr = "Fr";}
if (wd == 6){wdstr = "Sa";}
if (wd == 7){wdstr = "So";}

string zeile3 = wdstr # system.Date(" %d.%m.%y");
string icon3  = "";

! Symbole
! 0x80 AUS
! 0x81 EIN
! 0x82 OFFEN
! 0x83 geschlossen
! 0x84 fehler
! 0x85 alles ok
! 0x86 information
! 0x87 neue nachricht
! 0x88 servicemeldung

! Zugriff auf vordefinierte Texte
! 0x80 Textblock  1
! 0x81 Textblock  2
! 0x82 Textblock  3
! 0x83 Textblock  4
! 0x84 Textblock  5
! 0x85 Textblock  6
! 0x86 Textblock  7
! 0x87 Textblock  8
! 0x88 Textblock  9
! 0x89 Textblock 10

! Tonfolgen
! 0xC0 AUS
! 0xC1 LANG LANG
! 0xC2 LANG KURZ
! 0xC3 LANG KURZ KURZ
! 0xC4 KURZ
! 0xC5 KURZ KURZ
! 0xC6 LANG
! 0xC7
! 0xC9
! 0xCA

!Signale
! 0xF0 AUS
! 0xF1 Rotes Blitzen
! 0xF2 Grünes Blitzen
! 0xF3 Orangenes Blitzen

!Seriennummer des HM-Disp-EP-WM55.
string seriennummer = "NEQ0000000";

! string temp = dom.GetObject("BidCos-RF.LEQ0000000:1.TEMPERATURE").Value().ToString(1);
string temp = "23.0";
string zeile4 = temp # "C";
string icon4  = "";

string signal = "0xF0";

string tonfolge = "0xC0";

! 1 bis 15. 0 = Unendlich
integer wiederholungen = 2;

! es wird zum naechstmoeglichen Abstand aufgerundet. Maximum ist 160s.
integer abstand = 10;

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! System Routine do not change anything below !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

string splitter="|";
string msgBuffer = zeile2 # splitter # icon2 # "\t";
msgBuffer = msgBuffer # zeile3 # splitter # icon3 # "\t";
msgBuffer = msgBuffer # zeile4 # splitter # icon4;

string substitutions = "A,0x41\tB,0x42\tC,0x43\tD,0x44\tE,0x45\tF,0x46\tG,0x47\tH,0x48\tI,0x49\tJ,0x4A\tK,0x4B\tL,0x4C\tM,0x4D\tN,0x4E\tO,0x4F\tP,0x50\tQ,0x51\tR,0x52\tS,0x53\tT,0x54\tU,0x55\tV,0x56\tW,0x57\tX,0x58\tY,0x59\tZ,0x5A";
substitutions = substitutions # "\ta,0x61\tb,0x62\tc,0x63\td,0x64\te,0x65\tf,0x66\tg,0x67\th,0x68\ti,0x69\tj,0x6A\tk,0x6B\tl,0x6C\tm,0x6D\tn,0x6E\to,0x6F\tp,0x70\tq,0x71\tr,0x72\ts,0x73\tt,0x74\tu,0x75\tv,0x76\tw,0x77\tx,0x78\ty,0x79\tz,0x7A";
substitutions = substitutions # "\t0,0x30\t1,0x31\t2,0x32\t3,0x33\t4,0x34\t5,0x35\t6,0x36\t7,0x37\t8,0x38\t9,0x39\t ,0x20\t!,0x21\t\",0x22\t%,0x25\t&,0x26\t=,0x27\t(,0x28\t),0x29\t*,0x2A\t+,0x2B\t,,0x2C\t-,0x2D\t.,0x2E\t/,0x2F";
substitutions = substitutions # "\tÄ,0x5B\tÖ,0x23\tÜ,0x24\tä,0x7B\tö,0x7C\tü,0x7D\tß,0x5F\t:,0x3A\t;,0x3B\t@,0x40\t>,0x3E";

string bufferLine;
string substEntry;
integer i;
string char;
string line;
string icon;

string command = "0x02,0x0A";
foreach(bufferLine, msgBuffer) {
   line = bufferLine.StrValueByIndex(splitter, 0);
   icon = bufferLine.StrValueByIndex(splitter, 1);
   integer linelength = line.Length();
   integer iconlength = icon.Length();
   if ((linelength > 0) || (iconlength > 0)) {
      command = command # ",0x12";
      if ((linelength == 4) && (line.Substr(0,2) == "0x")) {
         command = command # "," # line;
         i = 12;
      }
      else {
         i = 0;
      }
      if (linelength > 12) {
        linelength = 12;
      }
      while (i < linelength) {
        char = line.Substr(i, 1);   
        boolean b = true;
        foreach(substEntry, substitutions){
          if (b == true){
            if (char == substEntry.Substr(0,1)){
              command = command # substEntry.Substr(1,5);
              b = false;
            }
          }
        }
        i = i + 1;
      }
      if (iconlength > 0) {
         command = command # ",0x13," # icon;
      }
   }
   command = command # ",0x0A";
}

command = command # ",0x14," # tonfolge # ",0x1C,";

if (wiederholungen < 1){
   command = command # "0xDF,0x1D,";
}
else {
   if (wiederholungen < 11) {
      command = command # "0xD" # (wiederholungen - 1) # ",0x1D,";
   }
   else {
      if (wiederholungen == 11) {
         command = command # "0xDA,0x1D,";
      }
      else {
         if (wiederholungen == 12) {
            command = command # "0xDB,0x1D,";
         }
         else {
            if (wiederholungen == 13) {
               command = command # "0xDC,0x1D,";
            }
            else {
               if (wiederholungen == 14) {
                  command = command # "0xDD,0x1D,";
               }
               else {
                  command = command # "0xDE,0x1D,";
               }
            }
         }
      }
   }
}


if (abstand <= 10) {
   command = command # "0xE0,0x16,";
}
else {
   if (abstand <= 100) {
      command = command # "0xE" # (abstand - 1 / 10) # ",0x16,";
   }
   else {
      if (abstand <= 110) {
         command = command # "0xEA,0x16,";
      }
      else {
         if (abstand <= 120) {
            command = command # "0xEB,0x16,";
         }
         else {
            if (abstand <= 130) {
               command = command # "0xEC,0x16,";
            }
            else {
               if (abstand <= 140) {
                  command = command # "0xED,0x16,";
               }
               else {
                  if (abstand <= 150) {
                     command = command # "0xEE,0x16,";
                  }
                  else {
                     command = command # "0xEF,0x16,";
                  }
               }
            }
         }
      }
   }
}

command = command # signal # ",0x03";
dom.GetObject("BidCos-RF." # seriennummer # ":3.SUBMIT").State(command);
Hallo und vielen Dank für dieses Forum und die Bereitstellung der Codes. Ich bin blutiger Anfänger mit Homematik und beschäftige mich nun seit 3 Tagen mit diesem Script, bekomme jedoch keine Anzeige auf dem Display.
Ich nutze eine CCU3 und den Taster HM-Dis-EP-WM55, auf dem ich gerne die Temperatur (und später auch die Luftfeuchtigkeit) des Temperatur- und Luftfeutigkeitssensors HmIP-STHD anzeigen lassen möchte. Im ersten Schritt wäre ich jedoch die Anzeige der Uhrzeit, des Datums und der Temperatur ein erster Teilerfolg.

In der Zeile

Code: Alles auswählen

string seriennummer = "NEQ0000000";
habe ich natürlich die SN meines HM-Dis-EP-WM55 hinterlegt. Folgende Zeilen habe ich vorerst so belassen, da ich davon ausgehe, dass dann die Uhrzeit und das Datum mit dem Festen Text 23.0 angezeigt wird.

Code: Alles auswählen

! string temp = dom.GetObject("BidCos-RF.LEQ0000000:1.TEMPERATURE").Value().ToString(1);
string temp = "23.0";
Die 3 Zeilen in der Mitte des Displays bleiben jedoch leer.

Mein nächster Schritt wäre sonst gewesen, die beiden Zeilen oben wie folgt zu ändern:

Code: Alles auswählen

string temp = dom.GetObject("BidCos-RF.SN-DES-HMIP-STHD:3.TEMPERATURE").Value().ToString(1);
! string temp = "23.0";
Eingebunden habe ich das Ganze unter Programme und Zentralverknüpfungen mit der Bedingung periodisch ganztägig, jede Minute ohne Enddatum. Ich bin ratlos. Hat jemand einen Lösungsansatz?
Viele Grüße

Robert

System:
CCU3, 2x HM, 42x HMIP

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von MichaelN » 06.02.2021, 15:39

Erstmal 3 Schritte zurück gehen und einfach mal ein einfaches "Hallo" ans Display senden. Dann langsam vortasten.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

RobMatic
Beiträge: 10
Registriert: 06.02.2021, 14:26
System: CCU
Wohnort: Visselhövede
Hat sich bedankt: 1 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von RobMatic » 06.02.2021, 22:34

MichaelN hat geschrieben:
06.02.2021, 15:39
Erstmal 3 Schritte zurück gehen und einfach mal ein einfaches "Hallo" ans Display senden. Dann langsam vortasten.
Ich habe jetzt schon viele Stunden damit verbracht, Tutorials für Einsteiger in "diese Welt" zu finden (Google/YouTube). Ich treffe entweder nur auf Beschreibungen, was man so theoretisch alles machen kann (aber nicht wie), oder für mich komplexe Codes (die nicht erklärt werden). Es muss doch irgendwo eine Anleitung geben, die von Grund auf erklärt, wie angelernte Geräte angesprochen werden, welche Parameter man wie abrufen kann, und wie man andere Geräte anspricht und steuert oder z.B. "Hallo Welt" ausgibt. Selbst letzteres ist für mich gerade, als würde ich versuchen, mit meinem Auto zum Mond zu fliegen. Deswegen wende ich mich an dieses Forum.
Viele Grüße

Robert

System:
CCU3, 2x HM, 42x HMIP

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von MichaelN » 06.02.2021, 22:51

Und dann suchst du dir ein komplexes Skript zum üben aus? Um welches Display geht es überhaupt?
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

RobMatic
Beiträge: 10
Registriert: 06.02.2021, 14:26
System: CCU
Wohnort: Visselhövede
Hat sich bedankt: 1 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von RobMatic » 06.02.2021, 23:11

MichaelN hat geschrieben:
06.02.2021, 22:51
Und dann suchst du dir ein komplexes Skript zum üben aus? Um welches Display geht es überhaupt?
Ich würde gerne klein anfangen, wenn ich entsprechende Beispiele für das HM-Dis-EP-WM55 finden würde. :D Links zu Tutorials für Einsteiger sind mir sehr willkommen. Mir fehlen wirklich die Grundlagen und ich finde keine gute Quelle zum Einstieg in die Programmierung von Homematic-Systemen.

Meine Absicht ist es, den HmIP-STHD in den Wohnwagen zu stellen, um die Temperatur und die Luftfeuchtigkeit über den HM-Dis-EP-WM55 im Auge zu behalten. Deswegen passt dieses Anwendungsbeispiel einfach hervorragend. :wink:
Viele Grüße

Robert

System:
CCU3, 2x HM, 42x HMIP

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von MichaelN » 07.02.2021, 00:44

Ich würde hiermit starten :
viewtopic.php?f=27&t=21710&hilit=Wm55

Wenn das noch zu viel hardcore ist, noch 3 Schritte zurück und erstmal die Tipps für Anfänger durcharbeiten.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von ecky78 » 09.02.2021, 11:37

Etwas offtopic vielleicht, aber da Ihr hier alle so ePaper habt, versuche ich's mal ;-)
Hat jemand schon mal das Phänomen bei seinem Display beobachtet, daß dessen Schrift nach einem Update seltsam "dünn" und lückenhaft aussah? So als wenn einige Bildpunkte eben nicht verändert wurden, sondern einfach weiß (oder schwarz, falls invertiert dargestellt) geblieben sind.
Macht eins meiner HM-Dis-EP-WM55 nämlich seit ca. 2 Wochen. Nicht jedes Mal, aber doch ab und zu. Verendet da ein Bauteil bei der Displayansteuerung?
Grüße,
Ecky

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“