Ansteuern der Statusanzeige mit E-Paper-Display aus Script

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

Moderator: Co-Administratoren

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

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

Beitrag von Homoran » 20.11.2016, 12:04

Wie hat Dr Tob in seinem Skript geschrieben?
mike08 hat geschrieben:Nicht verwendete Variablen nicht löschen, sondern auf "" setzen!

und was hast du?
mike08 hat geschrieben:string zeile2 = ";
mike08 hat geschrieben:string zeile3 = x;

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

BadenPower

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

Beitrag von BadenPower » 20.11.2016, 13:58

mike08 hat geschrieben:Hat einer eine Idee was ich noch testen kann?
Ja, zum Beispiel einmal ins Fehlerlog schauen, dann hätte man dort einen Parse-Error gesehen und die Steller entdeckt, wo der Fehlel liegt.
Homoran hat geschrieben:
mike08 hat geschrieben:string zeile2 = ";
Wie Homoran schon geschrieben hat ist die Zeile 2 der Auslöser des Übels.

.

mike08
Beiträge: 283
Registriert: 13.09.2015, 11:18
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 3 Mal
Danksagung erhalten: 2 Mal

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

Beitrag von mike08 » 20.11.2016, 19:42

Hallo Ihr Beiden!

Danke für das Feedback
Homoran hat geschrieben:Wie hat Dr Tob in seinem Skript geschrieben?
mike08 hat geschrieben:Nicht verwendete Variablen nicht löschen, sondern auf "" setzen!
und was hast du?
mike08 hat geschrieben:string zeile2 = ";
Das habe ich bereinigt. Da habe ich das " mitgelöscht und übersehen!
Homoran hat geschrieben:Wie hat Dr Tob in seinem Skript geschrieben?
mike08 hat geschrieben:Nicht verwendete Variablen nicht löschen, sondern auf "" setzen!
und was hast du?
mike08 hat geschrieben:string zeile3 = x;
Hier will ich die Systemvariable, die ich in x übertragen habe in die zeile3 kopieren.

Jetzt geht es. Danke für den kleinen Hinweis mit großer Wirkung!

Das Skript sieht jetzt wie folgt us:

Code: Alles auswählen

var SV_Temparatur_Balkon = dom.GetObject("CUxD.CUX3100001:1.TEMPERATURE").Value();
dom.GetObject("SV_Temparatur_Balkon").State(SV_Temparatur_Balkon);
var tempx = dom.GetObject("SV_Temparatur_Balkon").Value();

!! Universalprogramm zum Füllen des HM-Disp-EP-WM55
!! (c) DrTob
!! Version 1.01
.
.hier sind sie original Zeilen
.
!Seriennummer des HM-Disp-EP-WM55.
string seriennummer = "NEQ0712069";

!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 = "";
string icon2  = "";

string zeile3 = tempx;
string icon3  = "0x86";

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 !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Grüße
Michael
Fritzbox 7590 mit 7.x (immer aktuell)
Raspberry Pi3b mit RM: Aktuell
CCU2: Abgeschaltet
Zusatzsoftware: CUx-Daemon, E-Mail CCU Addon, hm_pdetect, hm-Print
Skripte: Servicemeldung 1.x http://homematic-forum.de/forum/viewtop ... 18#p211604
ioBroker auf Synology DS916+II imTest;
Wandtermostat, Tür-/Fensterkontakt, Ausenthermostat, 1 Kanal Taster, 2 Kanal Taster, Hutch-4fach Aktor, 1fach UP-Aktor, 2fach UP-Aktor, E-Paper-Display; CUL868(v3), USB2.0-Ser! [FF]

Marcus1@@@
Beiträge: 219
Registriert: 02.01.2016, 14:24
Danksagung erhalten: 21 Mal

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

Beitrag von Marcus1@@@ » 26.11.2016, 19:18

Kann mir jemand erklären, warum bei Tastendruck kurz nicht in zeile 3 die akuelle Uhrzeit geschrieben wird. siehe Screenshot fürs Programm und folgenden Code

Code: Alles auswählen

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

    string zeile3 = system.Date("%H:%M ");
    string icon3  = "";

    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 zeile4 = wdstr # system.Date(" %d.%m.%y");
    string icon4  = "";

    ! 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 = "NEQ0710847";

    
    ! 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);
Dateianhänge
webui.JPG

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

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

Beitrag von Homoran » 26.11.2016, 19:25

Ich fürchte du hast das Skript gewaltig kastriert, incl. der Zeilen in denen steht, dass du das nicht sollst.

Zumindest finde ich diese auf die schnelle nicht.


Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

BadenPower

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

Beitrag von BadenPower » 26.11.2016, 19:58

Marcus1@@@ hat geschrieben:Kann mir jemand erklären, warum bei Tastendruck kurz nicht in zeile 3 die akuelle Uhrzeit geschrieben wird.
Weil das Skript mit einem ParseError abgebrochen wird.
Hätte man herausfinden können, wenn man sich das Fehlerlog der CCU anschauen würde.


Wie Homoran schon erkannt hat ist zum Beispiel die Skriptvariable "zeile2" nicht deklariert.
Und dies ist nicht die einzige.

.

wintux
Beiträge: 202
Registriert: 21.12.2016, 17:57
System: CCU
Wohnort: Bad Camberg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 7 Mal

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

Beitrag von wintux » 21.12.2016, 23:03

Hallo,
ich bin Neuling und will meine E-Paper Anzeige konfigurieren.
Folgendes soll passieren:
1.Anzeige
Mit der Wlan Abwesenheitserkennung soll im Display "Anwesend" bzw "Abwesend" angezeigt werden.
Die Anzeige soll zugleich über Taster den Status geändert werden, danke für die Hilfe

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

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

Beitrag von DrTob » 22.12.2016, 12:57

Auch dafür ist kein Script nötig. Kann man doch ganz einfach zusammenklicken. Nur wer soll die Anzeige "abwesend" lesen? :P

wintux
Beiträge: 202
Registriert: 21.12.2016, 17:57
System: CCU
Wohnort: Bad Camberg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 7 Mal

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

Beitrag von wintux » 25.12.2016, 22:47

So richtig Schlau werde ich aus dem Display nicht, nach 2 Tagen hat es endlich die Einstellungen übernommen. Nur Ausgeführt wird nix.

tom2964
Beiträge: 4
Registriert: 26.12.2016, 17:05

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

Beitrag von tom2964 » 26.12.2016, 17:23

Hätte auch mal eine Frage zu diesem E-Paper Display,

würde gerne Systemvariablen anzeigen lassen zum Bsp. Garage auf oder zu.

Danke für eure Hilfe

Mfg Tom


P.S. Noch Frohe Weihachten

Antworten

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