-
Autor
Ich habe hier wahrscheinlich ein Verstäntniss Problem.
Bei einem "ProDimmer2PM" möchte ich die Anmbindung an den ioBroker über Shelly-MQTT machen.
Auf dem 2PM läuft ein Scripte :
Code
// Script für den SHELLY i4 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(CONFIG.topic_prefix,"/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();
});
Alles anzeigen
Das Scripte funktioniert auch wenn ich den 2PM mittels "ioBroker MQTT" einbinde (Also über Port 1883)
Mache ich das Gleiche über den Shellyadapter-MQTT (Port 1882) so kann ich Datenpunkte nicht sehen.
Geht das gar nicht oder muss ich da am Script etwas verändern ?
mfG F.B.