Ansteuern der Statusanzeige mit E-Paper-Display aus Script

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von DrTob » 05.02.2017, 14:50

du rufst Automatik nicht ab, sondern setzt es auf 0 :)

joeMJ
Beiträge: 10
Registriert: 07.11.2016, 09:31

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von joeMJ » 06.02.2017, 00:45

Ich absolut verblödeter Vollpfosten. Wie ist das in meinen Hirnwindungen passiert?
Gottseidank nutze ich die Variable noch nicht :o

Danke.
:lol:

Code: Alles auswählen

var autstr = dom.GetObject("Automatik").Value();
...

*tischkante*

joeMJ
Beiträge: 10
Registriert: 07.11.2016, 09:31

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von joeMJ » 06.02.2017, 01:23

So. Meine. Ich ;-) Das geht jetze, so wie ich mir das vorstelle.

Zeile 2 ist Datum und "Alarm"-Systemvariable
Zeile 3 ist Temperatur und "Automatik"-Systemvariable
Zeile 4 ist Luftfeuchte und die Systemmeldungen, sofern ungleich Null.

Jetzt macht das e-Paper sinn.

Hötte jetzt gerne ein sehr, sehr großes e-Paper mit Homematic-Ansteuerung ;-) DIN A4 wäre angemessen.

Code: Alles auswählen

!! Universalprogramm zum Füllen des HM-Disp-EP-WM55
!! (c) DrTob
!! Version 1.10
!! TEST mit zusätzlichen Symbolen

!! Seriennummer des HM-Disp-EP-WM55.
string seriennummer = "NEQ9999999";

!! ZEILE 2
var almstr = dom.GetObject("Alarm").Value();
string i2;
if (almstr == true){i2 = "0x86";}
if (almstr == false){i2 = "0x85";}
integer wd = system.Date("%u").ToInteger();
string wdstr;
if (wd == 1){wdstr = "Mo";}
if (wd == 2){wdstr = "Di";}
if (wd == 3){wdstr = "Mi";}
if (wd == 4){wdstr = "Do";}
if (wd == 5){wdstr = "Fr";}
if (wd == 6){wdstr = "Sa";}
if (wd == 7){wdstr = "So";}
string zeile2 = wdstr # system.Date(" %d.%m.%y");
string icon2  = i2 # "";

!! ZEILE 3
var autstr = dom.GetObject("Automatik").Value();
string i3;
if (autstr == true){i3 = "0x81";}
if (autstr == false){i3 = "0x80";}
! Seriennummer des Aussentemperaturfuehlers
string temp = dom.GetObject("BidCos-RF.MEQ9999999:1.TEMPERATURE").Value().ToString(1);
string zeile3 = temp # " Grad C.";
string icon3  = i3 # "";

!! ZEILE 4
var smstr = dom.GetObject(41).Value();
string i4;
if (smstr == 0){i4 = "0x85";}
if (smstr <> 0){i4 = "0x88";}
! Seriennummer des Aussentemperaturfuehlers
string hum = dom.GetObject("BidCos-RF.MEQ9999999:1.HUMIDITY").Value().ToString(1);
!string hum = "90";
string zeile4 = hum # "%rel. LF. ";
string icon4  = i4 # "";

! Symbole
! 0x80 AUS
! 0x81 EIN
! 0x82 OFFEN
! 0x83 geschlossen
! 0x84 fehler
! 0x85 alles ok
! 0x86 information
! 0x87 neue nachricht
! 0x88 servicemeldung

! Zugriff auf vordefinierte Texte
! 0x80 Textblock  1
! 0x81 Textblock  2
! 0x82 Textblock  3
! 0x83 Textblock  4
! 0x84 Textblock  5
! 0x85 Textblock  6
! 0x86 Textblock  7
! 0x87 Textblock  8
! 0x88 Textblock  9
! 0x89 Textblock 10

! Tonfolgen
! 0xC0 AUS
! 0xC1 LANG LANG
! 0xC2 LANG KURZ
! 0xC3 LANG KURZ KURZ
! 0xC4 KURZ
! 0xC5 KURZ KURZ
! 0xC6 LANG
! 0xC7
! 0xC9
! 0xCA

!Signale
! 0xF0 AUS
! 0xF1 Rotes Blitzen
! 0xF2 Grünes Blitzen
! 0xF3 Orangenes Blitzen

string signal = "0xF0";

string tonfolge = "0xC0";

! 1 bis 15. 0 = Unendlich
integer wiederholungen = 2;

! es wird zum naechstmoeglichen Abstand aufgerundet. Maximum ist 160s.
integer abstand = 10;

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! System Routine do not change anything below !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

string splitter="|";
string msgBuffer = zeile2 # splitter # icon2 # "\t";
msgBuffer = msgBuffer # zeile3 # splitter # icon3 # "\t";
msgBuffer = msgBuffer # zeile4 # splitter # icon4;

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

string command = "0x02,0x0A";
foreach(bufferLine, msgBuffer) {
   line = bufferLine.StrValueByIndex(splitter, 0);
   icon = bufferLine.StrValueByIndex(splitter, 1);
   integer linelength = line.Length();
   integer iconlength = icon.Length();
   if ((linelength > 0) || (iconlength > 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;
      }
      if (iconlength > 0) {
         command = command # ",0x13," # icon;
      }
   }
   command = command # ",0x0A";
}

command = command # ",0x14," # tonfolge # ",0x1C,";

if (wiederholungen < 1){
   command = command # "0xDF,0x1D,";
}
else {
   if (wiederholungen < 11) {
      command = command # "0xD" # (wiederholungen - 1) # ",0x1D,";
   }
   else {
      if (wiederholungen == 11) {
         command = command # "0xDA,0x1D,";
      }
      else {
         if (wiederholungen == 12) {
            command = command # "0xDB,0x1D,";
         }
         else {
            if (wiederholungen == 13) {
               command = command # "0xDC,0x1D,";
            }
            else {
               if (wiederholungen == 14) {
                  command = command # "0xDD,0x1D,";
               }
               else {
                  command = command # "0xDE,0x1D,";
               }
            }
         }
      }
   }
}


if (abstand <= 10) {
   command = command # "0xE0,0x16,";
}
else {
   if (abstand <= 100) {
      command = command # "0xE" # (abstand - 1 / 10) # ",0x16,";
   }
   else {
      if (abstand <= 110) {
         command = command # "0xEA,0x16,";
      }
      else {
         if (abstand <= 120) {
            command = command # "0xEB,0x16,";
         }
         else {
            if (abstand <= 130) {
               command = command # "0xEC,0x16,";
            }
            else {
               if (abstand <= 140) {
                  command = command # "0xED,0x16,";
               }
               else {
                  if (abstand <= 150) {
                     command = command # "0xEE,0x16,";
                  }
                  else {
                     command = command # "0xEF,0x16,";
                  }
               }
            }
         }
      }
   }
}

command = command # signal # ",0x03";
dom.GetObject("BidCos-RF." # seriennummer # ":3.SUBMIT").State(command);

Lysrix
Beiträge: 2
Registriert: 29.12.2016, 21:16

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von Lysrix » 10.02.2017, 16:21

Hallo zusammen,

gibt es eine Möglichkeit die LED dauerhaft anzuschalten?
Mir ist bewusst das es auf Kosten der Batterie geht, würde es dennoch gern mal testen.

Gruß

Lysrix
Beiträge: 2
Registriert: 29.12.2016, 21:16

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von Lysrix » 11.02.2017, 09:40

Lysrix hat geschrieben:Hallo zusammen,

gibt es eine Möglichkeit die LED dauerhaft anzuschalten?
Mir ist bewusst das es auf Kosten der Batterie geht, würde es dennoch gern mal testen.

Gruß
**Push**

JeanNeef
Beiträge: 14
Registriert: 15.04.2017, 14:59

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von JeanNeef » 23.04.2017, 10:19

Hallo,
gibt es vielleicht die Möglichkeit, die LED 10-20 mal schnell hintereinander blinken zu lassen?
Bei mir blinkt Sie immer nur ein mal.

Kraehe
Beiträge: 8
Registriert: 24.11.2015, 23:31

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von Kraehe » 16.05.2017, 21:59

PROBLEM!! Bei mir piep es.... :shock:

Kann mir vielleicht jemand sagen, warum trotz deaktivierter Tastendruckauswertung bei meiner zeitgesteuerten Aktualisierung mein Display piept, wenn es sich aktualisiert????
Und das Ganze im Abstand von 10 sek nochmal....?
2017-05-16_215409.png
2017-05-16_215409.png (5.45 KiB) 3151 mal betrachtet
Benutzerter Code ist dieser:

Code: Alles auswählen

!! Universalprogramm zum Füllen des HM-Disp-EP-WM55
!! (c) DrTob
!! Version 1.10


!! ZEILE 2
var tanja = dom.GetObject("Anwesenheit Tanja").Value();
string i1;
if (tanja == true){i1 = "Tanja da";}
if (tanja == false){i1 = "Tanja weg";}
string i2;
if (tanja == true){i2 = "0x85";}
if (tanja == false){i2 = "0x84";}

string zeile2 = i1 # "";
string icon2  = i2 # "";


!! Zeile 3
var lars = dom.GetObject("Anwesenheit Lars").Value();
string i3;
if (lars == true){i3 = "Lars da";}
if (lars == false){i3 = "Lars weg";}
string i4;
if (lars == true){i4 = "0x85";}
if (lars == false){i4 = "0x84";}

string zeile3 = i3 # "";
string icon3  = i4 # "";

!! Zeile 4 ## Außentemperatur

var term="MEQ0831946";
var channel=dom.GetObject("BidCos-RF."#term#":1.TEMPERATURE");
var temp = channel.Value();

string zeile4 = "Außen "#temp.ToString(1)#" C";
string icon4 = "0x86";



! Symbole
! 0x80 AUS
! 0x81 EIN
! 0x82 OFFEN
! 0x83 geschlossen
! 0x84 fehler
! 0x85 alles ok
! 0x86 information
! 0x87 neue nachricht
! 0x88 servicemeldung

! Zugriff auf vordefinierte Texte
! 0x80 Textblock  1
! 0x81 Textblock  2
! 0x82 Textblock  3
! 0x83 Textblock  4
! 0x84 Textblock  5
! 0x85 Textblock  6
! 0x86 Textblock  7
! 0x87 Textblock  8
! 0x88 Textblock  9
! 0x89 Textblock 10

! Tonfolgen
! 0xC0 AUS
! 0xC1 LANG LANG
! 0xC2 LANG KURZ
! 0xC3 LANG KURZ KURZ
! 0xC4 KURZ
! 0xC5 KURZ KURZ
! 0xC6 LANG
! 0xC7
! 0xC9
! 0xCA

!Signale
! 0xF0 AUS
! 0xF1 Rotes Blitzen
! 0xF2 Grünes Blitzen
! 0xF3 Orangenes Blitzen

!Seriennummer des HM-Disp-EP-WM55.
string seriennummer = "NEQ1463380";




!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! System Routine do not change anything below !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

string splitter="|";
string msgBuffer = zeile2 # splitter # icon2 # "\t";
msgBuffer = msgBuffer # zeile3 # splitter # icon3 # "\t";
msgBuffer = msgBuffer # zeile4 # splitter # icon4;

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

string command = "0x02,0x0A";
foreach(bufferLine, msgBuffer) {
   line = bufferLine.StrValueByIndex(splitter, 0);
   icon = bufferLine.StrValueByIndex(splitter, 1);
   integer linelength = line.Length();
   integer iconlength = icon.Length();
   if ((linelength > 0) || (iconlength > 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;
      }
      if (iconlength > 0) {
         command = command # ",0x13," # icon;
      }
   }
   command = command # ",0x0A";
}

command = command # ",0x14," # tonfolge # ",0x1C,";

if (wiederholungen < 1){
   command = command # "0xDF,0x1D,";
}
else {
   if (wiederholungen < 11) {
      command = command # "0xD" # (wiederholungen - 1) # ",0x1D,";
   }
   else {
      if (wiederholungen == 11) {
         command = command # "0xDA,0x1D,";
      }
      else {
         if (wiederholungen == 12) {
            command = command # "0xDB,0x1D,";
         }
         else {
            if (wiederholungen == 13) {
               command = command # "0xDC,0x1D,";
            }
            else {
               if (wiederholungen == 14) {
                  command = command # "0xDD,0x1D,";
               }
               else {
                  command = command # "0xDE,0x1D,";
               }
            }
         }
      }
   }
}


if (abstand <= 10) {
   command = command # "0xE0,0x16,";
}
else {
   if (abstand <= 100) {
      command = command # "0xE" # (abstand - 1 / 10) # ",0x16,";
   }
   else {
      if (abstand <= 110) {
         command = command # "0xEA,0x16,";
      }
      else {
         if (abstand <= 120) {
            command = command # "0xEB,0x16,";
         }
         else {
            if (abstand <= 130) {
               command = command # "0xEC,0x16,";
            }
            else {
               if (abstand <= 140) {
                  command = command # "0xED,0x16,";
               }
               else {
                  if (abstand <= 150) {
                     command = command # "0xEE,0x16,";
                  }
                  else {
                     command = command # "0xEF,0x16,";
                  }
               }
            }
         }
      }
   }
}

command = command # signal # ",0x03";
dom.GetObject("BidCos-RF." # seriennummer # ":3.SUBMIT").State(command);
Besten Dank im Voraus....Kraehe

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von DrTob » 16.05.2017, 23:14

Du hast Variablen aus dem Script entfernt. Unter anderem die Tonfolge. Die wird im System noch existieren und auf irgendwas stehen. Deshalb piepts. Nach einem CCU-Neustart dürfte dann gar nichts mehr gehen.

Feste Texte ("Tanja da"...) solltest du übrigens am besten im Aktor hinterlegen, dann müssen wesentlich weniger Daten übertragen werden.

Kraehe
Beiträge: 8
Registriert: 24.11.2015, 23:31

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von Kraehe » 17.05.2017, 20:38

...super....Danke Dr. Tob für die schnelle Antwort!!!

Jetzt funktioniert es fast richtig........
:D

simatec
Beiträge: 48
Registriert: 08.05.2017, 19:26

Re: Ansteuern der Statusanzeige mit E-Paper-Display aus Scri

Beitrag von simatec » 02.06.2017, 23:57

Vielen dank für die Mühe und tolle Arbeit ...

Der Script läuft tadellos bei mir mit aktuell 8 Zuständen auf dem Display [emoji6]


Gesendet von iPhone mit Tapatalk

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“