Viele haben ein Shelly Device.
Viele wollen wissen, welche Daten Ihr Hub eigentlich so liefert.
Viele überlegen, soll ich mehr in Technik investieren oder nicht....
Zielgruppe: Für die IT-Nerds und angehenden Nerds unter uns 😃
anbei ein Shelly Sctipt, das sich auf die Lauer legt und all die Daten, die vom MQTT kommen abgreift.
Das kann man auch mit Tools machen, wie MQTT-Explorer oder andere, klar
ABER
Hier geht es um ein Scripting Beispiel, dass sich ja beliebig weiter entwickeln lässt, also einfach ein Startpunkt und Einstieg
Beispiel für die Akkudaten: https://github.com/surfer1264/Zendure-Stuff/blob/main/Shelly_Akku_Volt
Voraussetzung: Ihr habt einen Appkey und Secret für Euer System.
siehe hier: https://github.com/surfer1264/Zendure-Stuff/wiki/Shelly-Script-Akkudaten-auslesen
Dort findet Ihr ein fertiges Script zum Abfragen der Credentials:
Das hier vorgestellte Script:
- Abonniert dein gesamtes Topic (APPKey/#)
- Prüft jede eingehende MQTT-Nachricht
- Läuft rekursiv durch alle Ebenen des JSON-Objekts
- Gibt alle neuen Feldnamen (Keys) aus, sobald sie das erste Mal auftauchen
- Zeigt außerdem weiterhin die komplette Nachricht
- unabhängig von Hub-Typ (mind. SF1200, 2000, Hyper...)
Hier ist es:
https://github.com/surfer1264/Zendure-Stuff/blob/main/HubDatenShellyScript
// ========== MQTT Inspector ==========
// Erkennt automatisch alle Felder (Keys) in empfangenen MQTT-Daten
// Ideal, um herauszufinden, was dein BMS oder Akku alles sendet
let mqttTopic = "APPKey/#"; // Dein MQTT-Topic hier eintragen
print("📡 Starte MQTT-Inspector auf Topic:", mqttTopic);
let knownKeys = {}; // speichert alle bisher gefundenen Felder
// ---------- Hilfsfunktion: Schlüssel rekursiv sammeln ----------
function collectKeys(obj, prefix) {
for (let key in obj) {
let fullKey = prefix ? prefix + "." + key : key;
if (typeof obj[key] === "object" && obj[key] !== null) {
collectKeys(obj[key], fullKey);
} else {
if (!knownKeys[fullKey]) {
knownKeys[fullKey] = true;
print("➕ Neues Feld erkannt:", fullKey, "=", obj[key]);
}
}
}
}
// ---------- MQTT Listener ----------
MQTT.subscribe(mqttTopic, function (topic, msg) {
print("======================================");
print("📨 Neues MQTT-Event empfangen:");
print("Topic:", topic);
let data = null;
try {
data = JSON.parse(msg);
} catch (e) {
print("❌ Nachricht ist kein JSON:", msg);
return;
}
// Neue Felder erkennen
collectKeys(data, "");
print("------ Komplette Daten ------");
print(JSON.stringify(data, null, 2));
print("======================================");
});