Ansteuern der Statusanzeige mit E-Paper-Display aus Script
Moderator: Co-Administratoren
Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Script
@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
Und es ist jetzt doch ne Uhr
Aktuell 40 HomeMatic-Komponenten im Einsatz (16 HMwired-Aktoren).
ioBroker auf Raspberry Pi 3
ioBroker auf Raspberry Pi 3
-
- 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
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.
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.
-
- 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
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
Ecky
-
- 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
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.Thialf hat geschrieben: ↑04.07.2016, 21:50Super, 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);
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";
Code: Alles auswählen
! string temp = dom.GetObject("BidCos-RF.LEQ0000000:1.TEMPERATURE").Value().ToString(1);
string temp = "23.0";
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";
Viele Grüße
Robert
System:
CCU3, 2x HM, 42x HMIP
Robert
System:
CCU3, 2x HM, 42x HMIP
-
- 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
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 +++
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 +++
-
- 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
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
Robert
System:
CCU3, 2x HM, 42x HMIP
-
- 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
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 +++
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 +++
-
- 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
Ich würde gerne klein anfangen, wenn ich entsprechende Beispiele für das HM-Dis-EP-WM55 finden würde. 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.
Viele Grüße
Robert
System:
CCU3, 2x HM, 42x HMIP
Robert
System:
CCU3, 2x HM, 42x HMIP
-
- 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
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.
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 +++
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 +++
-
- 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
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?
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
Ecky