Shelly 3EM – MQTT Script (Zwangs Daten Push) - Kieft-C/Zendure-BKW-PV GitHub Wiki
Dieses Script wird direkt auf einem Shelly 3EM ausgeführt und dient dazu, Leistungsdaten zyklisch zu erfassen und nur bei relevanten Änderungen per MQTT zu senden.
1.Schritt
Das Script wird im Webinterface des Shelly-Geräts hinterlegt: Aufruf über die IP-Adresse des Geräts im Browser (z. B. http://192.168.1.xxx) Navigiere zu: Scripts → Add Script Script einfügen und aktivieren Erklärung Script:
let TIMER_MS = 1000; // Prüfe jede Sekunde
let UPDATE_INTERVAL_S = 60; // Erzwungener Versand alle 60 Sek.
let DELTA_WATT = 1; // Sende bei Änderung > 1W
let MQTT_TOPIC = "shelly3/pro3em/status";
let lastTotalPower = -1;
let counter = 0;
function publishData() {
Shelly.call("EM.GetStatus", { id: 0 }, function (result) {
if (result) {
let total = result.a_act_power + result.b_act_power + result.c_act_power;
let diff = Math.abs(total - lastTotalPower);
counter++;
// Sende wenn: Änderung groß genug ODER Zeit abgelaufen
if (diff >= DELTA_WATT || counter >= UPDATE_INTERVAL_S) {
let payload = {
a: result.a_act_power,
b: result.b_act_power,
c: result.c_act_power,
total: total,
pf: (result.a_pf + result.b_pf + result.c_pf) / 3
};
MQTT.publish(MQTT_TOPIC, JSON.stringify(payload), 1, true);
lastTotalPower = total;
counter = 0;
}
}
});
}
Timer.set(TIMER_MS, true, publishData);
2.Schritt
3.Schritt
Konfiguration (configuration.yaml)
Füge folgenden Block in deine configuration.yaml ein:
mqtt:
sensor:
- name: "Hausleistung Echtzeit (Skript)"
unique_id: "shelly_pro3em_total_fast_script"
state_topic: "shelly3/pro3em/status"
value_template: "{{ value_json.total }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Phase A (Skript)"
unique_id: "shelly_pro3em_phase_a"
state_topic: "shelly3/pro3em/status"
value_template: "{{ value_json.a }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Phase B (Skript)"
unique_id: "shelly_pro3em_phase_b"
state_topic: "shelly3/pro3em/status"
value_template: "{{ value_json.b }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Phase C (Skript)"
unique_id: "shelly_pro3em_phase_c"
state_topic: "shelly3/pro3em/status"
value_template: "{{ value_json.c }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
Nach erfolgreicher Einrichtung stehen folgende Sensoren zur Verfügung:
- Hausleistung Echtzeit (Skript)
- Leistung Phase A (Skript)
- Leistung Phase B (Skript)
- Leistung Phase C (Skript)