Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

sambasamba
Beiträge: 1600
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 20 Mal
Danksagung erhalten: 4 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von sambasamba » 30.04.2020, 10:36

Hi Günter,
re HM-Dis-WM55: stimmt. Du drückst eine Taste, und abhängig vom Systemzustand wird dir dann alles mögliche angezeigt. Soweit gut.

allerdings wollte ich mit ein und demselben Gerät nicht nur anzeigen, sondern auch Systemzustände ändern, beispielsweise Alarmanlage scharf/unscharf.
nehmen wir einmal an, dass ich Kanal 1 mit so einer Anzeigefunktion belege wie in deinem Beispiel.
Dann habe ich nur noch die zweite Taste frei.
OK, ich könnte vielleicht eine Toggle-funktion programmieren: einmal drücken SCHARF, nochmal UNSCHARF. oder den langen bzw. kurzen Tastendruck verwenden. zur Sicherheit zeigt mir das Display ja danach ein paar Sekunden den neuen Status an.
Oder habe ich noch mehr Möglichkeiten?
aber in jedem Fall danke für deinen Hinweis... Und das Teil scheint mir bis jetzt der beste Kompromiss auf meine merkwürdigen Anforderungen zu sein! :-)

Daimler
Beiträge: 9114
Registriert: 17.11.2012, 10:47
System: Alternative CCU (auf Basis OCCU)
Wohnort: Köln
Hat sich bedankt: 37 Mal
Danksagung erhalten: 283 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von Daimler » 30.04.2020, 10:57

Hi Volkmar,
sambasamba hat geschrieben:
30.04.2020, 10:36
wie in deinem Beispiel
Nicht meins, sondern BA Seite 20. :wink:

sambasamba hat geschrieben:
30.04.2020, 10:36
Oder habe ich noch mehr Möglichkeiten?
Nun, ich könnte mir vorstellen - wie du es ja selbst schreibst:
Tastendruck (oben) kurz - Display geht an und zeigt den Status
Tastendruck (oben) lang - SV bekommt neuen Wert und Display zeigt den neuen Status.

Oder - wenn du nur eine Funktion benötigst:
Tastendruck oben 'Scharf', unten 'Unscharf' incl. Anzeigeaktualisierung!
Gruß Günter

pivccx mit 3.xx in Produktiv und Testsystem mit HM-, HM-W, HMIP- und HMIP-W Geräten, HPCx Studio 4.1,
L-Gateways, RS-L-Gateways, HAP, Drap, FHZ200x, vereinzelt noch FS2x-Komponenten.
HM / HM-IP: Zur Zeit knapp 300 Komponenten mit ??? Kanälen .

Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

sambasamba
Beiträge: 1600
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 20 Mal
Danksagung erhalten: 4 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von sambasamba » 30.04.2020, 12:36

ja... könnte so gehen.
Hab mir mal eins bestellt.
Danke fürs Händchenhalten!

Gluehwurm
Beiträge: 12432
Registriert: 19.03.2014, 00:37
System: in Planung
Hat sich bedankt: 105 Mal
Danksagung erhalten: 380 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von Gluehwurm » 01.05.2020, 00:47

Genau, dann eben das von Günter erwähnte Modell. Es gibt ja fast alles und funktioniert so wie beschrieben.

In den Tiefen des Forums finden sich zwei Freds die sich mit der Programmierung des Teils beschäftigen. Einmal für die "einfache" Anzeigefunktionen, beim anderen geht es um die seitenweise Umschaltung des Displays.

sambasamba
Beiträge: 1600
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 20 Mal
Danksagung erhalten: 4 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von sambasamba » 01.05.2020, 00:56

Hattu die Links zufällig bei der Hand, nur so zur Zeitersparnis? :-)
ELV hat ja auch ein 'Programmierbeispiel' veröffentlicht.
S.

Gluehwurm
Beiträge: 12432
Registriert: 19.03.2014, 00:37
System: in Planung
Hat sich bedankt: 105 Mal
Danksagung erhalten: 380 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von Gluehwurm » 01.05.2020, 01:19

Leider nein, müsste auch suchen. War in Tipps und Tricks.

sambasamba
Beiträge: 1600
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 20 Mal
Danksagung erhalten: 4 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von sambasamba » 01.05.2020, 01:26

Rgr, find ich, danke.

sambasamba
Beiträge: 1600
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 20 Mal
Danksagung erhalten: 4 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von sambasamba » 04.05.2020, 22:55

Aalso.
HM-Dis-WM55 ist gekommen und eingebunden.
Untere Taste macht die Statusanzeige. Obere Taste ändert eine Systemvariable. Paßt!
Danke in die Runde für die Diskussion!

... die Download-Seite bei ELV zum Artikel hat zwei Fehler: zum einen ist auch die Anleitung vom EP verlinkt, blöd, wenn das einer nicht merkt. Zum Anderen ist das pdf 'Beispielprogrammierung' veraltet, denn dadrin gibt es Beispiele mit TEXT 0, der aber nicht mehr existiert.
Und die Anleitung auf Papier beim Gerät auf Seite 19 ist falsch, man muß die rückseitige ANLERNtaste drücken und nicht zunächst die untere Bedientaste.
"falls ELV hier mitliest"... hihihi....

CCU2+Raspimatic+wired, Garagentor, Hoflicht, Keymatic, Rolladen, 25 Raumthermostate, Raumüberwachung, Zweipunktregelung von Heizgeräten, Ventilator- / Klima-Anlagensteuerungen.

FMX
Beiträge: 3
Registriert: 15.05.2020, 20:54
System: Alternative CCU (auf Basis OCCU)
Danksagung erhalten: 2 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von FMX » 15.05.2020, 22:08

Hallo Leidensgenossen, habe als Neuling mich heute versucht dieses Display zum laufen zu bringen. Es gibt jede Menge Infos, aber der Einstieg ist schwer, daher mal eine kleine Faktensammlung.

Anlernen des Gerätes ist einfach. Aber wie bringt man die Texte aufs Display? Es gibt zwei Möglichkeite, die Eingabe in der HM Oberfläche oder Script.
Flexibler sind Scripte, es gibt da auch einige Vorlagen z.B. Universalprogramm zum Füllen des HM-Disp-EP-WM55 von DrTob (Vielen Dank dafür!)

Aber es gibt Fallstricke!
In der Geräteübersicht sieht man nach dem Anlernen das Display und die 10 dazugehörigen "Taster" (siehe Bild), jedoch wird man schnell feststellen das nur die ersten zwei bedienbar sind, das heißt nur dort sind Scripte anwendbar, zumindest ist das mein Wissen als absoluter Neuling.

Also habe ich ein Script für Taster 1 und ein Script für Taster 2 gebaut, Idee war mit einem Taster hoch und mit einem Taster runter durch die Anzeigeebenen zu blättern. Aufgerufen werden die Scripte gleich (siehe Bild), mit 1 sec Verzögerung. (Bei zu schnellen Blättern, werden Daten manchmal nicht übertragen.)
Zuerst Programm erstellen und unter "Aktivität" kann das Script eingefügt werden.

Beide Scripte sind gleich, nur das Seitenhochzählen/Runterzählen unterscheidet sich. (siehe Script, ist für 10 Displayseiten konfiguriert)
Ich habe mal ein paar mehr Kommentare in das Script eingefügt, dann ist es für Einsteiger besser zu verstehen.

Seite 1 ist ein Beispiel für eine Übersichtsseite zur Abfrage von Fensterkontakten.
Seite 2 ist ein Beispiel für ein Thermostat HM-TC-IT-WM-W-EU mit Fensterkontakt und Schaltaktor für die Heizung.

Code: Alles auswählen

! ### Statusanzeige HM-Dis-WM55 ###
! ### Stausanzeige 2 , Vers. 1.0;

!! (c) DrTob, optimized by thkl, changed by wortmann30
!! Das Script holt die Seriennummer des Displays selbst aus der Auslösebedienung des Programms


! --- NUR ZUR INFORMATION ---------------------------------------------------------
! Übersicht welche vorbelegten Texte / Symbole / Farben zur Verfügung stehen.

! 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

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


! --- KONFIGURATIONSBEREICH -------------------------------------------------------
! Variablen für die Texte und Icons.
! Nicht verwendete Variablen nicht löschen, sondern auf "" setzen.
! Zeilen-Variablen können vordefinierte Texte (siehe oben) oder bis zu 12 Zeichen Freitext sein. 

var seite = dom.GetObject("Minidisplayseite").State();
seite = seite + 1;
if (seite > 10) {seite = 1;}
dom.GetObject("Minidisplayseite").State(seite);

if (seite == 1){
string zeile1 = "Fenster OG";
string color1 = "0x85";
string icon1 = "";

string zeile2 = "Bad";
if (dom.GetObject("BidCos-RF.PEQxxxxxxx:1.STATE").State() == true)  { string color2 = "0x81"; } else { string color2 = "0x80"; }
string icon2 = "";

string zeile3 = "Schlafzimmer";
if (dom.GetObject("BidCos-RF.PEQxxxxxxx:1.STATE").State() == true)  { string color3 = "0x81"; } else { string color3 = "0x80"; }
string icon3 = "";

string zeile4 = "Kinderzimmer";
if (dom.GetObject("BidCos-RF.PEQxxxxxxx:1.STATE").State() == true)  { string color4 = "0x81"; } else { string color4 = "0x80"; }
string icon4 = "";

string zeile5 = "Gästezimmer";
if (dom.GetObject("BidCos-RF.PEQxxxxxxx:1.STATE").State() == true)  { string color5 = "0x81"; } else { string color5 = "0x80"; }
string icon5 = "";

string zeile6 = "Treppenhaus";
if (dom.GetObject("BidCos-RF.PEQxxxxxxx:1.STATE").State() == true)  { string color6 = "0x81"; } else { string color6 = "0x80"; }
string icon6 = "";
}

if (seite == 2){
string zeile1 = "Bad";
string color1 = "0x85";
string icon1 = "";

string zeile2 = "Ist " # dom.GetObject("BidCos-RF.OEQxxxxxxx1.TEMPERATURE").State().ToString(1) # " °C";
string color2 = "0x84";
string icon2 = "";

string zeile3 = "Soll " # dom.GetObject("BidCos-RF.OEQxxxxxxx:2.SET_TEMPERATURE").State().ToString(1) # " °C";
string color3 = "0x80";
string icon3 = "";

string zeile4 = "Batt " # dom.GetObject("BidCos-RF.OEQxxxxxxx:2.BATTERY_STATE").State().ToString(1) # " V";
string color4 = "0x80";
string icon4 = "";

if (dom.GetObject("BidCos-RF.PEQxxxxxxx:1.STATE").State() == true)  { 
string zeile5 = "Fenster AUF";
string color5 = "0x81";
string icon5 = ""; 
} else { 
string zeile5 = "Fenster ZU";
string color5 = "0x80";
string icon5 = ""; 
}
}


if (seite == 3){
string zeile1 = "Seite 3";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


if (seite == 4){
string zeile1 = "Seite 4";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


if (seite == 5){
string zeile1 = "Seite 5";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


if (seite == 6){
string zeile1 = "Seite 6";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


if (seite == 7){
string zeile1 = "Seite 7";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


if (seite == 8){
string zeile1 = "Seite 8";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


if (seite == 9){
string zeile1 = "Seite 9";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


if (seite == 10){
string zeile1 = "Seite 10";
string color1 = "0x84";
string icon1 = "";

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

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

string zeile4 = "";
string color4 = "0x80";
string icon4 = "";

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

string zeile6 = "";
string color6 = "0x80";
string icon6 = "";
}


! --- SCRIPTBEREICH ---------------------------------------------------------------
! Ab hier nichts mehr ändern !

! Einstellen des Zeilenaufbaues
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;

! Definition der Zeichenersetzungen für die Displaykompatibilitä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"; 

! Definition weitere Variablen
string bufferLine;
string substEntry;
integer i;
string char;
string line;
string icon;

! Formatierungen der Anzeige
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";

!Befehl an das Display ausgeben
dom.GetObject("BidCos-RF." # dom.GetObject("$src$").Name().StrValueByIndex(".",1) # ".SUBMIT").State(command);


Hochzählen bei Taster 2:

Code: Alles auswählen

var seite = dom.GetObject("Minidisplayseite").State();
seite = seite + 1;
if (seite > 10) {seite = 1;}
dom.GetObject("Minidisplayseite").State(seite);
Runterzählen bei Taster 1:

Code: Alles auswählen

var seite = dom.GetObject("Minidisplayseite").State();
seite = seite - 1;
if (seite < 1) {seite = 10;}
dom.GetObject("Minidisplayseite").State(seite);
Für das Script für den "langen Tastendruck" kann man ähnlich verfahren, auch wieder ein Script für oberen und eins für den unteren Taster.
Hier dann aber einfach das Hoch und Runterzählen weglassen, man muss nur die aktive Seite abfragen und dann je Seite das gewünschte programmieren.

Code: Alles auswählen

var seite = dom.GetObject("Minidisplayseite").State();

if (seite == 1){mache irgendwas;}
if (seite == 2){mache irgendwas anderes;}
usw.
Ich hoffe ich konnte es für Einsteiger etwas leichter machen. Viel Spass bei Testen. :D

:?: :?: :?: Eine Frage an die Experten: Kann man auf die doppelten Scripte verzichten? Kann mann ein anderes Script aus dem Script heraus aufrufen und zurückspringen? Wäre eleganter, habe es aber leider nicht herausgefunden.
Dateianhänge
hm4.jpg
hm3.jpg
hm2.png
hm1.png

Alexxx2005
Beiträge: 250
Registriert: 17.12.2014, 18:56
Hat sich bedankt: 19 Mal
Danksagung erhalten: 3 Mal

Re: Funk-Display-Wandtaster HM-PB-4Dis-WM-2 Display-'Ansteuerung'?

Beitrag von Alexxx2005 » 28.01.2022, 18:09

Hallo FMX,

bin gerade auf das Skript gestossen.

Was muss man den bei

Code: Alles auswählen

var seite = dom.GetObject("Minidisplayseite").State();
Speziell Minidisplayseite eintragen ?

Habe hier schon den Gerätenamen , oder Seriennummer eingetragen
aber es zeigt nichts an.

Grüße Alex

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“