OpenHab: System reboot, Neustart OH, Neustart einzelner Bindings von der Benutzeroberfläche aus

  • Warum nutzt Du für Fernzugriff kein VPN? Dann kanst Du auf dem Rechner alles machen.

    Wenn OH in einem container läuft kann man den entsprechenden Container über eine Oberfläche wie z.B. Portainer komplett neu starten. Das geht auch vom Tablet oder Handy.

    Das livisi binding ist nach meiner Erfahrung super stabil. Viel besser als das Innogy binding weil ohne cloud.

    Moin,


    Ich kann nur für mich sprechen und da ergibt sich folgendes:


    Situation: ich unterwegs, OH Cloud erreicht meinen Server (Pi) nicht.


    Bisher:

    - VPN vorhanden Docker eher nicht

    - SSH vom Handy eher mühsam

    - reboot über die Rasp Controller app via VPN (dort könnte man auch alle möglichen anderen Commands hinterlegen..)


    Mit den Möglichkeiten aus diesem Fred:

    VPN auf, OH App lokal auf, Switch an, OH zu, VPN zu fertig. Abwarten... (Ich bekomme eine Nachricht, wenn OH Start abgeschlossen)


    Ist für mich tatsächlich einfacher als über die Rasp Controller app.


    LG Manuel


    PS: ich hab zwar "nur" 600km aber auch die fährst Du nicht Mal eben 😉

  • Moin,

    Ralph womit hast Du das umgesetzt bzw. was verwendest Du als Trigger bzw. Was genau überwachst Du? Magst du den Code preisgeben?


    LG Manuel

    Aber klar :)


    Mein WatchDog sieht so aus:


    Items:

    String   OpenHABCloud_WatchDog        "OpenHAB-Cloud WatchDog"


    Rule:


    rule "OpenHABCloud WatchDog"

    when
        Time cron "20 0/15 * * * ?" // Alle 15 Minuten (auf die 20er Sekunde)
    then
        //Dem WatchDog-Item wird ein Zufallswert zugewiesen
    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Start")
        var rnd = (Math.random() +1).toString
        OpenHABCloud_WatchDog.postUpdate(rnd)
    Thread::sleep(3000)
       
        //Jetzt wird der eben gesetzte Wert über die Cloud abgerufen
        val headers = newHashMap("Authorization" -> "Basic xxxxxxx")
        var response = sendHttpGetRequest('https://myopenhab.org/rest/items/OpenHABCloud_WatchDog/state', headers, 3000);
       
        if (response == rnd)
    {
    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Der Wert ist korrekt - alles in Ordnung")
    }
        else
    {
    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Der Wert ist falsch korrekt - Verbindung wird zurückgesetzt")
            val mailActions = getActions("mail","mail:smtp:srv1")
            mailActions.sendMail("egal-wer@egal-wo.de", "OpenHAB-Cloud", "Achtung: Der WatchDog hat einen Fehler gemeldet. Binding wird neu gestartet.")

    Binding_Restart_OpenHABCloud.sendCommand(ON)


    }
    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Ende")

    end


    Erklärung:

    Die Rule setzt in regelmäßigen Abständen ein String-Item auf einen Zufallswert.

    Dann wird kurz gewartet und geprüft, ob dieser Wert in der OpenHABCloud angekommen ist. Dazu wird dieser (zwingend) über die REST-API der Cloud-Instanz abgerufen. Wenn der Wert mit dem lokalen Wert übereinstimmt, dann ist alles gut, wenn nicht, dann wird das OpenHABCloud-Binding neu gestartet.....(das ist eine andere Rule)


    Damit der Aufruf über die REST-API funktioniert müssen die Anmelde-Header entsprechend BASE64-codiert übergeben werden....dafür gibt es jede Menge Online-Generatoren....(z. B hier)


    Gruß Ralph

  • Die Rule setzt in regelmäßigen Abständen ein String-Item auf einen Zufallswert.

    Dann wird kurz gewartet und geprüft, ob dieser Wert in der OpenHABCloud angekommen ist. Dazu wird dieser (zwingend) über die REST-API der Cloud-Instanz abgerufen. Wenn der Wert mit dem lokalen Wert übereinstimmt, dann ist alles gut, wenn nicht, dann wird das OpenHABCloud-Binding neu gestartet.....(das ist eine andere Rule)

    Clever und besser als meine Lösung. Ich verwende eine extern gehostete DB für die Persistenz und prüfe über die Persistenzdienste, ob der Wert ankam.

    Dies hat aber den Nachteil, dass ich nicht mitbekomme, ob nur die myopenHAB-Anbindung abgeschmiert ist, oder die Internetverbindung an sich.


    Ich werde Deine Lösung zur Prüfung der myopenHAB-Anbindung prüfen und einen Ping auf Google und Bing zum Test der Internetverbindung.


    Danke fürs Teilen.

  • Vielen Dank Ralph ,


    Hatte schon befürchtet, dass es nur so zuverlässig geht, weil mit Log Reader funzt es nur begrenzt. Hab schon mehrfach gehabt, dass nicht erreichbar aber im Log alles ok... D.h. die pi-seite bekommt gar nicht wirklich mit, dass sie nicht erreichbar ist. Mit diesem "Lebensmerker" ist das dann sicher...


    Na dann bastel ich das Mal in der UI😉... Wenn ich Zeit finde🙈


    LG Manuel

  • val headers = newHashMap("Authorization" -> "Basic xxxxxxx")
    var response = sendHttpGetRequest('https://myopenhab.org/rest/items/OpenHABCloud_WatchDog/state', headers, 3000);

    Ich habe das mal so umgesetzt. Die Abfrage habe ich allerdings in ein try{}catch{} gesetzt, damit im Fehlerfall das Item auch auf false gesetzt werden kann.

    Das Thread::sleep(3000) kann man eigentlich weglassen, da die Cloud ja nicht gespiegelt ist und entsprechend Zeit bräuchte, sondern die Anfrage nur auf deine OH-Instanz leitet - bei mir klappt es jedenfalls ohne. Dieser "Sleeps" sollte man nach Möglichkeit vermeiden und besser mit Timern arbeiten.

  • Manchmal denkt man einfach zu kompliziert und versucht die Abhängigkeit des Status in die Abhängigkeitsregel zu setzen.

    Mein PowerOff Schalter funktioniert jetzt mit einem einzigen Befehl in der DSL-Rule:


    Danke für den Denkanstoß :)

  • Ralph erstmal Danke für Deinen CloudWatcher

    Ich habe ein kleines Problem mit Deiner Regel.

    Bei mir springt die Regel immer in den Else Zweig und startet den Cloud-Service jede 15 Minuten neu. obwohl die Werte gleich sind.

    Ich habe über die UI eine Rule erstellt die folgendermaßen aussieht:


    When: Cron der alle 20 Sek nach vollen 15 Minuten ausgeführt wird.
    Then: Von Dir übernommenes Skript in einer DSL-Rule


    //Dem WatchDog-Item wird ein Zufallswert zugewiesen

    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Start")

    var rnd = (Math.random() +1).toString //Zufallswert generiert

    OpenHABCloud_WatchDog.postUpdate(rnd) //Zufallswert der Variable rnd an OpenHABCloud_WatchDog übergeben

    Thread::sleep(20000) //Damit ich als langsamer Mensch auch das Update zwischen Pi und Cloud nachvollziehen kann, habe ich die Zeitverzögerung auf 20 Sekunden hoch geschraubt. Ergebnis: Werte sind gleich zw. lokal und Cloud im browser!
    Bis hierher funktioniert es problemlos


    //Jetzt wird der eben gesetzte Wert über die Cloud abgerufen

    val headers = newHashMap("Authorization" -> "Basic xxxxxxx") //was passiert hier? token für Cloudzugriff genutzt?

    var response = sendHttpGetRequest('https://myopenhab.org/rest/items/OpenHABCloud_WatchDog/state', headers, 3000); //aus der cloud wird der Zufallswert aus OpenHABCloud_WatchDog ausgelesen und in der Variable "response" vorgehalten


    if (response == rnd) //wird immer als Falsch interpretiert und springt in den Else Zweig ggf. könntest Du einmal aushelfen und den Wert der beiden Variablen "response" und "rnd" im Log anzeigen.

    {

    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Der Wert ist korrekt - alles in Ordnung")

    }

    else

    {

    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Der Wert ist falsch - Verbindung wird zurückgesetzt")

    SchalterCloudOff.sendCommand(ON) //Meinen eigenen Schalter mit die Restart des CloudConnectors

    }

    logInfo( "OpenHABCloud", "OpenHAB-Cloud WatchDog: Ende")

    Hier das zugehörige bisschen Log:

  • Wow - bitte beachte, dass Du damit ggf. für 20 Sekunden dein OpenHab lahmlegst. Verwende besser die Timer: Configuration > Actions > Timers

    Das habe ich nur so hoch gesetzt um im Browser zu prüfen ob cloud und lokale synchron sind bevor der Vergleich stattfindet.
    Ursprünglich und auch in der Anwendung sind es dann 3 Sek.

    Aber das eigentliche Problem ist, dass der Vergleich nicht funktioniert.

  • So,

    bin jetzt einen Schritt weiter:


    Code
    2023-01-18 15:56:36.697 [INFO ] [enhab.core.model.script.OpenHABCloud] - rnd1.3781522681800498
    
    2023-01-18 15:56:36.699 [INFO ] [enhab.core.model.script.OpenHABCloud] - responseBad Request

    Bei der Abfrage des Cloud-Wertes bekomme ich einen Bad Request zurück.

    Bedeutet, dieser Befehl wird nicht korrekt ausgeführt:
    var response = sendHttpGetRequest('https://myopenhab.org/rest/items/OpenHABCloud_WatchDog/state', headers, 3000);

    Hat jemand ggf. eine Idee warum?

  • Hast Du mal im Browser getestet, ob die URL funktioniert? https://myopenhab.org/rest/items/OpenHABCloud_WatchDog/state


    Verwendest Du OH 3.x oder noch 2.5?

    Browser zeigt mir in dem Fall eine leere weiße OH Seite, jedenfalls keinen Fehler. In der UI im Browser ist der String gefüllt.

    Ich bin mit OH 3.4.1 unterwegs.

    Ohne das /Stade erhalte ich folgende Rückmeldung:


    Code
    {"link":"https://myopenhab.org/rest/items/OpenHABCloud_WatchDog","state":"1.1565878241437821","editable":true,"type":"String","name":"OpenHABCloud_WatchDog","label":"OpenHAB-Cloud WatchDog","category":"text","tags":["Screen"],"groupNames":["Haus"]}

    Das sagt mir eigentlich, dass der Wert "state" nicht zurückgegeben wird obwohl ich ihn direkt anfrage.
    Mit der URL oben hätte ich eigentlich den Wert 1.1565878241437821 erwartet

  • Das sagt mir eigentlich, dass der Wert "state" nicht zurückgegeben wird obwohl ich ihn direkt anfrage.
    Mit der URL oben hätte ich eigentlich den Wert 1.1565878241437821 erwartet

    Richtig, es sollte bei /state auch der Wert des Items zurückgegeben werden. Irgendwas ist in Deiner URL also falsch... wäre jetzt meine erste Vermutung.

  • Richtig, es sollte bei /state auch der Wert des Items zurückgegeben werden. Irgendwas ist in Deiner URL also falsch... wäre jetzt meine erste Vermutung.

    Was mich dann aber auch vermuten lässt, dass es bei Ralph auch nicht funktionieren kann.
    Aber wie bekomme ich nun nur den state Wert...

    Die URL passt ja soweit. wenn ich state hinten lösche bekomme ich das komplette item angezeigt.

  • ok... klingt seltsam. Bei https://myopenhab.org/rest/items/OpenHABCloud_WatchDog/state kommt also nichts?... so gar nichts?

    https://myopenhab.org/rest/items/OpenHABCloud_WatchDog/state

    https://myopenhab.org/rest/items/OpenHABCloud_WatchDog

    Ergebnis mit und ohne state.

    Im Debug Modus des Browser erhalte ich auch keine Fehlermeldung oder ähnliches. Es wird einfach "nichts" geliefert. Oder besser gesagt, es kommt NULL zurück.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!