Sungrow Wechselrichter unter NodeRed auslesen

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

ersthelfer
Beiträge: 54
Registriert: 04.06.2018, 17:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von ersthelfer » 10.07.2022, 13:51

Hallo,

hat jemand von Euch schon mal versucht einen Sungrow Wechselrichter (Serie SHxRT) mit hilfe von NodeRed auszulesen und kann mich an seinem Wissen teilhaben lassen?

Ich habe mal versucht erste Schritte mit dem Programm QModMaster zu machen.
Ein erster Connect klappt auch

Code: Alles auswählen

Sys > 13:48:44:829 - Connecting to IP : 192.168.002.072:502 OK
Das war es dann aber auch schon....

Vielen Dank

ersthelfer
Beiträge: 54
Registriert: 04.06.2018, 17:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von ersthelfer » 07.09.2022, 10:44

Hallo,

ich habe es mittlerweile geschafft mich mit dem Wechselrichter über ModBus TCP zu verbinden.

Dazu habe ich die node-red-contrib-modbustcp Bibliothek verwendet.

Damit lese ich nun das Register 5031 aus, welches laut Beschreibung die aktuell erzeugte Leistung enthält.
ModBus-Reg.JPG
ModBus-Reg.JPG (12.6 KiB) 3646 mal betrachtet
Von dem Node bekomme ich nun ein Array als payload
Debug.JPG
Debug.JPG (17.68 KiB) 3646 mal betrachtet
Kann mir jemand sagen, wie ich das Array jetzt in einen "richtigen" Wert umwandeln kann? (Ich hoffe Ihr wisst, was ich meine. Ich muss ja die beiden Teile des Arrays zu einer Zahl zusammen setzen)


Vielen Dank für Eure Mühe....

ptweety
Beiträge: 522
Registriert: 07.01.2017, 16:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 66 Mal

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von ptweety » 07.09.2022, 15:37

Dazu müsste man die Berechnungsmethode kennen.

PV_tom
Beiträge: 2
Registriert: 12.10.2022, 15:47
System: sonstige

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von PV_tom » 12.10.2022, 16:06

Hallo ersthelfer,
das zurückgegebene Array ist meines Erachtens mit Messwerten der Leistung in Hexadezimaler Form vom Wechselrichter gekommen.
Array_0: 2706 ist das niederwertigere Byte und hat den Dezimalwert 9990
Array_1: 0 ist das höherwertige Byte ; dieses müsstest du im dezimalen mit 65536 multiplizieren und zum Array_0 addieren.
Aber wahrscheinlich kommt bei einer kleinen PV-Anlage dieser Fall nicht vor.
Du müsstest also die hexadezimalen Werte in dezimale Werte konvertieren.

Eine Frage an dich:
Wie bist du mit Sungrow zufrieden? Ich überlege, ob ich mir eine SHxxRT mit Speicher zulege und den Ersatzstrom bei Netzausfall nutze. Ich hätte auch Interesse an der Einstellung der Node "WR Power".

PV_tom
Beiträge: 2
Registriert: 12.10.2022, 15:47
System: sonstige

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von PV_tom » 17.10.2022, 17:16

ersthelfer hat geschrieben:
07.09.2022, 10:44
Hallo,

ich habe es mittlerweile geschafft mich mit dem Wechselrichter über ModBus TCP zu verbinden.

Dazu habe ich die node-red-contrib-modbustcp Bibliothek verwendet.

Damit lese ich nun das Register 5031 aus, welches laut Beschreibung die aktuell erzeugte Leistung enthält.

ModBus-Reg.JPG

Von dem Node bekomme ich nun ein Array als payload

Debug.JPG

Kann mir jemand sagen, wie ich das Array jetzt in einen "richtigen" Wert umwandeln kann? (Ich hoffe Ihr wisst, was ich meine. Ich muss ja die beiden Teile des Arrays zu einer Zahl zusammen setzen)


Vielen Dank für Eure Mühe....
Hallo ersthelfer,
ich hatte dir eine kurze Antwort am 12.10.2022 geschickt ohne Bezug auf diese Notiz

Tobi001
Beiträge: 3
Registriert: 10.10.2021, 10:29
System: sonstige

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von Tobi001 » 01.12.2022, 11:13

Hallo ersthelfer,
ich versuche das Selbe wie du, es will aber einfach nicht klappen. (es erscheint immer sofort Disconnected)
Wärst du so nett und würdest einen Screenshot von der Konfiguration des modbustcp Node posten?
Vielen Dank dafür!

ersthelfer
Beiträge: 54
Registriert: 04.06.2018, 17:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von ersthelfer » 03.12.2022, 09:16

Hallo Tobi,

sorry, dass ich mich erst jetzt melde.

Meine Node sieht so aus:
WR-Node.JPG
Hier noch ein paar Hinweise.
1.) Wenn Deine Node ähnlich aussieht, starte Node-Red mal neu.
Ich habe die Erfahrung gemacht, dass wenn ich was an der TCP-Node ändere ich auch häufig einen Disconnect bekomme. Nach einem Neustart von Node Red klappt es dann meisst.

2.) Bist Du über WLAN oder über LAN mit dem Wechselrichter verbunden?
Probier es auf jeden Fall auch mal über LAN aus. Ich kenne ein paar Leute (mich eingeschlossen) bei denen es über WLAN nicht richtig läuft.

Ich hoffe das hilft erstmal.

Uwceurope
Beiträge: 1
Registriert: 29.01.2023, 10:19
System: sonstige

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von Uwceurope » 29.01.2023, 10:23

Hallo zusammen,

Bin beim suchen auf diesen Artikel gestoßen.

Bin jetzt auch Besitzer eines Sungrow Wechselrichters und würde diese gerne auch aufschalten. Ich benutze Node Red bei mir eher als Gateway zu meinem KNX.

Seit ihr mit dem Auslesen der Werte weiter gekommen?

Wie habt ihr die Konvertierung des Leistungswertes gemacht?

Werde mich die Tage mal daran versuchen.

Gruß Olli

ersthelfer
Beiträge: 54
Registriert: 04.06.2018, 17:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von ersthelfer » 29.01.2023, 11:21

Also auslesen klappt mittlerweile.

Vorab:
1.) Nach Möglichkeit über LAN an den Sungrow (per WLAN-Stick soll mittlerweile auch klappen wenn die neueste FW drauf ist, habe ich aber noch nicht intensiv getestet)
2.) Angeblich unterstützt der Sungrow NUR EINE Modbus Verbindung
Dateianhänge
1635604367911-eingangsregister_stand2021_02_02.xlsx
(15.43 KiB) 86-mal heruntergeladen
ModBus 16 Bit.JPG
ModBus 16 Bit.JPG (20.45 KiB) 2718 mal betrachtet
ModBus 32 Bit.JPG
ModBus 32 Bit.JPG (24.26 KiB) 2718 mal betrachtet
ModBus1.JPG
ModBus2.JPG

fl1922
Beiträge: 2
Registriert: 25.02.2023, 09:53
System: keine Zentrale (nur Pairing, FHEM etc.)

Re: Sungrow Wechselrichter unter NodeRed auslesen

Beitrag von fl1922 » 25.02.2023, 10:08

Danke für die Hinweise hier im Forum.

Ich habe das noch mal etwas anders gelöst, da ich unterschiedliche Adressen brauche, die teilweise weit auseinander liegen (und ich kann ja nicht tausende Adressen abfragen). Außerdem wollte ich kein polling, sondern einfach manuell die Daten abfragen. (man könnte mit dem Konstrukt auch pollen, dazu müsste man nur den ping node mit dem set payload node verbinden).

Um die Verbindung wiederzuverwenden, habe ich auch nur einen modbus node, der allerdings nur einen ping erzeugt (damit die Verbindung sich nicht schließt). Auf die daraus resultierenden Daten kommt es gar nicht an. Stattdessen habe ich einen node vorangestellt, der die passende payload erzeugt. Man muss leider immer ein interval definieren, daher habe ich hier das JavaScript-Maximum gewählt. Beim nächsten Aufruf wird das plugin das interval clearen und damit kommt es nie zum erneuten Aufruf (solange ich sie ca. alle 24 Tage einmal aufrufe - wenn nicht ists aber auch nicht schlimm).

Anschließend habe ich noch einen parsing node, der die Werte gleich passend umwandelt.

Hier der flow:
Bildschirmfoto von 2023-02-25 09.46.51.png
Bildschirmfoto von 2023-02-25 09.46.51.png (18.8 KiB) 2533 mal betrachtet
Der modbus node:
Bildschirmfoto von 2023-02-25 09.47.18.png
Hier noch der code der payload function. Ich habe ein paar Argumente definiert, um u.a. das Ergebnis gleich richtig konvertieren zu können und zwischen den verschiedenen Datentypen zu unterscheiden. Die data points sind natürlich nur ein Beispiel, man kann das natürlich auf den eigenen Bedarf zuschneiden. Ich benutze msg.topic, um ein paar der Infos über den modbus node hinaus zu transportieren.

Code: Alles auswählen

const addDataPoint = (name, multiplier, unit, startAddress, quantity = 1, doubleWord = null, register = 'FC4') => {
  if (doubleWord === null) {
    doubleWord = quantity === 2;
  }

  return {
    name,
    topic: `${name}:${doubleWord ? 'double' : 'single'}:${unit}*${multiplier}`,
    multiplier,
    unit,
    address: startAddress,
    quantity,
    dataType: register,
    ieeeType: 'off',
    interval: 2147483647 // max interval
  };
};

msg.payload = [
  addDataPoint('dcPower', 1, 'W', 5016, 2), // * 1W
  addDataPoint('loadPower', 1, 'W', 13007, 2), // * 1W
  addDataPoint('exportPower', 1, 'W', 13009, 2), // * 1W
  addDataPoint('totalActivePower', 1, 'W', 13033, 2), // * 1W
  addDataPoint('batteryPower', 1, 'W', 13021), // * 1W
  addDataPoint('batteryLevel', 0.1, '%', 13022), // * 0.1%
  addDataPoint('runningState', 1, '', 13000), // documentation appendix 1.2
  addDataPoint('mppt1Voltage', 0.1, 'V', 5010), // * 0.1V
  addDataPoint('mppt1Current', 0.1, 'A', 5011), // * 0.1A
  addDataPoint('mppt2Voltage', 0.1, 'V', 5012), // * 0.1V
  addDataPoint('mppt2Current', 0.1, 'A', 5013), // * 0.1A
  addDataPoint('directConsumptionToday', 0.1, 'kWh', 13016), // * 0.1kWh
  addDataPoint('directConsumptionPerDay', 0.1, 'kWh', 6385, 31), // * 0.1kWh; 01. - 31. of month
  addDataPoint('directConsumptionPerMonth', 0.1, 'kWh', 6416, 12), // * 0.1kWh; Jan - Dez
];

return msg;
Und hier noch der Code der parsing function:

Code: Alles auswählen

const { payload } = msg;
const [name, wordLength, conversion] = msg.topic.split(':');
const isDoubleWord = wordLength === 'double';
const [unit, multiplier] = conversion.split('*');

const valuesCount = Math.floor((payload?.length ?? 0) / (isDoubleWord ? 2 : 1));
let values = isDoubleWord
    ? new Array(valuesCount).fill(null).map((_, index) => (payload[index * 2 + 1] << 16) + payload[index * 2])
    : payload;
values = values.map(value => parseFloat((value * parseFloat(multiplier)).toFixed(1)));

msg.topic = name;

msg.payload = {
  name,
  unit,
  value: values.length > 1 ? values : values[0] ?? null,
  raw: payload
};

return msg;
Und hier ein Beispiel-Screenshot der Ausgabe:
Bildschirmfoto von 2023-02-25 09.49.23.png
Vielleicht hilfts ja jemandem weiter :) Gruß

Antworten

Zurück zu „RedMatic“