Beiträge von SoftCreatR

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

    Ich habe mir das jetzt nochmal angesehen, vor allem die auskommentierten Teile. Ich habe mir einmal die Dokumentationen dazu angesehen:

    Demnach sollte sollte transition_duration grundsätzlich funktionieren. Aber kann es sein, dass der Shelly diese Option nicht so akzeptiert, wie Du es erwartest. Nicht jede Shelly-Version oder jedes Firmware-Update unterstützt alle Parameter wie transition_duration. Bei einigen Geräten oder Firmwares musst Du möglicherweise den Parameter anders nennen oder er wird gar nicht unterstützt. Das müsste man genauer "beleuchten".

    Und zum eigentlichen Code: Ich habe mir mal die Mühe gemacht, diesen umzuschreiben, wie ich denke, dass es funktionieren könnte. Disclaimer: Ich hab kein Shelly-Gerät und kenne mich nicht mit der Programmierung selbiger aus. Meine Aussagen berufen sich auf meine Javascript-Kenntnisse, sowie die API-Dokumentation :)

    Kurz und schmerzlos:

    Generell sollte Ampel nur ein einziges Mal definiert- und im nachfolgenden nur der Wert gesetzt werden. Denn wenn z.B. Schalter einen Zustand erreicht, der von dir nicht gehändelt wird, ist Ampel undefiniert, erst recht, weil es in deinem Switch/Case keinen Default gibt. Ist Schalter also z.B. NaN, oder größer als 5 bzw. kleiner als 0, ist Ampel zwangsläufig undefiniert.

    Also:

    JavaScript
    let Schalter = 1 * S1 + 2 * S2 + 3 * S3 + 4 * S4;
    let Ampel = 0; // Standardwert
    
    // ....
    
    Ampel = 123;
    
    // ...
    
    Ampel = 456;

    Andererseits hätte ich vermutlich noch eine Vielzahl von Optimierungen vorzuschlagen :D

    Für Schalter bitte auch Punkt vor Strich beachten :P

    Versuchs so:

    Hat das tatsächlich schon mal jemand mit den oben angegebenen Quellen funktionieren umgesetzt?

    Entweder ich bin blind, oder ein "HowTo" um ein Script von extern nachladen wird nicht aufgeführt.

    Selbst ein js ex-/import funktioniert bei mir nicht... :/

    Nach meinem Verständnis sind Script.Create, Script.PutCode und Script.Eval nicht dafür gedacht, von innerhalb eines laufenden Shelly-Skriptes zusätzlichen Code dynamisch zu laden. Sie dienen als externe Management- und Deployment-Tools über die RPC-Schnittstelle. Innerhalb eines Skriptes bleibt man meist auf den initial geladenen Code beschränkt.

    Wie an anderer Stelle bereits erwähnt, hab ich von Shelly-Scripting keine Ahnung. Aber ich hab mir die Doku gerade kurz angesehen und hätte zumindest eine Idee, die man testen könnte:

    Bsp url: url

    Das ist in der Form vollkommen legitim. Links steht der Parameter-Name, der übergeben wird und rechts der Wert dessen. Dass die Variable (für den Wert) denselben Namen hat, ist vielleicht etwas undienlich für die Lesbarkeit, aber nicht per se schlechter Programmierstil :)

    Ich kenne mich mit Shelly-Scripting nicht aus, aber das ist in erster Linie ja Vanilla-Javascript, weshalb ich behaupte, dass das Problem die angegebene Webhook-URL ist, denn eine URL darf nur ein Fragezeichen für Parameter enthalten, beim Zusammensetzen wird aber ?humidity an die angegebene Webhook-URL gehangen, was im Ergebnis eine ungültige URL erzeugt.

    Außerdem gibt es eine kleine Diskrepanz an dieser Stelle:

    JavaScript
    // Überprüfen, ob die Feuchtigkeit über 40% gestiegen ist und höher als der vorherige Wert ist
    if (humidity > 35 && humidity > lastHumidity) {
      print(`🚀 Feuchtigkeit ist über 40% gestiegen! Sende Webhook...`);
      sendWebhook(humidity);
    }

    Denn sowohl im Kommentar, als auch in der ausgegebenen Nachricht steht 40%, geprüft wird aber auf > 35%. Das ist kein Fehler, aber halt auch nicht ganz korrekt ;)

    Eine korrekte Version des Scripts könnte z.B. so aussehen:

    Um zu verhindern, dass bei kleinen, schnellen Änderungen mehrfach Webhooks gesendet werden, kannst du ein einfaches Debouncing implementieren. Hier ein Beispiel:

    Dieses Debouncing stellt sicher, dass nach dem Senden eines Webhooks eine bestimmte Zeit (z.B. 30 Sekunden) gewartet wird, bevor ein weiterer Webhook gesendet werden kann. Dies verhindert übermäßige Webhook-Aufrufe bei häufigen Feuchtigkeitsänderungen.

    Mir fehlt es als einiges. Die Frage ist, ob ich es will.

    Etwas ernüchternd, wenn man innerhalb einer Stunde alles abgeräumt hat, was geht.

    Hast du ja nicht 😊 Da die Trophäen gestern eingeführt wurden und gemäß ihrer Vergabebedingungen vergeben wurden, haben einige von euch halt binnen kürzester Zeit mehrere Trophäen erhalten.

    Moin Moin, liebe Shelly-Jünger und Smart-Home-Apostel,

    ich dachte mir, bevor ihr euch fragt, wer dieser Typ im Hintergrund ist, der hin und wieder die Forenlampe an- und ausschaltet, stelle ich mich mal vor. Also schnallt euch an, hier kommt die Enthüllung des Jahrhunderts: Mein Name ist Sascha, 36 Jahre alt, beruflich Software-Zauberer (Selbstständig und in Vollzeit), privat eine Mischung aus Superheld und Schlafentzugskünstler (dank zweier kleiner Nachwuchs-Profis in der Kategorie „Wie halte ich Papa wach“). Und ja, das Leben hat mich auch schon auf einige turbulente Achterbahnfahrten mitgenommen – ich bin seit letztem Jahr verwitwet.

    Was das Thema Smarthome angeht, habe ich mein Haus in eine halbwegs selbstständige Tech-Festung verwandelt. (Hinweis: Die Kaffeemaschine weigert sich immer noch, Kaffee zu kochen, wenn ich verschlafen „Bitte“ sage – da muss ich noch dran arbeiten.) Was Shelly angeht, muss ich zugeben: Den Namen kenne ich länger, als ich tatsächlich kapiert habe, was diese Geräte machen. Aber hey, seit mich der vorige Betreiber dieses Forums irgendwann vor gefühlt einem Jahrhundert gefragt hat, ob ich „mal kurz helfen“ könnte (Spoiler: Es wurde kein „kurz“), bin ich hier fester Bestandteil. Eine Art digitaler Hausmeister mit Server-Schlüsselbund und HTML-Schraubenzieher.

    Meine Aufgabe? Ich halte die Software am Laufen, kümmere mich um das schicke Design und sorge dafür, dass euch der Server nicht plötzlich mit einem Bluescreen grüßt. Also falls ihr mal eine geniale Idee habt, wie wir die Community noch großartiger machen können, oder ihr Fragen zur Bedienung habt – immer her damit. Ich beiße nicht, versprochen. Außer der Toaster dreht wieder durch, dann könnte ich schlecht gelaunt sein.

    In diesem Sinne: Frohes Shelly-Basteln, bleibt smart und denkt dran – die einzige dumme Frage ist die, die man nicht stellt (außer sie lautet „Warum funktioniert mein Smarthome nicht, obwohl ich es nicht eingeschaltet habe?“) :beer: