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)