Heute war mein Rollladen in der Küche dran. Seit ewigen Zeiten wird dieser von FHEM über ein 433 MHz Funkmodul gesteuert. Das funktionierte lange Zeit gut, seit wann auch immer aber nicht mehr zuverlässig. Also mal wieder etwas neues und zwar einen

SHELLY 2PM

in das System einbinden. Ich lasse mal das "Einfache" zur

  • Einrichtung des Shelly
  • Einbinden in die Shelly-Cloud
  • Grundeinstellungen für einen Rollladen-Aktor vornehmen

hier weg denn dazu könnt ihr einfach nach den Standardbeschreibungen vorgehen.

Spannend war eigentlich nur, den Shelly auch direkt über die Datenbank HR zu steuern. Die Datenbank sendet an die Geräte (zum Beispiel an FHEM) oder auch auf den mqtt-Broker den neuen Schaltzustand. Dieser ist (leider) bisher immer numerisch, also ist für einen Rollladen nur 1 oder 0 oder zum Beispiel auch 50 (für 50%) möglich. Damit kann aber der Shelly nichts anfangen. Zum Schalten des Shelly braucht es folgenden Eintrag - hier das Beispiel mit mqtt:

/shelly63636/command/cover:0 und als topic dann zum Beispiel open oder close

"open" bzw. "close" kann die Datenbank aber leider nicht bereitstellen sondern nur Zahlenwerte, hier 0 für "Schließen" und 1 für "Öffnen".

Das "Übersetzen" ist aber denkbar einfach, weil Shelly scripts verarbeiten kann. Und so habe ich es gemacht - ganz nebenbei mit freundlicher Unterstützung von ChatGPT:

script_1 direkt auf dem Shelly einfügen und am besten gleich in der Konsole testen.


// Konfiguriere den MQTT-Topic, auf den gehört werden soll
let mqttTopic = "oxolon/d_s_o/DE_RO_AK3/jalousie_kueche";

// Funktion zum Verarbeiten von MQTT-Nachrichten
MQTT.subscribe(mqttTopic, function (topic, message) {
    print("MQTT-Nachricht erhalten:", topic, message);

    // Prüfe den Inhalt der Nachricht
    if (message === "1") {
        // Öffne die Jalousie
        Shelly.call("Cover.Open", { id: 0 }, function (res) {
            print("Jalousie geöffnet:", JSON.stringify(res));
        });
    } else if (message === "0") {
        // Schließe die Jalousie
        Shelly.call("Cover.Close", { id: 0 }, function (res) {
            print("Jalousie geschlossen:", JSON.stringify(res));
        });
    } else {
        print("Unbekannter Payload erhalten:", message);
    }
});

 

Hier die "schnell und schlecht" Lösung, die ich zunächst verwendet hatte, bevor ich das script auf dem shelly selbst angewendet habe:

Ich habe einen meiner (zahlreichen) esp8266, der mit ESPEasy läuft verwendet. Dort gibt es das Plugin mqtt-Import. Man stellt ein, auf welchen topic "gehört" werden soll und kann dann mit einer Regel für die Übersetzung, also das Senden des für den Shelly verständlichen Kommandos sorgen.

Hier mal die Rules, die auf dem esp8266 laufen

on mqtt_import_1#jalousie_kueche do

if [mqtt_import_1#jalousie_kueche] =1

   / schreibt auf den shelly 2PM um das Schalten auszulösen

   Publish oxolon/DE_RO_AK3/18/command/cover:0,open

endif

 

if [mqtt_import_1#jalousie_kueche] =0

   / schreibt auf den shelly 2PM um das Schalten auszulösen

   Publish oxolon/DE_RO_AK3/18/command/cover:0,close

endif

 

endon

Für Homebridge gibt es übrigens auch ein passendes Plugin für die Shellys. Ich habe 

Homebridge Shelly Ng

installiert. Zur Einrichtung braucht man die Shelly-ID und die IP, über die man das Shelly im WLAN erreichen kann. Mit Homebridge funktioniert es übrigens erst, nachdem man die Kalibrierung des Rollladens durchgeführt hat. Aber das macht die Shelly-App ganz einfach über das Einstellungsmenü.