Howto - Vermeidung von Programmstarts nach Neustart der CCU

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

Moderator: Co-Administratoren

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von jp112sdl » 07.12.2020, 11:03

dtp hat geschrieben:
07.12.2020, 10:53
Wie immer, sollte man jedoch wissen, was man tut und warum man es tut.
Das ist aber in den seltensten Fällen so. 99% machen Copy & Paste.
Da nehme auch ich mich nicht aus.
Anfangs habe ich auch nur zusammengesucht & zusammenkopiert, um schnell zu Lösungen für verschiedene Anforderungen zu kommen.
Wäre meinerseits das Interesse in Richtung Homebrew Devices nicht aufgekommen, wäre das wahrscheinlich jetzt immer noch so.
Zuletzt geändert von jp112sdl am 07.12.2020, 11:09, insgesamt 1-mal geändert.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

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

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von Xel66 » 07.12.2020, 11:03

dtp hat geschrieben:
07.12.2020, 10:53
Wie immer, sollte man jedoch wissen, was man tut und warum man es tut.
Das ist der Casus knacksus. Leider werden hier viele (und leider teil auch veraltete Anleitungen) kritiklos nachgeklickt, weil es eben irgendwo so steht. (Hier beziehe ich mich ausdrücklich auf einen anderen Lösungsansatz für eine andere gefühlte Problematik, den ich jetzt nicht aus der Versenkung hochholen möchte.) Ich schreibe auch oft genug, dass man diesen Workaround an bestimmten Stellen einsetzen kann. Aber eben nicht in allen Programmen. Und solange die falsche Behauptung kursiert, dass die CCU alle Programme beim Reboot starten würde, werden die Anwender auch diesen Workaround in allen Programmen einsetzen. Traurig - ist nun mal so. Und darum gebe ich hier den einsamen Rufer in der Wüste. Und du merkst ja selbst, dass nicht mal über Deine Anleitung nachgedacht wird, denn selbst der Passus zur eigenen Anwesenheitsvariable ("Haus SV Anwesenheit")wird missverstanden, weil einfach nur noch nachgeklickt wird, ohne zu bgreifen, was man dort gerade tut. Das ist nämlich der Nachteil solcher Nachklickanleitungen.

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

gmp
Beiträge: 72
Registriert: 05.12.2020, 18:25
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 5 Mal
Danksagung erhalten: 1 Mal

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von gmp » 07.12.2020, 11:09

dtp hat geschrieben:
07.12.2020, 10:47
gmp hat geschrieben:
07.12.2020, 08:46
Dann sollte man auf Seite 1 die Formulierung mal ändern:
Nein, weil sich Punkt 3 doch auf etwas völlig anderes bezieht. Da geht es darum, dass man die bisher verwendete Systemvariable "Anwesenheit", die ja durch die Umbenennung nun "CCU SV Reboot" heißt, durch die neu angelegte Systemvariable "CCU SV Anwesenheit" ersetzt, damit die entsprechenden Programme weiterhin den Anwesenheitsstatus berücksichtigen können. Das ist aber eben nur notwendig, wenn man mit der ursprünglichen Systemvariablen "Anwesenheit" bereits gearbeitet hatte.
Das ist mir jetzt auch klar und nun weiß ich damit umzugehen.
Xel66 hat geschrieben:
07.12.2020, 10:49
Mit dem Einsatz des Workarounds hat(te) man zumindest noch die Hoffnung, dass der nachklickende Anwender sich wenigstens ansatzweise mit der zugrundeliegenden Problematik auseinandergesetzt hat und diesen bewusst einsetzt. Diese Hoffnung hast Du übrigens gerade kaputt gemacht. Es werden blind und ohne Nachdenken irgendwelche "Empfehlungen" nachgeklickt.
Eigentlich nicht so meine Vorgehensweise aber ja, da habe ich wohl etwas zu voreilig reagiert, ohne Hintergrundinfos. Ich gelobe Besserung
und möchte es damit nun auch belassen.

VG
Thomas

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von Black » 07.12.2020, 11:12

Xel66 hat geschrieben:
07.12.2020, 11:03
... Und solange die falsche Behauptung kursiert, dass die CCU alle Programme beim Reboot starten würde, werden die Anwender auch diesen Workaround in allen Programmen einsetzen. Traurig - ist nun mal so. ...

Gruß Xel66
Welche Programme startet denn eine ccu bei einem rega Neustart (also auch bei einem reboot) und welche nicht ?
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

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

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von Xel66 » 07.12.2020, 11:51

Black hat geschrieben:
07.12.2020, 11:12
Welche Programme startet denn eine ccu bei einem rega Neustart (also auch bei einem reboot) und welche nicht ?
Ich habe das schon x-mal (unter anderem in Threads, die sich mit dem Zeitstempel von Programmen beschäftigen) beschrieben und hier im Thread kurz angeführt. Dazu hatte ich mal meine Test-CCU/RM (Pi2B mit altem Funkmodul) mit verschiedenen Programmen und Reboots traktiert. Meiner Produktiv-CCU/RM würde ich das nicht zumuten. Grob kann man festhalten: Die CCU startet erst mal gar keine Programme, es werden lediglich Bedingungsprüfungen in Programmen durchgeführt, deren Trigger beim Systemstart (Sensoren, Systemvariablen) gesetzt werden oder deren Status abgefragt werden (netzversorgte Aktoren). Dann noch Programme, die ein Zeitmodul enthalten und deren Prüfung der angelegten Zeitspanne zum Reboot-Zeitpunkt ein WAHR ergibt.

Nicht getriggert werden Bedingungsprüfungen für Zeitpunkte (außer der Reboot erfolgt genau zu dem Zeitpunkt, was hinreichend unwahrscheinlich aber statistisch nicht unmöglich ist) und welche mit Triggern durch Tasterbedienung u.ä.. Teilweise wird lediglich die Bedingungsprüfung angestoßen (das Programm erhält einen Zeitstempel) aber gar keine Aktion ausgeführt, weil die Prüfung keine verknüpfte Bedingung gefunden hat, die ein WAHR ergibt, um ein DANN auszuführen. Ein enthaltenes SONST wird bei Negativprüfung ausgeführt (dazu muss aber ein gültiger Trigger enthalten sein). Das Verhalten habe ich ausschließlich an Hand von Testläufen überprüft, wobei ich als Ausgabe das Systemprotokoll, Systemvariablenstatus und die Aufstellung der Zeitstempel in der Programmübersicht herangezogen habe. Also das, was auch der normale Anwender sieht und wahrnimmt.

Bei diesen Tests bin ich auch drauf gekommen, dass die Prüfung auf "bei Änderung" anscheinend Teil der Bedingungsprüfung im Programm (vermutlich durch Vergleich mit .LastValue()) ist und nicht im Vorfeld als Trigger geprüft wird, auch wenn es im Handbuch anders beschrieben ist. In einfachen Programmen stellt sich das wie im Handbuch beschrieben dar, in komplexeren Verknüpfungen sind die Abläufe anscheinend anders.

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

dtp
Beiträge: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von dtp » 07.12.2020, 12:08

Xel66 hat geschrieben:
07.12.2020, 11:51
Die CCU startet erst mal gar keine Programme, es werden lediglich Bedingungsprüfungen in Programmen durchgeführt, deren Trigger beim Systemstart (Sensoren, Systemvariablen) gesetzt werden oder deren Status abgefragt werden (netzversorgte Aktoren).
Also nach meinem Verständnis kann ein Programm nur dann Bedingungen abprüfen, wenn es gestartet wurde. Das, was du meinst, ist das Ausführen von Befehlen. Ergo wird beim Neustart der CCU jedes einzelne Programm gestartet, um zumindest die Bedingungen in den Wenn- und Sonst-Wenn-Zweigen zu prüfen.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von Black » 07.12.2020, 12:17

Ich kann deinen Beschreibungen nur teilweise folgen.

Meines Wissenstandes (der bis jetz nicht wiederlegt ist) wird bei einem regastart ,was ja auch ein Neustart ist):
Jedes programm, welches mit kennung aktiv=true klassifiziert ist, getriggert, heisst es wird zur Auslösung und zur Bedingungsprüfung gebracht. die reihenfolge ist auch nicht willkürlich, sondern die Reihenfolge, mit der diese Programme in ID_PROGRAMS gelistet sind. [OTMODE]@sprotte80, mitschreiben für deine Wiki !! :mrgreen: [/OTMODE] diese reihenfolge liesse sich durch verschieben ändern, allerdings macht da die WebUi immer ein SortByName()

Dann folgt in dem getriggerten programm ganz normal die Bedingungsprüfung und bei Ergebnis true bzw falsch die entsprechende Ausführung.

Dies ist allerdings auch bei zeitmodulen der Fall.
Ich habe mal schnell testweise folgendes kleines programm
ZM1.JPG
Ausführend sind nur 2 kleine Scritpe, die einen eintrag ins richtige Syslog schreiben, wo programm und dann oder sonstteil sowei der trigger draus hervorgeht. Nach deiner theorie sollte das programm gar nix tun. nach meiner Theorie und praxis (es ist nicht 12:55 sondern 12:04 beider Ausführung) wird das programm bei neustart getriggert, die bedingung ist nicht wahr also wird als footprint SONST teil hinterlassen.

Code: Alles auswählen

Dec  7 12:04:59 homematic-ccu2 user.debug LOGGERNAME: [SONST Reboot TEIL ohne Trigger]
Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

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

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von Xel66 » 07.12.2020, 12:36

dtp hat geschrieben:
07.12.2020, 12:08
Also nach meinem Verständnis kann ein Programm nur dann Bedingungen abprüfen, wenn es gestartet wurde.
Du musst ein Programm eben unterteilen. Ein Teil ist/sind die Bedingungsprüfung(en) (verknüpfte oder einzelne Bedingungen in WENNs und SONST WENNs). Diese Bedingungen können eben Trigger ("bei Änderung", "bei Aktualisierung") sein oder eben eine zusätzlich inaktive Statusabfrage ("nur prüfen"). Ein anderer Teil des Programm ist der Ausführungsteil (DANN oder SONST). Es können auch Bedingungsprüfungen durch einen Trigger gestartet werden (nicht "das Programm") ohne dass in einen Ausführungteil verzweigt wird. Das Programm erhält dann trotzdem einen Zeitstempel. Und dieses Verhalten ist das, was die Verwirrungen zu den Meinungen bzgl. der Zeitstempel verursacht hat.

Dieses war damals übrigens auch der Initiator für meine Tests zum Startverhalten von Programmen. Und unter diesen Maßgaben habe ich sie durchgeführt. Beim Systemstart werden eben die Bedingungsprüfungen angestoßen, und wenn ein Trigger WAHR ist, wird die Prüfung durchlaufen und das Programm erhält einen Zeitstempel, unabhängig davon, ob eine Aktion ausgeführt wurde oder nicht. Ist der Trigger zum Zeitpunkt des Reboots nicht WAHR, erhält das Programm auch keinen Zeitstempel.
Black hat geschrieben:
07.12.2020, 12:17
...nach meiner Theorie und praxis
Die Crux daran ist, dass dieses Programm ein SONST enthält. Es enthält einen zwingenden Ausführungsteil und muss somit auch "ausgeführt" werden, unabhängig davon, was die Bedingungsprüfung oben ergeben hat, wobei es auch einen Zeitstempel erhält (aka "ausgeführt" wird). Ein Programm ohne SONST und z.B. mit einem Taster als Trigger (und sonst nur "nur prüfen") erhält beim Systemstart keinen Zeitstempel.

Gruß Xel66
Zuletzt geändert von Xel66 am 07.12.2020, 12:41, insgesamt 1-mal geändert.
-------------------------------------------------------------------------------------------
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

Benutzeravatar
zautrix
Beiträge: 383
Registriert: 22.05.2016, 18:41
Wohnort: Badisch-Sibirien
Danksagung erhalten: 40 Mal

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von zautrix » 07.12.2020, 12:40

Ich weiß nicht, worum es gerade in dieser Diskussion genau geht. Wobei ich denke, dass ich Black zustimme. Sind auch meine Erfahrungen.

Deswegen ist mein Beitrag ein "Zwischenruf" und auf das eigentliche Thema bezogen:
Der Verhinderung der Ausführung von bestimmten Programmen beim Systemstart.

Nach meiner Erfahrung der letzten 6 Wochen, wo ich mich mit diesem Thema beschäftigt habe, kann ich jedem nur dringenst empfehlen sich des Problems bewusst zu werden, die Lösung zu verstehen und diese auch umzusetzen.
Natürlich muss das nicht für jedes Programm eingebaut werden.

Ich rede hier über die Raspimatic. Ich weiß jetzt nicht, ob sich die Raspimatic da von der CCU3 unterscheidet.
Jedenfalls ist der Boot Prozess mit dem Starten der einzelnen HM Services für HM classic, HMIP und Webui/Rega hochgradig nicht deterministisch. Also Zufällig.


Ich habe die letzte Zeit öfter mal die Raspimatic rebootet. Und es lief nicht rund...

Meine Situation war Folgende:
Beim Reboot kamen immer wieder unterschiedliche Servicemeldungen, dass Hm oder HMIP Geräte nicht erreichbar sind.
Und es kamen in, ganz grob geschätzt, einem von zwei Neustarts, Alarmmeldungen:
ReGaHss restarted. Oder rfd (homematic classic) restarted. Oder HMIP Server restarted.
Das bedeutet schlicht und einfach: Die Prozesse sind abgestürzt. Die Qualität der Programmierung dieser Prozesse von Seiten eq3 (Jens Maus mit der Raspimatic hat da keine Schuld, da ist nur eq3 für verantwortlich) ist, wie soll ich sagen, "einfach erbärmlich".

Dass ein wesentlicher Prozess beim Systemstart abstürzt kann ggf. das ganze weitere System kompromittieren, sodass kein fehlerfreier Betrieb mehr möglich ist.

Ich musste das selbst feststellen:
Bei einem reboot kam "rfd restarted". Nun gut, dachte ich. Läuft ja wieder. Normalerweise habe ich in einem solchen Fall noch ein Reboot gemacht. In diesem Fall merkte ich nach mehreren Stunden, dass keine Programme ausgeführt wurden. AUA!

Das ist irgendwie wirklich "suboptimal", dass ein Systemstart nicht "mal einfach eben so" durchgeführt werden kann, sondern auch noch auf Alarmmeldungen überwacht werden muss.

Danach habe ich die von dtp beschriebene Lösung konsequent bei mir eingebaut und seitdem ist bei mir Ruhe.

Nach meinen Erfahrungen vermute ich, dass so einige von dem in diesem Forum geschilderten Probleme (z.B. Programme nicht ausgeführt ) auf diese Problematik zurückgeführt werden könnten.

So ... genug gepredigt! Ich habe meinen Senf dazugegeben. Macht, was ihr wollt! Bei mir läuft es jetzt "rund".
Gruß aus Nord-Baden,
z.

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Howto - Vermeidung von Programmstarts nach Neustart der CCU

Beitrag von jp112sdl » 07.12.2020, 12:51

zautrix hat geschrieben:
07.12.2020, 12:40
Jedenfalls ist der Boot Prozess mit dem Starten der einzelnen HM Services für HM classic, HMIP und Webui/Rega hochgradig nicht deterministisch. Also Zufällig.
Puh... Nö.
Die Reihenfolge der init-Skripte ist schon geregelt und festgelegt.
Zuerst wird die RF Hardware initialisiert, dann der multimacd gestartet, anschließend der RFD und HMIPServer.
zautrix hat geschrieben:
07.12.2020, 12:40
ReGaHss restarted. Oder rfd (homematic classic) restarted. Oder HMIP Server restarted.
Das bedeutet schlicht und einfach: Die Prozesse sind abgestürzt.
Oder sie liefen und "monit" hat die Rückmeldung der "Überwachungsanforderung" nicht korrekt erhalten?

Das Neustarten der einzelnen Dienste halte ich ohnehin für keine gute Idee.
Zumindest beim RFD findet das der HMIPServer nicht so witzig, der dann ein Problem mit dem BidCosListener bekommt.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Antworten

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