HmIp welches Fenster ist offen

HMIP lokale Installation

Moderator: Co-Administratoren

Antworten
greyskoda
Beiträge: 1
Registriert: 11.07.2018, 20:57

HmIp welches Fenster ist offen

Beitrag von greyskoda » 11.07.2018, 21:12

Hallo zusammen :)

Ich habe da mal ein Anliegen, und zwar würde ich gerne in Vorbereitung auf ein Display welches später in einen 55er Rahmen über den Lichtschalter im Flur kommen soll, ein Skript haben in dem jedes Fenster und jede Tür aufgelistet werden soll die offen sind.
Ich habe ausschliesslich Hmip-SWDO und Hmip-SWDO-I installiert.

Die Scripte welche man im netz findet sind ja irgendwie ausschliesslich für HM Geräte, was natürlich nicht funktioniert bei hmip Geräten 🙈

Ich habe auch schon versucht die Scripte zu ändern aber dies brachte leider keinen Erfolg.


Hat von euch jemand Ideen oder Lösungsansätze oder gar ein fertiges Script was ich nur leicht anpassen muss ?

Bin was Scripte angeht der Absolute Neuling 😅

Vielen Dank im voraus,
Marvin

Benutzeravatar
JRiemann
Beiträge: 3732
Registriert: 12.11.2015, 21:05
Wohnort: Aurich

Re: HmIp welches Fenster ist offen

Beitrag von JRiemann » 11.07.2018, 21:29

Die Scripte welche man im netz findet sind ja irgendwie ausschliesslich für HM Geräte, was natürlich nicht funktioniert bei hmip Geräten
Das halte ich für ein Gerücht. :D

Offene Fenster melden
>>>> Fensterskript <<<<
Viele Grüße!
Jörg

Helcules
Beiträge: 6
Registriert: 20.03.2018, 07:51

Re: HmIp welches Fenster ist offen

Beitrag von Helcules » 11.07.2018, 23:23

greyskoda hat geschrieben:
11.07.2018, 21:12
Ich habe da mal ein Anliegen, und zwar würde ich gerne in Vorbereitung auf ein Display welches später in einen 55er Rahmen über den Lichtschalter im Flur kommen soll, ein Skript haben in dem jedes Fenster und jede Tür aufgelistet werden soll die offen sind.
Ich habe ausschliesslich Hmip-SWDO und Hmip-SWDO-I installiert.

Hat von euch jemand Ideen oder Lösungsansätze oder gar ein fertiges Script was ich nur leicht anpassen muss ?
Moin,
Ich habe auch SWDO Fensterkontakte in der CCU2 und auf der Startseite der Web UI den jeweiligen Fensterstatus angezeigt.
Ich nutz auch das Display HM-Dis-WM55 . Bei drei Statusanzeigen auf dem Display bin ich ganz gut mit vier Programmen zurecht gekommen um alle Varaitionen abzubilden. Je mehr Kontakte und mögliche Variationen (Status aus/zu) desto mehr Programme habe ich gemacht. Siehe Beispiel:
IMG_20180416_010704_290.jpg
Jetzt habe ich inzwischen mehr Kontakte und denke das ein Programm komfortabler wäre.

Der HMIP-WM55 kann 6 Zeilen anzeigen. Es wäre schön, wenn die letzte zeile immer meinen Status der Alarmanlage anzeigt. Die ersten fünf die offenen Fenster der Abfragereihenfolge nach. Hat jemand soetwas bereits realisiert? Über Hilfe wäre ich auch sehr dankbar!

LG

Helcules
Der Dateianhang IMG_20180416_010704_290.jpg existiert nicht mehr.

Helcules
Beiträge: 6
Registriert: 20.03.2018, 07:51

Re: HmIp welches Fenster ist offen

Beitrag von Helcules » 20.10.2018, 11:56

Hi!
ich habe jetzt ein Programm geschrieben um mit dem HM-DIS-WM55 zu sehen, welches Fenster offen ist:

Du musst zuerst Systemvariablen anlegen, welche den Zustand des Fensters beschreiben
[img]
sv.png
sv.png (14.46 KiB) 327 mal betrachtet


Danach ein Programm in der CCU anlegen, in dem der Fensterkontakt der Systemvariable sagt, ob das Fenster offen ist:
progt_LI.jpg


Anschließend habe ich folgendes Script angepasst um meine Systemvariablen abzufragen:

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 Buero= dom.GetObject("Status Büro Fenster").Value();

if(Buero .Value()=="false")
    {string zeile1 = "Büro";
string color1 = "0x84";
string icon1  = "0x83";}
else{string zeile1 = "Büro";
string color1 = "0x81";
string icon1  = "0x82";}

var Dusche = dom.GetObject("Status Dusche Fenster").Value();
if(Dusche .Value()=="false")
    {string zeile2 = "Dusche ";
string color2 = "0x84";
string icon2  = "0x83";}
else{string zeile2 = "Dusche ";
string color2 = "0x81";
string icon2  = "0x82";}

var Kueche = dom.GetObject("Status Fenster Küche").Value();
if(Kueche .Value()=="false")
    {string zeile3 = "Küche";
string color3 = "0x84";
string icon3  = "0x83";}
else{string zeile3 = "Küche";
string color3 = "0x81";
string icon3  = "0x82";}

var Flur = dom.GetObject("Status Flurfenster").Value();
if(Flur .Value()=="false")
    {string zeile4 = "Flur";
string color4 = "0x84";
string icon4  = "0x83";}
else{string zeile4 = "Flur";
string color4 = "0x81";
string icon4  = "0x82";}

var Terrassentuer = dom.GetObject("Status Terrassentür").Value();
if(Terrassentuer .Value()=="false")
    {string zeile5 = "Terrasse";
string color5 = "0x84";
string icon5  = "0x83";}
else{string zeile5 = "Terrasse";
string color5 = "0x81";
string icon5  = "0x82";}

var Alarmanlage = dom.GetObject("Status Alarmanlage").Value();
if(Alarmanlage .Value()=="false")
    {string zeile6 = "Alarmanlage";
string color6 = "0x81";
string icon6  = "0x84";}
else{string zeile6 = "Alarmanlage";
string color6 = "0x84";
string icon6  = "0x85";}		


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

So sieht das Ergebnis aus:
IMG_20181018_184630_917.jpg
Ich hoffe ich konnte damit helffen.

LG

Helcules

michaelapp
Beiträge: 43
Registriert: 16.05.2018, 22:54

Re: HmIp welches Fenster ist offen

Beitrag von michaelapp » 30.10.2018, 20:11

Hallo zusammen,

heute kam mein HM-Dis-WM55 :-)

Ich habe das Skript von Hercules mal ein wenig angepasst damit ich mich mit der Funktionsweise auseinandersetzen kann.

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 Garage1= dom.GetObject("Garage 1").Value();

if(Garage1 .Value()=="false")
    {string zeile1 = "Garage 1";
string color1 = "0x84";
string icon1  = "0x83";}
else{string zeile1 = "Garage 1";
string color1 = "0x81";
string icon1  = "0x82";}

var Garage2 = dom.GetObject("Garage 2").Value();
if(Garage2 .Value()=="false")
    {string zeile2 = "Garage 2";
string color2 = "0x84";
string icon2  = "0x83";}
else{string zeile2 = "Garage 2";
string color2 = "0x81";
string icon2  = "0x82";}

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! 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);
Die Systemvariablen sind angelegt
Garage.jpg
Jetzt habe ich ein Programm das mit einem kurzen Tastendruck das Skript ausgelöst wird:
Programm.jpg
Das Programm wird ausgeführt, im Display erhalte ich aber nur "Keine Daten empfangen".

Hat mir jemand einen Tip?

Gruß
Michael

Antworten

Zurück zu „HomeMatic IP mit CCU“