NEWS
UNSOLVED Victron Photovoltaik Anlage Daten für ioBroker auslesen!
-
@mlapp Vielen Dank für deine Vorarbeit. Meine Zählerdaten liegen bereits von der bestehenden Anlage im ioBroker vor. Diese möchte ich auf die von dir beschrieben Weise gern auf die Venus übertragen. Der Zähler muss ja auf dem Victron System (bei mir ein Raspberry PI 3) emuliert werden, oder? Hast du den Code nur für deine Config angepasst?
Wie hast du die Struktur für deinen Hauszaehler angelegt?
Kannst du vielleicht dein Skript zur Übertragung deiner Werte als Beispiel zur Verfügung stellen?
Vielen Dank für deinen Einsatz.
Ben -
Hi ich hänge hier seit einigen Tagen an dem mqtt fest.
Per modbus habe ich Zugriff auf die Parameter, allerdings wollte ich es per mqtt versuchen. Hier strauchel ich aber. Ich habe am PC mittels mqtt Explorer schonmal alle topics gesehen und das hatte ich jetzt gerne so im iobroker. Keep alive sende ich mittels node Red alle 30sek. Es muss doch möglich sein das er alle topics einliest.
pS mit Node Red fange ich gerade erst an -
@jacke Welche Venus-FW nutzt Du? Ab 2.8 kann man den alive zielgerichteter steuern.
Bei meinem kleinen 800VA Multiplus gibt es aber Daten, die er auf MQTT nicht hat, sondern nur auf Modbus. DVCC Stromvorgabe ist so ein Beispiel.In jenem Thread hat mir @mickym einiges zum Thema MQTT und Victron erklärt.
-
Ist glaube ich 2.84 aber über 2.8
Ich scheitere daran die Datenpunkte anzulegen.
Sagen wir Mal ich möchte den Punkt hinzufügen. Wol lege ich ihn an.
Das einzige was bisher ankommt.
-
Abend,
ich suche den passenden Register um bei MP2 die aktuelle einspeisende Leistungen auszulesen.
Ich hatte zuvor die 442 (Battery Power) verwendet. Aber seitdem ich meine BMS integriert habe, springt dieser Wert extrem.Edit: 866 VE.Bus charge power (System) ?
-
@jacke Ich denke Du verstehst das mqtt Prinzip nicht. Du brauchst einen Broker. Subscriben und Publishen tun nur Clients. Wenn Dein mqtt-Adapter ein Broker ist - subscribed der nichts - sondern Du legst im mqtt Baum einfach die topics an, die Du brauchst. Das Root-Topic ist immer die mqtt.0 hierarchie. Wenn Du Node Red benutzt und den Mqtt Adapter als Broker kannst auch mit den Mqtt-Out Nodes die topics direkt publishen.
Ihr müsst aber selbst wissen auf welche topics Eure Hardware hört und dort published ihr. Eure Hardware subscribed automatisch. Das steht in der Beschreibung zu Eurer Hardware.
-
So funktioniert jetzt. In der Beschreibung stand das SSL verwendet wird.
Ich habe den Haken bei SSL rausgenommen und tada,
Mit # bekomme ich alle Werte oder kann nur bestimmte topics abonnieren.
Aber ja von mqtt habe ich keinen Plan bis zu dieser Woche noch nichts mit am Hut gehabt.
Jemand eine Empfehlung für ein gutes Tutorial, am liebsten in Textform.
Wäre mega wenn der Adapter direkt aus den Strings Objekte machen würde. So muss wieder ein extra Skript her. -
@jacke Wenn Du NodeRed benutzt habe ich einen tollen Subflow für Dich:
https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
Ein JSON String ist die beste und am wenigsten aufwendige Art Daten zu übertragen. Man kann alles in einzelnen Datenpunkte zerlegen. Das aber zu lassen und die JS Objekte in NodeRed direkt zu verarbeiten hat viele Vorteile, auch wenn es Dir am Anfang kryptischer aussieht. JSON Strings sind zudem ein Standard um Daten zwischen verschiedenen Systemen auszutauschen.
-
@mickym
Vielen Dank das werde ich mir Mal morgen anschauen.Sicherlich wird es seinen Sinn haben das es json Strings sind, ich meine es wurde sich ja anbieten bei einem Adapter für den iobroker das er direkt die Daten im passenden Format ablegt.
Eine. Schönen Sonntag noch. Ich habe heute genug meiner Unwissenheit entdeckt. Meine Siemens Stel7 Welt ist da im Moment noch etwas einfacher.
-
@mickym Die Zerlegung eines JSON Strings siehst Du in dem Thread als 6. Beispiel. Und ein Adapter der MQTT Nachrichten interpretiert ist kein MQTT-Adapter mehr. Ich bin froh, dass er das nicht tut.
-
@fuci said in Victron Photovoltaik Anlage Daten für ioBroker auslesen!:
Wie hast du die Struktur für deinen Hauszaehler angelegt?
Kannst du vielleicht dein Skript zur Übertragung deiner Werte als Beispiel zur Verfügung stellen?
Die Struktur hab ich im Broker von Hand erzeugt. Sind teilweise Ordner, Kanäle oder dann die Datenpunkt (alle numerisch)
Hier das Script:
var Einspeisung, CurrentL1, CurrentL2, CurrentL3;on({id: "sonoff.0.StromzählerHaus.SM_16_7_0"/StromzählerHaus SM 16_7_0/, change: "any"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
CurrentL1 = Math.round((parseFloat(getState("sonoff.0.StromzählerHaus.SM_36_7_0").val) / getState("smartmeter.1.1-0:32_7_0__255.value").val)*100)/100;
CurrentL2 = Math.round((parseFloat(getState("sonoff.0.StromzählerHaus.SM_56_7_0").val) / getState("smartmeter.1.1-0:52_7_0__255.value").val)*100)/100;
CurrentL3 = Math.round((parseFloat(getState("sonoff.0.StromzählerHaus.SM_76_7_0").val) / getState("smartmeter.1.1-0:72_7_0__255.value").val)*100)/100;
setState("mqtt.0.Hauszähler.sdm1-1.Voltage.L1"/Voltage.L1/, getState("smartmeter.1.1-0:32_7_0__255.value").val);
setState("mqtt.0.Hauszähler.sdm1-1.Voltage.L2"/Voltage.L2/, getState("smartmeter.1.1-0:52_7_0__255.value").val);
setState("mqtt.0.Hauszähler.sdm1-1.Voltage.L3"/Voltage.L3/, getState("smartmeter.1.1-0:72_7_0__255.value").val);
setState("mqtt.0.Hauszähler.sdm1-1.Current.L1"/Current.L1/, CurrentL1);
setState("mqtt.0.Hauszähler.sdm1-1.Current.L2"/Current.L2/, CurrentL2);
setState("mqtt.0.Hauszähler.sdm1-1.Current.L3"/Current.L3/, CurrentL3);
setState("mqtt.0.Hauszähler.sdm1-1.Current"/Current/, (parseFloat(CurrentL1) + parseFloat(CurrentL2) + CurrentL3));
setState("mqtt.0.Hauszähler.sdm1-1.Power.L1"/Power.L1/, getState("sonoff.0.StromzählerHaus.SM_36_7_0").val);
setState("mqtt.0.Hauszähler.sdm1-1.Power.L2"/Power.L2/, getState("sonoff.0.StromzählerHaus.SM_56_7_0").val);
setState("mqtt.0.Hauszähler.sdm1-1.Power.L3"/Power.L3/, getState("sonoff.0.StromzählerHaus.SM_76_7_0").val);
setState("mqtt.0.Hauszähler.sdm1-1.Power"/Power/, getState("sonoff.0.StromzählerHaus.SM_16_7_0").val);
setState("mqtt.0.Hauszähler.sdm1-1.Import"/Import/, Math.round((parseFloat(getState("sonoff.0.StromzählerHaus.SM_1_8_0").val) / 1000)*100)/100);
setState("mqtt.0.Hauszähler.sdm1-1.Export"/Export/, Math.round((parseFloat(getState("sonoff.0.StromzählerHaus.SM_2_8_0").val) / 1000)*100)/100);
// Ab hier Werte für Display füllen
setState("mqtt.0.Spannung"/Spannung/, getState("smartmeter.1.1-0:32_7_0__255.value").val);
setState("mqtt.0.Strom"/Strom/, Math.round((parseFloat(getState("sonoff.0.StromzählerHaus.SM_16_7_0").val) / getState("smartmeter.1.1-0:32_7_0__255.value").val)*100)/100);
setState("mqtt.0.Leistung"/Leistung/, getState("sonoff.0.StromzählerHaus.SM_16_7_0").val);
setState("mqtt.0.SoC"/SoC/, 76.456);
setState("mqtt.0.BMSTemp"/BMSTemp/, getState("zigbee.0.00158d0001c2a13e.temperature").val);
});Hoffe das hilft weiter
-
@mickym said in Victron Photovoltaik Anlage Daten für ioBroker auslesen!:
Wenn Du NodeRed benutzt habe ich einen tollen Subflow für Dich:
https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
Ein JSON String ist die beste und am wenigsten aufwendige Art Daten zu übertragen. Man kann alles in einzelnen Datenpunkte zerlegen. Das aber zu lassen und die JS Objekte in NodeRed direkt zu verarbeiten hat viele Vorteile, auch wenn es Dir am Anfang kryptischer aussieht. JSON Strings sind zudem ein Standard um Daten zwischen verschiedenen Systemen auszutauschen.
Habe es mal getestet irgendetwas funktioniert beim erstellen des Subflows nicht ich bekomme immer die Fehlermeldung.
node red cannot read properties of undefined reading length
-
@mlapp said in Victron Photovoltaik Anlage Daten für ioBroker auslesen!:
sdm1-1.Voltage.L1
Vielen Dank für deine Hilfe. Bis hierhin habe ich es nun gebracht... Lasten kann er negativ wohl nicht vertragen.
Wie bist du damit verfahren?
Hast du weitere Werte emuliert? -
@jacke Der Subflow exisistiert doch schon. Sonst poste mal den JSON String hier in Code-Tags und kann es selbst versuchen.
-
@fuci
negative Werte sind im Code abgefangen und werden auf 0 gesetzt.
Das hab ich auskommentiert und neu kompiliert, sonst bringt das ja nichts.
Das System muss doch wissen, wenn ein PV Überschuss vorliegt.
Keine Ahnung warum das so gemacht wurde. -
@mickym ich habe es so verstanden das ich den Code aus dem Link unter Punkt 1 als subflow importieren muss.
28.3.2022, 23:47:46node: abcde12346788 N/abcde12345678/vebus/289/Energy/AcIn1ToInverter : msg.payload : string[29] "{"value": 28.635589599609375}"
-
@jacke Ich hab die Versionen mal bereinigt. HIer ist die aktuelle Version:
Das was Du importierst ist kein JSON String - entweder Du steckst das sowieso in eine String Feld dann brauchst Du die Anführungszeichen nicht - oder Du definierst einen String in Javascript - dann musst das aber in einfache Anführungszeichen stecken.
Importiere den Flow wie hier
und Du bekommst das Ergebnis:
-
Hallo,
ich verwende zwei nicht Victron MPPT Laderegler von Epever Xtra.
Die Laderegler lese ich aktuell über Solaranzeige aus und erhalte verschiedenen Werte über MQTT in ioBroker.
Hat jemand eine Idee wie ich diese Werte in VenosOS übertragen und darstellen könnte?
-
@fuci
Ich hab mir den Code im Projekt angepasst und neu kompiliert.
Meiner Meinung nach muss er natürlich auch negative Werte mitbekommen, damit er weiß mit welcher Leistung die Akkus geladen werden können. -
@e-i-k-e
Ich würde mir auf Github mal die ganzen Projekte ansehen.
Für Stromzähler gibt es eine MQTT-DBus Bridge.
Ich könnte mir gut vorstellen, dass es sowas auch für die Laderegler geben könnte.
Das war bisher allerdings nicht mein Thema, von daher kann ich dir nicht sagen ob es sowas wirklich schon gibt.
Such auf Github einfach nach Victron. Da gibts dann über 200 Projekte.