Seite 67 von 113

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 03.10.2019, 11:38
von TomMajor
Ich habe im Script_Helper 2 neue Optionen für die Farbdarstellung für 3-Farben ePaper hinzugefügt.
Das ist einmal die zeilenweise Farbe und außerdem spaltenweise Farbe im Zusammenhang mit der x-Positionierung.

Beispiele dafür:

Code: Alles auswählen

  ! Beispiel 7.1 - Farbe zeilenweise
  ! Zeigt den Text in Zeile 2 in Normalfarbe, den Text in Zeile 3 in Rot
  string displayCmd = "JPDISEP000 /2 'Eine normale Zeile' /3 '@fzEine rote Zeile'";
  dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/epaper42.tcl " # displayCmd);

Code: Alles auswählen

  ! Beispiel 7.2 - Farbe mit x-Position / spaltenweise
  ! Zeigt den Text "Garage" in Zeile 2 und 3 bei 3% x-Position in Normalfarbe
  ! und bei 50% x-Position wird "Auf" in Rot und "Zu" in Normalfarbe dargestellt
  string displayCmd = "JPDISEP000 /2 '@p03Garage@f50Auf' /3 '@p03Garage@p50Zu'";
  dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/epaper42.tcl " # displayCmd);
  
In Kurzform:
  • @fz am Anfang der Zeile macht die Zeile farbig.
  • @fxx arbeitet genau wie das alte @pxx (x-Position), nur halt farbig
Für die spaltenweise Farbe ist eine Anpassung im Sketch nötig, dafür mache ich später noch einen PR in Jeromes Repository.

https://github.com/TomMajor/SmartHome/t ... ipt-helper

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 03.10.2019, 19:03
von michaelapp
Hallo zusammen,

ich hab gerade mal versucht mir das Datum auf dem Display anzeigen zu lassen und habe dafür das Skript verwendet:

Code: Alles auswählen

integer d = system.Date("%w").ToInteger() + 82;
string dayCommand = "0x"#d.ToString();

string datum = system.Date("%d.%m.%Y");
    
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";

string bufferLine;
string substEntry;
integer i;
string char;
string line;

string command = ",0x0A";

foreach(bufferLine, datum) {
   line = bufferLine;
   integer linelength = line.Length();
   if ((linelength > 0)) {
      command = command # ",0x12";
      if ((linelength == 4) && (line.Substr(0,2) == "0x")) {
         command = command # "," # line;
         i = 12;
      }
      else {
         i = 0;
      }
      if (linelength > 12) {
        linelength = 12;
      }
      while (i < linelength) {
        char = line.Substr(i, 1);   
        boolean b = true;
        foreach(substEntry, substitutions){
          if (b == true){
            if (char == substEntry.Substr(0,1)){
              command = command # substEntry.Substr(1,5);
              b = false;
            }
          }
        }
        i = i + 1;
       }
   }
   command = command # ",0x0A";
}


var cmd = "0x02,0x0A,0x0A,0x12,"#dayCommand#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";

WriteLine(cmd);

dom.GetObject("BidCos-RF.JPDISEP000:11.SUBMIT").State(cmd);
Die Fixtexte habe ich entsprechend hinterlegt und die Serien-Nr des Displays geändert.

Wenn ich das Skript teste, erhalte ich als Ausgabe:

Code: Alles auswählen

0x02,0x0A,0x0A,0x12,0x86,0x0A,0x12,0x30,0x33,0x2E,0x31,0x30,0x2E,0x32,0x30,0x31,0x39,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03
Wenn ich das Programm starte, blinkt die LED vom Display kurz Rot. Das Display macht dann aber nichts.

Hab ich noch was vergessen?

Gruß
Michael

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 03.10.2019, 19:08
von jp112sdl
Das ist ein 0x0A zu viel drin.

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 03.10.2019, 20:01
von michaelapp
ok, jetzt hat es geklappt.

Der Tag steht in der Zeile 3 und das Datum in der Zeile 4.

Wie bekomme ich das gemeinsam in die Zeile 1 ?

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 03.10.2019, 20:38
von jp112sdl
so könnte es evtl klappen:
aus string command = ",0x0A"; => string command = "";
und am Ende:
var cmd = "0x02,0x12,"#dayCommand#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 03.10.2019, 22:04
von michaelapp
Mit diesem Skript habe ich nur den Tag und das Datum in der ersten Zeile. Ich verwende die Fixtexte wie beschrieben:

Code: Alles auswählen

integer d = system.Date("%w").ToInteger() + 3;
string dayCommand = "@t0"#d.ToString();

string datum = system.Date("%d.%m.%Y");

string displayCmd = "JPDISEP000 /1 '" #dayCommand# ", " #datum# "'";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/epaper42.tcl " # displayCmd);

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 06.10.2019, 01:12
von michaelapp
Hallo TomMajor,

ich habe in den letzten Tagen ein wenig mit dem Display gespielt. Ich zeige die aktuelle Temperatur und Luftfeuchtigkeit auf dem Display an.

Ich habe die Aktualisierung in mein Programm mit reingepackt das die Variable updatet, dies läuft aber leider alle 3 Minuten und aktualisiert natürlich auch das Display.

Gibt es eine Möglichkeit das ich die Werte vor dem Verschicke vergleiche? Wenn Sie gleich sind, muss ich Sie ja nicht nochmal verschicken.

Wie macht Ihr das denn so? Aktualisierung der Temperatur nur alle 30 min z.b.?

Gruß
Michael

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 06.10.2019, 06:31
von jp112sdl
michaelapp hat geschrieben:
06.10.2019, 01:12
Gibt es eine Möglichkeit das ich die Werte vor dem Verschicke vergleiche? Wenn Sie gleich sind, muss ich Sie ja nicht nochmal verschicken.
Leg dir eine Systemvariable "TemperaturLetzterWert" an, in die du immer den letzten Wert schreibst und im Skript vergleichst.
Ungefähr so:

Code: Alles auswählen

var TemperaturAktuell             = dom.GetObject("BidCos-RF.NEQ1234567:1.TEMPERATURE").Value();
var TemperaturAktuellGerundet     = tempvalNum.ToString(0);
var TemperaturLetzterWertGerundet = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TemperaturLetzterWert").Value();

if (TemperaturAktuellGerundet != TemperaturLetzterWertGerundet) {
  TemperaturLetzterWertGerundet = TemperaturAktuellGerundet;
  !...
  !Telegramm senden
}
michaelapp hat geschrieben:
06.10.2019, 01:12
Wie macht Ihr das denn so? Aktualisierung der Temperatur nur alle 30 min z.b.?
Das kleine Display (also das 4,2") jede Stunde, das große (7,5") jede halbe Stunde

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 06.10.2019, 12:17
von TomMajor
michaelapp hat geschrieben:
06.10.2019, 01:12
Hallo TomMajor,

ich habe in den letzten Tagen ein wenig mit dem Display gespielt. Ich zeige die aktuelle Temperatur und Luftfeuchtigkeit auf dem Display an.

Ich habe die Aktualisierung in mein Programm mit reingepackt das die Variable updatet, dies läuft aber leider alle 3 Minuten und aktualisiert natürlich auch das Display.

Gibt es eine Möglichkeit das ich die Werte vor dem Verschicke vergleiche? Wenn Sie gleich sind, muss ich Sie ja nicht nochmal verschicken.

Wie macht Ihr das denn so? Aktualisierung der Temperatur nur alle 30 min z.b.?

Gruß
Michael
in meinem Display update script berechne ich 1) erst alle Zeileninhalte die ich aktuell haben will und danach 2) gibt es einen Teil der diese mit den aktuellen Zeileninhalt abgleicht und nur die Zeilen sendet die sich geändert haben. Das speichere ich in einer SysVar, siehe Bild.

Habe versucht das generisch zu machen, könnte das auch bei Interesse veröffentlichen. Leider ist Homematic-Skript ziemlich beschränkt für komplexere Aufgaben.

Ich update aller 30 min, hätte auch wegen niedrigem DC Luft nach oben, das kürzer zu machen, ist aber momentan nicht nötig.

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Verfasst: 06.10.2019, 16:25
von michaelapp
Hallo TomMajor,

ich würde mir das Skript gerne mal anschauen :-)

Ich habe jetzt die Lösung so gebaut das ich Temperatur und Luftfeuchtigkeit in eine Variable schreibe und damit vergleiche.

Gruß
Michael