--- /dev/null
+! ### Homatic-Statusanzeige HM-Dis-WM55 ####
+! Farben
+! 0x80 weiß
+! 0x81 rot
+! 0x82 orange
+! 0x83 gelb
+! 0x84 gruen
+! 0x85 blau
+! Symbole
+! 0x80 AUS
+! 0x81 EIN
+! 0x82 OFFEN
+! 0x83 geschlossen
+! 0x84 fehler
+! 0x85 alles ok
+! 0x86 information
+! 0x87 neue nachricht
+! 0x88 servicemeldung
+! 0x89 Signal grün
+! 0x8A Signal gelb
+! 0x8B Signal rot
+
+! Zugriff auf vordefinierte Texte
+!
+! 0x80 Text 0 (Kanal 1 Text Zeile 1)
+! 0x81 Text 1 (Kanal 1 Text Zeile 2)
+! 0x82 Text 2 (Kanal 2 Text Zeile 3)
+! 0x83 Text 3 (Kanal 2 Text Zeile 4)
+! 0x84 Text 4 (Kanal 3 Text Zeile 5)
+! 0x85 Text 5 (Kanal 3 Text Zeile 6)
+! 0x86 Text 6 (Kanal 4 Text Zeile 7)
+! 0x87 Text 7 (Kanal 4 Text Zeile 8)
+! 0x88 Text 8 (Kanal 5 Text Zeile 9)
+! 0x89 Text 9 (Kanal 5 Text Zeile 10)
+! 0x8A Text 10 (Kanal 6 Text Zeile 11)
+! 0x8B Text 11 (Kanal 6 Text Zeile 12)
+! 0x8C Text 12 (Kanal 7 Text Zeile 13)
+! 0x8D Text 13 (Kanal 7 Text Zeile 14)
+! 0x8E Text 14 (Kanal 8 Text Zeile 15)
+! 0x8F Text 15 (Kanal 8 Text Zeile 16)
+! 0x90 Text 16 (Kanal 9 Text Zeile 17)
+! 0x91 Text 17 (Kanal 9 Text Zeile 18)
+! 0x92 Text 18 (Kanal 10 Text Zeile 19)
+! 0x93 Text 19 (Kanal 10 Text Zeile 20)
+
+
+!jede Seite des Displays hat 6 Zeilen
+!hier legen wir die Variablen fest, die
+!wir auf jeder Seite nutzen können
+string zeile1 = "";
+string color1 = "0x80";
+string icon1 = "";
+
+string zeile2 = "";
+string color2 = "0x80";
+string icon2 = "";
+
+string zeile3 = "";
+string color3 = "0x80";
+string icon3 = "";
+
+string zeile4 = "";
+string color4 = "0x80";
+string icon4 = "";
+
+string zeile5 = "";
+string color5 = "0x80";
+string icon5 = "";
+
+string zeile6 = "";
+string color6 = "0x80";
+string icon6 = "";
+
+! ####### wie viele Seiten auf dem Display sollen durchlaufen werden? ###########
+integer seitenzahl=5;
+! ### Systemvariable seitenzaehler01 holen ###
+var seitenZaehler = dom.GetObject("seitenzaehler01");
+var aktuelleSeite = seitenZaehler.Value();
+if (aktuelleSeite<seitenzahl)
+{
+ seitenZaehler.State(aktuelleSeite+1);
+}
+else
+{
+ seitenZaehler.State(1);
+}
+
+! ###################### Seite 1 ######################
+if (aktuelleSeite<5 ) {
+ var oSysvar = dom.GetObject("Alarmanlage");
+ var obj = dom.GetObject("Fenster");
+ string itemID;
+ var cntopen=0;
+ foreach(itemID, obj.EnumUsedIDs()) {
+ var item = dom.GetObject(itemID);
+ if(item.IsTypeOf(OT_CHANNEL)) {
+ var state=item.DPByHssDP("STATE");
+ if(state.Value()!=0) {
+ cntopen=cntopen+1;
+ }
+ }
+ }
+ if (oSysvar.State()==1) {
+ zeile1 = "";
+ color1 = "0x80";
+ icon1 = "";
+ zeile2 = "Alarm an";
+ color2 = "0x80";
+ icon2 = "";
+ zeile5 = "";
+ color5 = "0x81";
+ icon5 = "";
+ zeile6 = "";
+ color6 = "0x80";
+ icon6 = "";
+ } else {
+
+ zeile1 = "";
+ color1 = "0x80";
+ icon1 = "";
+ zeile2 = "Alarm aus";
+ color2 = "0x80";
+ icon2 = "";
+ zeile3 = "";
+ color3="0x80";
+ icon3 = "";
+ zeile4 = "";
+ color4 = "0x84";
+ icon4 = "";
+ zeile5 = "";
+ color5 = "0x84";
+ icon5 = "";
+ zeile6 = "";
+ color6 = "0x80";
+ icon6 = "";
+ }
+
+ if (cntopen>0) {
+ zeile3 = cntopen # " Fenster";
+ color3 = "0x81";
+ icon3 = "";
+ zeile4 = "offen";
+ color4 = "0x81";
+ icon4 = "";
+ } else {
+ zeile3 = "Fenster zu";
+ color3 = "0x84";
+ icon3 = "";
+ zeile4 = "";
+ color4 = "0x81";
+ icon4 = "";
+ }
+}
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ ! System Routine do not change anything below !
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ string splitter="|";
+ string msgBuffer = zeile1 # splitter # color1 # splitter # icon1 # "\t";
+ msgBuffer = msgBuffer # zeile2 # splitter # color2 # splitter # icon2 # "\t";
+ msgBuffer = msgBuffer # zeile3 # splitter # color3 # splitter # icon3 # "\t";
+ msgBuffer = msgBuffer # zeile4 # splitter # color4 # splitter # icon4 # "\t";
+ msgBuffer = msgBuffer # zeile5 # splitter # color5 # splitter # icon5 # "\t";
+ msgBuffer = msgBuffer # zeile6 # splitter # color6 # splitter # icon6;
+
+ 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";
+ foreach(bufferLine, msgBuffer) {
+ line = bufferLine.StrValueByIndex(splitter, 0);
+ icon = bufferLine.StrValueByIndex(splitter, 2);
+ if ((line <> "") || (icon <> "")) {
+ command = command # ",0x12";
+ if ((line.Substr(0,2) == "0x") && (line.Length() == 4)) {
+ command = command # "," # line;
+ i = 12;
+ }
+ else {
+ i = 0;
+ }
+ while ((i < line.Length()) && (i < 12)) {
+ char = line.Substr(i, 1);
+ foreach(substEntry, substitutions){
+ if (char == substEntry.Substr(0,1)){command = command # substEntry.Substr(1,5);}
+ }
+ i = i + 1;
+ }
+ command = command # ",0x11," # bufferLine.StrValueByIndex(splitter, 1);
+ if (icon <> "") {
+ command = command # ",0x13," # icon;
+ }
+ }
+ command = command # ",0x0A";
+ }
+ command = command # ",0x03";
+
+ dom.GetObject("BidCos-RF." # dom.GetObject("$src$").Name().StrValueByIndex(".",1) # ".SUBMIT").State(command);
+
+ ! ##### FERTIG #####
--- /dev/null
+! Email-Warnung über niedrigen Batterie - Ladestand
+! www.meine-homematic.de Beispiel Skript
+! Anleitung:
+! Folgendes Skript per Zeitmpodul 1x täglich ausführen
+! Lösung basierend auf einem Skript von "saschahb"
+! http://www.homematic-inside.de/tecbase.html?view=item&item_id=138
+! Dank auch an Marc Hoffmann für die Review des Skriptes
+! Alle Batteriebetriebenen Geräte müssen in folgendem Gewerk sein:
+var myAssembly = dom.GetObject("Batterie betrieben");
+! Geändert für Email-Addon / CUXD / TCL von PIX
+
+! Variablen initialisieren
+string itemID;
+string text = "";
+integer counter = 0;
+string cr2016 = "HM-RC-4\tHM-RC-4-B\tHM-RC-Sec3\tHM-RC-Sec3-B\tHM-RC-P1\tHM-RC-Key3\tHM-RC-Key3-B";
+string cr2032 = "HM-PB-2-WM\tHM-SwI-3-FM\tHM-PBI-4-FM\tHM-Sec-TiS\tHM-SCI-3-FM\tHM-PBI-4-FM";
+string lr44 = "HM-Sec-SC\tHM-Sec-RHS\tHM-Sec-SC-2";
+string lr6 = "HM-Sec-MDIR\tHM-CC-TC\tHM-WDS100-C6-O\tHM-WDS40-TH-I\tHM-WDS10-TH-O\tHM-WDS30-T-O\tHM-Sec-Key\tHM-Sec-Key-S\tHM-Sec-SD\tHM-Sec-WDS\tHM-CC-RT-DN\tHM-Sen-MDIR-O-2\tHM-Sec-MDIR-2\tHM-WDS30-OT2-SM\tHM-Sec-SCo";
+string lr3 = "HM-RC-12\tHM-PB-4Dis-WM\tHM-Sen-EP";
+string lr61 = "HM-LC-Sw4-Ba-PCB";
+string batlink;
+string index;
+
+! Durch alle angemeldeten Geräte iterieren
+foreach(itemID, myAssembly.EnumUsedIDs()) {
+ ! Gerätedetails & Schnittstelle holen
+ var item = dom.GetObject(itemID);
+ var device = dom.GetObject(item.Device());
+ var interface = dom.GetObject(item.Interface());
+
+ ! Name, Adresse und Kanal auslesen
+ string interface_name = interface.Name();
+ string device_address = device.Address();
+ device_address = device_address.StrValueByIndex(":", 0);
+ string channel_name = interface_name # "." # device_address # ":0.LOWBAT";
+ var channel = dom.GetObject(channel_name);
+
+ ! Batterie leer?
+ if ( (channel.State() == true) && (channel.Value() == true) ) {
+ ! Gerät enthält CR2016-Batterie?
+ batlink = "unbekannt";
+ foreach (index, cr2016) {
+ if (index == device.HssType()) {
+ batlink = "CR2016";
+ }
+ }
+
+ ! Gerät enthält CR2032-Batterie?
+ foreach (index, cr2032) {
+ if (index == device.HssType()) {
+ batlink = "CR2032";
+ }
+ }
+
+ ! Gerät enthält LR44-Batterie?
+ foreach (index, lr44) {
+ if (index == device.HssType()) {
+ batlink = "LR44";
+ }
+ }
+
+ ! Gerät enthält LR6-Batterie?
+ foreach (index, lr6) {
+ if (index == device.HssType()) {
+ batlink = "LR6";
+ }
+ }
+
+ ! Gerät enthält LR3-Batterie?
+ foreach (index, lr3) {
+ if (index == device.HssType()) {
+ batlink = "LR3";
+ }
+ }
+
+ ! Gerät enthält LR61-Batterie?
+ foreach (index, lr61) {
+ if (index == device.HssType()) {
+ batlink = "LR61";
+ }
+ }
+
+ ! Text zusammensetzen
+ text = text # "- " # item.Name() # " vom Typ " # batlink # " \r\n";
+
+ ! Counter erhöhen (Anzahl leerer Batterien)
+ counter = counter + 1;
+ }
+ }
+
+ ! Mail-Text zusammensetzen
+ string Nachricht;
+ string sDate = system.Date("%d.%m.%Y");
+ Nachricht = " \r\n Prüfung des Ladestandes der Batterien vom " # sDate # ". \r\n";
+
+! Mind. eine leere Batterie gefunden?
+if ( counter > 0 ) {
+ Nachricht = Nachricht # "\r\n Der Ladezustand folgender Batterien ist niedrig: \r\n" # text;
+ Nachricht = Nachricht # "\r\n Bitte tauschen Sie die Batterien zeitnah aus. ";
+} else {
+ Nachricht = Nachricht # "\r\n Keine Batterie muss getauscht werden. ";
+}
+
+ ! Nachricht in Variable füllen und E-Mail absenden
+ !--------------------------------------------------
+ dom.GetObject("Mailtext").State(Nachricht);
+
+ dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/etc/config/addons/email/email 04");
+