From: Mario Höllein Date: Fri, 28 Apr 2023 07:05:18 +0000 (+0200) Subject: aktualisiert das E-Paper Display mit X-Git-Url: https://git.hoellein.online/?a=commitdiff_plain;h=12aab1ea9f637174e6255ef82a1dd30537782b86;p=homematic aktualisiert das E-Paper Display mit Fenster offen/zu Alarm ein/aus Hierzu muss auf die Variable countOpenWindows bei Änderung reagiert werden --- diff --git a/programme/update_TEG_DISPLAY.hm b/programme/update_TEG_DISPLAY.hm new file mode 100644 index 0000000..6431d78 --- /dev/null +++ b/programme/update_TEG_DISPLAY.hm @@ -0,0 +1,211 @@ +! 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 + +!Signale +! 0xF0 AUS +! 0xF1 Rotes Blitzen +! 0xF2 Grünes Blitzen +! 0xF3 Orangenes Blitzen + +!Seriennummer des HM-Disp-EP-WM55. +string seriennummer = "NEQ0711000"; + +!Variablen für die Texte und Icons +!Nicht verwendete Variablen nicht löschen, sondern auf "" setzen! +!Zeilen-Variablen können 0x80-0x89 für vordefinierte Texte oder bis zu 12 Zeichen Freitext sein. (längere Texte werden abgeschnitten) + +var offen = dom.GetObject("countOpenWindows"); +integer windowsOpen = offen.Value().ToInteger(); + +if (dom.GetObject("alleAlarmzonenScharf").State()==1) { + string alarm_status="an"; + string alarm_icon=""; + } else { + string alarm_status="aus"; + string alarm_icon=""; +} + + +string zeile2 = "Alarm " # alarm_status; +string icon2 = ""; + +if (windowsOpen>0) { + zeile3 = windowsOpen # " Fenster"; + string icon3 = ""; + string zeile4 = "offen"; + string icon4 = ""; +} else { + string zeile3 = "Alle Fenster"; + string icon3 = ""; + string zeile4 = "sind zu"; + string icon4 = ""; +} + +string signal = "0xF2"; +!Signalpipser aus +string tonfolge = "0xC0"; + +! 1 bis 15. 0 = Unendlich +integer wiederholungen = 1; + +! es wird zum nächstmöglichen 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); + if ((line <> "") || (icon <> "")) { + command = command # ",0x12"; + if ((line.Substr(0,2) == "0x") && (line.Length() == 4)) { + command = command # "," # line; + i = 12; + } + else { + i = 0; + } + while ((i < line.Length()) && (i < 12)) { + char = line.Substr(i, 1); + foreach(substEntry, substitutions){ + if (char == substEntry.Substr(0,1)){command = command # substEntry.Substr(1,5);} + } + i = i + 1; + } + if (icon <> "") { + 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);