NEWS
Huawei Sun2000 & ioBroker via JS script funktioniert
-
@badsnoopy667
Hallo. Hab jetzt auch auf node-red umgestellt, funktioniert in beiden Richtungen einwandfrei.
Besten Dank für deine Hilfe. -
@badsnoopy667
Wahrscheinlich eine dumme Frage, aber worauf bezieht sich die Slave-IP-Adresse in der Funktion? -
@warp-it
Die Frage ist gar nicht so dumm... ich muss zugeben, ich kann es Dir gar nicht sagen. Die IP die bei mir eingetragen ist, entspricht gar nicht meinem IP-Range. Ich vermute, die IP wird in der Funktion gar nicht verwendet? Hatte das ja auch irgendwo aus dem Internet zusammenkopiert...
Funktioniert auch mit dieser komischen IP. Allerdings habe ich festgestellt, dass der Wert nicht immer übernommen wird. Muss den Wert mehrfach senden. Hat jemand eine Idee woran das liegen könnte? Habe das Gefühl der Wechselrichter kriegt nicht immer mit, dass er den Wert ändern soll. -
@badsnoopy667
Es kann sich ja eigentlich nur um die Adresse des 'absendenden' Iobrokers handeln, da die Adresse des Wechselrichters im 'Globalen Konfigurations Node' -> 'Modbus Client' definiert wird. -
@badsnoopy667 said in Huawei Sun2000 & ioBroker via JS script funktioniert:
@warp-it
Allerdings habe ich festgestellt, dass der Wert nicht immer übernommen wird. Muss den Wert mehrfach senden. Hat jemand eine Idee woran das liegen könnte? Habe das Gefühl der Wechselrichter kriegt nicht immer mit, dass er den Wert ändern soll.Hast Du einmal versucht die lesenden Operationen anzuhalten, bevor Du an den Akku schreibst? Vielleicht auch noch ein paar Sekunden warten, falls noch was gebuffert ist. Spricht was dagegen, Schreiben und Lesen mit Pausen in einen gemeinsamen Flow zu nehmen?
-
Hi zusammen,
nur zu info, falls jemand statt Modbus lieber die Cloud nehmen will (oder in Kombi, zwecks Anreicherung mit zusätzlichen Infos),
ich habe gerade einen veröffentlicht:https://github.com/KornSW/ioBroker.fusionsolar
https://forum.iobroker.net/topic/59422/new-adapter-huawei-fusionsolar-api
bei interesse gerne mal testen
Grüße, Tobias
-
@kornsw
uhi, das muss ich mal am Wochenende testen Vielen Dank dafür schon mal im vorraus.
In Kombi wäre das schon richtig gut.
Gruß -
@KornSW Schaue ich mir gerne an, hab eben den API Zugang angefordert.
Danke schon mal für deine Mühe -
@KornSW Huawei hat mir zurückgeschrieben, dass den Open-API Account nur ein Installateur beantragen kann. Wie hat das bei dir funktioniert?
-
EDIT: Fehler gefunden...geht...
Funktioniert das script noch? Bekomme folgenden fehler:
Verwende einen Huawei Sun2000-8ktl-M1Als FW habe ich die versionen:
Inverter: V100R001C00SPC148
Dongle: V100R001C00SPC130
MBUS: V100R001C00SPC330 -
Es hat leider nur 1 mal funktioniert (als die Ordner angelegt wurden), er liesst zwar die Daten aktuallisiert Sie aber nicht unter Objekte, jemand eine Idee?
-
@majawe
Ich hatte das gleiche Problem. Hat anfangs problemlos funktioniert und dann mit einem Versionsupgrade (ich glaube vom js-adapter) ging es plötzlich nicht mehr. Ich habe dann den folgenden Code Teil auskommentiert und dann hat es wieder funktioniert. Warum und wieso erschließt sich mir aber nicht ganz.function forcesetState(objectname, value, options) { **//Problem mit existsState -> aus irgendeinem Grund funktioniert es nicht mehr. //if(!existsState(objectname)) { // createState(objectname, value, options); //} //else {** setState(objectname, value); **//}** }
Ich habe auch den Verbindungsaufbau in eine function ausgelagert:
function connectModBus() { console.log("Init connection to: " + ModBusHost +":" + ModBusPort); // set requests parameters client.setTimeout (10000); // try to connect client.connectTCP (ModBusHost, { port: ModBusPort }) .then(function() { console.log("Connected, wait for reading..."); }) .catch(function(e) { console.log(e); }); }
Und dann eine provisorisch eine Prüfung hinzugefügt ob das Lesen der Daten erfolgreich war und ob die MODBUS Verbindung noch offen ist. Da ich immer wieder das Problem hatte, wenn die Verbindung verloren gegangen ist, dass dann keine Daten mehr gelesen werden konnten (da kein Wiederaufbau der Verbindung stattgefunden hat).
setInterval(function() { if (!getDataSuccessful){ if (!client.isOpen){ connectModBus(); } } ...
@majawe said in Huawei Sun2000 & ioBroker via JS script funktioniert:
Es hat leider nur 1 mal funktioniert (als die Ordner angelegt wurden), er liesst zwar die Daten aktuallisiert Sie aber nicht unter Objekte, jemand eine Idee?
und n
-
Danke für die Mühe, aber ich bekomme immer die Fehlermeldungen Cannot find module 'modbus-serial' und ModbusRTU is not a constructor
Mit npm install modbus-serial hab ich vorher das Modus NPM Modul installiert.
Könnt ihr mir hier kurz auf die Sprünge helfen bitte ?
-
@zoid1988 hast du es im Adapter hinzugefügt?
-
Vielen Dank, wusste garnicht das man das machen kann ... Wieder etwas gelernt ...
Das Script startet jetzt, aber ich bekomme leider keine Daten ausgelesen.
Habe die Werte bei mir jetzt so angepasst (ich habe leider - noch - keinen Akku):
client.connectTCP("10.168.1.111", { port: 502 });
const ModBusIDs = [1];
const PowerMeterID = 0;
const BatteryUnits = [[0, 0]];Folgende Infos find ich im Log:
30.12.2022, 11:33:51.829 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 35300 with length 40
30.12.2022, 11:33:51.830 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 35300 from id: 1 with error: undefined
30.12.2022, 11:33:53.829 [info ]: javascript.0 (1120689) script.js.PV: Processing new data...
30.12.2022, 11:33:53.832 [info ]: javascript.0 (1120689) script.js.PV: Processing done!
30.12.2022, 11:33:53.833 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 30000 with length 81
30.12.2022, 11:33:53.833 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 30000 from id: 1 with error: undefined
30.12.2022, 11:33:55.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37100 with length 114
30.12.2022, 11:33:55.830 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37100 from id: 1 with error: undefined
30.12.2022, 11:33:57.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 32000 with length 116
30.12.2022, 11:33:57.830 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 32000 from id: 1 with error: undefined
30.12.2022, 11:33:59.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37000 with length 68
30.12.2022, 11:33:59.831 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37000 from id: 1 with error: undefined
30.12.2022, 11:34:01.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37700 with length 100
30.12.2022, 11:34:01.831 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37700 from id: 1 with error: undefined
30.12.2022, 11:34:03.831 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37800 with length 100
30.12.2022, 11:34:03.831 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37800 from id: 1 with error: undefined
30.12.2022, 11:34:05.831 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 38200 with length 100
30.12.2022, 11:34:05.832 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 38200 from id: 1 with error: undefined
30.12.2022, 11:34:07.832 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 38300 with length 100
30.12.2022, 11:34:07.833 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 38300 from id: 1 with error: undefined
30.12.2022, 11:34:08.028 [info ]: javascript.0 (1120689) Stop script script.js.PV -
@zoid1988
So, ich muss mich kurz selbst korrigieren.
Ich habe bereits die Lösung mit Node-red im Einsatz und hab jetzt mal den Node-red Adapter gestoppt und nun haben sich die Einträge im Log verändert.Scheinbar kann er jetzt erfolgreich was abfragen, aber in den Objekten stehen immer noch alle Werte auf 0.
-
@badsnoopy667 Klappt super den Wert zu ändern, hast du evtl eine Idee wie ich den Akku laden lassen kann? habe es mit 47100 (1) probiert aber es funktioniert nicht......
-
@majawe
Nein, das habe ich noch nicht probiert, da ich keinen variablen Stromtarif habe... aber darüber nachgedacht, ob es geht, habe ich auch schon. Falls Du also etwas rausbekommen solltest, sag gerne Bescheid! -
@majawe
Kurzes Update: Über Modbus habe ich es noch nicht geschafft den Akku laden zu lassen. Ich vermute übrigens, Du hast nicht die letzte Version (V3) Der "modbus-interface-definitions"
Link: solar-inverter-modbus-interface-definitions-v3.0.pdf .
Das Register was Du da zeigst gibt es da nicht mehr. Es gibt aber ein Register [Energy storage unit] Time-of-use electricity price periods - 47200. Da kann man wohl die Lade- und Entladezeiten eintragen für den Akku. Da das Ding aber 41 Zeichen lang ist, habe ich keinen Plan, wie das korrekte Format aussehen muss. Ich habe mal den Huawei Support angeschrieben.
Aber: Was ich gerade mal getestet habe: Mit der SUN2000 App (Nicht FusionSolar, geht aber vll auch, k.a.) habe ich mich auf den Wechselrichter als Installateur verbunden (über das SDongle WLan im Keller) und habe die Betriebsweise das Akkus auf "TOU" gestellt. Also zeitgesteuertes Laden. Wenn man da dann eine Ladezeit einträgt, fängt das Ding auch an aus dem Netz zu laden.
Daher meine fixe Idee als Workaround: In der App eine Ladezeit einstelle (z.B. von 23:00 - 6:00 Uhr Nachts, in der Annahme das Nachts die günstigesten Preise vorliegen). Und dann das Register [Energy storage unit] Maximum charging power - 47075 entsprechend auf 0 setzen, zu Zeiten wenn man nicht laden will und auf 5000 (für 5000W, bei mind. 10kWh Akku, sonst weniger), wenn man laden möchte in dieser Zeit. Morgens natürlich dann wieder hochsetzen. Habe ich aber noch nicht ausprobiert. Könnte mir aber vorstellen, dass es klappt. Bin mir nur nicht sicher, ob er dann noch entlädt (in der Zeit wo die Ladeleistung 0 ist, aber die Ladezeit gesetzt ist). -
@badsnoopy667 said in Huawei Sun2000 & ioBroker via JS script funktioniert:
[Energy storage unit] Maximum charging power - 47075
Die Idee hatte ich auch schon, leider bekomme ich es nicht hin das er die 0 annimmt bzw überträgt