HM-DIS-WM55 als Wecker

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

Moderator: Co-Administratoren

Ickest
Beiträge: 15
Registriert: 20.02.2016, 19:03
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

HM-DIS-WM55 als Wecker

Beitrag von Ickest » 21.02.2016, 21:54

Hallo,
nach nun jahrelangem Gastdasein hier im Forum habe ich mich heute durchgerungen mein kleines Weckerprojekt mit Euch zu teilen.
Da ich kein Programmierer bin, seht mir bitte Fehler nach. An dieser Stelle, bevor es losgeht , noch vielen Dank an alle Beitragschreiber, die mir hier, wenn auch nur durch meine passive Teilhabe sehr geholfen haben. Auch das Weckerscript ist ein Beispiel dafür. Danke an DrTob und thkl.

Doch nun zum Thema:
Mit der Neuvorstellung des Homematic Tischaufstellers für 55er Geräte auf dem 2015er Usertreffen kam mir die Idee für einen Wecker im Zusammenspiel mit dem HM-DIS-WM55. Der Wecker hat momentan vier Weckzeiten, die sich über 2 Menüseiten auf dem Display darstellen/stellen/und speichern lassen. Gespeichert werden die 4 Weckzeiten in 4 Sytemvariablen ("Wecker_1" bis..._4 vorher anlegen!) und in 4 CUXD-Timern, die dann gleich auch die Auslösegründe für weitere Aktionen liefern, wenn die Weckzeit erreicht ist. Eine weitere Systemvariable "Weckermenuezaehler" wird benötigt um festzustellen ob das Display noch aktiv ist (20 Sekunden) und zur Ermittlung welcher Wecker gerade "gelb" ist. Dadurch bleiben 3 Tasten für weitere andere hier im Forum schon beschriebene Darstellungen erhalten. Die 6. Systemvariable "Weckerdigitzaehler" ist selbsterklärend, wenn Ihr Euch die Bedienung im Video anseht.
DSC04016.JPG
HM-Dis-WM55 Wecker
DSC04022.JPG
Die Weckzeit wird digitweise mit dem roten Pfeil ausgewählt und einzeln gestellt.
Die Bedienung erfolgt so:
Taste 1 unten kurz
- Hauptbildschirm aufrufen und eine von 4 Weckzeiten markieren (gelb). Erneutes kurzes Drücken markiert die nächste Weckzeit usw.
Taste 1 unten lang
- Die markierte Weckzeit wird aktiviert/deaktiviert. Grüner Haken = Wecker ist ein, Rote Kreuz = Wecker ist aus.
Taste 2 oben lang
- Die markierte Weckzeit kann nun gestellt werden und der Bildschirm wechselt in die Ansicht "Weckzeit x einstellen:"
Weitere lange Tastendrücke lassen den Markierungspfeil wandern um das einzustellende Digit auszuwählen.
Taste 2 oben kurz
- Das markierte Digit kann mann nun stellen.

Hier das Video:
https://www.youtube.com/watch?v=oc9fF3_IonE

Der Displaytaster ist auf 20 Sekunden bis Standby eingestellt und einige Texte habe ich in den Einstellungen bereits vordefiniert.
Die Texte in Zeile 7 und folgende sind "größer als" rechts und "Hochkomma" und werden vom Display gemapt. Drückt mal auf das Fragezeichensymbol! :mrgreen:
DIS-WM55_Geräteeinstellungen.JPG
Geräteeinstellungen des HM-Dis-WM55
Die Weckzeit lässt sich im 24h Format in 5 Minuten-Schritten einstellen. Wer es minutengenau braucht, kann das im Script natürlich ändern. Mir hat das so gereicht, da ich sowieso nicht gleich aus den Federn komme :lol:
Außer der Weckzeit kann man noch in Form einer fast selbsterklärenden 2 Buchstabenkombi den Wochentag Mo-So einstellen. Somit wird der Wecker zur Wochenschaltuhr... Da Mo bis So nicht gereicht hat - ich arbeite am Sa und So in der Regel nicht, gibt es noch 4 weitere Kürzel:
MF= Montag bis Freitag
WE= Wochenende
WO= gesamte Woche, also jeden Tag
WT= Werktag für alle, die von Montag bis Samstag brauchen.

Weitere Aktionen können mit der Weckzeit oder auf Grund der bekannten Weckzeit in der Systemvariable ausgelöst werden.
Die Systemvariablen Wecker_1 bis ..._4 sind vom Typ String und wie folgt aufegbaut:

HH:MM Lerzeichen xx Leerzeichen y
HH: Stunde im 24 Stunden Format
MM: Minuten, wobei die Einerstelle nur 5 und 0 annimmt.
xx: Wochentag Mo bis So bzw. WT, WE, WO, MF
y: 0 = Wecker inaktiv oder 1 für Wecker aktiv
Systemvariablen.JPG
Systemvar_mit_Werten.JPG

CUXD wird auch benötigt und es sollte das Timergerät angelegt sein. Im Script sind dann ggf. die CUXD-Adressen anzupassen.
Ich verwende die Kanäle 11 bis 14.
Wenn alles funktioniert und ihr alle Zeiten einmal über das Display eingestellt habt findet ihr auf der CUXD Seite die Timer wieder. Bei mir wie gesagt 11 bis 14.
Am Beispiel Kanal 11, 13 und 14 sind gerade aktiv und werden "auslösen".
Für Kanal 12 (INHIBIT) läuft der Timer zwar im Hintergrund, wird aber nicht auslösen - klingeln oder was auch immer!
Z.B. Kanal 11 "klingelt" 5:35 - viel zu zeitig :shock: - und zwar Do, Fr, Mo, Di, Mi. Die Sortierung ist wichtig, da CUXD in der Reihenfolge die Timer setzt und diese sich auf die aktuelle Startzeit und den Tag beziehen.
Für mehr Infos empfehle ich die CUXD Doku.... :)
CUXD.JPG

Hier nun das Script:
neue Version V1.01 (Fehler beseitigt; Kommentar überarbeitet; CUxD-Timer brauchen nur im Init-Teil eingetragen werden)

Code: Alles auswählen

!! Wecker by ickest Version 1.01 vom 04.03.2016
!! Universalprogramm zum Fuellen
!! (c) DrTob
!! optimized by thkl
!! Das Script holt sich jetzt die Seriennummer des Displays selbst aus der Ausloesebedinung des Programms

! 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  Wecker)           im Geraet definieren
! 0x81 Text  1 (Kanal 1  Weckzeit 1)       im Geraet definieren
! 0x82 Text  2 (Kanal 2  Weckzeit 2)       im Geraet definieren
! 0x83 Text  3 (Kanal 2  Weckzeit 3)       im Geraet definieren
! 0x84 Text  4 (Kanal 3  Weckteit 4)       im Geraet definieren
! 0x85 Text  5 (Kanal 3  einstellen:)      im Geraet definieren
! 0x86 Text  6 (Kanal 4  >''''')           im Geraet definieren
! 0x87 Text  7 (Kanal 4  '>'''')           im Geraet definieren
! 0x88 Text  8 (Kanal 5  ''>''')           im Geraet definieren
! 0x89 Text  9 (Kanal 5  '''>'')           im Geraet definieren
! 0x8A Text 10 (Kanal 6  ''''>')           im Geraet definieren
! 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)

! ### Daten initialisieren ###
string sTimer1 = "CUX2800001:11";		! ### 4 CUxD Timer eintragen 
string sTimer2 = "CUX2800001:12";		! ##########################
string sTimer3 = "CUX2800001:13";
string sTimer4 = "CUX2800001:14";

string WZ01 =  dom.GetObject('Wecker_1').Variable().ToString();
string WZ02 =  dom.GetObject('Wecker_2').Variable().ToString();
string WZ03 =  dom.GetObject('Wecker_3').Variable().ToString();
string WZ04 =  dom.GetObject('Wecker_4').Variable().ToString();

string i = "0";
! ### WO: gesamte Woche 
! ### MF: Montag bis Freitag
! ### WT: Werktag = Montag bis Samstag
! ### WE: Wochenende = Samstag bis Sonntag
string Wochtageliste = "So;Mo;Di;Mi;Do;Fr;Sa;WO;MF;WT;WE";

! ### Datum abgefragen ###
var sTimeString = system.Date("%H:%M:%S ").ToString(); 
var sTimeString1 = sTimeString;
string WochenTg0 = system.Date("%w").ToString(); 

! #################################################
! ### Beginn kurzer Tastendruck unten         
! ### 1.Seite Weckermenue Zeilen gelb markieren
! #################################################
var source = dom.GetObject ("$src$");
  if ( source )
   {
     if ( source.Name() == source.Name().Substr(0, 21) # "1.PRESS_SHORT")
        {
! #################################################

! ### Wie viele Zeilen auf dem Display sollen durchlaufen werden? ###
integer zeilenzahl = 4; 
 
var zeilenZaehler = dom.GetObject("Weckermenuezaehler").Variable().ToInteger();  ! ### holen
zeilenZaehler = (zeilenZaehler+1.00);                                            ! ### incrementieren
if (zeilenZaehler == (zeilenzahl+1)) {zeilenZaehler =1.00;}                      ! ### Menueende
dom.GetObject("Weckermenuezaehler").State(zeilenZaehler);                        ! ### schreiben in Sysvar

boolean WA1 = WZ01.Substr(9, 1).ToInteger();
boolean WA2 = WZ02.Substr(9, 1).ToInteger();
boolean WA3 = WZ03.Substr(9, 1).ToInteger();
boolean WA4 = WZ04.Substr(9, 1).ToInteger();

string x;

foreach (x, Wochtageliste.Split(";")) {
            if (WZ01.Substr(6, 2).ToInteger() == i) {string WZTag01 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ01 = WZ01.Substr(0, 5)+" "+WZTag01;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ02.Substr(6, 2).ToInteger() == i) {string WZTag02 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ02 = WZ02.Substr(0, 5)+" "+WZTag02;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ03.Substr(6, 2).ToInteger() == i) {string WZTag03 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ03 = WZ03.Substr(0, 5)+" "+WZTag03;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ04.Substr(6, 2).ToInteger() == i) {string WZTag04 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ04 = WZ04.Substr(0, 5)+" "+WZTag04;

i = 0;
foreach (x, Wochtageliste.Split(";")) {
            if (WochenTg0 == i) {sTimeString = sTimeString + x;}
            i = (i.ToInteger()+1).ToString();
            }

    string zeile1 = "0x80"; ! ### im Taster gespeichert####
    string color1 = "0x80"; ! ### weiß ###
    string icon1  = "";

    string zeile2 = sTimeString;
    string color2 = "0x85"; ! ### blau ###
    string icon2  = "";

    string zeile3 = "1: "+WZ01;
    string color3 = "0x80"; ! ### weiß ###
    if (WA1) {string icon3  = "0x85";}  else  {string icon3  = "0x84";}

    string zeile4 = "2: "+WZ02;
    string color4 = "0x80"; ! ### weiß ###
    if (WA2) {string icon4  = "0x85";}  else  {string icon4  = "0x84";}

    string zeile5 = "3: "+WZ03;
    string color5 = "0x80"; ! ### weiß ###
    if (WA3) {string icon5  = "0x85";}  else  {string icon5  = "0x84";}

    string zeile6 = "4: "+WZ04;
    string color6 = "0x80"; ! ### weiß ###
     if (WA4) {string icon6  = "0x85";}  else  {string icon6  = "0x84";}


! ### Zeile 1-4 ausgewaehlte Zeile gelb markieren ###
if (zeilenZaehler == "1") {
   string color3 = "0x83";  ! ### Gelb markierte Zeile ###
}
if (zeilenZaehler == "2") {
    string color4 = "0x83"; ! ### Gelb markierte Zeile ###
}
if (zeilenZaehler == "3") {
    string color5 = "0x83"; ! ### Gelb markierte Zeile ###
}   
if (zeilenZaehler == "4") {
    string color6 = "0x83"; ! ### Gelb markierte Zeile ###
}
        }
    }
! ### Ende kurzer Tastendruck unten 
! ###################################################
! ### Beginn langer Tastendruck unten            
! ### 1.Seite Weckermenue Weckzeiten aktiv-passiv
! ###################################################
 if ( source )
   {
    if ( source.Name() == source.Name().Substr(0, 21) # "1.PRESS_LONG")
        {
! ###################################################

string WZ01h = WZ01.Substr(0, 8);
string WZ02h = WZ02.Substr(0, 8);
string WZ03h = WZ03.Substr(0, 8);
string WZ04h = WZ04.Substr(0, 8);

string WA1 = WZ01.Substr(9, 1);
string WA2 = WZ02.Substr(9, 1);
string WA3 = WZ03.Substr(9, 1);
string WA4 = WZ04.Substr(9, 1);

var zeilenZaehler = dom.GetObject('Weckermenuezaehler').Variable().ToInteger();


foreach (x, Wochtageliste.Split(";")) {
            if (WZ01.Substr(6, 2).ToInteger() == i) {string WZTag01 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ01 = WZ01.Substr(0, 5)+" "+WZTag01;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ02.Substr(6, 2).ToInteger() == i) {string WZTag02 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ02 = WZ02.Substr(0, 5)+" "+WZTag02;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ03.Substr(6, 2).ToInteger() == i) {string WZTag03 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ03 = WZ03.Substr(0, 5)+" "+WZTag03;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ04.Substr(6, 2).ToInteger() == i) {string WZTag04 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ04 = WZ04.Substr(0, 5)+" "+WZTag04;


i = 0;
foreach (x, Wochtageliste.Split(";")) {
            if (WochenTg0 == i) {sTimeString = sTimeString + x;}
            i = (i.ToInteger()+1).ToString();
            }

    string zeile1 = "0x80"; ! ### im Taster gespeichert####
    string color1 = "0x80"; ! ### weiß ###
    string icon1  = "";

    string zeile2 = sTimeString;
    string color2 = "0x85"; ! ### blau ###
    string icon2  = "";

    string zeile3 = "1: "+WZ01;
    string color3 = "0x80"; ! ### weiß ###
    string icon3  = "0x84";
     if (WA1 == "1") {string icon3  = "0x85";} 

    string zeile4 = "2: "+WZ02;
    string color4 = "0x80"; ! ### weiß ###
    string icon4  = "0x84";
     if (WA2 == "1") {string icon4  = "0x85";}  

    string zeile5 = "3: "+WZ03;
    string color5 = "0x80"; ! ### weiß ###
    string icon5  = "0x84";
     if (WA3 == "1") {string icon5  = "0x85";}

    string zeile6 = "4: "+WZ04;
    string color6 = "0x80"; ! ### weiß ###
    string icon6  = "0x84";
     if (WA4 == "1") {string icon6  = "0x85";} 

! ###################### Zeile 1-4  ######################
if (zeilenZaehler == "1") {
   string color3 = "0x83";  ! #### gelb markierte Zeile ####
   if (WA1 == "1")
     {
      string icon3  = "0x84"; ! ### Icon aendern ###
      WA1 = 0;
      dom.GetObject("CUxD." + sTimer1 + ".INHIBIT").State("true");
      }  
  else  
     {
      string icon3  = "0x85";
      WA1 = 1;
      dom.GetObject("CUxD." + sTimer1 + ".INHIBIT").State("false");
     } 
   dom.GetObject("Wecker_1").State(WZ01h+" "+WA1); 
}

if (zeilenZaehler == "2") {
    string color4 = "0x83";  ! ### Gelb markierte Zeile ####
   if (WA2 == "1") 
     {
     string icon4  = "0x84";
     WA2 = 0;
     dom.GetObject("CUxD." + sTimer2 + ".INHIBIT").State("true");
     }
  else
    {
     string icon4  = "0x85";
     WA2 = 1;
     dom.GetObject("CUxD." + sTimer2 + ".INHIBIT").State("false");
     }
 dom.GetObject("Wecker_2").State(WZ02h+" "+WA2); 
    }

if (zeilenZaehler == "3") {
    string color5 = "0x83";  ! ### Gelb markierte Zeile ####
   if (WA3 == "1")
  {
   string icon5  = "0x84";
    WA3 = 0;
    dom.GetObject("CUxD." + sTimer3 + ".INHIBIT").State("true");
   }
   else
  {
   string icon5  = "0x85";
   WA3 = 1;
   dom.GetObject("CUxD." + sTimer3 + ".INHIBIT").State("false");
   }
   dom.GetObject("Wecker_3").State(WZ03h+" "+WA3); 
}

if (zeilenZaehler == "4") {
    string color6 = "0x83";  ! ### Gelb markierte Zeile ####
   if (WA4 == "1")
     {
      string icon6  = "0x84";
      WA4 = 0;
      dom.GetObject("CUxD." + sTimer4 + ".INHIBIT").State("true");
      }
     else
     {
     string icon6  = "0x85";
     WA4 = 1;
     dom.GetObject("CUxD." + sTimer4 + ".INHIBIT").State("false");
      }
    dom.GetObject("Wecker_4").State(WZ04h+" "+WA4); 
      }
   }
}

! ### Ende langer Tastendruck unten
! ##########################################
! ### Beginn langer Tastendruck oben
! ### 2.Seite Weckermenue Auswahl Ddigit
! ##########################################
 if ( source )
   {
   if ( source.Name() == source.Name().Substr(0, 21) # "2.PRESS_LONG")
        {
! ##########################################

var zeilenZaehler = dom.GetObject('Weckermenuezaehler').Variable().ToInteger();

var digitZaehler = dom.GetObject("Weckerdigitzaehler").Variable().ToInteger();  ! ### holen ###
digitZaehler = (digitZaehler+1); ! ### incrementieren ###
if (digitZaehler == 6) {digitZaehler =1;} ! ### Digitende und von vorn ###
dom.GetObject("Weckerdigitzaehler").State(digitZaehler); ! ### schreiben in Systemvariable ###


foreach (x, Wochtageliste.Split(";")) {
            if (WZ01.Substr(6, 2).ToInteger() == i) {string WZTag01 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ01 = WZ01.Substr(0, 5)+" "+WZTag01;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ02.Substr(6, 2).ToInteger() == i) {string WZTag02 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ02 = WZ02.Substr(0, 5)+" "+WZTag02;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ03.Substr(6, 2).ToInteger() == i) {string WZTag03 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ03 = WZ03.Substr(0, 5)+" "+WZTag03;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WZ04.Substr(6, 2).ToInteger() == i) {string WZTag04 = x; }
            i = (i.ToInteger()+1).ToString();
            }
WZ04 = WZ04.Substr(0, 5)+" "+WZTag04;


i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WochenTg0 == i) {sTimeString = sTimeString + x;}
            i = (i.ToInteger()+1).ToString();
            }

    string zeile1 = sTimeString; ! ### aktuelle Uhrzeit ###
    string color1 = "0x85"; ! ### blau ###
    string icon1  = "";

    if (zeilenZaehler == "1") {string zeile2 = "0x81"; } ! ### Weckzeit_1 ###
    if (zeilenZaehler == "2") {string zeile2 = "0x82"; } ! ### Weckzeit_2 ###
    if (zeilenZaehler == "3") {string zeile2 = "0x83"; } ! ### Weckzeit_3 ###
    if (zeilenZaehler == "4") {string zeile2 = "0x84"; } ! ### Weckzeit_4 ###
    
	string color2 = "0x80"; ! ### weiß ###
    string icon2  = "";

    string zeile3 = "0x85"; ! ### einstellen: ###
    string color3 = "0x80"; ! ### weiß ###
    string icon3  = "";
  
    string zeile4= "";
    string color4 = "0x80"; ! ### weiß ###
    string icon4  = "";

    if (zeilenZaehler == "1") {string zeile5 = WZ01; } 
    if (zeilenZaehler == "2") {string zeile5 = WZ02; } 
    if (zeilenZaehler == "3") {string zeile5 = WZ03; } 
    if (zeilenZaehler == "4") {string zeile5 = WZ04; } 
    string color5 = "0x83"; ! ### gelb ###
    string icon5  = "";

! ### Pfeil nach oben ###
    if (digitZaehler == "1") {string zeile6 = "0x86"; } 
    if (digitZaehler == "2") {string zeile6 = "0x87"; } 
    if (digitZaehler == "3") {string zeile6 = "0x88"; } 
    if (digitZaehler == "4") {string zeile6 = "0x89"; } 
    if (digitZaehler == "5") {string zeile6 = "0x8A"; } 
    string color6 = "0x81"; ! ### rot ###
    string icon6  = "";
    }
   }
! ### Ende langer Tastendruck oben
! #########################################
! ### Beginn kurzer Tastendruck oben
! ### 2.Seite Weckermenue Stellen Digit
! #########################################
 if ( source )
   {
    if ( source.Name() == source.Name().Substr(0, 21) # "2.PRESS_SHORT")
        {
! ##########################################

string WZTagzk;

i = "0";
foreach (x, Wochtageliste.Split(";")) {
            if (WochenTg0 == i) {sTimeString = sTimeString + x;}
            i = (i.ToInteger()+1).ToString();
            }

var zeilenZaehler = dom.GetObject('Weckermenuezaehler').Variable().ToInteger();

if (zeilenZaehler == "1") {string WZ00 =  WZ01;}
if (zeilenZaehler == "2") {string WZ00 =  WZ02;}
if (zeilenZaehler == "3") {string WZ00 =  WZ03;}
if (zeilenZaehler == "4") {string WZ00 =  WZ04;}

! ### Umwandeln Zeit in Std10 Std01 Min10 Min01 Wochentag Alarm ###

var WZStd10 = WZ00.Substr(0, 1).ToInteger();
var WZStd01 = WZ00.Substr(1, 1).ToInteger();
var WZMin10 = WZ00.Substr(3, 1).ToInteger();
var WZMin01 = WZ00.Substr(4, 1).ToInteger();
var WZTag = WZ00.Substr(6, 2).ToInteger();
var WA00 = WZ00.Substr(9, 1).ToInteger();

! ### Digit stellen ###

var digitZaehler = dom.GetObject("Weckerdigitzaehler").Variable().ToInteger();  ! ### digit holen ###

if (digitZaehler == "0") {
    digitZaehler="1";
    dom.GetObject("Weckerdigitzaehler").State(digitZaehler); 
}

if (digitZaehler == "1") {
    WZStd10 = (WZStd10+1);
    if ((WZStd10 == "2") && (WZStd01 > "3")) {WZStd01 = 0;}
    if (WZStd10 == "3") {WZStd10 = 0;} 
}

if (digitZaehler == "2") {
    WZStd01 = (WZStd01+1);
     if (((WZStd10 == "2") && (WZStd01 > "3")) || (WZStd01 == "10")) {WZStd01 = 0;}
}

if (digitZaehler == "3") {
    WZMin10 = (WZMin10+1);
    if (WZMin10 == "6") {WZMin10 = 0;}
}

if (digitZaehler == "4") {
   if (WZMin01 == "0") {WZMin01 = 5;} 
   else 
   {WZMin01 = 0;}
}

if (digitZaehler == "5") {
   WZTag = (WZTag+1);
   if (WZTag == "11") {WZTag = 0;} 
}
i = 0;
foreach (x, Wochtageliste.Split(";")) {
            if (WZTag.ToInteger() == i) {WZTagzk = x; }
            i = (i.ToInteger()+1).ToString();
            }
! ### Text für die Systemvariable ###
if (WZTag < "10") {
WZ00=WZStd10.ToString()+WZStd01.ToString()+":"+WZMin10.ToString()+WZMin01.ToString()+" 0"+WZTag.ToString()+" "+WA00.ToString();
}
else
{WZ00=WZStd10.ToString()+WZStd01.ToString()+":"+WZMin10.ToString()+WZMin01.ToString()+" "+WZTag.ToString()+" "+WA00.ToString();
}

! ### Text für die Anzeige ###
var WZ00X=WZ00.Substr(0,5)+" "+WZTagzk;

! ### schreiben in Sysvar ###
if (zeilenZaehler == "1") {dom.GetObject("Wecker_1").State(WZ00);} 
if (zeilenZaehler == "2") {dom.GetObject("Wecker_2").State(WZ00);}
if (zeilenZaehler == "3") {dom.GetObject("Wecker_3").State(WZ00);}
if (zeilenZaehler == "4") {dom.GetObject("Wecker_4").State(WZ00);}

! ### Wecker Uhrzeit mit Wochentag für den CUXD Timer ermitteln ###
! ### gesamte Woche WO gleiche Zeit ###
WZ00=WZ00.Substr(0,5)+":00"; ! ### Weckzeit ohne Wochentag bei WZTag = "7" ###

! ### nur an einem Wochentag MO oder DI oder MI oder DO oder FR oder SA oder SO ###
   if ((WZTag >= "0") && (WZTag < "7")) { WZ00=WZTag.ToString()+":"+WZ00;}  

! ### Sortierung für MF WT WE beginnt mit morgigem oder heutigem Wochentag So=0 ###
   if (WZ00 < sTimeString1) {
     WochenTg0 = WochenTg0.ToInteger()+1;
     if (WochenTg0 == "7") {WochenTg0 = "0";}
    }
string WZ00a = "";
   
! ### nur in der Woche MF = MO bis FR ###
   if (WZTag == "8") {
   integer i=0; 
   while (i < 5) {
      i=i+1;
	  if ((WochenTg0 == "0") || (WochenTg0 == "6")) {WochenTg0 = "1";}
      WZ00a=WZ00a+WochenTg0.ToString()+":"+WZ00+"|";
      WochenTg0=WochenTg0.ToInteger() + 1;
   }

  WZ00=WZ00a.Substr(0,WZ00a.Length()-1);  ! ### den letzten "|" abschneiden ###     
}

! ### nur Werktag WT = MO bis SA ###
   if (WZTag == "9") {
   integer i=0; 
   while (i < 6) {
      i=i+1;
	  if ((WochenTg0 == "0")  || (WochenTg0 == "7")) {WochenTg0 = "1";}
       WZ00a=WZ00a+WochenTg0.ToString()+":"+WZ00+"|";
      WochenTg0=WochenTg0.ToInteger() + 1;
   } 
   WZ00=WZ00a.Substr(0,WZ00a.Length()-1);  ! ### den letzten "|" abschneiden ###  
}

! ### nur WE Wochenende SA und SO ###
   if ((WZTag == "10") && (WochenTg0 == "0")) {WZ00="0:"+WZ00+"|6:"+WZ00;} 
   if ((WZTag == "10") && (WochenTg0 <> "0"))  {WZ00="6:"+WZ00+"|0:"+WZ00;}

   
! ### schreiben in CUXD Timmer 11 bis 14 ###
if (zeilenZaehler == "1") {dom.GetObject("CUxD." + sTimer1 + ".TIMER_SET").State(WZ00);}
if (zeilenZaehler == "2") {dom.GetObject("CUxD." + sTimer2 + ".TIMER_SET").State(WZ00);}
if (zeilenZaehler == "3") {dom.GetObject("CUxD." + sTimer3 + ".TIMER_SET").State(WZ00);}
if (zeilenZaehler == "4") {dom.GetObject("CUxD." + sTimer4 + ".TIMER_SET").State(WZ00);}

    string zeile1 = sTimeString; ! ### aktuelle Uhrzeit ###  
    string color1 = "0x85"; ! ### blau ###
    string icon1  = "";

   if (zeilenZaehler == "1") {string zeile2 = "0x81"; } ! ### Weckzeit_1 ### 
   if (zeilenZaehler == "2") {string zeile2 = "0x82"; } ! ### Weckzeit_2 ###
   if (zeilenZaehler == "3") {string zeile2 = "0x83"; } ! ### Weckzeit_3 ###
   if (zeilenZaehler == "4") {string zeile2 = "0x84"; } ! ### Weckzeit_4 ###
    string color2 = "0x80"; ! ### weiß ###
    string icon2  = "";

    string zeile3 = "0x85"; ! ### einstellen: ###
    string color3 = "0x80"; ! ### weiß ###
    string icon3  = "";
  
    string zeile4= "";
    string color4 = "0x80"; ! ### weiß ###
    string icon4  = "";

    string zeile5 = WZ00X;  
    string color5 = "0x83"; ! ### gelb ###
    string icon5  = "";

! ### Pfeil nach oben ###
    if (digitZaehler == "1") {string zeile6 = "0x86"; } 
    if (digitZaehler == "2") {string zeile6 = "0x87"; } 
    if (digitZaehler == "3") {string zeile6 = "0x88"; } 
    if (digitZaehler == "4") {string zeile6 = "0x89"; } 
    if (digitZaehler == "5") {string zeile6 = "0x8A"; } 
    string color6 = "0x81"; ! rot
    string icon6  = "";
   }
 }
! ### Ende kurzer Tastendruck oben 
! ####################################

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ! 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);
Hier das WEBUI-Programm zum stellen des Weckers:
PRG_WEBUI_Wecker_stellen.JPG
Ich lasse mich derzeit per MP3 Funkgong wecken.
Da fehlt mir noch die Idee wie man die Snooze - Funktion realisieren kann....
Hier das passende WEBUI-Programm:
PRG_WEBUI_Wecker_klingelt.JPG
Viel Spaß bei der Nachnutzung.
Zuletzt geändert von Ickest am 04.03.2016, 18:51, insgesamt 2-mal geändert.
Viele Grüße Ickest

RPM mit 235 Kanälen in 65 Geräten und 39 CUxD-Kanäle in 4 CUxD-Geräten, IoBroker auf NUC mit Kopplung an Alexa

Joker971
Beiträge: 126
Registriert: 22.12.2015, 22:01
Danksagung erhalten: 2 Mal

Re: HM-DIS-WM55 als Wecker

Beitrag von Joker971 » 22.02.2016, 13:13

Coole Sache ! Wird ich bei mir vielleicht umsetzen. Danke :-)

Benutzeravatar
robbi77
Beiträge: 13847
Registriert: 19.01.2011, 19:15
System: CCU
Wohnort: Landau
Hat sich bedankt: 181 Mal
Danksagung erhalten: 738 Mal

Re: HM-DIS-WM55 als Wecker

Beitrag von robbi77 » 22.02.2016, 19:36

Vielleicht kann das ja ein Mod in die richtige Kategorie verschieben? :-)


Gruß
Roberto
Bei Risiken und Nebenwirkungen fragen Sie den Elektriker Ihres geringsten Mißtrauens!
http://www.eq-3.de/service/downloads.html
Tips und Tricks für Anfänger: viewtopic.php?t=22801
Programmlogik: viewtopic.php?f=31&t=4251
Webui-Handbuch: https://www.eq-3.de/downloads/download/ ... h_eQ-3.pdf
Script und Linksammlung: viewtopic.php?f=26&t=27907
Troll des Forums ...

Ickest
Beiträge: 15
Registriert: 20.02.2016, 19:03
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: HM-DIS-WM55 als Wecker

Beitrag von Ickest » 04.03.2016, 19:10

@ robbi77 Danke für den Hinweis.
@ Mod Danke für's Verschieben.

Habe im ersten Beitrag das Script leicht geändert eingestellt. Es gab noch einen Fehler bei der Bedienung.

Grüße Ickest
Viele Grüße Ickest

RPM mit 235 Kanälen in 65 Geräten und 39 CUxD-Kanäle in 4 CUxD-Geräten, IoBroker auf NUC mit Kopplung an Alexa

brufi
Beiträge: 28
Registriert: 27.12.2013, 20:42
Danksagung erhalten: 1 Mal

Re: HM-DIS-WM55 als Wecker

Beitrag von brufi » 13.03.2016, 21:10

Sau geil!!! Gute Arbeit!

Gruß,
Brufi

TGP
Beiträge: 8
Registriert: 31.01.2018, 11:27

Re: HM-DIS-WM55 als Wecker

Beitrag von TGP » 10.06.2018, 22:48

Ich weiß nicht, ob ich diesen Thread noch einmal "hervorholen" kann...

An sich funktioniert der Wecker gut, aber immer mal wieder (!) "verliert" CUxD ohne Zutun (und ohne Neustart der RaspberryMatic) den Timer, d. h. der Timer-Eintrag sieht im CUxD-Status so aus:

CUX2800001:11 state(0) timer(0s) set(6:07:35:00/0:07:35:00):0

Obwohl der Timer scharf geschaltet ist (kein "inhibit"), läuft er dann nicht aktiv (keine Restzeit) und entsprechend wird auch kein Event beim Ablauf generiert.

Ein- und Ausschalten des Timers auf dem Homematic-Display nutzt nichts. Man muss die Zeit neu einstellen, dann läuft der CUxD-Timer wieder richtig.

Weiß jemand, woran das liegt bzw. wie man das verhindern kann?

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: HM-DIS-WM55 als Wecker

Beitrag von uwe111 » 11.06.2018, 12:49

TGP hat geschrieben:Weiß jemand, woran das liegt bzw. wie man das verhindern kann?
Wenn der Status so aussieht, dann ist der Timer ganz normal abgelaufen.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

TGP
Beiträge: 8
Registriert: 31.01.2018, 11:27

Re: HM-DIS-WM55 als Wecker

Beitrag von TGP » 11.06.2018, 19:00

Ok, danke. Und wie könnte man ihn so konfigurieren, dass er nicht abläuft? Eigentlich würde man ja bei einem Wecker davon ausgehen, dass er auch beim nächsten Mal wieder klingelt...

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: HM-DIS-WM55 als Wecker

Beitrag von uwe111 » 11.06.2018, 21:35

Dafür gibt es in den Geräteeinstellungen den REPEAT Geräteparameter.
Der ist auch in der CUxD-Doku beschrieben:
REPEAT - [x] automatischer Neustart des Timers nach Ablauf der Zeit
Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

TGP
Beiträge: 8
Registriert: 31.01.2018, 11:27

Re: HM-DIS-WM55 als Wecker

Beitrag von TGP » 22.06.2018, 00:03

Danke, da wäre ich nicht drauf gekommen.

Antworten

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