Seite 6 von 25

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 18.05.2020, 19:08
von MichaelN
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!

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 18.05.2020, 19:32
von MichaelN
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);

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 20.05.2020, 14:46
von Aquaplex
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...

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 20.05.2020, 14:55
von Black
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

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 23.05.2020, 18:04
von johannesscherbaum
Hallo, kann man denn den Text noch etwas besser formatieren? Bspw. fett, unterstrichen oder kursiv?

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 23.05.2020, 18:07
von MichaelN
Nein, das geht nicht.Was geht steht auf Seite 1:
viewtopic.php?f=60&t=55269#p550679

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 26.05.2020, 13:48
von Aquaplex
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

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 02.06.2020, 21:22
von FBK2904
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

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 02.06.2020, 21:50
von Xel66
Dann schreib doch jede Nacht einfach einen leeren Bildschirm. Morgens kannst Du ihn ja wieder mit Inhalt füllen.

Gruß Xel66

Re: HmIP-WRCD - Textzeile per Skript setzen

Verfasst: 02.06.2020, 21:54
von MichaelN
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