Jump to content

DualRelay Monoflop als PC-Watchdog?


Arnim

Recommended Posts

Hallo zusammen,

 

ich habe ein kurze Frage zum DualRelay, bzw. zur Monoflop-Funktion.

 

Ich realisiere derzeit ein Gebäudezugangssystem über TF und im Prinzip läuft so weit (im Testaufbau) alles super. Gesteuert wird alles über einen zentralen Server der über einen Master eine RS485-"Netz" aufspannt und alle Zugänge kontrolliert (RF-ID-Reader, Display, Keypad, Türöffner).

 

Mein Sorge liegt in einem "Serverabsturz" (Kernel hängt, Treiber hängen, Steuersoftware hängt, ...) um das System in so einem Fall einem Hardwarereset zu unterziehen kam mir folgender Gedanke:

 

Ich nehme mir ein DualRelay, definiere "high" (also Relay angezogen) als "Ruheposition" für den Monoflop und eine Monoflopzeit von z.B. 10 Sekunden. In der Software schalte ich das jetzt scharf und triggere aus der Software das DualRelay z.B. jede Sekunde, so dass der Monoflop nie zuschlägt. Außer eben wenn mein Trigger ausbleibt. Das Relay zieht an, löst direkt einen PC-Reset aus und fällt (weil ja ein USB-Reset kommt) sofort wieder ab. Das System startet (hoffentlich) und alles beginnt von vorne.

 

Läuft der Monoflop im Brick/Bricklet oder über den Daemon? Soll heißen: Flopt das Relay selbst dann wenn der steuerende PC tot ist?

 

Könnte das so klappen oder habe ich hier einen Denkfehler?

 

Freue mich über Feedback!

 

Link zu diesem Kommentar
Share on other sites

Bei dem Ansatz verlässt Du Dich darauf, dass der Stack neu gestartet wird, wenn der Rechner neu bootet - oder?

 

Ich habe bei meinem Desktop PC schon mal festgestellt, dass die USB-Verbindung noch Strom abgibt, wenn der Rechner ausgeschaltet wird - ich konnte problemlos noch ein Headset oder Handy laden. Das wäre bei Dir aber gerade das, was Du nicht haben willst.

 

Du kannst es recht einfach testen:

Stack an den Rechner anschließen, Dual-Relais über den Brickv "einschalten" und den Rechner per Menü neu starten. Wenn der Stack dann auch neu bootet müsste Dein Vorhaben klappen.

 

Viele Grüße

Link zu diesem Kommentar
Share on other sites

Der Gedanke ist in der Tat, das ein Reset am Rechner auch ein Reset an die USB-Ports sendet. Vermutlich ist das nicht der Fall.

 

Aber dann benutze ich eben beide Relais und definiere das zweite derart, dass es 200ms nach dem ersten Relais floppt und den Reset-Impuls wieder unterbricht.

 

Dann startet der Rechner auf jeden Fall neu und irgendwann bekommt der Stack dann auch wieder sein Init und beide Relais fallen ab... fällt jetzt zuerst das zweite Relais bekomme ich natürlich gleich noch mal nen (super kurzen) Reset. Aber dann bootet die Kiste auf jeden Fall durch.

 

Denkfehler?

 

Bleibt nach wie vor die Frage: Wo läuft der Monoflop: PC, Brick, Bricklet?

Link zu diesem Kommentar
Share on other sites

Arnim,

 

  ich bin mit nicht sicher, dass es für Deine Frage eine eindeutige Antwort gibt. Wenn ich Dich richtig verstanden habe, willst Du auf dem *selben* Rechner eine Art 'Totmann'-Schalter implementieren. Ein countdown wird gestartet, der regelmässig auf den anfangswert zurückgesetzt wird, solange das system läuft. Kann der Countdown erfolgreich durchlaufen, erfolgt der reset-zyklus. Deine Frage ist, ob der daemon immer noch läuft (und daher den countdown weiter laufen lässt), wenn sich der server aufhängt. Falls nein, würde dann der selbst-reset nicht ausgeführt werden.

 

Meine persönliche Meinung:

1. Mit grosser sicherheit wird der daemon und der server auf unterchiedlichen prozessen/threads laufen. In vielen Fällen sollte es funktionieren

 

2. Es gibt beliebig viele vorstellbare konstellationen, wo der serverprozess absäuft, aber die steuersoftware nicht. In diesem fall wird es keinen reset geben

 

3. Es wird sicher auch konstellationen geben, wo sich der kernel zentral aufhängt und nix mehr geht. auch dann kommt kein reset.

 

4. Wie behandelst du false positives? Was, wenn aufgrund unglücklicher umstände der countdown voll durchläuft, obwohl der server läuft?

 

Ich glaube, dass Du nie alle probleme ausschliessen kannst. Am sichersten aber wäre in so einem setup, wenn du zwei unabhängige rechner hast. der eine ist nur dafür da, regelmässig den serverprozess auf dem hauptrechner abzufragen und wenn kein signal kommt, den reset-vorgang auszulösen. So etwas kannst du beispielsweise mit einem Raspberry Pi umsetzen.

 

Aber eventuell habe ich alles falsch verstanden.

 

-ch

 

 

Link zu diesem Kommentar
Share on other sites

Da ich auch noch ein Dual-Relais daheim habe ...

 

Folgendes ist auf jeden Fall möglich:

  • Dual Relais bekommt einen Monoflop Impuls zum Ausschalten für 10 Sekunden (wenn es aktuell aus ist, bleibt es weitere 10 Sekunden aus)
  • wird dieser Impuls nicht innerhalb von 10 Sekunden wiederholt, schaltet das Relais eigentständig ein, das steuert das Bricklet selber
  • wenn hierüber ein Hardware-Reset des Servers gesteuert wird, sollte der Reset klappen. Einen Software gesteuerten Reboot würde ich wohl gar nicht erst versuchen

Mögliche Probleme:

  • Wenn sich der Kernel aufhängt, dann sollte der Impuls ausbleiben, weil hoffentlich die Anwendungen dann auch einfrieren, garantiert ist das aber nicht.
  • Ob beim Reset des Servers, auch die USB-Stromversorgung und damit der Stack resettet wird müsste mit der entsprechenden Hardware getestet werden.

Vielleicht hilft das nicht bei jeder Fehler-Konstellation, aber ein Ansatz ist es schon. Da sich der Aufbau nicht so schwer anhört würde ich es einfach mal ausprobieren.

Link zu diesem Kommentar
Share on other sites

Definitiv funktioniert der Monoflop auch ohne, dass der Host-PC "denkt".

 

Ich halte es halt für gefährlich einfach so den Strom zu trennen, aber da wir ja vom schlimmsten anzunehmenden Fall ausgehen (alles hängt) wäre es angebracht.

 

Allerdings würde ich zu bedenken geben, dass sich Rechner nicht einfach so aufhängen und es dafür Ursachen gibt die erforscht werden sollten. Insofern solltest du solche Dinge definitiv monitoren und falls es jemals passiert untersuchen.

 

Die Bedenken von cfranz mit den false positives würde ich auch ernst nehmen:

- Monoflop-Timeout großzügig wählen

- auf Software-Ebene den Prozess überwachen der deinen Stack steuern sollte

- Prozess bei Fehlern neustarten (und natürlich loggen/dich als Admin benachrichtigen)

 

Das Timing sollte so sein, dass falls sich nur deine Software aufhängt die Zeit reicht um:

1. zu bemerken dass deine Software hängt

2. deine Software zu killen

3. deine Software neuzustarten und (wieder durch die Software) den Monoflop wieder zu resetten

Link zu diesem Kommentar
Share on other sites

Also ich denke der Monoflop läuft auf dem Master. Die Bricklets haben ja nur den jeweiligen Sensor und einen kleinen Flash mir der passenden FW.

 

So wie ich den Armin verstanden habe, möchte er das Relais mit dem RESETPIN des Rechners verbinden - das sollte gefahrlos möglich sein. Den kompletten Strom zu trennen ist natürlich gefährlich.

Je nach Motherboard gibt es USB-Ports, die mit Strom versorgt werden und welche die nicht versorgt werden - nach dem Ausschalten. Letztere sollten bei einem Reset kurz stromlos werden. Ansonsten empfehle ich:

Beim Start eine kleine Datei anlegen, die beim regulären Herunterfahren gelöscht wird. Ist die Datei beim Start schon da, einfach ein master.reset() an den Master schicken. Das sollte mit 3 kleinen Skripten zu machen sein.

Link zu diesem Kommentar
Share on other sites

Danke für die vielen Antworten.

 

In der Tat geht es mir um den Reset-Pin am Mainboard, einen Kaltstart erachte ich nicht unbedingt als notwendig, auch wenn das natürlich sicherer wäre.

 

Natürlich sollte der Prozess der den Watchdog triggert softwareseitig über einen zweiten Prozess überwacht und wenn nötig/möglich neu gestartet werden und der Timer so gewählt werden, dass hier auch etwas Luft bleibt.

 

@Arcane: Was bezweckst Du mit den Dateien? Ob ich mit dem Brick noch sprechen kann kann ich ja leicht über eine kurzes Rückfrage (GetMonoflop) prüfen. Sollte ich hier keine Antwort bekommen kann man es mit einem Reset auf dem Brick versuchen. Oder?

Link zu diesem Kommentar
Share on other sites

@Arcane: Da es ein Windows-System ist würde ich bei Interesse einfach in die Ereignisanzeige schauen (also die Software schauen lassen), dann weiß ich, ob der Reboot Absicht war oder nicht. Ich schätze unter Linux gibt es sicher etwas ähnliches, oder?

 

Aber ich denke ich werde das die Tage mal Testen und mitteilen, ob das tut oder nicht. :-)

Link zu diesem Kommentar
Share on other sites

Logo. Jedes System führt Protokoll. Nur den jeweiligen Eintrag per Software zu fildern filtern finde ich etwas anspruchsvoller, also geschwind ne Datei zu schreiben. Hängt aber auch davon ab, wie findig der jeweilige Programmierer ist. :D

Ich bin kein Informatiker und bevorzuge da was eigenständiges. Das wäre in dem Falle auch einfacher auf andere Systeme übertragbar.

Ich teste ganz gerne meine Software am Laptop (Win7 bzw. OSX) und lasse es dann auf der DiskStation laufen. Der Zugriff auf das jeweilige Ereignisprotokoll ist da jedes mal anders.

Link zu diesem Kommentar
Share on other sites

Wenn es natürlich systemunabhängig sein soll ist es problematisch. Da ich jedoch ausschließlich Windows-Systeme einsetze (bitte nicht steinigen) und der Zugriff auf das Ereignisprotokoll aus C# ziemlich trivial ist wäre die Lösung über die Datei fast komplizierter.

 

Aber wie gesagt, mir ist nicht wichtig "warum" das System neu startet, hauptsache es startet neu.

Link zu diesem Kommentar
Share on other sites

OK ist so gerne akzeptiert. Was spricht gegen Windows? Es hat Macken (wie alle anderen Systeme auch) und ist weit verbreitet.... aber das ist ein anderes Thema.

Hast mal getestet, ob es nicht USB-Ports am Rechner gibt, die bei einem Reboot kurz abgeschaltet werden? Dann ist die Diskussion eh überflüssig, weil der Stapel dann ja automatisch zurückgesetzt wird.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...