Scriptvorlage Router-Watchdog, ein Problem

  • Zum Zwecke des Einsatz eines ShellyPlusPlugS um eben diesen Watchdog einzusetzen, habe ich es probiert mit einem ShellyPlus1, es funktioniert nicht vollständig.

    Hier mal die Vorlage

    // Copyright 2021 Allterco Robotics EOOD

    //

    // Licensed under the Apache License, Version 2.0 (the "License");

    // you may not use this file except in compliance with the License.

    // You may obtain a copy of the License at

    //

    // http://www.apache.org/licenses/LICENSE-2.0

    //

    // Unless required by applicable law or agreed to in writing, software

    // distributed under the License is distributed on an "AS IS" BASIS,

    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

    // See the License for the specific language governing permissions and

    // limitations under the License.

    //

    // Shelly is a Trademark of Allterco Robotics

    // Shelly Script example: Router Watchdog

    //

    // This script tries to execute HTTP GET requests within a set time, against a set of endpoints

    // After certain number of failures the script sets the Switch off and after some time

    // turns it back on

    let CONFIG = {

    endpoints: [

    "https://global.gcping.com/ping",

    "https://us-central1-5tkroniexa-uc.a.run.app/ping",

    ],

    //number of failures that trigger the reset

    numberOfFails: 3,

    //time in seconds after which the http request is considered failed

    httpTimeout: 10,

    //time in seconds for the relay to be off

    toggleTime: 30,

    //time in seconds to retry a "ping"

    pingTime: 60,

    };

    let endpointIdx = 0;

    let failCounter = 0;

    let pingTimer = null;

    function pingEndpoints() {

    Shelly.call(

    "http.get",

    { url: CONFIG.endpoints[endpointIdx], timeout: CONFIG.httpTimeout },

    function (response, error_code, error_message) {

    //http timeout, magic number, not yet documented

    if (error_code === -114) {

    print("Failed to fetch ", CONFIG.endpoints[endpointIdx]);

    failCounter++;

    print("Rotating through endpoints");

    endpointIdx++;

    endpointIdx = endpointIdx % CONFIG.endpoints.length;

    } else {

    failCounter = 0;

    }

    if (failCounter >= CONFIG.numberOfFails) {

    print("Too many fails, resetting...");

    failCounter = 0;

    Timer.clear(pingTimer);

    //set the output with toggling back

    Shelly.call(

    "Switch.Set",

    { id: 0, on: true, toggle_after: CONFIG.toggleTime },

    function () {}

    );

    return;

    }

    }

    );

    }

    print("Start watchdog timer");

    pingTimer = Timer.set(CONFIG.pingTime * 1000, true, pingEndpoints);

    Shelly.addEventHandler(function (event) {

    //timeout has expired and we have turned back power

    if (

    event.name === "switch" &&

    event.info.source === "timer" &&

    event.info.output === false

    ) {

    print("Start watchdog timer");

    pingTimer = Timer.set(CONFIG.pingTime * 1000, true, pingEndpoints);

    }

    });


    Hier mal das Debug Logfile

    Start watchdog timer 19:07:37

    Failed to fetch https://gloal.gcping.com/ping 19:08:38

    Rotating through endpoints 19:08:38

    Failed to fetch https://gloal.gcping.com/ping 19:09:38

    Rotating through endpoints 19:09:38

    Failed to fetch https://gloal.gcping.com/ping 19:10:38

    Rotating through endpoints 19:10:38

    Too many fails, resetting... 19:10:38

    Zum Testen habe ich die aufzurufenden URL abgeändert um eben keine Verbindung zu erhalten, also den Ausfall zu simulieren. den Shelly im Router gesperrt

    Das Wiedereinschalten erfolgt aber nicht, ein Router bliebe Aus!

    Wie funktioniert das Script und wo liegt das Problem.

  • Mit false schaltet das Relais zumindest wieder Ein, aber danach sollte der Zyklus der Überwachung doch wieder von vorn beginnen, also eine Programmschleife bilden, tut es aber nicht.

    Meine Prüfbedingung ist folgende:

    ShellyPlus1 (Badezimmerlicht) im Fritzboxrouter zum Internet hin gesperrt/blockiert.

    Das Script unverändert eingespielt, den oben genannten Eintrag true auf false geändert, Debugmodus Ein, Start gedrückt und gewartet.

    Log wie oben, es wird die Verbindungstörung erkannt, das Badezimmerlich Aus gestellt, ca 30s gewartet und Licht geht wieder an. Das Log bleibt dann auch nach 10 Minuten unverändert.

    Irgentwie läuft die Schleife nicht, oder das Script stoppt.

  • Keine Änderung, das Script stoppt und prüft nicht mehr weiter. Vielleicht kann Seven of Nine mal drüberschauen, (sorry fürs reinziehen :saint: )

  • Dieses Thema enthält 7 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.