Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

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

Moderator: Co-Administratoren

MichaelN
Beiträge: 9678
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von MichaelN » 15.10.2022, 10:45

Füge dies an den Beginn deines Skripts ein.
Wenn Du den Wert für delta änderst, kannst Du beeinflussen wie groß der Temperaturunterschied sein soll, damit das Display aktualisiert wird.
Der Auslöser für das Programm sollte aber der Temperaturwert sein!

Code: Alles auswählen

integer srcId = ("$src$").ToInteger();
string Prg = dom.GetObject("$this$").Name();
real delta = 0.001; !Mindest Unterschied für neuen Wert

if (srcId > 0) {
    object oSrc = dom.GetObject(srcId);
    if (!oSrc) { system.Exec ("logger -t ["#Prg#"] -p user.debug QUIT 1: SRC kein Object"); quit; };
	}
else { system.Exec ("logger -t ["#Prg#"] -p user.debug QUIT 2: SRC kein Object"); quit; }

real aktuellerWert = oSrc.Value();
real letzterWert = oSrc.LastValue();

if ((aktuellerWert - letzterWert).Abs() < delta)
    {
    WriteLine("keine Änderung - stoppen");
    quit;
    } else {
    WriteLine("neuer Wert - weiter machen");
    }

WriteLine("hier folgt dein Skript");   
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

thommygay24
Beiträge: 288
Registriert: 16.07.2011, 20:34
Hat sich bedankt: 1 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von thommygay24 » 15.10.2022, 11:06

@Michael.
Danke für deinen Beitrag, das liest sich prima. Ich kann es aber erst heute nachmittag testen.
Muss ich da denn noch irgendwelche Variablen anlegen vorher und muss ich noch irgendwo die Seriennummer des Wandthermostats einfügen?

Bin mit Skripten unerfahren, "klicke" mir Programme bislang nur zusammen. Kenne mich mit Programmiersprache / Skriptsprache nicht aus.

Danke
Thomas

MichaelN
Beiträge: 9678
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von MichaelN » 15.10.2022, 11:36

thommygay24 hat geschrieben:
15.10.2022, 11:06
Muss ich da denn noch irgendwelche Variablen anlegen vorher und muss ich noch irgendwo die Seriennummer des Wandthermostats einfügen?
Nein, das Skript wertet automatisch den Trigger des Programms aus. Wenn Du das Programm mit einem Zeitmodul startest wird es auf die Schnauze fallen. Daher sollte der Trigger schon der Temperatursensor sein. Und den lässt Du "auf Aktualisierung "stehen. Das Programm startet dann immer noch alle 3 Minuten, das Skript bricht aber ab, wenn es nichts zu aktualisieren gibt.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

thommygay24
Beiträge: 288
Registriert: 16.07.2011, 20:34
Hat sich bedankt: 1 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von thommygay24 » 15.10.2022, 11:56

Hallo Michael.

Vielen Dank für die Mühe die Erklärung und die schnelle Hilfe.

Toll dass es das forum und so hilfsbereite Menschen gibt.
Ich teste es.

Danke
Gruß
Thomas

mading
Beiträge: 31
Registriert: 13.03.2020, 08:45
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von mading » 27.10.2022, 12:35

Hi,

ich habe das HM-DiS-EP 55 (monochrom) in einer CCU3 eingebunden und möchte einen Temperaturwert aktualisieren. Soweit ich verstanden habe, kann ich drei Zeilen mit Text (die in der Mitte) belegen. Nun wird mir auch aus der Skript Doku nicht klar, wie ich einen Wert darin schreiben kann.

Möchte ich z.B. Channel 2, Zeile 4 belegen, versuche ich es mit (x ist meine Variable mit der Temperatur):
Screenshot 2022-10-27 123409.png
Screenshot 2022-10-27 123409.png (6.26 KiB) 542 mal betrachtet
dom.GetObject("HM-Dis-EP-WM55-FMNEQ0711XX5:2.4.SUBMIT").State(x)

Muss ich nicht noch irgendwo die Zeile angeben, wie ich es laienhaft oben (fett) dargestellt habe?
Danke
mading

mading
Beiträge: 31
Registriert: 13.03.2020, 08:45
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von mading » 27.10.2022, 13:29

OK, das Thema handelt ja vom Skript. Ich habe das Skript meinen Bedürfnissen angepasst und habe fürs erste bei Tastendruck 2 den Auslöser für das Skript definiert. Nur wird der Wert nicht ins Display geschrieben.

Als Beispiel hole ich mir den Temperaturwert meiner HMIP Wetterstation und möchte ihn im Display darstellen. Drücke ich den Taster, passiert nichts.

Code: Alles auswählen

!! Universalprogramm zum Füllen V1.5
!! (c) DrTob 
!! optimized by thkl

!! Das Script holt sich jetzt die Seriennummer des Displays selbst aus der Auslösebedinung des Programms

! Farben
! 0x80 weiß
! 0x81 rot
! 0x82 orange
! 0x83 gelb
! 0x84 gruen
! 0x85 blau 

! Symbole 
! 0x80 AUS
! 0x81 EIN
! 0x82 OFFEN
! 0x83 geschlossen
! 0x84 fehler
! 0x85 alles ok
! 0x86 information
! 0x87 neue nachricht
! 0x88 servicemeldung
! 0x89 Signal grün
! 0x8A Signal gelb
! 0x8B Signal rot

! Zugriff auf vordefinierte Texte
!
! 0x80 Text  0 (Kanal 1  Text Zeile 1)
! 0x81 Text  1 (Kanal 1  Text Zeile 2)
! 0x82 Text  2 (Kanal 2  Text Zeile 3)
! 0x83 Text  3 (Kanal 2  Text Zeile 4)
! 0x84 Text  4 (Kanal 3  Text Zeile 5)
! 0x85 Text  5 (Kanal 3  Text Zeile 6)
! 0x86 Text  6 (Kanal 4  Text Zeile 7)
! 0x87 Text  7 (Kanal 4  Text Zeile 8)
! 0x88 Text  8 (Kanal 5  Text Zeile 9)
! 0x89 Text  9 (Kanal 5  Text Zeile 10)
! 0x8A Text 10 (Kanal 6  Text Zeile 11)
! 0x8B Text 11 (Kanal 6  Text Zeile 12)
! 0x8C Text 12 (Kanal 7  Text Zeile 13)
! 0x8D Text 13 (Kanal 7  Text Zeile 14)
! 0x8E Text 14 (Kanal 8  Text Zeile 15)
! 0x8F Text 15 (Kanal 8  Text Zeile 16)
! 0x90 Text 16 (Kanal 9  Text Zeile 17)
! 0x91 Text 17 (Kanal 9  Text Zeile 18)
! 0x92 Text 18 (Kanal 10 Text Zeile 19)
! 0x93 Text 19 (Kanal 10 Text Zeile 20)

var istTemp = dom.GetObject("HmIP-RF.00181BE98B3D7B:1.ACTUAL_TEMPERATURE").Value();

string zeile1 = "Zeile 1";
string color1 = "0x80";
string icon1  = "";

string zeile2 = "Zeile 2";
string color2 = "0x80";
string icon2  = "";

string zeile3 = "Zeile 3";
string color3 = "0x80";
string icon3  = "";

string zeile4 = istTemp.ToString(1) # " Grad";
string color4 = "0x80";
string icon4  = "";

string zeile5 = "Zeile 5";
string color5 = "0x80";
string icon5  = "";

string zeile6 = "Zeile 6";
string color6 = "0x80";
string icon6  = "";

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! System Routine do not change anything below !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

string splitter="|";
string msgBuffer = zeile1 # splitter # color1 # splitter # icon1 # "\t";
msgBuffer = msgBuffer # zeile2 # splitter # color2 # splitter # icon2 # "\t";
msgBuffer = msgBuffer # zeile3 # splitter # color3 # splitter # icon3 # "\t";
msgBuffer = msgBuffer # zeile4 # splitter # color4 # splitter # icon4 # "\t";
msgBuffer = msgBuffer # zeile5 # splitter # color5 # splitter # icon5 # "\t";
msgBuffer = msgBuffer # zeile6 # splitter # color6 # splitter # icon6;

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\t?,0x3f"; 

string bufferLine;
string substEntry;
integer i;
string char;
string line;
string icon;

string command = "0x02";
foreach(bufferLine, msgBuffer) {
   line = bufferLine.StrValueByIndex(splitter, 0);
   icon = bufferLine.StrValueByIndex(splitter, 2);
   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; 
      }
      command = command # ",0x11," # bufferLine.StrValueByIndex(splitter, 1);
      if (icon <> "") {
         command = command # ",0x13," # icon;
      }
   }
   command = command # ",0x0A";
}
command = command # ",0x03";

dom.GetObject("BidCos-RF." # dom.GetObject("$src$").Name().StrValueByIndex(".",1) # ".SUBMIT").State(command);
2.png
2.png (17.88 KiB) 527 mal betrachtet
Um Sicher zu gehen, habe ich mir mal eine Telegram Push aus dem Homematic Programm schicken lassen, der Tastendruck kommt an.

Wäre um Hilfe dankbar.

Benutzeravatar
Baxxy
Beiträge: 10826
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 607 Mal
Danksagung erhalten: 2225 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von Baxxy » 27.10.2022, 19:37

mading hat geschrieben:
27.10.2022, 13:29
Wäre um Hilfe dankbar.
Du nutzt ja die EPaper-Version (HM-Dis-EP-WM55), hier im Thread geht es aber um die "andere Version" (HM-Dis-WM55).
Ich denke das Script von hier ist nicht mit deinem Display kompatibel. Irgendwo gibt es aber auch ein Thread + Script zur EPaper-Version.

Alles halb so wild, hier mal was zum testen:
(Im "Script testen" ausführen, hab's hoffentlich korrekt anhand von Dir sichtbarer Daten ausgefüllt)

Im Bereich Zeile 2 ist jetzt dein Gerät eingetragen, drüber ist ein auskommentiertes Beispiel wie ich das normalerweise mache. Ich nutze Namen statt Seriennummern.

Code: Alles auswählen

!! Universalprogramm zum Füllen des HM-Disp-EP-WM55
!! (c) DrTob
!! Version 1.10
!! modified by Baxxy (° - Zeichen kann nun genutzt werden)
!! https://homematic-forum.de/forum/viewtopic.php?f=27&t=70904&hilit=epaper&start=10#p689860

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

!- Zeile 2:
!string zeile2 = "IN: "# channels.Get ("HmIP-STHD Dev2_514:1 - Bedienung").DPByHssDP ("ACTUAL_TEMPERATURE").Value().ToString(1).Replace(".", ",") #"°C";
string zeile2 = "IN: "# dom.GetObject("HmIP-RF.000EDA4995B0ED:1.ACTUAL_TEMPERATURE").Value().ToString(1).Replace(".", ",") #"°C";
!string zeile2 = "Test Zeile2";
string icon2 = "";

!- Zeile 3:
string zeile3 = "Test Zeile3";
string icon3 = "";

!- Zeile 4:
string zeile4 = "Test Zeile4";
string icon4 = "";

!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

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;

!msgBuffer = msgBuffer.Replace(".", ",");

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\t°,0x5e";

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";
object Disp_DP = dom.GetObject("BidCos-RF." # seriennummer # ":3.SUBMIT");
 if (Disp_DP) { dom.GetObject("BidCos-RF." # seriennummer # ":3.SUBMIT").State(command); }
  else { WriteLine("Display-Datenpunkt nicht gefunden!"); }
Viel Erfolg! :)

mading
Beiträge: 31
Registriert: 13.03.2020, 08:45
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Freie Texte in Statusanzeige HM-Dis-WM55 über ein HM Script

Beitrag von mading » 30.10.2022, 08:57

Danke für die schnelle Antwort, ich teste es mal!

Antworten

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