Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. MQTT mit Shelly PRO Dimmer 2PM

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    MQTT mit Shelly PRO Dimmer 2PM

    This topic has been deleted. Only users with topic management privileges can see it.
    • Berges01
      Berges01 last edited by Berges01

      Wenn ich meinen Dimmer mittels MQTT einbinde, so weis ich nicht wie ich den per MQTT steuern soll.
      Mit dem hier habe ich es schon auf allen möglichen Datenpunkten versuch !
      {
      "id": 0,
      "brightness": 100,
      "turn": "on"
      }
      Das hatte auch beim Dimmer2 funktioniert, nur fehlen hier bei dem "PRO Dimmer 2PM" scheinbar einige Datenpunkte.
      Eine Dokumentation für genau das Relais habe ich auch nicht gefunden.
      Beispiele leider auch nicht.

      PS:
      Auch das bei dem Datenpunkt"rpc" brachte keinen Erfolg.
      {
      "method": "Light.Set",
      "params": {
      "id": 0,
      "brightness": 100,
      "on": true
      }
      }

      M 1 Reply Last reply Reply Quote 0
      • M
        MCU @Berges01 last edited by

        @berges01 Wäre es mit dem Shelly-adapter nicht einfacher?

        Berges01 1 Reply Last reply Reply Quote 0
        • Berges01
          Berges01 @MCU last edited by

          @mcu
          Tja das hatte ich mir auch so gedacht.
          Aber auf dem 2PM läuft ein Script das Topcs erzeugt und das geht nicht mit dem Shelly-MQTT der lässt keine eigenen Topics zu.
          Somit muss ich auf dem MQTT ausweichen und rumbasteln.

          Hier das Script :

          // Script für den SHELLY Pro Dimmer 2PM Taster-Anschluss
          // Tastendruck SW1-SW4 auswerten 0-2 und diese dem MQTT übergeben
          // Zählerbeeinflussung vom MQTT den Tastenzählern zuweisen
          // --------------------------------------------------------------
          //Variabeln deffinieren
          
          let CONFIG = {
            device_id: "",
            device_mac: "",
            device_model: "",
            fw_ver: "",
            topic_prefix: "",
            wifi_ip: "",
          };
          
          let Taste = [0,0,0,0]; //Tate SW1 - SW4
          let T_Name = ["Nr:1","Nr:2","Nr:3","Nr:4"]; //Name der Taste im MQTT
          
          function isConfigReady() {
            for (let key in CONFIG) {
              if (CONFIG[key] === "") return false;
            }
            return true;
          }
          
          Shelly.call("Shelly.GetDeviceInfo", null, function (info) {
            CONFIG.device_id = info.id;
            CONFIG.device_mac = info.mac;
            CONFIG.device_model = info.model;
            CONFIG.fw_ver = info.fw_id;
          });
          
          //Read ip from status
          Shelly.call("WiFi.GetStatus", null, function (status) {
            if (status.status === "got ip") {
              CONFIG.wifi_ip = status.sta_ip;
            }
          });
          
          //Monitor ip changes
          Shelly.addStatusHandler(function (status) {
            if (status.component === "wifi" && status.delta.status === "got ip") {
              CONFIG.wifi_ip = status.delta.sta_ip;
            }
          });
          
          //Read mqtt topic prefix
          Shelly.call("MQTT.GetConfig", null, function (config) {
            CONFIG.topic_prefix = config.topic_prefix;
          });
          
          
          // Eingänge abfragen und Tastendruck von 0 - 2 zählen
          Shelly.addEventHandler
          (
            function (event)
            // Event aktivieren
            {
              if(event.name==="input" && event.info.state === true)
              {
                let id = event.info.id; //id = Welcher Eingang
                if (id > -1 && id < 4) //SW1 - SW3
                {
                  Taste[id] = Taste[id] + 1;
                  if (Taste[id] === 3)
                  {
                    Taste[id] = 0;
                  }
                  //print(deviceInfo.id,"/Taste/",T_Name[id],JSON.stringify(Taste[id]));
                  MQTT.publish(CONFIG.topic_prefix + "/Taste/"+T_Name[id], JSON.stringify(Taste[id]));
                }
              }
            }
          )
          
          // Announcen die MQTT ankommen bearbeiten
          function announceHandler(topic, message) 
          {
          let kanal = 0;
            print("topic = ",topic,"   message = ",message);
            kanal = JSON.parse(topic.slice(topic.length - 1,topic.length)) -1; 
            if (message !== "0" && message !== "1" && message !== "2") return;
            Taste[kanal] = JSON.parse(message);
            MQTT.publish(CONFIG.topic_prefix + "/Taste/"+T_Name[kanal], message);
          }
          
          // Announcen im MQTT anmelden
          function subscribeToTopics() 
          {
            MQTT.subscribe(CONFIG.topic_prefix  + "/Taste/command_Nr_1", announceHandler);
            MQTT.subscribe(CONFIG.topic_prefix  + "/Taste/command_Nr_2", announceHandler);
            MQTT.subscribe(CONFIG.topic_prefix  + "/Taste/command_Nr_3", announceHandler);
            MQTT.subscribe(CONFIG.topic_prefix  + "/Taste/command_Nr_4", announceHandler);
          }
          
          
          //Start a timer that checks if all fields in CONFIG are populated
          let configReadyTimer;
          function connectToMQTT() {
            configReadyTimer = Timer.set(3000, true, function () {
              if (!isConfigReady()) return;
              if (!MQTT.isConnected()) return;
          
              subscribeToTopics();
              Timer.clear(configReadyTimer);
            });
          }
          
          connectToMQTT();
          
          MQTT.setDisconnectHandler(function () {
            connectToMQTT();
          });
          

          So meine Info.

          M 1 Reply Last reply Reply Quote 0
          • M
            MCU @Berges01 last edited by

            @berges01 Was kann man denn seitens der Shelly-APP dort einstellen bzgl Daten über MQTT?

            Berges01 1 Reply Last reply Reply Quote 0
            • Berges01
              Berges01 @MCU last edited by Berges01

              @mcu
              Ich verstehe deine Frage nicht !
              Auf dem Shelly-MQTT kann man nur das benutzen was der Shelly selber hergiebt.
              Eigene Topics kann man nicht per Script erzeugen und abfragen.
              Mein Script erzeugt 2 x 4 Topics und die Fragen Tastendrücke ab und übermitteln welche. Das ist für meine Aussenlichtsteuerung.
              1 x Taste = Licht an und nach 5min. wieder aus, noch mal Tasten Dauerlicht und ein weiterer Tastendruck schaltet das wieder aus.
              Das arbeitet mit einem Blockly im ioBroker zusammen.
              Das war nötig weil sonst die Latenszeit zu hoch ist und Tastendrücke nicht richtig vom Blockly erkannt wurden.
              Somit behalte ich die Kontrolle des Aussenlichtes (Für Einbruchalarm usw.) und nutze den Shelly zur schnellen erfassung.

              M 1 Reply Last reply Reply Quote 0
              • M
                MCU @Berges01 last edited by MCU

                @berges01 welche DPs stehen denn überhaupt in MQTT zur Verfügung?
                <device_id>/light/0/set

                Beispiel für ein Script mit dem man die Helligkeit setzen kann

                Shelly.addEventHandler(function (event, userData) {
                    if (event.name === "mqtt_in") {
                        let topic = event.topic;
                        let message = event.message;
                
                        if (topic === "home/dimmer/set") {
                            let payload = JSON.parse(message);
                            
                            if (payload.brightness !== undefined) {
                                Shelly.call("Light.Set", {
                                    id: 0,
                                    brightness: payload.brightness,
                                    on: true
                                });
                            }
                        }
                    }
                });
                
                
                Berges01 1 Reply Last reply Reply Quote 0
                • Berges01
                  Berges01 @MCU last edited by Berges01

                  @mcu
                  9086692b-bbf5-4b75-8ddb-9292fc46ad73-image.png
                  Ich glaube ich habe den Fehler,
                  Ich habe den Blau markierten "rpc" benutzt mit dem Letzten "rpc" auf dem Bild und dem inhalt kann ich steuern.

                  {
                    "method": "Light.Set",
                    "params": {
                      "id": 0,
                      "brightness": 100,
                      "on": true
                    }
                  }
                  

                  Den Letzten (Im Bild) hatte ich erst übersehen.
                  Scheint zu funktionieren.
                  Ist aber recht aufwendig damit zu steuern muss man dann über Alias anpassen (Muss ich erst mal wieder sehen wie das ging).

                  PS So sieht das aus wenn mein Script läuft:
                  a7b94841-a82a-4684-8c89-d0e0341d6aee-image.png

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate
                  FAQ Cloud / IOT
                  HowTo: Node.js-Update
                  HowTo: Backup/Restore
                  Downloads
                  BLOG

                  846
                  Online

                  31.7k
                  Users

                  79.9k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  239
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo