Es ist auch langsamer geworden. Hat mich auch gerade genervt, war schon kurz davor ein Smartmeter mit Modbus zu Bestellen und den Shelly raus zuschmeißen, da kam mir die Idee Saldieren macht ja ein Script, warum nicht kurz ein Script nehmen das die Leistung jede Sekunde per MQTT schickt. Funktioniert wunderbar. Da mir das bei der Gesamtleistung reicht ist das Script dann auch sehr übersichtlich.
Spannung, Strom, Scheinleistung usw. loggt zwar mein Homeassistant auch, aber für die Statistik reichen mir da auch die 15 Sek Messwerte wie es die aktuelle Software macht.
// Schicke die Gesamtleistung per MQTT alle 3 Sekunden weil die aktuelle FW das nur alle 15 sek macht.
let SHELLY_ID = undefined;
Shelly.call("Mqtt.GetConfig", "", function (res, err_code, err_msg, ud) {
SHELLY_ID = res["topic_prefix"];
});
function timerHandler(user_data)
{
let em = Shelly.getComponentStatus("em", 0);
if (typeof em.total_act_power !== 'undefined') {
let power = em.total_act_power
let value = power.toFixed(3);
MQTT.publish(
SHELLY_ID + "/power",
value,
0,
false
);
};
}
Timer.set(3000, true, timerHandler, null);
Alles anzeigen
Habe dann doch auf 3 Sekunden erhöht, eine Sekunde war mir doch etwas schnell. Kleiner 1 Sek macht keinen sinn kann der Shelly wohl nicht. Dann kommt zwar mehrfach ein Wert per MQTT der ändert sich aber nur jede Sekunde.
Damit kann ich erstmal leben oder ich lasse die Daten von Homeassistant per Modbus abholen dann kann ich intervall auch selbst bestimmen. Aber die Scriptlösung hilft meiner Solar Anlage erstmal. Natürlich wieder Mist das sie einfach sowas ändern ohne es einstellbar zu machen. Würde je reichen wenn man die MQTT Publish Intervall Zeit einstellen kann.
// Schicke die die Leistungsdaten per MQTT alle X Sekunden weil die aktuelle FW das nur alle 15 sek macht.
let SHELLY_ID = undefined;
Shelly.call("Mqtt.GetConfig", "", function (res, err_code, err_msg, ud) {
SHELLY_ID = res["topic_prefix"];
});
function timerHandler(user_data)
{
let em = Shelly.getComponentStatus("em", 0);
MQTT.publish(SHELLY_ID + "/status/em:0",JSON.stringify(em),0,false);
}
Timer.set(3000, true, timerHandler, null);
Alles anzeigen
Wenn man alle EM Daten per MQTT haben möchte, erzeugt den gleiche JSON String im Broker wie es der Shelly auch macht aber halt mit selbst einstellbarer Zeit. Auch mit der gleichen Topic, also unter MQTT einstellungen den Haken Generic status update over MQTT wegnehmen. Wenn nicht ist auch nicht schlimm dann kommen halt nach 15 Sek einmal doppelte Daten weil der Shelly und das Script Daten schicken.
So ich mache das jetzt mit dem Script das die Topic verwendet wie der Shelly auch, dann muss ich nicht alle Topics im Homeassistant usw. ändern.