auch wenn es schon einige Male hier im Forum erwähnt wurde, möchte ich noch mal im Rahmen der Tipps & Tricks die Vorgehensweise zusammenfassen, mit der man unbeabsichtigte Programmstarts nach einem Neustart der CCU vermeiden kann. Die nachfolgenden Screenshots entstammen meiner laufenden CCU2-Konfiguration. Daher werde ich diejenigen Systemvariablen, Programme etc, jeweils rot umranden, die man zwingend zur Ausführung benötigt. Auf die übrigen Systemvariablen werde ich ggf. im Rahmen weitere Howtos eingehen.
Vielleicht noch eines vorweg. Um Konflikte bei der Namensgebung für Geräte, Systemvariablen und Programme zu vermeiden, habe ich mir angewöhnt, Systemvariablen immer das Typenkürzel "SV" und Programmen immer das Typenkürzel "PRG" zu verpassen. Geräte erhalten kein weiteres Typenkürzel. Weiterhin vergebe ich Namen stets nach dem Muster "Ort Typenkürzel Beschreibung" bzw. "Ort Gerätebezeichnung".
Und noch ein Hinweis, der sich erst im Laufe dieses Threads herausgestellt hat. Das nachfolgende Programm scheint erst bei Systemen mit einer gewissen Mindestanzahl angemeldeter HM-Komponenten reibungslos zu funktionieren. Dabei ist aber derzeit unklar, wo die Grenze liegt. Eine zuverlässige Funktionsweise dürfte nach Erfahrungsberichten für Systeme mit mindestens 20 bis 30 Komponenten gegeben sein.
Fangen wir also mal an. Wesentlich für die Funktionsweise ist die bereits fest in der CCU integrierte und nicht löschbare Systemvariable "Anwesenheit". Diese wird bei jedem Neustart der CCU immer auf den Wert true gesetzt. Und genau dies machen wir uns nun zunutze.
1. Erzeuge eine neue Systemvariable "Haus SV Anwesenheit" (Logikwert) und definiere wahr = "anwesend"; falsch = "nicht anwesend" oder Entsprechendes.
2. Benenne die alte Systemvariable "Anwesenheit" um in z.B. "CCU SV Status" und definiere wahr = "Neustart"; falsch = "Normalbetrieb" oder Entsprechendes.
3. Schaue hinter der Systemvariablen "CCU SV Status" durch Klick auf den Button "Programme" nach, mit welchen Programmen sie verknüpft ist und ändere dann in jedem Programm die dortige Systemvariable "CCU SV Status" in "Haus SV Anwesenheit". Diese Vorgehensweise hat den Vorteil, dass Skripte, in denen die ehemalige Systemvariable "Anwesenheit" abgefragt oder gesetzt wurde, nicht geändert werden müssen.
4. Schreibe ein neues WebUI-Programm "CCU PRG Reboot", das unter "Wenn" die Systemvariable "CCU SV Status" mit dem Zustand "Neustart" prüft und dann die Aktivität "CCU SV Status verzögert um 45 Sekunden Normalbetrieb" durchführt.
Du kannst auch einen kürzeren oder längeren Zeitraum definieren. Solange die Systemvariable "CCU SV Status" aber nicht auf den Wert "Normalbetrieb" gesetzt wurde, erfolgt keine Abarbeitung der entsprechenden Programm-Bedingungen. Ist die Zeitspanne dagegen zu kurz definiert, werden Programme ausgeführt, die beim Start eigentlich nicht ausgeführt werden sollten. Bei mir hat sich eine Zeit von 45 Sekunden als optimal erwiesen.
5. In WebUI-Programmen, die beim Start der CCU nicht mehr ausgeführt werden sollen, füge in JEDE Wenn- bzw. Sonst-Wenn-Abfrage die UND-verknüpfte Zusatzbedingung "CCU SV Status Normalbetrieb nur prüfen" ein. Vermeide auf jeden Fall Sonst-Abfragen am Ende dieser WebUI-Programme, da diese SONST-Zweige nach einem Neustart der CCU definitiv ausgeführt werden. Näheres hierzu im nachfolgenden Posting anhand eines konkrete Beispiels.
6. Optional kannst du dir mit Hilfe eines entsprechenden Skripts eine Push-Nachricht zusenden lassen, die dich über den Neustart der CCU informiert. Das Skript könnte z.B. wie folgt aussehen, wobei es die Besonderheit aufweist, dass in Abhängigkeit der Systemvariablen "Haus SV Anwesenheit" die Priorität der Push-Nachricht geändert und am Ende ein zentrales Programm zum Versenden von Push-Nachrichten aufgerufen wird. Näheres dazu in meiner Signatur. Zudem wird eine weitere Systemvariable "CCU SV Letzter Neustart" mit dem aktuellen Zeitpunkt gefüllt, so dass man auf einfache Weise den letzten Neustart speichern und ggf. im Startbildschirm des WebUI anzeigen kann.
Code: Alles auswählen
! Meldung CCU-Reboot
! Version 1.0, Autor: dtp
! +++++ Variablendeklaration +++++
string message; string now; string present;
! +++++ Sound für Pushover-Nachricht
if(dom.GetObject("CCU SV Pushover Sound")){dom.GetObject("CCU SV Pushover Sound").State("bugle");}
! +++++ Variable present umwandeln für Nachrichtenausgabe +++++
present = dom.GetObject("Haus SV Anwesenheit").Value();
if(present == 1){
present = "in Anwesenheit.";
dom.GetObject("CCU SV Push Prio").State("-1");
}
else{
present = "in ABWESENHEIT.";
dom.GetObject("CCU SV Push Prio").State("0");
}
! +++++ Erzeugen des Zeitstempels und Setzen der Systemvariablen über den Neustart +++++
now = system.Date("%d.%m.%Y, %H:%M");
dom.GetObject("CCU SV Letzter Neustart").State(now);
! +++++ Erzeugen der Nachricht +++++
message = "CCU neu gestartet";
message = message#"\n"#present;
! +++++ Programm "CCU PRG Push-Nachrichten" ausführen +++++
dom.GetObject("CCU SV Push Text").State(message);
dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
Thorsten