ChrisSiedler / dtsu666-Emulator

python library to emulate a dtsu666 smartmeter
GNU Affero General Public License v3.0
3 stars 5 forks source link

Verknüpfung mit Huawei Sun2000 #2

Closed jsphuebner closed 5 months ago

jsphuebner commented 5 months ago

Hallo,

ich versuche das Projekt mit meinem Huawei Wechselrichter ans Laufen zu bekommen. Leider schlägt die Erkennung fehl. Ich habe sowohl direkt über RTU als auch mit dem Wandler über ModbusTCP und UDP versucht.

Ich sehe Anfragen auf Register, die teilweise gar nicht dokumentiert sind: Als Unit-Id habe ich 11 / 0xB eingestellt, weil das bei Huawei Default ist.

Es wird als erstes das Register 2002 bzw 0x7d1 angefragt (warum is alles off-by-one?). 0x6 0xb 0x3 0x7 0xd1 0x0 0x1

Und dann das Register 4, das wohl angibt ob es 3P Vierleiter oder Dreileiter ist.

Irgendeine Idee, was der Wechselrichter da als Antwort erwartet?

jsphuebner commented 5 months ago

Die Antwort auf die erste Frage habe ich. Es wird eine "3" auf 2002 erwartet. Aber die Messwerte stehen leider auch noch in anderen Registern. Abgefragt werden 80 Register ab 0x836

jsphuebner commented 5 months ago

Ich habe nun auch die veränderten Registeradressen vom Huawei System herausbekommen.

    "Volts_AB": {"addr":0x1836, 'scale': .1},
    "Volts_BC": {"addr":0x1838, 'scale': .1},
    "Volts_CA": {"addr":0x183A, 'scale': .1},
    "Volts_L1": {"addr":0x83E, 'scale': .1},
    "Volts_L2": {"addr":0x840, 'scale': .1},
    "Volts_L3": {"addr":0x842, 'scale': .1},
    "Current_L1":   {"addr":0x836, 'scale': .001},
    "Current_L2":   {"addr":0x838, 'scale': .001},
    "Current_L3":   {"addr":0x83A, 'scale': .001},
    "Active_Power_L1":  {"addr":0x850, 'scale': .1},
    "Active_Power_L2":  {"addr":0x852, 'scale': .1},
    "Active_Power_L3":  {"addr":0x854, 'scale': .1},
    "Reactive_Power_L1":    {"addr":0x184E, 'scale': .1},
    "Reactive_Power_L2":    {"addr":0x1850, 'scale': .1},
    "Reactive_Power_L3":    {"addr":0x1852, 'scale': .1},
    "Power_Factor_L1":  {"addr":0x1854, 'scale': .001},
    "Power_Factor_L2":  {"addr":0x1856, 'scale': .001},
    "Power_Factor_L3":  {"addr":0x1858, 'scale': .001},
    "Total_System_Active_Power":    {"addr":0x84E, 'scale': .1},
    "Total_System_Reactive_Power":  {"addr":0x856, 'scale': .1},
    "Total_System_Power_Factor":    {"addr":0x866, 'scale': .001},
    "Frequency":                    {"addr":0x84C, 'scale': .01},
    "DmPt":                         {"addr":0x1862, 'scale': .1},
    "Total_import_kwh": {"addr":0x876, 'scale': 1},
    "Total_export_kwh": {"addr":0x87E, 'scale': 1},

Wenn ich 0x1000 vorangestellt habe dann nur damit der Wert nicht stört. Diese Werte werden im Frontend nicht angezeigt und ich konnte die Zuordnung nicht herausfinden. Für den Betrieb stellt das aber kein Hindernis dar. Ich erstelle einen Fork mit den Änderungen