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

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 » 08.06.2017, 20:50

Das kann diverse Gründe haben. Z.B. Antwortdauer zu lang oder (was ich vermute) Fehler im Script. Nur ohne das zu kennen kann ich hier schlecht helfen ;)

Xfiles_de
Beiträge: 161
Registriert: 27.07.2016, 06:10
Hat sich bedankt: 2 Mal

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

Beitrag von Xfiles_de » 15.06.2017, 19:22

alchy hat geschrieben:Ein extrem gestrippte Version des Scriptes gibt dir die Möglichkeit einen Anfang zu finden.
Zur Laufzeit werden die Anzahl der geöffneten Sensoren und die Räume dessen ausgelesen und ausgegeben.

Code: Alles auswählen

! Fenstersensoren und HMW-Sen-SC-12-DR in einem bestimmten Gewerk/ Favoriten u.a. durchsuchen
! v0.7 (c) by Alchy 
! stripped by Alchy
reicht das?

Alchy
Seit den neuen homematic-ccu2-2.27.8.20170501-2017-06-15-1434 funktioniert der skript nicht mehr :( angeblich wegen neuen ReGaHss der sich in RaspberryMatic befindet .
wo dran kann es liegen ? wo sind es fehler drin ?

Edit:
Habe gesehen daß du eine v0.8 extra für ReGaHss gemacht hast . Hoffe du kannst mir das auch passend umschreiben ?!

Danke in voraus .
Zuletzt geändert von alchy am 16.06.2017, 11:34, insgesamt 1-mal geändert.
Grund: Script entfernt

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

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

Beitrag von alchy » 16.06.2017, 11:33

So müsste das gehen;

Code: Alles auswählen

! Fenstersensoren und HMW-Sen-SC-12-DR in einem bestimmten Gewerk/ Favoriten u.a. durchsuchen
! v0.9 (c) by Alchy 
! stripped by Alchy

! +++++++++++ Setup Script ++++++++++++++++
string FUNCTIONS = "Verschluss"; ! which function / room / favorites

!++++++ DONT TOUCH BEHIND THIS LINE +++++++++
string i;
string slist;
integer count = 0;
var sec=dom.GetObject(FUNCTIONS);
foreach(i,sec.EnumUsedIDs()) {
boolean choice = false;
boolean status = false;
var ch = dom.GetObject(i);
var dev = dom.GetObject(ch.Device());
var chType = ch.HssType();
var devType = dev.HssType();
string room; string id; foreach(id, ch.ChnRoom()) {   var roomi = dom.GetObject(id);   room = room # " "# roomi.Name() ; } 
if ( ( chType == "SHUTTER_CONTACT") || ( chType == "ROTARY_HANDLE_SENSOR") ) { choice = true; var status = ch.DPByHssDP("STATE").Value(); }
if ( ( devType == "HMW-Sen-SC-12-DR") && ( chType == "SENSOR")  ) { choice = true; var status = ch.DPByHssDP("SENSOR").Value(); }
if (choice){
if (status) { 
count = count +1; 
slist=slist #room #"|"; 
}}}
string message = (count #" offen|" #slist);

! in die Zeilen als Beispielcode
string zeile1 = message.StrValueByIndex("|", 0);
string color1 = "0x80";
string icon1  = "";
string zeile2 = message.StrValueByIndex("|", 1);
string color2 = "0x80";
string icon2  = "";
string zeile3 = message.StrValueByIndex("|", 2);
string color3 = "0x80";
string icon3  = "";

! Ausgabe der Zeilen zum Test
WriteLine(zeile1);
WriteLine(zeile2);
WriteLine(zeile3);
Alchy
Zuletzt geändert von alchy am 25.07.2017, 20:21, insgesamt 1-mal geändert.
Grund: fix

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.

Xfiles_de
Beiträge: 161
Registriert: 27.07.2016, 06:10
Hat sich bedankt: 2 Mal

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

Beitrag von Xfiles_de » 16.06.2017, 12:08

Super . Es funktioniert wieder !

DANKE !

tanosky
Beiträge: 1
Registriert: 27.06.2017, 15:00

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

Beitrag von tanosky » 27.06.2017, 15:08

Hallo zusammen

Danke euch für das Script!!
Ich nutze Node-Red als zentrale Intelligenz und habe die Funktion unter Javascript wie folgt angepasst ( falls das mal jemand benötigen sollte ):

Code: Alles auswählen


var seriennummer = 'NEQxxxxxxx';
var ccu = '192.168.x.x:8181/Test.exe';
var anz = {
  'line1' : { 'text':global.get("text1"),icon:global.get("icon1")},
  'line2' : { 'text':global.get("text2"),icon:global.get("icon2")},
  'line3' : { 'text':global.get("text3"),icon:global.get("icon3")}
};
function umsetzen(display) { 
        var string = "0x02,0x0A"; 
        if (display.line1.text !== '') { 
            string += ',0x12,'+display.line1.text.hexEncode(); 
            if (display.line1.icon !== ''){ 
                string += '0x13,'+display.line1.icon+',0x0A'; 
            } else { 
               string += '0x0A'; 
            } 
        } else { 
            string += ',0x0A'; 
        } 
        if (display.line2.text !== '') { 
            string += ',0x12,'+display.line2.text.hexEncode(); 
            if (display.line2.icon !== ''){ 
                string += '0x13,'+display.line2.icon+',0x0A'; 
            } else { 
               string += '0x0A'; 
            } 
        } else { 
            string += ',0x0A'; 
        } 
        if (display.line3.text !== '') { 
            string += ',0x12,'+display.line3.text.hexEncode(); 
            if (display.line3.icon !== ''){ 
                string += '0x13,'+display.line3.icon+',0x0A'; 
            } else { 
               string += '0x0A'; 
            } 
        } else { 
            string += ',0x0A'; 
        } 
        
        
        string +=',0x14,0xC0,0x1C,0xDE,0x1D,0xEF,0x16,0xF0,0x03'; 
        
        string = 'dom.GetObject("BidCos-RF.'+seriennummer+':3.SUBMIT").State("'+string+'"); ';
    return string; 
} 


String.prototype.hexEncode = function(){
    var hex, i;

    var result = "";
    for (i=0; i<this.length; i++) {
        hex = this.charCodeAt(i).toString(16);
        result += '0x'+(hex).slice(-2)+',';
    }

    return result
}


 msg.ccu = ccu;
msg.payload=umsetzen(anz);
return msg;
 


Die LED Farben Funktionalität benötige ich nicht, diese wurde hier umgangen.

Hier noch der Node:

Code: Alles auswählen

[
    {
        "id": "cde1ee2c.1a4c6",
        "type": "function",
        "z": "919f9105.0a40b",
        "name": "Display updater",
        "func": "var seriennummer = 'NEQxxxxxxx';\nvar ccu = '192.168.x.x:8181/Test.exe';\nvar anz = {\n  'line1' : { 'text':global.get(\"text1\"),icon:global.get(\"icon1\")},\n  'line2' : { 'text':global.get(\"text2\"),icon:global.get(\"icon2\")},\n  'line3' : { 'text':global.get(\"text3\"),icon:global.get(\"icon3\")}\n};\nfunction umsetzen(display) { \n        var string = \"0x02,0x0A\"; \n        if (display.line1.text !== '') { \n            string += ',0x12,'+display.line1.text.hexEncode(); \n            if (display.line1.icon !== ''){ \n                string += '0x13,'+display.line1.icon+',0x0A'; \n            } else { \n               string += '0x0A'; \n            } \n        } else { \n            string += ',0x0A'; \n        } \n        if (display.line2.text !== '') { \n            string += ',0x12,'+display.line2.text.hexEncode(); \n            if (display.line2.icon !== ''){ \n                string += '0x13,'+display.line2.icon+',0x0A'; \n            } else { \n               string += '0x0A'; \n            } \n        } else { \n            string += ',0x0A'; \n        } \n        if (display.line3.text !== '') { \n            string += ',0x12,'+display.line3.text.hexEncode(); \n            if (display.line3.icon !== ''){ \n                string += '0x13,'+display.line3.icon+',0x0A'; \n            } else { \n               string += '0x0A'; \n            } \n        } else { \n            string += ',0x0A'; \n        } \n        \n        \n        string +=',0x14,0xC0,0x1C,0xDE,0x1D,0xEF,0x16,0xF0,0x03'; \n        \n        string = 'dom.GetObject(\"BidCos-RF.'+seriennummer+':3.SUBMIT\").State(\"'+string+'\"); ';\n    return string; \n} \n\n\nString.prototype.hexEncode = function(){\n    var hex, i;\n\n    var result = \"\";\n    for (i=0; i<this.length; i++) {\n        hex = this.charCodeAt(i).toString(16);\n        result += '0x'+(hex).slice(-2)+',';\n    }\n\n    return result\n}\n\n\n msg.ccu = ccu;\nmsg.payload=umsetzen(anz);\nreturn msg;\n \n",
        "outputs": 1,
        "noerr": 0,
        "x": 880,
        "y": 240,
        "wires": [
            [
                "a67e3d6b.ef792"
            ]
        ]
    }
]

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 » 21.10.2017, 21:45

Hallo Gemeinde,

Die Statusanzeige ausgepackt und los gelegt...
Ersteinmal einen großen Dank an DrTob für die Vorarbeit und das teilen des Scriptes, das ist min. 1 Jahr Zeitgewinn... ;)

Leider habe ich das gleiche Problem wie Bierhurra im Juni 2015:
bierhurra hat geschrieben:Ich bekomme das Script leider einfach nicht zum laufen.

Folgende Fehlermeldung.
Error 1 at row 83 col 23 near ^ # zeile2 # splitter # color2 # splitter # icon2 # "\t";
msgBuffer = msgBuff
Parse following code failed:

Ich habe derzeit den Orginalcode eingefügt, ohne eine Änderung.

Die betreffende Zeile im Code lautet:

string msgBuffer = zeile1 # splitter # color1 # splitter # icon1 # "\t";
msgBuffer = msgBuffer # zeile2 # splitter # color2 # splitter # icon2 # "\t";

Ich weiß nicht was da flasch sein kann.

Kann mir jemand helfen?
Mein Gesamtcode sieht leicht anders aus, aber die Fehlermeldung ist identisch:

Code: Alles auswählen

Error 1 at row 115 col 52 near ^ # splitter # icon2 # "\t";
msgBuffer = msgBuffer # zeile3 # splitter # color3 #
Parse following code failed:
!! Display 1 Taste2 kurz                                                        
!! 
!! Universalprogramm zum Füllen                                                  
!! (c) DrTob 
!! optimized by thkl
!! 
!! überarbeitet geosshark 30.12.2014 11:48:00
!! Anzeige der Aussentemperatur und der Stati aller Fenster, die mit dem 
!! Drehgriffsensor (nur mit diesem getestet) ausgerüstet sind.
!! Alle Sensoren müssen im Gewerk "Fenster" sein.
!! Die Namenskonvention der Sensoren : z.B. xx_Bad_yyy_zz..., der 2. mit "_" getrennt Parameter wird angezeigt, hier "Bad".

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

! Farben
! 0x80 weiß
! 0x81 rot
! 0x82 orange
! 0x83 gelb
! 0x84 gruen
! 0x85 blau 
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

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

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

string zeile4 = istHum.ToString(1) # " %";
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 # "\t";

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;

string command = "0x02";
integer i = 0;
string char = "";

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

dom.GetObject("BidCos-RF." # dom.GetObject("$src$").Name().StrValueByIndex(".",1) # ".SUBMIT").State(command);


Ein Neustart brachte außer eine neue Sortierung der Programme leider nichts.

Ich hoffe Ihr könnt mir helfen.

Grüße Timo

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 » 22.10.2017, 15:35

da scheint was an der Zeichenkodierung kaputtgegangen zu 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 » 22.10.2017, 23:21

Was meinst Du mit Zeichencodierung?
Mit dem erstellen bzw. "zusammenbauen" des Strings?

Haste eine Idee was zu ändern ist?

Grüße aus Dubai

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 » 22.10.2017, 23:37

Schau dir mal die Umlaute an...

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 » 22.10.2017, 23:53

Ich glaube ich steh voll auf der Leitung...

Meinst Du das "%" von zeile4? Das hatte ich schon einmal rausgenommen, ohne Erfolg
Sonst ist doch nix spannendes drin,. *grübel*

Antworten

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