NEWS
MQTT mit Shelly PRO Dimmer 2PM
-
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
}
} -
@berges01 Wäre es mit dem Shelly-adapter nicht einfacher?
-
@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.
-
@berges01 Was kann man denn seitens der Shelly-APP dort einstellen bzgl Daten über MQTT?
-
@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. -
@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 }); } } } });
-
@mcu
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: