Seite 1 von 1

SHELLY PRO 3EM als EVU

Verfasst: Sa Jul 01, 2023 10:49 am
von SebastianLotz
Hallo,

bei mir ist inzwischen ein Shelly Pro 3EM für Home Assistant verbaut.
Aktuell nutze ich als EVU noch einen optischen Messfühler auf dem Zähler mit ESPHome, der die Werte alle 10s über MQTT pushed.

Hat den Shelly Pro 3EM jemand inzwischen evtl. als EVU für OpenWB in Betrieb?

Über JSON bekommt man die einzelnen Phasen nicht berücksichtigt.
Ein eigenes Modul für OpenWB scheint es aktuell (noch?) nicht zu geben.

Gedanke wäre, ob jemand über Shelly Script die MQTT-Topics pushed, die OpenWB benötigt...
Da scheint es ja was zu geben, siehe https://shelly-api-docs.shelly.cloud/ge ... qttpublish
Hat das jemand schonmal gemacht/versucht? Über ein Shelly Script könnte man dann die OpenWB MQTT-Topics bedienen...

Weiterhin unterstützt Shelly auch inzwischen Modbus:
https://shelly-api-docs.shelly.cloud/ge ... -registers
https://shelly-api-docs.shelly.cloud/ge ... -registers
Ich habe aber in OpenWB keine Möglichkeit gefunden, ModbusTCP für das EVU zu nutzen.

Über einen Tipp/Hinweis würde ich mich freuen?

Gruß

Sebastian

Re: SHELLY PRO 3EM als EVU

Verfasst: Sa Jul 01, 2023 10:58 am
von derNeueDet
Ich müsste mich arg täuschen, wenn das nicht gehen würde, über JSON. Den normalen EM3 über JSON war schon mal hier Im Forum, der Pro glaube ich auch.


VG
Det

Re: SHELLY PRO 3EM als EVU

Verfasst: Sa Jul 01, 2023 8:22 pm
von SebastianLotz
Leider so nicht ganz richtig....

Mit Json kann man nur folgendes abfragen:
  • Abfrage für Leistung
  • Abfrage für Zählerstand Bezug
  • Abfrage für Zählerstand Einspeisung
Die Detaildaten je Phase fehlen z.B., so dass man nicht 32A pro Phase oder die Schieflast berücksichtigen kann.

Hier ein Shelly Script, mit dem man alle Werte per MQTT liefern kann.
Die "8" durch die angezeigte Zähler-Nummer ersetzen.

Code: Alles auswählen

// Shelly Script example: Use MQTT in scripting to provide switch status updates on a custom topic
let CONFIG = {
  emId: 0,
  baseTopic: "openWB/set/counter/8/get/",
};

Shelly.addStatusHandler(function (notification, user_data) {
  if (notification.component === "em:" + JSON.stringify(CONFIG.emId)) {
    MQTTAnnounceEm(notification.delta);
    return;
  }

  if (notification.component === "emdata:" + JSON.stringify(CONFIG.emId)) {
    MQTTAnnounceEmdata(notification.delta);
    return; 
  } 
});

function MQTTAnnounceEm(data) {
  MQTT.publish(CONFIG.baseTopic + "currents", "[" + JSON.stringify(data.a_current) + "," + JSON.stringify(data.b_current) + "," + JSON.stringify(data.c_current) + "]", 0, false); // Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung, Beispiel: [1.2,2.3,-2.1]
  MQTT.publish(CONFIG.baseTopic + "voltages", "[" + JSON.stringify(data.a_voltage) + "," + JSON.stringify(data.b_voltage) + "," + JSON.stringify(data.c_voltage) + "]", 0, false); // Array mit den Spannungen je Phase in Volt, mit Nachkommastellen (Float), Beispiel: [222.2,223.3,222.3]
  MQTT.publish(CONFIG.baseTopic + "power", JSON.stringify(data.total_act_power), 0, false); // Array mit den Leistungen je Phase in Watt, mit Nachkommastellen (Float), Beispiel: [12.3,23.4,-12.3]
  MQTT.publish(CONFIG.baseTopic + "powers", "[" + JSON.stringify(data.a_act_power) + "," + JSON.stringify(data.b_act_power) + "," + JSON.stringify(data.c_act_power) + "]", 0, false); // Array mit den Leistungen je Phase in Watt, mit Nachkommastellen (Float), Beispiel: [12.3,23.4,-12.3]
  MQTT.publish(CONFIG.baseTopic + "power_factors", "[" + JSON.stringify(data.a_pf) + "," + JSON.stringify(data.b_pf) + "," + JSON.stringify(data.c_pf) + "]", 0, false); // Array mit den Leistungsfaktoren je Phase, mit Nachkommastellen (Float), Wertebereich -1 bis 1, 
}

function MQTTAnnounceEmdata(data) {
  MQTT.publish(CONFIG.baseTopic + "imported", JSON.stringify(data.total_act), 0, false); // Bezogene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv, Beispiel: 123.45
  MQTT.publish(CONFIG.baseTopic + "exported", JSON.stringify(data.total_act_ret), 0, false); // Eingespeiste Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv, Beispiel: 123.45
}


Re: SHELLY PRO 3EM als EVU

Verfasst: Sa Jul 01, 2023 8:47 pm
von derNeueDet
Ok, hab ich übersehen dass du die einzelnen Werte haben willst. Das geht in JSON nicht.

VG
Det