mqtt2.template: Contributing

Begonnen von Beta-User, 15 Dezember 2018, 11:45:40

Vorheriges Thema - Nächstes Thema

hapege

Hallo,
nachdem kein Shelly Template so richtig für den Shelly 1 Mini G3 funktioniert habe ich mal eins zusammengestellt (anbei als Du darfst diesen Dateianhang nicht ansehen. .template). Es enthält mqttt (simple) und rpc.
Hoffe es taugt so :-)
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

rico5588

#256
Hallo zusammen,

hier mein Template für die Shelly Colorbulb Gen3. (Multicolor Bulb E27 Gen3)

Schönes Wochenende.
Geht nicht gibt's nicht.
NUC-I3+Proxmox, Fritzbox 7590 AX, Synology DS423+
Dimplex Wärmepumpe, Lüftungsanlage, Solarlog 1200
HM,IT,Lacross,EspEasy,Modbus,MQTT2, Freund von Shelly

rico5588

Hallo Zusammen,

hier ein Template für den Shelly Plug M Gen3
Ich nutze ein kleines Script welches mir die IP und den Status Online (true) ebenfalls in ein Reading schreibt.
Damit kann ich den readingswatcher nutzen...

// Universal Shelly Status & IP Script
const deviceId = Shelly.getDeviceInfo().id;
const onlineTopic = deviceId + "/online";
const ipTopic = deviceId + "/ip";
const intervalMs = 300000; // 5 Minuten (300.000 ms)
const qos = 1;
const retain = true;
let timer = null;

// IP-Adresse effizient ohne doppelte Aufrufe ermitteln
function getIPAddress(callback) {
  Shelly.call("Eth.GetStatus", {}, function(ethResult) {
    if (ethResult && ethResult.ip && ethResult.ip !== "0.0.0.0") {
      callback(ethResult.ip);
    } else {
      // Wenn Ethernet fehlschlägt oder 0.0.0.0 ist -> WLAN versuchen
      Shelly.call("Wifi.GetStatus", {}, function(wifiResult) {
        if (wifiResult && wifiResult.sta_ip && wifiResult.sta_ip !== "0.0.0.0") {
          callback(wifiResult.sta_ip);
        } else {
          callback("n/a");
        }
      });
    }
  });
}

// IP & Status in einem einzigen Durchlauf verarbeiten
function updateNetworkStatus() {
  getIPAddress(function(ip) {
    const isOnline = (ip !== "n/a");
    try {
      MQTT.publish(onlineTopic, isOnline ? "true" : "false", qos, retain);
      MQTT.publish(ipTopic, ip, qos, retain);
      print("Network Update -> IP:", ip, "| Status:", isOnline ? "ONLINE" : "OFFLINE");
    } catch (e) {
      print("MQTT Fehler:", e);
    }
  });
}

// Timer initialisieren
function startTimer() {
  if (timer) Timer.clear(timer);
  updateNetworkStatus();
  timer = Timer.set(intervalMs, true, updateNetworkStatus);
}

// Zusammengefasster Status-Handler (verhindert doppelte Aufrufe)
Shelly.addStatusHandler(function(status) {
  // Netzwerk-Events
  if (status.component === "eth" || status.component === "wifi") {
    print("Netzwerkänderung erkannt:", status.component);
    updateNetworkStatus();
  }
 
  // MQTT-Events
  if (status.component === "mqtt" && status.delta) {
    if (status.delta.connected === true) {
      print("MQTT verbunden -> Starte Intervall");
      startTimer();
    } else if (status.delta.connected === false) {
      print("MQTT getrennt");
      if (timer) Timer.clear(timer);
    }
  }
});

// Shutdown-Handler
Shelly.addEventHandler(function(event) {
  if (event === "SHUTDOWN") {
    MQTT.publish(onlineTopic, "false", qos, retain);
  }
});

// Initialisierung
print("=== Universal Shelly Network Script gestartet ===");
startTimer();

Gruß Rico

Geht nicht gibt's nicht.
NUC-I3+Proxmox, Fritzbox 7590 AX, Synology DS423+
Dimplex Wärmepumpe, Lüftungsanlage, Solarlog 1200
HM,IT,Lacross,EspEasy,Modbus,MQTT2, Freund von Shelly