HmIP-WRCD - Textzeile per Skript setzen

HMIP lokale Installation

Moderator: Co-Administratoren

MichaelN
Beiträge: 9679
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von MichaelN » 18.05.2020, 19:08

Stefan0815 hat geschrieben:
18.05.2020, 10:53
Außerdem funktioniert die Aktualisierung einer einzelnen Zeile nicht zuverlässig. Also immer den gesamten Inhalt senden.
Das kann ich jetzt nicht bestätigen. Ich habe den ganzen Tag diverse Tests gemacht und dabei immer mit COMBINED_PARAMETER nur 1 oder 2 Zeilen geändert. Das hat jedesmal funktioniert.

Die schönen Trennlinien kann man sich anscheinend nicht per Skript anzeigen lassen, das ist schade. Wenn jemand noch eine Lösung findet, immer heraus damit!
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

MichaelN
Beiträge: 9679
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von MichaelN » 18.05.2020, 19:32

Anbei mal das Ergebnis der heutigen Bastelei, vielleicht kann es ja mal jemand als Anregung gebrauchen.
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 autoamtisch 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

Code: Alles auswählen

! Display Seite weiter schalten V1

string Geraet = "Displayname:3"; ! Name von Kanal 3 des Displays
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
channels.Get(Geraet).DPByHssDP("COMBINED_PARAMETER").State(DisplayInhaltNeu);
Bei einem langen Tastendruck wird das Programm "Display_Action" getriggert, das die entsprechenden Funktionen auslöst - ganz ohne Skripte!
Screenshot_2020-05-18 Screenshot.png
Das Programm "Display_Warn" wird durch Änderungen an der SV DisplayWarnung getriggert:
Unbenannt2.JPG

Code: Alles auswählen

! Zeile 4 im Statusdisplay setzen V2
string Geraet = "Displayname:3"; ! Name von Kanal 3 des Displays
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
channels.Get(Geraet).DPByHssDP("COMBINED_PARAMETER").State(DisplayInhaltNeu);
Wichtig! Um ein mehrfaches Auslösen der Programme bei langem Tastendruck zu verhindern, müssen der Timeout in den Einstellungen des Displays folgendermaßen gesetzt werden:
WichtigUnbenannt.JPG

Den Status von Systemvariablen zeige ich folgendermaßen an - hier am Beispiel der Rollo-Automatik in Zeile 2:

Dieses Programm reagiert auf die Umschaltung der SV und beschreibt Zeile 2 neu
Rollo_Autoamtik.JPG
die 2 Skripte:

Code: Alles auswählen

! Zeile 2 im Statusdisplay setzen
string Geraet = "Statusdisplay:3";
string zeile2 = "Rollos auto";
string DisplayInhaltNeu = "{DDBC=WHITE,DDTC=BLACK,DDI=25,DDA=CENTER,DDS="#zeile2#",DDID=2,DDC=true}";

! neuen Inhalt setzen
channels.Get(Geraet).DPByHssDP("COMBINED_PARAMETER").State(DisplayInhaltNeu);

Code: Alles auswählen

! Zeile 2 im Statusdisplay setzen
string Geraet = "Statusdisplay:3";
string zeile2 = "Rollos manuell";
string DisplayInhaltNeu = "{DDBC=WHITE,DDTC=BLACK,DDI=0,DDA=CENTER,DDS="#zeile2#",DDID=2,DDC=true}";

! neuen Inhalt setzen
channels.Get(Geraet).DPByHssDP("COMBINED_PARAMETER").State(DisplayInhaltNeu);
Zuletzt geändert von MichaelN am 04.01.2021, 17:47, insgesamt 4-mal geändert.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Aquaplex
Beiträge: 300
Registriert: 16.11.2011, 18:16
System: CCU und Access Point
Hat sich bedankt: 26 Mal
Danksagung erhalten: 8 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von Aquaplex » 20.05.2020, 14:46

Black hat geschrieben:
11.05.2020, 21:01
solange wie der WebUI-Editor diesen bug hat hilft als einfache Lösung nur ein Bugfix.

Ansosnten gibt es nur die 2 grossen Zusatzprogramme, wo der Editor nur ein teil dessen ist. Das Problem ist ja, du musst einen Text richtig kodiert in das richtige SingledestinationsObjekt der Rega bekommen. Das rein händisch zu machen ist schwierig.

Mit dem SDV wäre die recht einfache Vorgehensweise:

du wählst das programm aus:

in der einfachsten Form der Dasrtellung siehts du dann schon, ob und welche Scripte das programm enthält.
dieses klickst dann an und kannst es im editor bearbeiten.
Wenn fertig getestet hast kannst du dieses durch die Hochladen taste wieder in die CCU laden.

Ist eigentlich nicht soooooo das riesen hexenwerk...

Black
Wenn ich die Randbedingungen richtig verstanden habe, gibt es für den SDV keine Lizenzen mehr, oder? Dann könnte ich diesen Workaround ja nicht anwenden...
HmIP auf Pi3B+ mit RaspberryMatic und neuem Funk-Modul sowie 3 HAPs / Etwa 150 IP-Geräte

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von Black » 20.05.2020, 14:55

Aquaplex hat geschrieben:
20.05.2020, 14:46
Wenn ich die Randbedingungen richtig verstanden habe, gibt es für den SDV keine Lizenzen mehr, oder? Dann könnte ich diesen Workaround ja nicht anwenden...
Ich hatte mich nur zeitweise aufgrund der etwas arg entgleisten Anfeindungen eines Einzelnen hier zurückgenommen, das stimmt.
Da du auch kein Member auf meiner Ignore-List bist, spricht von meiner Seite aus nix gegen deine Freischaltung.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

johannesscherbaum
Beiträge: 2
Registriert: 23.05.2020, 18:02
System: CCU

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von johannesscherbaum » 23.05.2020, 18:04

Hallo, kann man denn den Text noch etwas besser formatieren? Bspw. fett, unterstrichen oder kursiv?

MichaelN
Beiträge: 9679
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von MichaelN » 23.05.2020, 18:07

Nein, das geht nicht.Was geht steht auf Seite 1:
viewtopic.php?f=60&t=55269#p550679
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Aquaplex
Beiträge: 300
Registriert: 16.11.2011, 18:16
System: CCU und Access Point
Hat sich bedankt: 26 Mal
Danksagung erhalten: 8 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von Aquaplex » 26.05.2020, 13:48

Stefan0815 hat geschrieben:
11.05.2020, 16:56
..ist ein BUG im Scripteditor.
20200511_165514.jpg
Habe noch einen Workaround gefunden: eine Systemvariable (Zeichenkette) mit dem Inhalt "^C" erstellen und diese im Skript an die Temperatur anfügen. Dann funktioniert die Anzeige als "°C" im Display :D
HmIP auf Pi3B+ mit RaspberryMatic und neuem Funk-Modul sowie 3 HAPs / Etwa 150 IP-Geräte

Benutzeravatar
FBK2904
Beiträge: 454
Registriert: 22.03.2016, 17:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Bei Ludwigsburg
Hat sich bedankt: 80 Mal
Danksagung erhalten: 42 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von FBK2904 » 02.06.2020, 21:22

Hi, HmIP-WRCD Spezialisten !

Ich/wir wollen gerne den HmIP-WRCD auf unserer Terrasse (Wetter geschützt) als optischen (Text) UND akustischen (Piep) "Signalgeber" einsetzen,
um diverse Statuse die schon vorhanden sind, wie Spülmaschine fertig, Waschmaschine fertig, Trockner fertig
oder jemand klingelt sich einen Wolf :roll: vor der gegenüberliegenden Haustür (via HmIP-DSD-PCB) einsetzen.
Seinen klassischen Kumpel (HM-Dis-WM55) hatte ich vor ein paar Jahren schon einmal in Betrieb, war aber nicht so ganz damit zufrieden.

Jetzt habe ich aber auf der Shopseite (aus dem hohen Norden) folgende Bemerkung in der Beschreibung gesehen:
"Sollten Sie das Gerät über einen längeren Zeitraum (>24 h) nicht verwenden, müssen Sie vor der Außerbetriebsetzung des Geräts bei eingelegten Batterien eine der Bedientasten drücken, damit sich das Display vollständig weiß färbt. Nachdem sich das Display weiß gefärbt hat, können Sie die Batterien entnehmen."

Soll das heißen, dass wenn der HmIP-WRCD länger als >24 Stunden nicht angesteuert/aktualisiert wird, außer Betrieb genommen werden muss damit sich der Displayinhalt nicht einbrennt :shock: ?
Das wäre ja der Supergau-hoch-zehn, wenn sich der Displayinhalt nur alle paar Tage ändert !

Wie sind da Eure Erfahrungen dazu?

Grüssle,
Frank
Grüssle,
Frank
--------------------------
System: CCU3 (RM 3.75.6.20240316) mit Stabantenne (www.stall.biz)
Geräte: 56x HM (classic) / 13x HmIP / 8x CUxD /16x virtuelle Gruppen / 4x PioTek-Tracker V4 FTTB & FAM-USB-Gateway
Addons: XML-API 2.3 / CUx-Daemon 2.11 / CUxD-Highcharts 1.45 / Programme drucken 2.6
Sonstige: SDV v5.03.04 G / AIO Creator NEO v3.1.0 mit 2x Samsung Tab SM-T580 (Root & Android 10 [LineageOS 17.1 by TALUAtXDAi])

Xel66
Beiträge: 14165
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von Xel66 » 02.06.2020, 21:50

Dann schreib doch jede Nacht einfach einen leeren Bildschirm. Morgens kannst Du ihn ja wieder mit Inhalt füllen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

MichaelN
Beiträge: 9679
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: HmIP-WRCD - Textzeile per Skript setzen

Beitrag von MichaelN » 02.06.2020, 21:54

Hat mich auch etwas irritiert, aber es scheint um die außer Betriebnahme zu gehen.

Habe bei epaper auch noch nie von einbrennen gehört
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Antworten

Zurück zu „HomeMatic IP mit CCU“