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

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

TomMajor
Beiträge: 638
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 17 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

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

Beitrag von TomMajor » 03.10.2019, 11:38

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 '@[email protected]' /3 '@[email protected]'";
  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
Dateianhänge
ScriptExamples3.jpg
Viele Grüße,
Tom

michaelapp
Beiträge: 192
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von michaelapp » 03.10.2019, 19:03

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\[email protected],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

jp112sdl
Beiträge: 3741
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 68 Mal
Danksagung erhalten: 142 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 03.10.2019, 19:08

Das ist ein 0x0A zu viel drin.

VG,
Jérôme

michaelapp
Beiträge: 192
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von michaelapp » 03.10.2019, 20:01

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 ?

jp112sdl
Beiträge: 3741
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 68 Mal
Danksagung erhalten: 142 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 03.10.2019, 20:38

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";

VG,
Jérôme

michaelapp
Beiträge: 192
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von michaelapp » 03.10.2019, 22:04

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

michaelapp
Beiträge: 192
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von michaelapp » 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

jp112sdl
Beiträge: 3741
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 68 Mal
Danksagung erhalten: 142 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 06.10.2019, 06:31

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

VG,
Jérôme

TomMajor
Beiträge: 638
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 17 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

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

Beitrag von TomMajor » 06.10.2019, 12:17

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.
Dateianhänge
ScreenShot 80 HomeMatic WebUI - Google Chrome.png
ScreenShot 80 HomeMatic WebUI - Google Chrome.png (11.11 KiB) 226 mal betrachtet
Viele Grüße,
Tom

michaelapp
Beiträge: 192
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von michaelapp » 06.10.2019, 16:25

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

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“