Hinzufügen von Auslesewerten
Moderator: Ulrich
-
- Beiträge: 26
- Registriert: Fr 29. Jul 2022, 00:07
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 1 Mal
Re: Hinzufügen von Auslesewerten
Hallo und vielen Dank für diese neue Funktion!
Ist es möglich, alle bisherigen Auslesewerte, die seit Inbetriebnahme erhoben wurden, in die InfluxDB unter WattstundengesamtExport bzw. WattstundengesamtImport nachzutragen? Sind die irgendwo noch auf dem WR gespeichert? -> Auf diese Idee komme ich aus dem Grund, weil mit der Huawei eigenen App FusionSolar unabhängig von solaranzeige und Raspberry Pi auch Daten zu den Produktionsmengen der PV-Anlage angezeigt werden, jedoch leider nicht z.B. zum Eigenverbrauch, den ich mir gerne mithilfe von Solaranzeige berechnen lassen möchte.
Ich würde gerne mit meinem Grafana-Dashboard auf diese beiden neuen o.g. Funktionen umschwenken, weil sie genauer sind. Allerdings habe ich heute erst das Update gemacht und benötige aber alle Daten seit Inbetriebnahme im August 22.
Danke für die Info!!!
Re: Hinzufügen von Auslesewerten
Hi!
Seit gestern bin ich OpenWB Besitzer und ärger mich mit dem Huawei WR rum. Da ich die Solaranzeige inzwischen sehr lieb gewonnen habe, möchte ich nicht auf andere Optionen umsteigen und am liebsten alle Werte hier herausbekommen. Ich Empfange die Revelanten Werte aktuell in einem Automationsserver und leite sie dann (ggf. Vorzeichenkorrigiert) zu OpenWB weiter. Bei dem Huawei Lang Dongle Regler (Nr. 62) fehlen jedoch ein paar Werte.
Könntest du die ggf. hinzufügen?
Quelle für die Registerwerte Ist ein anderes Projekt, über welches andere Nutzer direkt über den Wechselrichter die Daten auslesen: Github
Ich wollte es erst in ner _math als zusätzliche Abfrage hinzufügen, bin aber von den offsets doch sehr verwirrt...
Es handelt sich um folgende Werte:
Hier bin ich mir nicht sicher, ob es die eingespeiste Energie ist...
Code: Alles auswählen
rn.PHASE_A_CURRENT: I32Register("A", 1000, 32072, 2), Deutsch: AC_Strom_R
rn.PHASE_B_CURRENT: I32Register("A", 1000, 32074, 2), Deutsch: AC_Strom_S
rn.PHASE_C_CURRENT: I32Register("A", 1000, 32076, 2), Deutsch: AC_Strom_T
Code: Alles auswählen
rn.ACTIVE_GRID_A_CURRENT: I32Register("I", 100, 37107, 2), Deutsch: AC_Strom_Zaehler_R
rn.ACTIVE_GRID_B_CURRENT: I32Register("I", 100, 37109, 2), Deutsch: AC_Strom_Zaehler_S
rn.ACTIVE_GRID_C_CURRENT: I32Register("I", 100, 37111, 2), Deutsch: AC_Strom_Zaehler_T
Code: Alles auswählen
rn.ACTIVE_GRID_A_POWER: I32Register("W", 1, 37132, 2), Deutsch: AC_Leistung_Zaehler_R
rn.ACTIVE_GRID_B_POWER: I32Register("W", 1, 37134, 2), Deutsch: AC_Leistung_Zaehler_S
rn.ACTIVE_GRID_C_POWER: I32Register("W", 1, 37136, 2), Deutsch: AC_Leistung_Zaehler_T
Vielen Dank im Voraus
Christian
P.S.: Da ich mich dann doch kurz damit befasst habe, wäre das hier mein Code-Vorschlag. Ich weiß jedoch überhaupt nicht wie weit man das Register auslesen muss. Starke Vermutung wäre 8A. Ich schaue mal ob ich das in _math zum laufen bekomme
Code: Alles auswählen
$rc = $funktionen->modbus_tcp_lesen( $COM1, $WR_ID, "03", "37000", "8A", "Hex", $Timebase );
if (($rc == false and $i < 2) or $rc["Wert"] == "0" ) {
$funktionen->log_schreiben( "Fehler! Keine gültigen Daten empfangen. ", " ", 5 );
continue;
}
$aktuelleDaten["AC_Strom_R"] = hexdec( substr( $rc["Wert"], 288, 8 ) / 1000);
$aktuelleDaten["AC_Strom_S"] = hexdec( substr( $rc["Wert"], 296, 8 ) / 1000);
$aktuelleDaten["AC_Strom_T"] = hexdec( substr( $rc["Wert"], 304, 8 ) / 1000);
$aktuelleDaten["AC_Strom_Zaehler_R"] = hexdec( substr( $rc["Wert"], 428, 8 ) / 100);
$aktuelleDaten["AC_Strom_Zaehler_S"] = hexdec( substr( $rc["Wert"], 436, 8 ) / 100);
$aktuelleDaten["AC_Strom_Zaehler_T"] = hexdec( substr( $rc["Wert"], 444, 8 ) / 100);
$aktuelleDaten["AC_Leistung_Zaehler_R"] = hexdec( substr( $rc["Wert"], 528, 8 ));
$aktuelleDaten["AC_Leistung_Zaehler_S"] = hexdec( substr( $rc["Wert"], 536, 8 ));
$aktuelleDaten["AC_Leistung_Zaehler_T"] = hexdec( substr( $rc["Wert"], 544, 8 ));
Re: Hinzufügen von Auslesewerten
Um das ganze einfacher zu machen habe ich die Daten identifiziert, die Funktionieren. Die ersten ströme werden anscheinend nicht befüllt, also kann man die weglassen.
Bleiben übrig bei den 37000 Registern:
Und dann noch eine Etage weiter:
Ich weiß nur nicht, wie ich die Zahlen in das Zielformat wandle...
Und meine Tests werden vermutlich durch das nächste Update wieder überschrieben. In der _math habe ich leider keinen Registerabruf hinbekommen.
Werte kommen bei allen an, aber nicht als Float. Ich hoffe die Vorarbeit hilft.
Beste Grüße
Christian
Bleiben übrig bei den 37000 Registern:
Code: Alles auswählen
$aktuelleDaten["AC_Strom_Zaehler_R"] = (hexdec( substr( $rc["Wert"], 428, 8 )) *10);
$aktuelleDaten["AC_Strom_Zaehler_S"] = (hexdec( substr( $rc["Wert"], 436, 8 )) *10);
$aktuelleDaten["AC_Strom_Zaehler_T"] = (hexdec( substr( $rc["Wert"], 444, 8 )) *10);
Code: Alles auswählen
sleep( 1 );
// Registerwerte ab 37000
//Länge des Auslesens: (Letztes Register + Länge)/4 in Hex: dec2hex((144+8)/4)
$rc = $funktionen->modbus_tcp_lesen( $COM1, $WR_ID, "03", "37100", "38", "Hex", $Timebase );
if (($rc == false and $i < 2) or $rc["Wert"] == "0" ) {
$funktionen->log_schreiben( "Fehler! Keine gültigen Daten empfangen. ", " ", 5 );
continue;
}
// Position des Wertes bestimmen: Register *4
$aktuelleDaten["AC_Spannung_Zaehler_R"] = (hexdec( substr( $rc["Wert"], 4, 8 ))); //Int32
$aktuelleDaten["AC_Spannung_Zaehler_S"] = (hexdec( substr( $rc["Wert"], 12, 8 ))); //Int32
$aktuelleDaten["AC_Spannung_Zaehler_T"] = (hexdec( substr( $rc["Wert"], 20, 8 ))); //Int32
$aktuelleDaten["Wirkleistung_Zaehler"] = (hexdec( substr( $rc["Wert"], 52, 8 ))); //Int32
$aktuelleDaten["Blindleistung_Zaehler"] = (hexdec( substr( $rc["Wert"], 60, 8 ))); //Int32
$aktuelleDaten["Leistungsfaktor_Zaehler"] = (hexdec( substr( $rc["Wert"], 68, 4 ))); //Int16
$aktuelleDaten["AC_Frequenz_Zaehler"] = (hexdec( substr( $rc["Wert"], 72, 4 ))); //Int16
$aktuelleDaten["AC_Leistung_Zaehler_R"] = (hexdec( substr( $rc["Wert"], 128, 8 ))); //Int32
$aktuelleDaten["AC_Leistung_Zaehler_S"] = (hexdec( substr( $rc["Wert"], 136, 8 ))); //Int32
$aktuelleDaten["AC_Leistung_Zaehler_T"] = (hexdec( substr( $rc["Wert"], 144, 8 ))); //Int32
Und meine Tests werden vermutlich durch das nächste Update wieder überschrieben. In der _math habe ich leider keinen Registerabruf hinbekommen.
Werte kommen bei allen an, aber nicht als Float. Ich hoffe die Vorarbeit hilft.
Beste Grüße
Christian
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: Hinzufügen von Auslesewerten
Ich habe die Änderungen übernommen. Sie werden erst einmal noch nicht in die Datenbank geschrieben, sollten aber in der LOG Datei zu sehen sein. Kannst du Pendragon es einmal ausprobieren?
- Dateianhänge
-
- huawei_LAN.php
- (18.08 KiB) 102-mal heruntergeladen
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
Re: Hinzufügen von Auslesewerten
Vielen Dank!!
Hier ist der Output:
Wie schon geschrieben, wieß ich nicht wie ich die Zahlen in mit Vorzeichenbehaftete (also INT32) wandeln kann und auch bei der Skalierung bin ich überfragt, ob es jetzt *10 oder durch /100 sein muss. Habe versucht das von den anderen Werten zu übertragen.
Im Anhang sind die Screenshots der 37100er Register.
Hier ist der Output:
Code: Alles auswählen
05.02. 11:05:01 |---------------- Start huawei_LAN.php -----------------------------
05.02. 11:05:01 -Huawei: 192.168.50.37 Port: 502 GeräteID: 1
05.02. 11:05:04 > -Gerätetyp: SUN2000-12KTL-M Modell ID: 432
05.02. 11:05:13 -Array
(
[zentralerTimestamp] => 1707127511
[KeineSonne] =>
[Modell] => SUN2000-12KTL-M
[Firmware] => SUN2000-12KTL-M
[Seriennummer] => HV2170137073
[PN] => 01074319-002
[ModellID] => 432
[Anz_PV_Strings] => 4
[Anz_MPP_Trackers] => 2
[Status1] => 6
[Status1Bit] => 0000000000000110
[Alarm1] => 0
[Alarm1Bit] => 0000000000000000
[PV_Leistung] => 276.82
[PV1_Spannung] => 522.3
[PV1_Strom] => 0.21
[PV1_Leistung] => 109.68
[PV2_Spannung] => 522.3
[PV2_Strom] => 0.32
[PV2_Leistung] => 167.14
[PV3_Spannung] => 0
[PV3_Strom] => 0
[PV3_Leistung] => 0
[PV4_Spannung] => 0
[PV4_Strom] => 0
[PV4_Leistung] => 0
[AC_Eingangsleistung] => 294
[AC_Spannung_R] => 221.1
[AC_Spannung_S] => 222
[AC_Spannung_T] => 218.7
[AC_Leistung] => 269
[AC_Frequenz] => 49.98
[Effizienz] => 91.52
[Temperatur] => 40.8
[DeviceStatus] => 512
[FehlerCode] => 0
[WattstundenGesamt] => 26164390
[WattstundenGesamtHeute] => 370
[Batterie_Status] => 0
[Batterie_Leistung] => 0
[SOC] => 0
[AC_Strom_Zaehler_R] => 42949671230
[AC_Strom_Zaehler_S] => 860
[AC_Strom_Zaehler_T] => 42949672140
[Einspeisung_Bezug] => -287
[WattstundengesamtExport] => 21928670
[WattstundengesamtImport] => 5485890
[AC_Spannung_Zaehler_R] => 2186
[AC_Spannung_Zaehler_S] => 2218
[AC_Spannung_Zaehler_T] => 2213
[Wirkleistung_Zaehler] => 4294967013
[Blindleistung_Zaehler] => 483
[Leistungsfaktor_Zaehler] => 65136
[AC_Frequenz_Zaehler] => 4997
[AC_Leistung_Zaehler_R] => 4294967042
[AC_Leistung_Zaehler_S] => 35
[AC_Leistung_Zaehler_T] => 4294967232
[Einspeisung] => 0
[Bezug] => 287
[Batterie_Ladung] => 0
[Batterie_Entladung] => 0
[Hausverbrauch] => 581
[Regler] => 62
[Objekt] =>
[Produkt] => SUN2000-12KTL-M
)
Im Anhang sind die Screenshots der 37100er Register.
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: Hinzufügen von Auslesewerten
Noch eine Version zum Testen. Jetzt sollten die Vorzeichen usw. stimmen.
- Dateianhänge
-
- huawei_LAN.php
- (18.08 KiB) 120-mal heruntergeladen
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
Re: Hinzufügen von Auslesewerten
Jetzt hängt er sich auf:
Kann es daran liegen, dass diese Werte nicht in der /phpinc/funktionen.inc.php bekannt sind?
Code: Alles auswählen
05.02. 11:30:01 |---------------- Start huawei_LAN.php -----------------------------
05.02. 11:30:01 -Huawei: 192.168.50.37 Port: 502 GeräteID: 1
05.02. 11:30:04 > -Gerätetyp: SUN2000-12KTL-M Modell ID: 432
05.02. 11:31:01 |---------------- Start huawei_LAN.php -----------------------------
05.02. 11:31:01 -Huawei: 192.168.50.37 Port: 502 GeräteID: 1
05.02. 11:31:03 > -Gerätetyp: SUN2000-12KTL-M Modell ID: 432
05.02. 11:32:01 |---------------- Start huawei_LAN.php -----------------------------
05.02. 11:32:01 -Huawei: 192.168.50.37 Port: 502 GeräteID: 1
05.02. 11:32:04 > -Gerätetyp: SUN2000-12KTL-M Modell ID: 432
05.02. 11:33:01 |---------------- Start huawei_LAN.php -----------------------------
05.02. 11:33:01 -Huawei: 192.168.50.37 Port: 502 GeräteID: 1
05.02. 11:33:04 > -Gerätetyp: SUN2000-12KTL-M Modell ID: 432
05.02. 11:34:01 |---------------- Start huawei_LAN.php -----------------------------
05.02. 11:34:01 -Huawei: 192.168.50.37 Port: 502 GeräteID: 1
05.02. 11:34:04 > -Gerätetyp: SUN2000-12KTL-M Modell ID: 432
05.02. 11:35:01 |---------------- Start huawei_LAN.php -----------------------------
05.02. 11:35:01 -Huawei: 192.168.50.37 Port: 502 GeräteID: 1
05.02. 11:35:05 > -Gerätetyp: SUN2000-12KTL-M Modell ID: 432
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste