Hallo zusammen,
hier die Anforderung, danke Stefan für die sinnvolle Aufforderung:
KURZ: Werkzeuge erhalten, um das Haus und all seiner Geräte nach einem Bus-Reset in einen sauberen (definierten) Zustand versetzen zu können.
LANG: Ich will nach einem Busreset den Zustand der Geräte initialisieren. Jetzt kann man sagen, was kümmert er sich um den seltenen Fall eines Busresets?
Ich war in meinem ersten Leben in der IT tätig und mich hat die Absicherung von "edgecases" (Exremwerte/Randbedingungen) immer besonders getriggert, weil solche Fehler im Betrieb zu debuggen ein Horror ist. Oder anders formuliert. Wenn man sich um die kümmert, stimmt auf einmal die Qualität an ganz vielen anderen Stellen auch.
Da ich häufig die KNX-Geräte beschreibe (jetzt mit dem TWS natürlich noch mehr, um neue Funktionen zu implementieren), in dem Haus mit anderen Personen aber auch wohne

, will ich das sauber haben. Ich hatte schon echte Beschwerden

weil Lüfter (durch einen Busreset) nicht mehr ausgegangen sind oder Licht unnötig ein/aus gegangen ist., etc. Wo vermeidbar, will ich das vermeiden oder zumindest auf einen safe state setzen.
Ich habe mir also eine Tabelle (Abhängigkeitsmatrix) erstellt, welche meiner Geräte von welchen Geräten abhängig ist (wer also was von wem liest / für Readrequests up sein muss und so weiter) und ein kleines Script erstellt, dass mir die Startreihenfolge der Geräte liefert (sind zur Zeit 6 Gruppen).
Die Gerätegruppen lasse ich dann mit ein paar Sekunden Versatz starten. Das realisiere ich über die Geräteanlaufzeit, die sich bei vielen (insbesondere komplexeren) KNX-Geräten einstellen lässt.
Konkretes Beispiel: Die TWS-Logik, die den Lüfter in Abhängigkeit von Taupunktdifferenz und relativer Luftfeuchtigkeit schaltet, will ich beim Gerätestart den Zustand ermitten lassen: Init-Flag gesetzt und gut ist. Nicht ganz. Der konkrete Aktor startet regulär nach 5 Sekunden, bedingt durch die genannte Gruppierung nach 30 Sekunden.
Der TWS fragt die die Daten aber so schnell ab und liefert das Ergebnis (Geräteanlaufzeit scheint mir < 1 Sekunde), so dass der Aktor das nicht mitbekommt (und der TWS auch keine korrekten Daten empfangen kann und der Logik-Input-Startwert greift).
Ich würde den TWS bei mir als letztes Gerät starten lassen wollen, da der TWS auf die ganzen anderen Geräte (zum Auslesen von Daten) angewiesen ist und die Empfänger der Ergebnisse auch wieder verfügbar sein sollen, wenn der TWS seine Ergebnisse sendet.
Momentan käme ich mit einer einzigen Geräteanlaufzeit=Ausleseverzögerung=Sendeverzögerung für den TWS klar. Ich würde den TWS ans Ende meiner Startkette setzen. ich bräuchte das nicht relativ in jeder Logik.
Im Falle eines Stromausfalls (trotz USV) wäre das vermutlich gegeben, da der TWS durch Kaltstart seinen KNX-Stack natürlich verzögert startet. Mir geht es aber um den Busreset, den ich auslöse, um das Haus in einen sauberen Zustand zu versetzen.
Gruß
Franky