Support-Thread Modul 36_Shelly.pm

Begonnen von Prof. Dr. Peter Henning, 03 Februar 2021, 08:03:09

Vorheriges Thema - Nächstes Thema

phantom

Zitat von: Prof. Dr. Peter Henning am 19 Oktober 2026, 19:50:12
Zitat von: phantom am 19 Oktober 2026, 11:37:14Damit funktionieren sie nicht mehr korrekt mit dem Modul
Was genau heißt das?
LG
pah
Die ShellyPro3EM's hatten im Gegensatz zu den ShellyEMmini's das automatische Update auf v2.0.1 nicht korrekt ausgeführt. Sie wurden in FHEM nicht mehr aktualisiert und deren Webinterface war sehr lahm. Ich habe sie nun mal komplett mit allen 3 Phasen von Strom getrennt (anstelle eines reboot). Danach haben die recht lange (> 3Min.) gebootet und evtl. im Hintergrund das Update nochmal durchgeführt.
Nach dieser "Übung" laufen sie wieder korrekt mit dem Shelly-Modul  :D  :D   -- ist also erledigt --
LG phantom

olwaldi

#1411
Noch eine Nachfrage zu Shelly 1 mini gen3: Ich habe via webhook automatisch actions im Shelly anlegen lassen, die sowohl in der alten als auch in der neuen Version mit (festem) csrftoken funktionieren. Aber der webhook löst immer erst 3s nach dem Klacken des Relais aus. Sollte doch eigentlich verzögerungsfrei funktionieren...

Grüßle, Michael


Nachtrag: Mittlerweile funktioniert's wie gewünscht. Ich mußte erstmal verstehen, warum das Shelly-Modul immer um 3s verzögert aufs Schalten reagiert - vermutlich weil der Status des Shelly erst 3s später abgefragt wird. Um das zu beschleunigen, habe ich alle webhooks gelöscht und 2 neue actions angelegt mit je gleicher URL:
http://192.168.178.49:8088/fhem?cmd=get%20EGLightSide%20status&fwcsrf=csrf_XXXXeinmal für "switch toggled on" bzw. off. Sobald das Relais nun schaltet, fragt fhem den status des Shelly ab - getriggert durch die neuen actions, und die Events kommen jetzt sofort.

Die actions sind notwendig, damit fhem auch dann "sofort" Events sieht, wenn man nur den physikalischen Taster des Shelly betätigt.

Noch "richtiger" wäre, wenn ich im Shelly nur auf den Taster reagieren würde, was auch möglich ist. Aber dann müßte das Modul Shelly den status selbständig SOFORT abfragen, was eben erst nach 3s erfolgt. Gibt es ein passendes Attribut, so daß der Status sofort abgefragt wird (ich habe ohne Erfolg updateDelay auf 0.1 gesetzt)?

Es gibt allerdings ein (kleines) Problem: Der Shelly setzt zwar die actions richtig ab, reagiert aber immer mit "Execution failed.", wenn man die action manuell in der Shely-GUI testet. Ich vermute, daß der Shelly einen falschen "Rückgabewert" vom Modul Shelly bekommt. Untermauert wird diese Hypothese dadurch, daß alle syntaktisch FALSCHEN fhem-Kommandos fehlerlos (aus Sicht vom Shelly) abgearbeitet werden, etwa wenn ich anstelle von status nur statu schreibe. Dann kommt im Logfile von fhem (richtigerweise) eine Fehlermeldung bzgl. statu.

olwaldi

Vielleicht noch ein Tip, um einen WLAN-Reset durch 5x Drücken des Tasters am Shelly1 auszulösen, OHNE den Strom abschalten zu müssen. Die gen3-Shellies unterstützen Skripte, und gemini hat mir dieses Shelly-Skript generiert:
let clickCount = 0;
let resetTimer = null;

// Konfiguration
const TARGET_CLICKS = 5;      // Wie oft muss gedrückt werden?
const TIME_WINDOW_MS = 3000;  // Zeitfenster in Millisekunden (3 Sekunden)

Shelly.addEventHandler(function (event) {
  // Wir lauschen auf die rohe Statusänderung "Taste runtergedrückt"
  if (event.component === "input:0" && event.info.event === "btn_down") {
   
    clickCount = clickCount + 1;
    print("Taster physisch gedrückt! Zählerstand: " + JSON.stringify(clickCount));

    // Beim ersten Klick starten wir das Zeitfenster
    if (clickCount === 1) {
      resetTimer = Timer.set(TIME_WINDOW_MS, false, function () {
        print("Zeitfenster abgelaufen. Zähler wird zurückgesetzt.");
        clickCount = 0;
      });
    }

    // Wenn die 5 Klicks innerhalb der Zeit erreicht wurden
    if (clickCount >= TARGET_CLICKS) {
      print("5 schnelle Klicks registriert! Führe Aktion aus...");
     
      // Timer vorsorglich löschen
      if (resetTimer) {
        Timer.clear(resetTimer);
      }
     
      // Zähler zurücksetzen
      clickCount = 0;
     
      Shelly.call("Shelly.FactoryReset");
    }
  }
});
Zum Testen sollte man natürlich das letzte Kommando auskommentieren.

Anlegen kann man Skripte in der Shelly-WebGUI, man muß einen Namen vergeben, das Skript speichern und starten. Das Skrpt muß man noch automatisch Starten lassen, damit es nach Stromausfall weiterhin funktioniert.

Ich hoffe, daß ich's nie brauche. Könnte aber im Notfall nützlich sein.


Grüßle, Michael