Huawei_LAN.php verstehen

Allgemeine Informationen zum Nachbau und zum Forum.
PV-Monitorung / PV Überwachung

Moderator: Ulrich

Seb01
Beiträge: 53
Registriert: Mo 20. Mär 2023, 11:11
Hat sich bedankt: 4 Mal
Danksagung erhalten: 6 Mal

Huawei_LAN.php verstehen

Beitrag von Seb01 »

Hallo,

ich versuche zu verstehen, wie die Huawei_LAN.php funktioniert.
Ich vergleiche immer mit den "Solar Inverter Modbus Interface Definitions" von Huawei.

In deiner Huawei_LAN.php ist z.B. in Zeile 134:

$rc = $funktionen->modbus_tcp_lesen( $COM1, $WR_ID, "03", "30000", "51", "Hex", $Timebase );

Da wird anscheinend ab Adresse 30000 bis Adresse 30051? (da Länge =51) in Hex ausgelesen, oder?
Das passt dann aber nicht mit den Werten in der Huawei-Doku...
Und auch nicht mit der Extraktion der Werte, Zeile 143 bis 150:

$aktuelleDaten["Modell"] = $funktionen->hex2string( substr( $rc["Wert"], 0, 30 ));
$aktuelleDaten["Firmware"] = $funktionen->hex2string( substr( $rc["Wert"], 0, 30 ));
$aktuelleDaten["Seriennummer"] = $funktionen->hex2string( substr( $rc["Wert"], 60, 24 ));
$aktuelleDaten["PN"] = $funktionen->hex2string( substr( $rc["Wert"], 100, 24 ));
$aktuelleDaten["ModellID"] = hexdec( substr( $rc["Wert"], 280, 4 ));
$funktionen->log_schreiben( "Gerätetyp: ".$aktuelleDaten["Modell"]." Modell ID: ".$aktuelleDaten["ModellID"], "> ", 5 );
$aktuelleDaten["Anz_PV_Strings"] = hexdec( substr( $rc["Wert"], 284, 4 ));
$aktuelleDaten["Anz_MPP_Trackers"] = hexdec( substr( $rc["Wert"], 288, 4 ));

Wer kann mir helfen?

Viele Grüße Sebastian

Benutzeravatar
Ulrich
Administrator
Beiträge: 5542
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 124 Mal
Danksagung erhalten: 835 Mal

Re: Huawei_LAN.php verstehen

Beitrag von Ulrich »

Hallo Sebastian, die Länge ist in HEX angegeben 51 = 81 Dezimal
-----------------------------------------------------
Ulrich . . . . . . . . [Projekt Administrator]

Seb01
Beiträge: 53
Registriert: Mo 20. Mär 2023, 11:11
Hat sich bedankt: 4 Mal
Danksagung erhalten: 6 Mal

Re: Huawei_LAN.php verstehen

Beitrag von Seb01 »

Hallo Ulrich,

also alles in HEX? Laut meiner Huaweidoku also die Adressen 30000 bis 30081, d.h. Signale No. 1 bis 11?

beim Lesen bzw. umwandeln der Response auch?

Code: Alles auswählen

$aktuelleDaten["Modell"] = $funktionen->hex2string( substr( $rc["Wert"], 0, 30 ));
Also ab Nibble 0 HEX 30 Werte? Laut Doku ist die aber nur 15 lang, also 15 Byte (=30 Nibble). Passt das so?

Code: Alles auswählen

$aktuelleDaten["Seriennummer"] = $funktionen->hex2string( substr( $rc["Wert"], 60, 24 ));
Und hier ab Nibble 60 in der Antwort 24 Nibble Werte? Das passt dann hier wieder nicht. Anfang wäre Adresse 30015, in der Antwort auf das modbus_tcp_lesen ab Nibble 31 mit Länge 10, also 20 Nibble.

Und gleich noch die Frage: wie lese ich dazu die Huwaei Doku?

No. Signal | Name | Read/Write |Type | Unit | Gain| Address| Quantity |Scope
1 | Model | RO | STR | N/A | 1 | 30000 | 15 | For details, see 1.1 .
2 | SN | RO | STR | N/A | 1 | 30015 | 10 | N/A
3 | PN | RO | STR | N/A | 1 | 30025 | 10 | N/A
4 | Model ID | RO | U16 | N/A | 1 | 30070 | 1 | For details, see 1.1 .
5 | Number of PV strings| RO | U16 | N/A | 1 | 30071 | 1 | N/A

Seb01
Beiträge: 53
Registriert: Mo 20. Mär 2023, 11:11
Hat sich bedankt: 4 Mal
Danksagung erhalten: 6 Mal

Re: Huawei_LAN.php verstehen

Beitrag von Seb01 »

Kann es mir keiner erklären?

Seb01
Beiträge: 53
Registriert: Mo 20. Mär 2023, 11:11
Hat sich bedankt: 4 Mal
Danksagung erhalten: 6 Mal

Re: Huawei_LAN.php verstehen

Beitrag von Seb01 »

OK,

einen Schritt weiter. Ich verstehe jetzt, wie das Auslesen geht.

Mit Hilfe der huawei_LAN_math.php und der Anleitung EigeneErweiterungen.pdf habe ich mir mal den Inhalt des Arrays $AktuelleDaten angesehen:

Code: Alles auswählen

12.04. 10:22:12    -Array
(
    [zentralerTimestamp] => 1712910131
    [KeineSonne] => 
    [Modell] => SUN2000-3KTL-M1
    [Firmware] => SUN2000-3KTL-M1
    [Seriennummer] => HV2280360356
    [PN] => 01074316-006
    [ModellID] => 424
    [Anz_PV_Strings] => 2
    [Anz_MPP_Trackers] => 2
    [Status1] => 6
    [Status1Bit] => 0000000000000110
    [Alarm1] => 0
    [Alarm1Bit] => 0000000000000000
    [PV_Leistung] => 489.41
    [PV1_Spannung] => 317.8
    [PV1_Strom] => 1.54
    [PV1_Leistung] => 489.41
    [PV2_Spannung] => 0
    [PV2_Strom] => 0
    [PV2_Leistung] => 0
    [AC_Eingangsleistung] => 423
    [AC_Spannung_R] => 234.8
    [AC_Spannung_S] => 235
    [AC_Spannung_T] => 236
    [AC_Leistung] => 423
    [AC_Frequenz] => 49.97
    [Effizienz] => 100
    [Temperatur] => 40.3
    [DeviceStatus] => 512
    [FehlerCode] => 0
    [WattstundenGesamt] => 2250860
    [WattstundenGesamtHeute] => 1720
    [Batterie_Status] => 2
    [Batterie_Leistung] => 23
    [SOC] => 7
    [AC_Strom_Zaehler_R] => -0.43
    [AC_Strom_Zaehler_S] => 0.58
    [AC_Strom_Zaehler_T] => -0.89
    [Einspeisung_Bezug] => -47
    [WattstundengesamtExport] => 475950
    [WattstundengesamtImport] => 2395660
    [AC_Spannung_Zaehler_R] => 235.1
    [AC_Spannung_Zaehler_S] => 235.5
    [AC_Spannung_Zaehler_T] => 236.3
    [Wirkleistung_Zaehler] => -50
    [Blindleistung_Zaehler] => -124
    [Leistungsfaktor_Zaehler] => 0.105
    [AC_Frequenz_Zaehler] => 49.99
    [AC_Leistung_Zaehler_R] => -32
    [AC_Leistung_Zaehler_S] => 126
    [AC_Leistung_Zaehler_T] => -144
    [Einspeisung] => 0
    [Bezug] => 47
    [Batterie_Ladung] => 23
    [Batterie_Entladung] => 0
    [Hausverbrauch] => 447
    [Regler] => 62
    [Objekt] => Sonnenhag
    [Produkt] => SUN2000-3KTL-M1
)
Jetzt möchte ich herausfinden, wie er die "Felder" in die einzelnen "Measurements" verteilt. Gibt es da eine Matrix beim Schreiben in die Influx-Datenbank?
Wo finde ich, das beim Measurement "Service" das Feld "[Anz_MPP_Trackers] => 2" als "Anz_MPPT" zu finden ist (und nicht unter dem Measurement "Info"?)?

Hintergrund: ich möchte eventuell weitere Werte in die Datenbank schreiben lassen. Ausserdem wird die Firmware des Inverterters nicht richtig ausgelesen. Die ist zur Zeit "V100R001C00SPC159". In der huawei_LAN.php in der Zeile (bei mir) 142 finde ich das Auslesen:
da steht:

Code: Alles auswählen

$aktuelleDaten["Firmware"] = $funktionen->hex2string(substr($rc["Wert"], 0, 30));

und müsste sein:

Code: Alles auswählen

$aktuelleDaten["Firmware"] = $funktionen->hex2string(substr($rc["Wert"], 200, 32));
Herausgefunden habe ich es, als ich mir mal das Array $rc beim Auslesen aus Adress 30000 angeschaut und dekodiert habe. Scheinbar gibt es da bei Adress 30050 mir der Länge 16 und Typ STR die Softwareversion des Inverters. Steht aber nicht in meiner Huawei Modbus Doku, die scheint alt zu sein...

In den $AktuelleDaten ist das dann richtig:

Code: Alles auswählen

[Firmware] => V100R001C00SPC159

Aber in der Datenbank wird es neben dem Feld "Firmware" im Measurement "Info" auch in das Feld "Modell" im Measurement "Service" geschrieben...




Gruss Seb

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste