Nach langem herumprobieren habe ich mich entschlossen ein script zu nutzen welches den Onlinestatus regelmäßig sendet.
Die Lösung anbei. (Danke an claude.ai)
Code
// Shelly Pro 2 Online-Status Script - Sendet alle 10 Sekunden ein Online-Signal an FHEM via MQTT
// Dieses Script verwendet die bereits vorhandene MQTT-Verbindung
let intervalId = null;
let deviceId = Shelly.getDeviceInfo().id;
// Verwende beide Topic-Formate zur Sicherheit
let onlineTopic1 = "shellypro2-" + deviceId + "/online"; // Format: shellypro2-a0dd6c9effb0/online
let onlineTopic2 = "shellies/shellypro2-" + deviceId + "/online"; // Format: shellies/shellypro2-a0dd6c9effb0/online
// Funktion zum Senden des Online-Status über MQTT
function publishOnlineStatus() {
// Sende "true" als Online-Status an beide Topics
MQTT.publish(onlineTopic1, "true", 1, true); // Mit retained-Flag
MQTT.publish(onlineTopic2, "true", 1, true); // Mit retained-Flag
console.log("Online-Status veröffentlicht unter " + onlineTopic1 + " und " + onlineTopic2);
}
// Starte den Status-Timer
function startStatusTimer() {
if (intervalId !== null) {
Timer.clear(intervalId);
}
// Status initial senden
publishOnlineStatus();
// Status alle 10 Sekunden senden (10000 ms)
intervalId = Timer.set(10000, true, publishOnlineStatus);
console.log("Online-Status-Timer gestartet - Sendet alle 10 Sekunden");
}
// Bei Script-Start
print("Starte Shelly Online-Status Script für FHEM...");
startStatusTimer();
// Event-Handler für MQTT-Verbindungsänderungen
Shelly.addStatusHandler(function(status) {
if (status.component === "mqtt") {
if (status.delta.connected === true) {
console.log("MQTT verbunden - Starte Online-Status-Timer neu");
publishOnlineStatus(); // Sofort online-Status senden
startStatusTimer();
} else if (status.delta.connected === false) {
console.log("MQTT getrennt - Timer pausiert");
if (intervalId !== null) {
Timer.clear(intervalId);
intervalId = null;
}
}
}
});
// Script wird ausgeführt, bis es manuell gestoppt wird oder der Shelly neu startet
Alles anzeigen
Gruß Rico