Seite 13 von 17

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

Verfasst: 23.10.2017, 00:05
von alchy
!! 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

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

Verfasst: 23.10.2017, 00:11
von Lioncar
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.

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

Verfasst: 23.10.2017, 07:55
von DrTob
Alle Color-Variablen müssen vorhanden und definiert sein.

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

Verfasst: 28.10.2017, 18:18
von Lioncar
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);

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

Verfasst: 15.11.2017, 13:08
von emeins
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?

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

Verfasst: 15.11.2017, 13:25
von DrTob
Solange du die Taste drückst sendet das Display. Ein gleichzeitiger Empfang von Daten ist nicht möglich.

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

Verfasst: 11.01.2018, 07:55
von pfried
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

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

Verfasst: 11.01.2018, 08:18
von dtp
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

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

Verfasst: 11.01.2018, 08:28
von DrTob
? 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.

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

Verfasst: 11.01.2018, 08:56
von pfried
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