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

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

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

Beitrag von alchy » 23.10.2017, 00:05

!! Universalprogramm zum Füllen

und um ein Besipiel aus dem eigentlichen Code zu nehmen

substitutions = substitutions # "\tÄ,0x5B\tÖ

Kopiere das Script nochmal direkt aus dem Forum in die CCU ohne Umwege über einen Windoof Editor.

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.

Lioncar
Beiträge: 21
Registriert: 16.01.2016, 16:46

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

Beitrag von Lioncar » 23.10.2017, 00:11

Da hab ich natürlich nicht drauf geachtet... *autsch*

Danke für den Tip. Test steht am WE an, da ich im Ausland bin...

Teilweise ist die Farbe undefiniert, spielt das auch ne Rolle?
Color2 fehlt z.B.

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

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

Beitrag von DrTob » 23.10.2017, 07:55

Alle Color-Variablen müssen vorhanden und definiert sein.

Lioncar
Beiträge: 21
Registriert: 16.01.2016, 16:46

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

Beitrag von Lioncar » 28.10.2017, 18:18

Hallo DrTob,
zurück von der Dienstreise direkt frisch ans Werk.
Es lag daran das nicht alle Variablen deklariert waren. Die Umlaute wurden in dem Fehlerprüfungsfesnter generiert, woraus auch den Forumseintrag copiert hatte.

Jetzt läuft das Script fehlerfrei durch, doch leider sagt mir die Anzeige ständig:
"Keine Daten Empfangen"

Was ist denn das nun? *heul*

Grüße
Timo

Code: Alles auswählen

string weiss  = "0x80";
string rot    = "0x81";
string orange = "0x82";
string gelb   = "0x83";
string gruen  = "0x84";
string blau   = "0x85";

! 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

var istTemp = dom.GetObject("BidCos-RF.OEQ0128899:1.TEMPERATURE").State();
var istHum  = dom.GetObject("BidCos-RF.OEQ0128899:1.HUMIDITY").State();

! Temperatur
string zeile1 = "Temp.";
string color1 = blau;
string icon1 = "0x86";

string zeile2 = istTemp.ToString(1) # " C";
string color2 = "";
string icon2 = "";

! Feuchte
string zeile3 = "Feuchte";
string color3 = orange;
string  icon3 = "0x86";

string zeile4 = istHum.ToString(1) # " %";
string color4 = "";
string icon4 = "";

! ----------------------------------------------------------------------------------------
var fen = dom.GetObject("Fensterkontakte").State();

if(fen == true)
   {
    string zeile5 = "Fenster offen";
    string color5 = rot;
    string  icon5 = "0x8B";
   }
   else
   {
    string zeile5 = "Fenster zu";
    string color5 = gruen;
    string  icon5 = "0x89";
   }

! Alarmstatus
string zeile6 = "";
string color6 = "";
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";

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);

emeins
Beiträge: 16
Registriert: 15.11.2017, 12:50
Hat sich bedankt: 1 Mal

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

Beitrag von emeins » 15.11.2017, 13:08

Hallo, Ich habe eine Aktion (Programm) bei langem Tastendruck des Displays hinterlegt. Als Aktion ist das Script hinterlegt, um den Displayinhalt neu zu schreiben. Dies wird aber nicht ausgeführt.
Grundsätzlich funktioniert der lange Tastendruck bei mir (Firmware v1.2). Im Systemprotokoll sehe ich auch die entsprechenden Einträge.

Was ich dazu schon getestet habe:
> Wenn ich die Aktion an einen kurzen Tastendruck binde, funktioniert das Display neu Schreiben super.
> Wenn ich den langen Tastendruck mit einer anderen Aktion verbinde, wird diese ausgeführt.
> Wenn ich in dem Programm selbst eine Aktion noch vor dem Script ausführen lasse, wird diese erledigt, dann jedoch der Teil zum Display neu schreiben nicht.

Ist evtl. das Display für Konfigurationsupdates gesperrt, solange eine Taste gedrückt ist und lässt sich das dann irgendwie abfangen?

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

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

Beitrag von DrTob » 15.11.2017, 13:25

Solange du die Taste drückst sendet das Display. Ein gleichzeitiger Empfang von Daten ist nicht möglich.

pfried
Beiträge: 28
Registriert: 06.12.2017, 15:22
Hat sich bedankt: 2 Mal

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

Beitrag von pfried » 11.01.2018, 07:55

Hallo und Guten Morgen,
vielen Dank für das Skript, hat mir sehr geholfen!
Ich habe eine kurze Frage: Wollte im Text ein Fragezeichen verwenden ("Türen zu?") Das Fragezeichen verschwindet aber dann auf dem Display.
Bin kein Programmierer, deshalb tue ich mir schwer, die "System"-Routine im zweiten Teil des Scripts richtig zu interpretieren.
Hoffentlich ist meine Frage nicht zu dämlich.....
Liebe Grüße

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

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

Beitrag von dtp » 11.01.2018, 08:18

Hi,

ich denke, das Skript ließe sich mit dem replace()-Befehl, der seit der FW 2.29.22 von jmaus implementiert wurde, etwas vereinfachen, oder? Ist aber nicht wirklich notwendig. Funktioniert ja auch so.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

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

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

Beitrag von DrTob » 11.01.2018, 08:28

? wird nicht ersetzt. Und damit nicht unterstützt. Ich meine ich hätte damals getestet welche Zeichen das Display unterstützt und alles angeboten. Kannst du in einem Programm manuell einen Text mit Fragezeichen angeben und an das Display übermitteln?

Unveränderliche Texte ("Türen zu?") solltest du auch nicht jedesmal individuell übermitteln, sondern im Display hinterlegen und dann nur noch den entsprechenden Kanal im Script angeben. Auf diese Weise müssen deutlich weniger Daten übertragen werden.

pfried
Beiträge: 28
Registriert: 06.12.2017, 15:22
Hat sich bedankt: 2 Mal

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

Beitrag von pfried » 11.01.2018, 08:56

Danke für die schnelle Antwort.
Wollte einen manuellen Text einsetzen, denn wenn ich einen "unveränderlichen" Text verwende, wird aus "Türen zu?" -> "T}ren zu?" und dann kommt es zu Problemen am Display.
Werde nun mit "Tueren zu?" leben müssen.
Nochmals vielen Dank

Antworten

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