NEWS
Ausfallsicherung
-
Moin, mal ne Frage an die SmartHome Freaks und Linux Spezis hier.
Und zwar geht es um eine Ausfallsicherung des SmartHomes, wenn der RasPi sich mal aufhängt, auf dem bei mir ioBroker als Master läuft.
Zugegeben, es kommt nur max. 1-2x im Jahr vor (wenn überhaupt), grundsätzlich nach Murphys Law aber dann, wenn ich nicht zu Hause bin und nicht kurz eingreifen kann und den RasPi neu durchstarte.
Wenn es passiert, kann ich mir abends von meiner Frau Vorträge anhören, weil nix ging und wie unnütz der ganze Automatisierungskram ist, obwohl sie es im Normalfall wenn alles normal läuft liebt
Meine Frage geht in 2 Richtungen:
Wie schützt ihr Euch vor Ärger mit der Regierung in solchen Fällen? Also was habt ihr so für Vorkehrungen getroffen? "Ich komme erst nach Hause wenn sie schon schläft" ist hierbei keine Option!
Die zweite Richtung ist eine Idee die ich habe, aber als Linux Laie nicht wüsste, wie ich so etwas umsetzen könnte. Dafür würde ich auf jeden Fall Hilfe benötigen.
Die Idee ist folgende:
Wenn der Master RasPi mal abstürzt, ist er auch nicht anpingbar.
Ich habe noch einen Raspberry Zero als ioBroker Slave im System.
Könnte man nicht eine Art Cronjob (unabhängig von ioBroker) auf dem Slave einrichten, der alle x-Minuten einen Ping auf die IP-Adresse des Masters macht?- Wenn dieser positiv ist, wird der Job beendet.
- Wenn der Ping negativ ist, warte nochmal 1 Minute und wiederhole den Ping. Ist dieser wieder negativ, sende einen http-request an einen Tasmota-Sonoff, der den Strom vom Master-RasPi auschaltet und dann nach 10 Sekunden einen Zweiten request, der ihn wieder einschaltet.
Damit würde der Master-RasPi dann automatisch neu gestartet werden und sollte wieder normal funktionieren.
Die Wahrscheinlichkeit, dass beide Raspberries gleichzeitig abstürzen, sodass der Crojob also nicht funktioniert halte ich für extrem unwahrscheinlich, von daher scheint mir das eine super Lösung um immer eine funktionierende Installation des SmartHomes zu erhalten.
Was haltet ihr von der Idee und kann mir jemand bei der Umsetzung helfen?
Ich habe bisher nur extrem simple Bashs geschrieben (und die eigentlich auch eher aus dem Netz zusammengeklaut und mit Copy&Paste mit kleinen eigenen Änderungen dann verwendet).Aber bitte jetzt keine Diskussion über "lieber solltest du prüfen warum der Master-RasPi abgestürzt ist" und dergleichen. Das prüfe ich dann sowieso und in der Regel waren es bisher immer Einzelfälle, keine grundlegenden Fehler. Es geht mir hier nur um eine Ausfallsicherung in der oben beschrieben Form, bei der das Problem bisher immer durch einen simplen Neustart des Systems behoben war.
Gruß und Dank im voraus aus dem Norden
-
@smartin
Hatten wir hier noch kürzlich:
Suche nach
Systemhardwareausfall -- wie am besten absichern -
@zahnheinrich said in Ausfallsicherung:
Systemhardwareausfall
OK, da geht es um ein jeweiliges 2. Backupsystem. Das möchte ich nicht, dafür sind mir die extrem wenigen Ausfälle dann auch nicht wichtig genug.
Hier geht´s ja nur um kurze Ausfälle, die mit einem Neustart behoben sind. -
-
Pack den Pi doch an eine Schaltbare Steckdose und nutzt ein script auf einem anderen System,was den Pi anpingt. Ist dieser nicht erreichbar wird die Steckdoese aus und nach ein paar Sekunden wieder eingeschlaltet.
-
@smartin
Wenn es nicht wichtig ist, dann zeige deiner Regierung die Position der SteckdoseEDIT: Ich dachte bei Ausfallsicherheit eigentlich an Redundanz und Hochverfügbarkeit.
-
@smartin
Aber mal im ernst, ist dann der ganze ioBroker weg, oder hängt sich nur eine bestimmte Instanz eines Adapters weg? Das könnte man dann auch mit einem Wachdog lösen und dem Durchstarten einer Instanz.Alternativ hast du eventuell tatsächlich irgendeinen Steckdosentypen, den du losgelöst vom ioBroker fernsteuern kannst.
-
@emil70 Das wäre zumindest die sicherste Lösung, sich das, was dann noch läuft abzuschießen und bei der Gelegenheit auch noch das Filesystem oder die ganze SD-Karte zu schrotten.
Sowas macht man nicht. Weder bei Raspi, noch Rechner und erst Recht nicht Servern einfach den Strom weg. Wenn ein Neustart nötig ist, dann sauber rebooten.
Wenn kein Zugriff mehr per SSH möglich ist, Monitor und Tastatur ran und schauen, was los ist. Wenn da auch nix mehr kommt, dann gibt es dafür einen Grund! Ein Linux-Rechner (und dazu gehört auch ein Raspi) schmiert nicht einfach so ab. Dann steht was in den Logs, dann geht man das an. Möglicherweise kommt der Fehler ja auch von früheren Aktionen, bei denen man einfach den Strom abgedreht hat. Deshalb gehört vor sowas eine kleine USV, die Stromausfälle abfängt und dann sauber beendet.@Smartin : Wenn sich Dein Raspi immer wieder rettungslos aufhängt, dann geh das an. Schau, warum das so ist. Eventuell zu schwaches Netzteil. Sterbende SD-Karte. Falls SSD, die versehentlich an USB3 (soll man beim Raspi 4 nicht!). Irgendwelche Scripte in iobroker die falsch mit Timeouts/Intervallen laufen und sich hochschaukeln. iobroker nicht korrekt installiert (Node + Nodejs).
Meine Geräte laufen Monate durch und werden nur zu Servicezwecken oder für Updates sauber neu gestartet. Da schmiert nix einfach so an. Geh das an. Setz zur Not alles sauber neu auf und spiel ein Update ein, dann hast Du ein sauberes Grundgerüst.
Wenn es Meldungen im Log gibt, die auf ein Problem hinweisen, dann schreib es hier im Forum, da wird Dir sicher geholfen.Gruss, Jürgen
-
@armilar
Ich hatte das in 3 Jahren bisher 3x, sonst läuft meine Installation wirklich geschmeidig.
Einmal hatte sich tatsächlich nur der admin.0 Adapter weggehängt, 2x hat es den ganzen Raspi gerissen. Keine Einträge mehr im syslog bis zum Neustart. Beide Male habe ich anhand der Logs und den Vorgängen vorher nicht herausgefunden woran es lag, habe aber auch nachdem es danach wieder rund und ausdauernd lief nicht mehr viel nachgeforscht.
Meiner Frau den Stecker zeigen ist übrigens die schlechteste alle MöglichkeitenWenn irgendetwas ihrer Meinung nach dann nicht funktioniert, zerrt sie schon am Stecker bzw. drückt sie schon den Schalter
Nee nee ... lieber nicht.
Automatisiert wäre mir da wohler ...@emil70
Der Pi hängt an einer schaltbaren Steckdose (Sonoff). Ich habe als "anderes System" nur den RasPi Zero der als ioBroker Slave läuft. Wie könnte ich denn da ein solches script laufen lassen?
Mit einer 2. Instanz vom js-Adapter? Läuft das denn nicht auch über den Master, der ja dann nicht erreichbar ist?@Wildbill
Das System läuft stabil, da ist nix zu fixen. Wie schon erwähnt, es soll nur eine schnelle Hilfe sein, falls doch mal was unrund läuft. Und bisher hatte ein Neustart (wenn eben auch einer der harten Sorte) ausgereicht um wieder alles am laufen zu haben.
Wenn dadurch mein System mal komplett abkac.en sollte, die SD abraucht oder sonstwie, wird das System mit Backups eben wieder schnell neu aufgesetzt. Sicher, es soll laufen (tut es ja auch stabil), aber wenn, dann hat bei mir zumindest ein kurzer Stromreset noch nie geschadet. Sollte es mal anders kommen .... Cést la vie und schnell behoben. Trotzdem hast du natürlich völlig Recht, ich schaue mir auch jeden Ausfall genau an und sollten dort Probleme auftauchen werde ich die natürlich primär lösen. -
@smartin
na 3x in 3 Jahren. Ziehen wir mal den admin.0 ab.Dann gibt es alle 1,5 Jahre mal gemecker... Da würde ich auch nicht viel investieren
Eine zweite JS-Instanz kann schon Sinn machen. Nutze die auch zum Testen, da beim kompilieren globaler TS-Skripte ein JS-Neustart ja vorprogrammiert ist. Auf einer weiteren Instanz läuft dann ein Watchdog.
function createNotification(notificationText) { sendTo("telegram", "send", {text: notificationText}); } on({id: /^system\.adapter\..+\.alive$/, change: 'ne', val: false}, function (dp) { var id = dp.id.split('.'); id = 'system.adapter.' + id[2] + '.' + id[3]; var instance = getObject(id); var ignoreList= ["dwd.0 alive", "ical.0 alive", "ical.1 alive", "knmi-weather.0 alive", "weatherunderground.0 alive", "pegelalarm.0 alive", "openweathermap.0 alive", "uv-protect.0 alive", "luftdaten.0 alive", "odl.0 alive", "daswetter.0 alive", "followthesun.0 alive", "feiertage.0 alive", "coronavirus-statistics.0 alive"]; if (!ignoreList.includes(dp.common.name) && instance.common.enabled) { createNotification(dp.common.name); console.log(dp.common.name); } });
Erzählt immer fleißig was an Instanzen Probleme hat.
-
-
Auch interessant. Ein Watchdog für Tasmotas außerhalb ioBroker.
-
Das ist klasse!
Genauso wie übrigens das Überwachungs-Script von @armilarIch bin allerdings wie gesagt nicht so wirklich ein Linux/Script-Held ...
Ich vermute in dieser Zeile würde ich den Aus/An Befehl unterbringen müssenecho "reboot" | socat - udp-sendto:192.168.178.40:6676
Richtig?
Wie müsste das aussehen, wenn der Befehlhttp://192.168.1.42/cm?cmnd=Power%20off
bzw.
http://192.168.1.42/cm?cmnd=Power%20on
lautet und dazwischen noch eine Pause von 10 Sekunden eingehalten werden soll?
-
ja das ist der Part
Du nutzt Tasmota, so wie ich die Befehle sehe. Das nutze ich leider nicht und kann da nicht sagen, wie da der Befehl über Konsole lautet. http geht so auf jeden Fall nicht
Vielleicht geht bei Tasmota ssh
ssh IP vom Sonoff -p 22 -l "reboot"
-
-
@emil70 sagte in Ausfallsicherung:
Pack den Pi doch an eine Schaltbare Steckdose und nutzt ein script auf einem anderen System,was den Pi anpingt. Ist dieser nicht erreichbar wird die Steckdoese aus und nach ein paar Sekunden wieder eingeschlaltet.
Das wären dann ja doch wieder zwei Geräte.
Außerdem müsste man jetzt genau wissen was unter Ausfall zu verstehen ist.
Auch ich@armilar sagte in Ausfallsicherung:
dachte bei Ausfallsicherheit eigentlich an Redundanz und Hochverfügbarkeit.
und wenn es nur um
@smartin sagte in Ausfallsicherung:
einem Neustart
geht wäre
@emil70 sagte in Ausfallsicherung:
eine Schaltbare Steckdose
so ziemlich das Teil was man nicht als erste Wahl nehmen sollte.
Die Folgen von "reboot" durch Stecker raus sollten ja inzwischen hinlänglich bekannt sein.EDIT:
Wo kommen denn jetzt auf einmal die ganzen Posts her?
Da war gerade nix!also vergesst meinen Post, ist ja nix neues
-
Teste mal
curl -s http://192.168.1.42/cm?cmnd=Power%20off
curl -s http://192.168.1.42/cm?cmnd=Power%20off
curl muss installiert sein
geht bei mir auf jede Fall mit der von mir verwendetet Software
-
oder so
var ip = '55'; //letzte Zahl der IP require("request")((['http://192.168.1.',('' + ip),'/cm?cmnd=cmnd=Power%20off'].join(''))).on("error", function (e)
-
Übrigens wenn du deinen Rechner kontrolliert rebooten lassen willst, geht das auch:
createState('0_userdata.0.Reboot.t2c_System.LinuxRestart_command', ''); on({id: '0_userdata.0.Reboot.t2c_System.LinuxRestart_command', change: 'any'}, function (obj) { if (obj.newState.val === true || obj.newState.val === 'true'){ log('Command stop'); setState('0_userdata.0.Reboot.t2c_System.LinuxRestart_command', 'false'); exec ('sudo reboot'); } });
In den angelegten DP true zum Zeitpunkt deiner Wahl schreiben... und exec im JS-Adapter zulassen.
Dann startet dein ioBroker durch.
EDIT:
Ich denke an so etwas hat @Homoran bestimmt gedacht, als er die Steckdose als Power on/off sah -
@armilar aber wenn der iob hängt, geht ja nichts mehr.