HM Taster mit E-Paper tut nicht was es soll

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

Antworten
raspido
Beiträge: 65
Registriert: 06.02.2019, 13:59

HM Taster mit E-Paper tut nicht was es soll

Beitrag von raspido » 15.02.2019, 11:49

Guten Morgen,

ich habe angefangen mich etwas in Homematic ein zuarbeiten und stieß gerade auf ein Problem, ich hab mich ans Video von Verdrahtet.info gehalten und leider passiet nicht wirklich was auf dem Display.

Ich habe folgende Komponenten im ganzen verbaut:

HM-Dis-EP-WM55
HM-WDS40-TH-I-2 (indoor Temperatursensor)
HmIP-STHO-A (outdoor Temperatursensor)
CCU3 als Zentrale

Hier der etwas modifizierte Code:

Code: Alles auswählen

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

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

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 = "PEQ0177610";

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

Das Script soll eigentlich beide Temperaturen anzeigen und das Datum. Den Teil mit der Uhrzeit habe ich entfernt.

Als nächstes noch die Screenshots zum ganzen:
Zeitmodul Screenshot.jpg
Programm.jpg

Ich hoffe man kann mir helfen.

Unterm Strich sollte am Display in erster Linie die Temperaturen angezeigt werden. Nur leider Tut sich auf dem Display nix, außer ich ändere es in den Einstellungen des Displays.



Gruß

Michael

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

Re: HM Taster mit E-Paper tut nicht was es soll

Beitrag von Black » 15.02.2019, 12:30

gibts einen Fehlereintrag im Systemprotokoll ? was macht das, wenn du das script unter script testen ausführst ?
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

raspido
Beiträge: 65
Registriert: 06.02.2019, 13:59

Re: HM Taster mit E-Paper tut nicht was es soll

Beitrag von raspido » 15.02.2019, 15:06

Und im Systemprotokoll zeigt er nichts an. Also ist absolut leer.

Beim Testen über den Punkt "Script testen" bleibt die Ausgabe leer und auf dem Display tut sich auch nichts.

Als ich das Script unverändert genommen hatte, außer austausch der Seriennummern wurde es beim ersten mal 1x mal ausgeführt und danach nie wieder. Die Temperatursensoren liefern aber Werte. Habe diese als Favorieten im Webportal hinterlegt. Also als zusätzliche Info.

Michael


PS: An der Zentrale selbst habe ich noch keine Einstellungen groß verändert. Also nicht das da was Probleme machen kann

raspido
Beiträge: 65
Registriert: 06.02.2019, 13:59

Re: HM Taster mit E-Paper tut nicht was es soll

Beitrag von raspido » 16.02.2019, 20:46

Habe nun neue "Effekte" fest gestellt.

Zum einen, beide Fühler zeigen gleiche Temperaturen an, zum anderen zwischendurch standen 0 Grad je Sensor dran.



Michael

Goglo
Beiträge: 610
Registriert: 14.04.2012, 18:34
Danksagung erhalten: 1 Mal

Re: HM Taster mit E-Paper tut nicht was es soll

Beitrag von Goglo » 09.03.2019, 14:38

Ich hab's gerade mal als "Skript testen" ausprobiert und bei mir klappt's auf Anhieb mit drei Änderungen:
Ich habe die beiden Stellen auskommentiert, wo der Temperatursensor abgefragt wird und statt dessen die darunter stehende feste Wertzuweisung entkommentiert. Und natürlich die Seriennummer des Tasters geändert.

Wenn die Abfrage der Temperatursensoren schiefgeht - und das tut sie, sobald man das Gerät mit dieser Seriennummer nicht hat - stoppt das Skript an dieser Stelle und nichts passiert. Aus diesem Grund habe ich mir angewöhnt, alle paar Zeilen ein WriteLine("Punkt 1"); in das Skript einzufügen um die Stelle zu lokalisieren, an der die Ausführung abbricht.

Grob gesagt, muss das Skript bis zu der Stelle "System Routine do not change anything below !" die Variablen zeile2 / icon2...zeile4 / icon4 gesetzt haben. Mit den auch möglichen Variablen für Ton und Blinken habe ich noch nicht gespielt.

Ich find's gut, so ein Skript gefunden zu haben - Danke, DrTob! Bei mir liegt der HM-Dis-EP-WM55 seit heute 'rum und ich möchte da drei Temperaturen drauf anzeigen. Per WebUI das Ding zu programmieren kommt ja von der Anwendung her über einen Prototypen nicht hinaus.

Gruss,

Goglo.

/edit: Typo
83 Kanäle in 50 Geräten:
3x HM-LC-Sw1-Pl, 1x HM-WDS10-TH-O, 5x HM-PB-4-WM, 3x HM-PB-2-WM, 3x HM-LC-Dim1T-FM, 2x HM-Sec-SC, 4x HM-Sec-RHS, 5x HM-CC-VD, 4x HM-CC-TC, 5x HM-LC-Sw1-FM, 2x HM-Sec-MDIR, 1x HM-WDS30-T-O, 1x HM-LC-Sw1-Pl-2, 2x HM-PB-2-WM55, 1x HM-LC-Dim1L-CV, 1x HM-CCU-1, 1x HM-PBI-4-FM, 1x HM-LC-Dim1L-Pl-2, 1x HM-LC-Dim1T-CV, 1x HM-LC-Dim1L-Pl, 1x HM-LC-Sw2-FM, 1x HM-LC-Sw1-SM, 1x HM-Sec-WDS

82 Kanäle in 43 Geräten:
1x HM-PB-2-WM, 2x HM-LC-Bl1-FM, 3x HM-LC-Bl1PBU-FM, 3x HM-PB-2-WM55, 2x HM-PB-4-WM, 9x HM-CC-VD, 8x HM-CC-TC, 2x HM-LC-Sw2-FM, 1x HM-WDS10-TH-O, 1x HM-CCU-1, 1x HM-Sen-MDIR-O, 4x HM-LC-Sw1-FM, 2x HM-SwI-3-FM, 1x HM-LC-Sw4-SM, 1x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-WDS30-T-O

Goglo
Beiträge: 610
Registriert: 14.04.2012, 18:34
Danksagung erhalten: 1 Mal

Re: HM Taster mit E-Paper tut nicht was es soll

Beitrag von Goglo » 09.03.2019, 16:42

Ich bin nun fertig mit meinem Coding:

Code: Alles auswählen

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

string zeile2;
string icon2;
string zeile3;
string icon3;
string zeile4;
string icon4;

!WriteLine("Start");

var temp = dom.GetObject("BidCos-RF.GEQ0020324:1.TEMPERATURE").Value();
var sysv = dom.GetObject("PufferObenTemp");
if ( sysv.Value() != temp ){
  sysv.State(temp);
  zeile2 = "Oben: " # temp.ToString(1) # " C";
}
!WriteLine("2:" # zeile2);

temp = dom.GetObject("BidCos-RF.MEQ0281918:1.TEMPERATURE").Value();
sysv = dom.GetObject("PufferMitteTemp");
if ( sysv.Value() != temp ){
  sysv.State(temp);
  zeile3 = "Mitte: " # temp.ToString(1) # " C";
}
!WriteLine("3:" # zeile3);

temp = dom.GetObject("BidCos-RF.MEQ0281978:1.TEMPERATURE").Value();
sysv = dom.GetObject("PufferUntenTemp");
if ( sysv.Value() != temp ){
  sysv.State(temp);
  zeile4 = "Unten: " # temp.ToString(1) # " C";
}
!WriteLine("4:" # zeile4);

if ( (zeile2 == "") && (zeile3 == "") && (zeile4 == "") ){
  !WriteLine("stop");
  quit;
}
!WriteLine("Update");
Nach diesem Coding geht's mit dem originalen von oben weiter. Damit das Gerät nicht zu viel Strom durch unnötige Updates verbraucht, bastele ich mir die einzelnen Zeilen nur dann zusammen, wenn sich die aktuelle Temperatur von der in einer Systemvariablen gespeicherten unterscheidet. Ein update braucht es dann nur, falls eine Zeile sich geändert hat. Die Debug-Ausgaben habe ich mal dringelassen, damit man sieht, was ich damit im letzten Post gemeint habe.

Gruss,

Goglo.
83 Kanäle in 50 Geräten:
3x HM-LC-Sw1-Pl, 1x HM-WDS10-TH-O, 5x HM-PB-4-WM, 3x HM-PB-2-WM, 3x HM-LC-Dim1T-FM, 2x HM-Sec-SC, 4x HM-Sec-RHS, 5x HM-CC-VD, 4x HM-CC-TC, 5x HM-LC-Sw1-FM, 2x HM-Sec-MDIR, 1x HM-WDS30-T-O, 1x HM-LC-Sw1-Pl-2, 2x HM-PB-2-WM55, 1x HM-LC-Dim1L-CV, 1x HM-CCU-1, 1x HM-PBI-4-FM, 1x HM-LC-Dim1L-Pl-2, 1x HM-LC-Dim1T-CV, 1x HM-LC-Dim1L-Pl, 1x HM-LC-Sw2-FM, 1x HM-LC-Sw1-SM, 1x HM-Sec-WDS

82 Kanäle in 43 Geräten:
1x HM-PB-2-WM, 2x HM-LC-Bl1-FM, 3x HM-LC-Bl1PBU-FM, 3x HM-PB-2-WM55, 2x HM-PB-4-WM, 9x HM-CC-VD, 8x HM-CC-TC, 2x HM-LC-Sw2-FM, 1x HM-WDS10-TH-O, 1x HM-CCU-1, 1x HM-Sen-MDIR-O, 4x HM-LC-Sw1-FM, 2x HM-SwI-3-FM, 1x HM-LC-Sw4-SM, 1x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-WDS30-T-O

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“