Einfacher programmierbarer Wecker mit einem CUxD-Timer

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

Moderator: Co-Administratoren

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von Xel66 » 09.07.2018, 23:08

Um bestimmte Aktionen variabel ansteuern zu können (in meinem Fall die Rollladen hochzufahren), habe ich nach einer Möglichkeit gesucht, die Uhrzeit flexibel programmieren zu können. Herausgekommen ist ein Wecker, der eine durch das Setzen von Systemvariablen ermittelte Uhrzeit in einen CUxD-Timer schreibt. Zum Anlegen von CUxD-Timern verweise ich auf das gut gemachte zugehörige Handbuch. Wichtig ist, dass "SYSTEM|REPEAT" angehakt ist, damit der Wecker auch am nächsten Tag funktioniert.
Was wird benötigt? Ein CUxD-Timer, drei Systemvariablen (2x Werteliste, 1x Logikwert) und ein Programm mit Script.
Die Systemvariablen für die Eingabe der Uhrzeit sind vom Typ „Werteliste“ und beinhalten die Stunden von 00 bis 23 Uhr zur Auswahl.
Wecker_HH-Systemvariable.jpg
Werteliste für die Stundenauswahl
Um den Wecker noch bedienerfreundlich mit der Auswahl per Werteliste zu halten, habe ich mich auf zwölf Werte im Fünf-Minuten-Raster beschränkt (00 bis 55).
Wecker_MM-Systemvariable.jpg
Werteliste für die Minutenauswahl im Fünf-Minuten-Raster
Um den Wecker in Programmen auch gezielt aktivieren und deaktivieren zu können, benötigt man eine dritte Systemvariable vom Typ Logikwert (hier für das Schlafzimmer). Ich habe noch eine zusätzliche für das Kinderzimmer und kann somit die Wecker auf die gleiche Uhrzeit beliebig zu- und abschalten. Man kann auch mehrere hinzufügen und in Programmen verwenden. Allerdings benutzen alle die gleiche Weckzeit.
Wecker-Schlafzimmer-Systemvariable.jpg
Logikvariable für die Aktivierung des Timers
Das dazugehörige Programm mutet etwas merkwürdig an. Damit es funktioniert, muss es aber Im "Wenn" mit Parametern konfiguriert sein, deren Prüfung nie eine wahre Konstellation ergeben, aber das Sonst bei jeder Änderung an den beteiligten Systemvariablen ausführen. Dieses habe ich dadurch erreicht, dass die Stunden nie gleichzeitig „00“ und „01“ ausgewählt sein können. Im „Sonst“ wird das Script hinterlegt, welches den CUxD-Timer mit der aus den Systemvariablen der Wertelisten ausgewählten Uhrzeit beschreibt.
Das erste „Dann“ der „Wenn“-Bedingung wird also nie ausgeführt und steht dort nur als Dummy drin. Anders sieht es mit dem „Sonst-Wenn“ aus. Hier wird der Timer gestoppt, wenn keine der Logikvariablen wahr ist. Das ist nicht unbedingt notwendig, aber etwas sauberer.
Wecker-Programm.jpg
Programm zum Schreiben der gesetzen Uhrzeit in den Timer
Und folgend das notwendige Script. Es beinhaltet keinerlei Fehlerbehandlung. Die möglichen „Eingabefehler“ sind ja durch die Benutzung von Wertelisten, die nur plausible Werte zulassen, schon stark eingeschränkt. Wichtig ist lediglich die korrekte Namensgleichheit mit den in der GUI verwendeten Systemvariablennamen. Die ersten drei Scriptzeilen nach der Überschrift deklarieren die Sciptvariable für die Stunden, lesen deren Wert aus und weisen den Inhalt aus der zugehörigen Werteliste der internen Scriptvariable „Std“ zu. In den drei weiteren folgenden Zeile wir das Gleiche für die Minuten („Min“) gemacht. In der vorletzten Zeile wird aus den ermittelten Daten ein String zusammengebaut, der in der letzten Zeile in einen CUxD-Timer geschrieben wird. Das war es schon.

Code: Alles auswählen

! Wertelisteninhalte für Stunden und Minuten in Wecker-Timer schreiben +++++++++
var SYSvar_hh = dom.GetObject("Wecker_HH");
var wert_hh = SYSvar_hh.Value();
var Std = web.webGetValueFromList(SYSvar_hh.ValueList(), wert_hh);
var SYSvar_mm = dom.GetObject("Wecker_MM");
var wert_mm = SYSvar_mm.Value();
var Min = web.webGetValueFromList(SYSvar_mm.ValueList(), wert_mm);
string timer_w = Std # ":" # Min #":" # "00";
dom.GetObject("CUxD.CUX2800001:6.TIMER_SET").State(timer_w);
Die Kanalnummer des Timers ermittelt man über die Geräteeigenschaften im GUI der CCU. Hier gibt man dem Timer einen aussagekräfigen Namen, hakt "SYSTEM|REPEAT" an und merkt sich die Nummer hinter dem Doppelpunkt oder besser gleich die komplette "Seriennummer" (in meinem Scipt die
CUX2800001:6).

Als letztes noch ein Beispielprogramm, wie der Wecker zu verwenden ist. In diesem Beispiel wird der Rollladen des Kinderzimmers bei Ablauf des Wecker-Timers und aktivierter Systemvariable für das Kinderzimmer hochgefahren.
Wecker-Verwendung-Beipielprogramm.jpg
Beispielprogramm für die Verwendung des Weckers
Aus dem Beispiel ist auch ersichtlich, warum es nicht unbedingt notwendig ist, den Timer zu stoppen. Ein Auslösen des Timers würde ohne „wahre“ Logikvariable das „Dann“ nicht ausführen. Dieses ist bei der Verwendung von „Sonst“ in einem solchen Programm zu beachten. Darum ist es sinnvoll, den Timer auch bei Nichtverwendung zu stoppen.

Vielleicht hat ja jemand Verwendung dafür. Bei mir funktioniert es problemlos und ich greife damit in meine Rollladensteuerung ein, um auch unabhängig von der Verwendung der Zentralsteuerung "aller" Rollladen, einzelne zu separaten Zeiten hochzufahren. Der Nachwuchs mit Ferien dankt es, wenn der Rollladen nicht hochläuft, wenn die "Erzeuger" zum Broterwerb aufstehen. :-)

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von michaelapp » 21.10.2018, 22:00

Hallo xel66,

ich habe gerade versucht Deine Lösung bei mir nachzubauen.

Im letzten Screenshot verwendest Du bei Geräteauswahl den "Timer_Wecker". Hast Du den manuell angelegt? Finde dazu nichts in Deinem Beitrag.

Die Zeit des Weckers wird über das Programm "Wecker_stellen" eingestellt und hier die zweite MM und die HH, korrekt?

Wie kann ich das "dom.GetObject("CUxD.CUX2800001:6.TIMER_SET").State(timer_w);" prüfen? Sollte die Zeit hier in den Parameter eingetragen werden?

Im Systemprotokoll sehe ich folgende Meldungen:
Timer_set.jpg
Gruß
Michael

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von 66er » 22.10.2018, 02:23

Hallo
michaelapp hat geschrieben:
21.10.2018, 22:00
...
Im letzten Screenshot verwendest Du bei Geräteauswahl den "Timer_Wecker". Hast Du den manuell angelegt? Finde dazu nichts in Deinem Beitrag.
...
Xel66 hat geschrieben:
09.07.2018, 23:08
...
Herausgekommen ist ein Wecker, der eine durch das Setzen von Systemvariablen ermittelte Uhrzeit in einen CUxD-Timer schreibt. Zum Anlegen von CUxD-Timern verweise ich auf das gut gemachte zugehörige Handbuch. Wichtig ist, dass "SYSTEM|REPEAT" angehakt ist, damit der Wecker auch am nächsten Tag funktioniert.
Was wird benötigt? Ein CUxD-Timer, drei Systemvariablen (2x Werteliste, 1x Logikwert) und ein Programm mit Script.
Die Systemvariablen für die Eingabe der Uhrzeit sind vom Typ „Werteliste“ und beinhalten die Stunden von 00 bis 23 Uhr zur Auswahl.
...
LG
Stefan

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von michaelapp » 22.10.2018, 08:50

Hallo Stefan,

irgendwie stehe ich gerade ein wenig auf dem Schlauch.

Ich habe den CUxD-Timer angelegt:
Timer_generell.jpg
Timer_Set2.jpg
Das Skript lautet:

Code: Alles auswählen

! Wertelisteninhalte für Stunden und Minuten in Wecker-Timer schreiben +++++++++
var SYSvar_hh = dom.GetObject("Wecker_HH");
var wert_hh = SYSvar_hh.Value();
var Std = web.webGetValueFromList(SYSvar_hh.ValueList(), wert_hh);
var SYSvar_mm = dom.GetObject("Wecker_MM");
var wert_mm = SYSvar_mm.Value();
var Min = web.webGetValueFromList(SYSvar_mm.ValueList(), wert_mm);
string timer_w = Std # ":" # Min #":" # "00";
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(timer_w);
Da es ja "CUxD.CUX2800001:1.TIMER_SET" heist, habe ich meinen Timer Kanal 1 mit "TIMER_SET" benannt.

Habe ich hier einen Denkfehler?

BIld 1.jpg
Hierüber stelle ich dann die Zeit ein und wenn ich das Programm starte, sollte die Zeit eigentlich eingetragen werden oder?

Wenn ich das so mache, erhalte ich im Systemprotokoll folgende Fehlermeldung:
BIld 2.jpg
Gruß
Michael

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von 66er » 22.10.2018, 19:11

Hallo.
michaelapp hat geschrieben:
22.10.2018, 08:50
...
Da es ja "CUxD.CUX2800001:1.TIMER_SET" heist, habe ich meinen Timer Kanal 1 mit "TIMER_SET" benannt.

Habe ich hier einen Denkfehler?
...
Leider ja, wenn sich Dein Zitat auf den Code bezieht, denn dort ist das "TIMERSET_SET" ein Befehl an den Timer. :wink:

Mein Rat:

Bevor Du Dich jetzt hier immer weiter quälst, gehe zuerst mal an eine ganz leichte Aufgabe und lerne damit den CUxD-Timer und seine Funktionalitäten kennen.

Beispielsweise stelle einen Timerkanal so ein, dass er 2 Minuten runterzählt und dann neu gestartet wird. In einem Programm reagierst Du auf den Wert 0 und toggelst z.B. eine Schaltsteckdose.

Wenn das klappt, hast Du das Prinzip verstanden und versuchst es nochmal mit dem "Wecker".

Solltest Du meinen Vorschlag umsetzen und es treten Probleme auf, poste das bitte in einem eigenen Thread. :wink:

LG und viel Erfolg
Stefan

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von Xel66 » 22.10.2018, 19:20

michaelapp hat geschrieben:
22.10.2018, 08:50
Da es ja "CUxD.CUX2800001:1.TIMER_SET" heist, habe ich meinen Timer Kanal 1 mit "TIMER_SET" benannt.
Glaube ich nicht, denn der angehängte Screenshot zeigt was anderes (Timer_Wecker). Wie der Timer bezeichnet ist, ist letztendlich egal, denn es wird im Script direkt der Datenpunkt TIMER_SET des Gerätes CUxD.CUX28... angesprochen. Der Name ist nur für die Programmierung im GUI relevant.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von michaelapp » 22.10.2018, 22:47

Hallo Xel66,

ich habe mir das CuxD Timer mal angeschaut.

Mit dem

Code: Alles auswählen

dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("14:45:00");
habe ich die Zeit 14:45:00 in den 1 Kanal schreiben können.

Wenn ich Dein Programm ausführe:
BIld_1.jpg
erhalte ich folgende Fehlermeldung:
Bild_2.jpg
Bild_2.jpg (16.74 KiB) 4307 mal betrachtet
Jetzt bin ich erst mal ratlos. Hast Du mir nen Tip?

Gruß
Michael

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von Xel66 » 22.10.2018, 22:54

michaelapp hat geschrieben:
22.10.2018, 22:47
Wenn ich Dein Programm ausführe:
Nö, bei mir ist es ein und derselbe Timer. Bei Dir ist irgendwo der Wurm drin. Der gleiche Timer kann nicht unterschiedlich benamt im GUI erscheinen.

Sind die Namen Deiner Systemvariablen für das Auslesen der Stunden und Minuten auch korrekt mit Unterstrich angelegt (siehe Screenshots oben)?

Gruß Xel66
Dateianhänge
Wecker-falsch.png
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von michaelapp » 22.10.2018, 23:08

Hab ich ganz übersehen, danke schon mal.

Kannst Du mir vielleicht mal dein Gerät "Timer_Wecker" zeigen?

Auch nach dem ich die beiden auf "Timer_Wecker" gestellt habe funktioniert das Programm nicht.

Die Systemvariablen sind mit "_" korrekt angelegt.

Gruß
Michael

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Einfacher programmierbarer Wecker mit einem CUxD-Timer

Beitrag von Xel66 » 22.10.2018, 23:26

michaelapp hat geschrieben:
22.10.2018, 23:08
Kannst Du mir vielleicht mal dein Gerät "Timer_Wecker" zeigen?
Kann ich vielleicht morgen machen (bin jetzt nur noch am Mobilgerät). Allerdings ist der fast identisch zu Deinem Timer, nur dass ich keinen Preset drin habe. Aber das sollte nichts ausmachen, da dieser ja bei korrekter Anwendung Dorsch das SET überschrieben wird. Was ist mit den Namen der Systemvariablen?

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Antworten

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