Unattended restart -- Korrektes Verhalten nach Absturz

Begonnen von roli, 03 Dezember 2017, 17:24:22

Vorheriges Thema - Nächstes Thema

roli


HAllo ,
ich denke noch mehr Leute verwenden den RASPI/FHEM um gewisse Dinge im HAus zu steuern.

Ich selbst fokusiere mich momentan auf :

1)  Integration eine  vorhandenen Alarmanlage + Cam  -- Steuerung EIN/Ausschaltung und MAil alarme
2)  Ladesteuerung von Elektrospeicherheizungen  --  Zusammenspiel mit PV Batterie
3)  Laden von 300l Wasserspeicher nach best. Kriterien

soweit  steht 2) und 3 ),  und ich habe auch alles so  installiert, dass  es einen  vorhanden Fallback gibt, wenn man der RASPI aus welchem Grund auch
immer  abraucht/abstürzt und FHEM nicht mehr starten würde und die Steuerung übernehmen kann.
Wasserspeicher wird dann als default über Netzbetreiber Signal geladen  und  die Öfen über alte noch vorhandene Theben Steuerung.

Für die Steuerung, wir einiges im  meinem PERL  modul gesteuert und auch während des laufs in globalen variablen gehalten.   Falls  FHEM jedoch aus welchem Grund auch immer unterbrochen wird, sind die Werte natürlich weg und müssen nach dem Start erst mal wieder  ermittelt und berechnet werden.
Für FHEM devices  sichere ich jede Minute  das statefile ( WriteStatefile() ) ---   Nach dem start von FHEM  -- und dem  erfolgreichen laden der Werte aus dem
Statefile  -- sollte ich jetzt  noch eigene Initialisierungen machen.

Dies geht  jedoch  nicht  in der  init routine  myUtils_Initialize($$)  --  sie wird gleich zu Beginn aufgerufen.   Auch  nicht  in fhem.cfg  ,  da erst  nach Abschluss des ladens   natu
ürlich die  states aus dem statefile geladen werden  --- 

Super wäre hier sicher einen  EVENT  zu bekommen, wenn das  Statefile  geladen wurde um dann danach selbst seine Aktionen durchzuführen.
Oder gibt es andere Events, welch man verwenden kann   -- keine Ahnung  wann das Event  "global Initialized " -- abgesetzt wird ?

Kann mir  hier jemand weiterhelfen und eine Aussage machen, ohne dass ich dies selbst durch test ermitteln muß ?

Momentan habe ich als workaround einen  at nach 10s  -- ist aber nicht sehr schön


FHEM auf Debian (RASPI), 2 * CUL868/433 *  FS20 STR, 2 * HMS100 T, 2 * , 1* FS20 SU, 2 *  FS20 SM8, 2 ; 1-wire Temp,i2c Bus; ESP32 WROOM; ESP8266; Arduino
Sonnenbatterie Eco8;Elektro  Nachspeicher-Ofen Ladesteuerung,
Haus Lüftung,
Integration von HardwareAlarmanlag

herrmannj

Kannst Du bitte konkret beschreiben welches Problem Du lösen möchtest ?

Bitte inklusive eines minimalen(!) Codebeispiels um Dein Problem zu illustrieren.

roli

Dachte dies ist soweit klar. Aber oft schreibe ich viel und verliere den Fokus.

Code Beispiel ist nicht so einfach -- also nochmal grobe Erklärung.

Der Strom-Netzbetreiber schickt über ein Rundsteuergerät Signale - z.b. wann der 2-Tarifzähler auf den billigeren NT Nachttarif umschaltet. Dieser ist dazu gedacht um die Elekroöfen zu laden, welche viel Strom brauchen.  Garantiert werden pro Tag/Nacht genau 8h ( 480 Min ) Nachttarif.  --> Aber wann und in wievielen Blöcken, steht dem Netzbetreiber frei. Über ein Relais, erkennne ich, ob ich im NT Tarifmode bin oder nicht.
Das jeweilige  AN/Abschalten des  NT Tarifs schreibe ich in ein Logfile.  Die LAdedauer erreichnet meine FHEM Lösung anhand der Außentemp und sonstigen Parametern.  Sprich wenn ich 100min LAdedauer errechne, lade ich immer erst am Ende der NT Dauer - sprich ichlasse erst mal 380min
vertreichen und lade nur die letzen 100 min um am Morgen voll geladene Öfen zu haben. 
Sollte also irgend etwas passieren oder ich auch manuell FHEM gestopped haben und in der NT Phase wieder starten, so muß  ich das
Logfile lesen und errechnen, wie lande das NT Signal bereits an war --- dies  dann in PERL zu Begin von FHEH

Vielleicht erklären mein Screen copies den Rest.

Es geht nur so, dass ich jede Minute eine Perl Funktion aufrufe, welche die Minuten Timer aktualisieren usw.  Kann ja keine regel  At ...  erzeugen, da nicht klar ist,
wielange ein NT Signal da ist und wann es wieder kommt.

Deshalb -- nach Start von FHEM  und  einlesen  von Statefile, sollte meine Routine, welche die Zeiten aus dem Logfile liest und berechnet  aufgerufen werden  ---
gibt es ein Event  welches verlässlich nach laden von Statefile verwendet werden kann ?  die NT Dauer welche angezeigt wird ist ja von dort nicht korrekt -- je nachdem wielange die  Unerbrechung von FHEm war !



FHEM auf Debian (RASPI), 2 * CUL868/433 *  FS20 STR, 2 * HMS100 T, 2 * , 1* FS20 SU, 2 *  FS20 SM8, 2 ; 1-wire Temp,i2c Bus; ESP32 WROOM; ESP8266; Arduino
Sonnenbatterie Eco8;Elektro  Nachspeicher-Ofen Ladesteuerung,
Haus Lüftung,
Integration von HardwareAlarmanlag

herrmannj

global initialized wird generiert nachdem die fhem.cfg und das statefile eingelesen ist.

roli

FHEM auf Debian (RASPI), 2 * CUL868/433 *  FS20 STR, 2 * HMS100 T, 2 * , 1* FS20 SU, 2 *  FS20 SM8, 2 ; 1-wire Temp,i2c Bus; ESP32 WROOM; ESP8266; Arduino
Sonnenbatterie Eco8;Elektro  Nachspeicher-Ofen Ladesteuerung,
Haus Lüftung,
Integration von HardwareAlarmanlag