Ansteuern der Statusanzeige mit E-Paper-Display aus Script

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

Moderator: Co-Administratoren

Abakus
Beiträge: 3
Registriert: 27.03.2016, 13:45

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

Beitrag von Abakus » 04.11.2017, 21:45

Hallo zusammen,

vielen Dank für das tolle Skript, das grds. prima funktioniert. Allerdings habe ich den Eindruck, dass es bei "zentrierter" Anzeige die erste Stelle ganz links im Display nicht nutzt, sondern die Texte ohne Nutzung des ersten Zeichens pro Zeile zentriert!? Was muss ich im Skript anpassen, um das zu ändern?

Lg, Michael

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

Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Beitrag von DrTob » 04.11.2017, 22:40

Wenn ich mich richtig erinnere: Es kann nicht wirklich “millimetergenau” zentriert werden. Es wird die entsprechende Anzahl an Zeichen vorne aufgefüllt. Dadurch kann der Abstand vorne gegenüber hinten um ein Zeichen unterschiedlich sein.

froschtreter
Beiträge: 23
Registriert: 18.11.2016, 13:46

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

Beitrag von froschtreter » 07.11.2017, 19:52

Hallo, leider funktioniert mein Script nicht, ich möchte gern 3 verschiedene Temperaturen angezeigt bekommen... Kann mir bitte jemand den entscheidenden Tipp geben? Wenn ich die feste Temperatur anzeigen lasse (23 Grad zum Test), dann funktioniert es komischerweise...
Vielen Dank und schöne Grüße - tom

Code: Alles auswählen


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

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";}

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

string temp = dom.GetObject("BidCos-RF.NEQ0531XXX:1.TEMPERATURE").Value().ToString(1);
! string temp = "23.0";
string zeile2 = temp # " C Solar";
string icon2  = "";


string temp = dom.GetObject("BidCos-RF.NEQ1009XXX:1.TEMPERATURE").Value().ToString(1);
! string temp = "23.0";
string zeile3 = temp # " C Winter";
string icon3  = "";


string temp = dom.GetObject("BidCos-RF.NEQ1100XXX:1.TEMPERATURE").Value().ToString(1);
! string temp = "23.0";
string zeile4 = temp # " C außen";
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);

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

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

Beitrag von alchy » 07.11.2017, 20:09

wenn das funktioniert:

Code: Alles auswählen

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

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";}

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

!string temp2 = dom.GetObject("BidCos-RF.NEQ0531XXX:1.TEMPERATURE").Value().ToString(1);
string temp2 = "22.0";
string zeile2 = temp2 # " C Solar";
string icon2  = "";


!string temp3 = dom.GetObject("BidCos-RF.NEQ1009XXX:1.TEMPERATURE").Value().ToString(1);
string temp3 = "23.0";
string zeile3 = temp3 # " C Winter";
string icon3  = "";


!string temp4 = dom.GetObject("BidCos-RF.NEQ1100XXX:1.TEMPERATURE").Value().ToString(1);
string temp4 = "24.0";
string zeile4 = temp4 # " C außen";
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);
dann die Zuweisung in temp2 temp3 temp4 auf den Datenpunkt

Code: Alles auswählen

string tempX = dom.GetObject("BidCos-RF.NEQ0531XXX:1.TEMPERATURE").Value().ToString(1);
ummodeln. Dabei sicherstellen, das es den Datenpunkt auch gibt.
Welche Art von Temperatursensoren sind es?

Alchy
Zuletzt geändert von alchy am 07.11.2017, 20:43, insgesamt 1-mal geändert.
Grund: Ausrufezeichen entfernt im Script

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.

froschtreter
Beiträge: 23
Registriert: 18.11.2016, 13:46

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

Beitrag von froschtreter » 07.11.2017, 20:29

Hi danke Alchy zuerst mal. Einer ist eine Wetterstation, dann ein Heizkörperthermostat und zuletzt noch ein Temperaturdifferenzsensor...
Wenn ich jetzt zuerst die Wetterstation in Zeile 2 setze und dann in Zeile 3 und 4 die 23 Grad Test-Temperatur, dann geht es...

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

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

Beitrag von alchy » 07.11.2017, 20:55

Das Script oben ist von mir so angepasst, das es dir 3 Temperaturen ausgeben sollte. 22/23/24 Grad.

Wenn dem so ist, gehst du zu:

Code: Alles auswählen

!string temp2 = dom.GetObject("BidCos-RF.NEQ0531XXX:1.TEMPERATURE").Value().ToString(1);
string temp2 = "22.0"; 
Nimmst das Ausrufezeichen aus der ersten in die zweite Zeile

Vorher schaust du aber ob es den Datenpunkt auch gibt.
Einfach mal bei Script testen das ausführen:

Code: Alles auswählen

string temp2 = dom.GetObject("BidCos-RF.NEQ0531XXX:1.TEMPERATURE").Value().ToString(1);
WriteLine(temp2); 
usw.
In der Scriptdoku (Signatur) findest du auch den Teil mit den Datenpunkten.

Da du mir nicht sagen willst, welche Art Sensoren du abfragen willst (Und nein nicht die Angabe Heizkörperthermostat wäre hilfreich, sondern z.B. HM-CC-RT-DN)
bleibt die Hilfe auch bescheiden.

Also Scriptdoku oder >> H I E R << z.B. lesen.
AM Ende findest du ein Script zur einfachen Anzeige der Datenpunkte, du brauchst nur die Seriennummer eingeben.

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.

froschtreter
Beiträge: 23
Registriert: 18.11.2016, 13:46

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

Beitrag von froschtreter » 07.11.2017, 21:14

Ok habe verstanden:

Funk-Wetterstation HM-WDS100-C6-O-2 - funktioniert wie gesagt. Datenpunkt vorhanden

Funk-Heizkörperthermostat HM-CC-RT-DN - geht nicht, Kein Datenpunkt Kanal 1 TEMPERATURE

Funk-Temperaturdifferenzsensor HM-WDS30-OT2-SM - geht nicht, kein Datenpunkt Kanal 1 TEMPERATURE

Jetzt stellt sich mir als Anfänger die Frage, wie ich den Datenpunkt finden kann?

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 » 07.11.2017, 21:20

froschtreter hat geschrieben:Jetzt stellt sich mir als Anfänger die Frage, wie ich den Datenpunkt finden kann?
So:
http://www.eq-3.de/Downloads/eq3/downlo ... kunden.pdf


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

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

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

Beitrag von alchy » 07.11.2017, 21:21

froschtreter hat geschrieben:Jetzt stellt sich mir als Anfänger die Frage, wie ich den Datenpunkt finden kann?
Mir stellt sich die Frage, warum du meinen Post nicht liest :?: :roll:
alchy hat geschrieben:Also Scriptdoku oder >> H I E R << z.B. lesen.
hinter dem >> H I E R << ist z.B. ein Link zu einem Script


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.

froschtreter
Beiträge: 23
Registriert: 18.11.2016, 13:46

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

Beitrag von froschtreter » 07.11.2017, 21:26

Ja sorry. Wollte den einfachen Weg gehen... Kommt nicht mehr vor!

Antworten

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