Ansteuern der Statusanzeige mit E-Paper-Display aus Script

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

Moderator: Co-Administratoren

Kurzschlusselektriker
Beiträge: 101
Registriert: 22.09.2014, 15:58
Hat sich bedankt: 2 Mal

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

Beitrag von Kurzschlusselektriker » 22.05.2018, 21:36

Vielen Dank an die hilfreichen Hinweise.
Jetzt läuft das e-Paper-Display so wie es soll!

Kurzschlusselektriker

FuXXz
Beiträge: 154
Registriert: 16.12.2015, 23:54

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

Beitrag von FuXXz » 05.07.2018, 17:33

Hallo zusammen,

hat jemand vielleicht schon eine elegante Lösung umgesetzt, auf dem Display den Status von Fensterkontakten und Rolladen anzuzeigen.
Also eine Zeile für Alle Rolladen zu: Ja/Nein und die andere Zeile für alle Fenster geschlossen: ja/nein.

Der spontante Weg wäre ein Programm, welches eine Systemvariable schreibt, wenn die entsprechenden Kontakte geschlossen sind. Diese Variable würde ich dann auf dem Display ausgeben?

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 » 13.11.2018, 13:50

Hallo zusammen,

bin mir relativ sicher, schon einmal etwas darüber gelesen zu haben - ich finde das jetzt nur nicht mehr :oops:

Also, weiß jemand, ob es möglich ist, die Darstellungsweise (normal "schwarz auf weiß" oder invers "weiß auf schwarz") des ePaper-Displays per Skript umzuschalten?
Grüße,
Ecky

DerSchmitty
Beiträge: 4
Registriert: 09.12.2018, 13:43

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

Beitrag von DerSchmitty » 19.12.2018, 13:37

Hallo zusammen,

seit dem Update der CCU2 auf Version 2.41.5 läuft das Script bei mir nicht mehr.
Ich bekomme folgende Fehlermeldung:

Error 1 at row 76 col 40 near ^ # ",0x1C,";

Code: Alles auswählen

if (wiederholungen < 1){
   command = command # "0xDF,0x1D,";
}
el
Parse following code failed:
!! Universalprogramm zum Füllen des HM-Disp-EP-WM55
!! (c) DrTob
!! Version 1.10

string zeile2 = "Temp " # dom.GetObject("Aussentemperatur").Value() # " °C";
string icon2  = "";
hat noch jemand das Problem oder übersehe ich hier etwas?
Zuletzt geändert von alchy am 19.12.2018, 14:16, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

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

Beitrag von alchy » 19.12.2018, 14:19

Bitte dazugehöriges Script posten.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

DerSchmitty
Beiträge: 4
Registriert: 09.12.2018, 13:43

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

Beitrag von DerSchmitty » 21.12.2018, 13:09

Hi Alchy,

Hier das Script. Wie gesagt, lief es bis zum Update problemlos.

Code: Alles auswählen

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

string zeile2 = "Temp " # dom.GetObject("Aussentemperatur").Value() # " °C";
string icon2  = "";

string zeile3 = "Wind " # dom.GetObject("Windgeschwindigkeit").Value() # " Km H";
string icon3  = "";

string zeile4 = "Humid " # dom.GetObject("Luftfeuchtigkeit").Value() # " %rF";
string icon4  = "";

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

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 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);
Vielen Dank und Grüße
Zuletzt geändert von DerSchmitty am 21.12.2018, 13:46, insgesamt 1-mal geändert.

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

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

Beitrag von Sammy » 21.12.2018, 13:32

Code bitte immer in Code-Tags posten. So will sich das keiner ansehen. Bitte oben korrigieren.

Gruß Sammy
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

Benutzeravatar
Black
Beiträge: 5472
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1071 Mal
Kontaktdaten:

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

Beitrag von Black » 21.12.2018, 16:09

wie sendest du denn so ? also jedesmal das display anzusprechen bei einer aktualisierung, am besten noch ohne netzbetrieb mit wakeup burst, wird dir recht zuverlässig deinen DC durch die Zimmerdecke jagen

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

DerSchmitty
Beiträge: 4
Registriert: 09.12.2018, 13:43

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

Beitrag von DerSchmitty » 21.12.2018, 16:31

Ja, bei Änderungen der Außentemperatur (alle 5 Minuten)
Gibt es eine Aktualisierung. Hat bisher noch nie Probleme mit dem DC gemacht (lief über 4 Monate problemlos).

VG
Schmitty

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

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

Beitrag von alchy » 22.12.2018, 20:55

DerSchmitty hat geschrieben:
21.12.2018, 13:09
Hier das Script. Wie gesagt, lief es bis zum Update problemlos.
Dieses Script lief so noch nie problemlos. :P
Es enthält mehrere Fehler, die auf Änderungen deinerseits am Originalcode beruhen.

in Zeile 76 versuchst du in command den Inhalt der Scriptvariablen tonfolge zu einem String zusammenzusetzen.

Code: Alles auswählen

command = command # ",0x14," # tonfolge # ",0x1C,";
tonfolge ist in diesem Script aber vor diesem genannten Versuch nicht deklariert.Error und Abbruch.
Würdest du dieses reparieren, würde jedoch das Script ebenso mit einem Fehler abbrechen, da dieser Fehler auch auf die Scriptvariable wiederholungen zutrifft. Danach käme es dann zum Abbruch wegen der scriptvariable abbruch .....

Und warum?
weil du einfach einen wichtigen Abschnitt des Originalscriptes entfernt hast und das obwohl im Scriptabschnitt noch zusätzlich

!Variablen für die Texte und Icons
!Nicht verwendete Variablen nicht löschen, sondern auf "" setzen!

steht. KLar geht das zu reparieren. Jetzt kannst du mal den gesamten Abschnitt zwischen
!Seriennummer des HM-Disp-EP-WM55.
und
! System Routine do not change anything below !

wieder aus dm Originalscript in dein Script rein kopieren und dann testen und melden.
Weiter habe ich mir deinen Code auch noch nicht angeschaut. Der Peter ist jetzt bei dir.

Code: Alles auswählen

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

!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)
string zeile2 = "0x80";
string icon2  = "0x86";

string zeile3 = "Freier Text";
string icon3  = "";

string zeile4 = "";
string icon4  = "";

string signal = "0xF0";

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 !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Du kannst natürlich auch das Originalscript nehmen und deine gewünschten Änderungen neu einpflegen.

Fakt ist aber, das dieses von dir gepostete Script völlig unabhängig von dem Update so nicht funktioniert hat.
Durch den Blödsinn mit globaler Deklarierung vielleicht durch eine richtige Doppelverwendung, aber das ist hier schon einigen auf die Füße gefallen.


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

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