Homematic: Display-Schalter HmIP-WRCD steuern

Zum Plaudern, um sich und sein Auto vorzustellen, für Off-Topic-Themen
Antworten
Benutzeravatar
Michael N.
Webmaster
Beiträge:1649
Registriert:21. Mai 2005, 12:14
Kontaktdaten:
Homematic: Display-Schalter HmIP-WRCD steuern

Beitrag von Michael N. » 27. Mai 2020, 12:31

Ich nutze das Display mehr als beschrifteten Mehrfachschalter, denn als Statusdisplay.
Das Display zeigt in der obersten und untersten Zeile die aktuelle Funktion des Tasters an.
In der Mitte lasse ich den Status von 2 Systemvariablen anzeigen und die Zeile 4 nutze ich zum Anzeigen von Warnmeldungen.

Es werden diverse Systemvariablen benötigt:
DisplaySeite als Zahl mit Wertebereich 0-10 - diese speichert welche Seite gerade angezeigt wird (max. Bereich ggf. anpassen, aber mehr als 10 Seiten würde ich mit Rücksicht auf den DutyCycle und die Bedienbarkeit auf keinen Fall machen)
DisplayWarnung als Zeichenkette - wird diese Variable in irgendeinem Programm gesetzt, erscheint sie in Zeile 4
DisplayPiep als Logikwert - bei WAHR piept das Display bei einer neuen Warnmeldung (kann man z.B. nutzen um das Piepen zeitgesteuert abzuschalten)

Desweiteren greife ich auf eine SV "Duty Cycle" zurück, um das System nicht durch rumspielen am Taster lahm zu legen. Den Abschnitt kann man aber auch einfach aus dem Skript schmeißen, wenn man kein DC-Variable hat.

Das gleiche gilt für "meine" SV "Protokolleintrag" (Typ Zeichenkette), welches einfach eine protokollierte Variable ist, die damit automatisch im Systemprotokoll erscheint. Braucht man das nicht oder hat eine anders benannte SV, dann einfach im Skript/Programm ändern.

Die Logik besteht aus 3 Programmen. Zunächst braucht man ein Programm "Display_Skip", das für den kurzen Tastendruck zuständig ist und die Zeilen 1 und 5 mit der neuen Tastenfunktion beschreibt:
Unbenannt.jpg
Dieses Skript einfügen und dabei Seriennummer und die Texte für Zeile1 / Zeile5 anpassen:

Code: Alles auswählen

! Display Seite weiter schalten V1

string Geraet = "HmIP-RF.ABCD1234567:3"; !kompl. Geraetename incl. Kanal
integer max = 5; ! max. Anzahl Seiten
string zeile1;
string zeile5;

var DC = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Duty Cycle").State(); ! SV Duty Cyle (Zahl) muss existieren
! Skript abbrechen, wenn Duty Cycle kritische Schwelle (ggf. anpassen) ueberschritten hat um Funktion des restlichen Systems sicherzustellen
if ( DC > 80 )
   {
	dom.GetObject(ID_SYSTEM_VARIABLES).Get("Protokolleintrag").State("DisplaySkip: Abbruch wg. Duty Cycle Schutz!");
	quit;
   }

! wenn Warnmeldung ansteht, dann Zusatzseite zum resetten anzeigen
string DisplayWarnung = dom.GetObject(ID_SYSTEM_VARIABLES).Get("DisplayWarnung").State(); ! SV DisplayWarnung (String) muss existieren
if ( DisplayWarnung != "" )
	{ max = max + 1;}

integer aktuelleSeite = dom.GetObject(ID_SYSTEM_VARIABLES).Get("DisplaySeite").State(); ! SV DisplaySeite (Zahl) muss existieren

! Auslöserbutton holen
! taster = 2 --> oberer taster, taster = 1 --> unterer taster
string sender = dom.GetObject("$src$").Name();
integer taster = sender.StrValueByIndex(":",1).StrValueByIndex(".",0).ToInteger();

! abhängig von aktuelleSeite und Auslöser die Displayseite anpassen
 if (taster == 2){ ! oberer Button (hier: nächste Seite)
    aktuelleSeite = aktuelleSeite + 1;
  }
  else { ! unterer Button (hier: vorherige Seite)
    aktuelleSeite = aktuelleSeite - 1;
  }

  if (aktuelleSeite > max){
    aktuelleSeite = 1;
  }
  if (aktuelleSeite < 1){
    aktuelleSeite = max;
  }

dom.GetObject(ID_SYSTEM_VARIABLES).Get("DisplaySeite").State(aktuelleSeite); ! in CCU sichern

! Display aktualisieren

! === SEITE 1 ===
if ( aktuelleSeite == 1 )
{
	zeile1 = "=Rollos auf=";
	zeile5 = "<Rollos ab<";
}

! === SEITE 2 ===
if ( aktuelleSeite == 2 )
{
	zeile1 = "=Rollos auf=";
	zeile5 = "@Schatten@";
}

! === SEITE 3 ===
if ( aktuelleSeite == 3 )
{
	zeile1 = "''Rollo auto''";
	zeile5 = "'''manuell'''";
}

! === SEITE 4 ===
if ( aktuelleSeite == 4 )
{
	zeile1 = "''Flur auto''";
	zeile5 = "'Flur manuell'";
}

! === SEITE 5 ===
if ( aktuelleSeite == 5 )
{
	zeile1 = "'''Flur ein'''";
	zeile5 = "'''Flur aus'''";
}

! === SEITE 6 - EXTRA-SEITE ===
if ( aktuelleSeite == 6 )
{
	zeile1 = "'Warnung aus'";
	zeile5 = "'Warnung aus'";
}

string DisplayInhaltNeu = "{DDBC=WHITE,DDTC=BLACK,DDI=0,DDA=CENTER,DDS="#zeile1#",DDID=1},{DDBC=WHITE,DDTC=BLACK,DDI=0,DDA=CENTER,DDS="#zeile5#",DDID=5,DDC=true}";

! neuen Inhalt setzen
dom.GetObject(Geraet#".COMBINED_PARAMETER").State(DisplayInhaltNeu);
Bei einem langen Tastendruck wird das Programm "Display_Action" getriggert, das die entsprechenden Funktionen auslöst - ganz ohne Skripte! Die Aktionen müssen natürlich auf die eigenen Gegebenheiten angepasst werden!
Screenshot_2020-05-18 Screenshot.png

Das Programm "Display_Warn" wird durch Änderungen an der SV DisplayWarnung getriggert:
Unbenannt2.JPG
Hier wieder die eigene Gerätenummer eintragen:

Code: Alles auswählen

! Zeile 4 im Statusdisplay setzen V2
string Geraet = "HmIP-RF.ABCD1234567:3";
string zeile4 = dom.GetObject(ID_SYSTEM_VARIABLES).Get("DisplayWarnung").State();
string DisplayInhaltNeu;
boolean Piep = dom.GetObject(ID_SYSTEM_VARIABLES).Get("DisplayPiep").State();

if  ( zeile4 != "" )
	{
	if ( Piep ) {
	         ! mit Piep
	         DisplayInhaltNeu = "{R=1,IN=5,ANS=6},{DDBC=BLACK,DDTC=WHITE,DDI=0,DDA=CENTER,DDS="#zeile4#",DDID=4,DDC=true}";
	         } else {
	         ! ohne Piep
	         DisplayInhaltNeu = "{DDBC=BLACK,DDTC=WHITE,DDI=0,DDA=CENTER,DDS="#zeile4#",DDID=4,DDC=true}";
	         }
	} else {
	DisplayInhaltNeu = "{DDBC=WHITE,DDTC=BLACK,DDI=0,DDA=CENTER,DDS="#zeile4#",DDID=4,DDC=true}";
	}


! neuen Inhalt setzen
dom.GetObject(Geraet#".COMBINED_PARAMETER").State(DisplayInhaltNeu);
Wichtig! Um ein mehrfaches Auslösen der Programme bei langem Tastendruck zu verhindern, muss der Timeout in den Einstellungen des Displays folgendermaßen gesetzt werden:
WichtigUnbenannt.JPG

Die Skripte basieren auf Ideen und Informationen aus [1], [2] und[3]. Informationen zur Formatierung der Ausgabe und die Bedeutung der Parameter findet man hier.
Michael Neuhaus
Webmaster

VW Golf VII GTD
Bild

Antworten