76_SMAInverter.pm - Abfrage von SMA Wechselrichter

Begonnen von sct14675, 28 Juli 2016, 11:01:16

Vorheriges Thema - Nächstes Thema

fhemfreund

Zitat von: MadMax am 07 Februar 2023, 05:48:07
Hallo Andreas,

Das wird dir nicht angezeigt?

Gruß
Max

Max,

hatte nach meinem letzten Versuch wieder die alte pm eingespielt, daher war diese Info in den Internals nicht zu sehen. Mit deiner letzten Version habe ich jetzt folgendes:


FVERSION  76_SMAInverter.pm:v2.21.5-s27097/2023-01-22
INVCLASS  8007
INVTYPE   9356


Andreas

isy

Zitat von: MadMax am 06 Februar 2023, 20:44:07
Hallo Isy,

Negative Werte sind aber durchaus gewollt weil es kann auch über AC geladen werden.
Hier, mein WR sagt 0W PV, 0W am AC aber die einzelnen Phasen zeigen eine Leistung an..
Und so wird es mir auch in FHEM angezeigt.

Wegen dem Nullen der Werte habe ich eine Theorie die müsste ich nochmal Prüfen.

Gruß
Max

Hallo Max,
soeben kam die Info vom Entwickler von Solarview.
Alle Interface Module (die heißen in SolarView "Proxy") für SMA Wechselrichter setzen Werte <0 auf 0.

Kannst du eine solche Formel einbauen?

VG Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax

Zitat von: isy am 07 Februar 2023, 16:58:12
Hallo Max,
soeben kam die Info vom Entwickler von Solarview.
Alle Interface Module (die heißen in SolarView "Proxy") für SMA Wechselrichter setzen Werte <0 auf 0.

Kannst du eine solche Formel einbauen?

VG Helmut

Hallo Helmut,

Das werde ich nicht einbauen da es wechselrichter gibt, unter Sndeten die Hybridwechselrichter die Negative Werte haben könne. Wenn zum Beispiel aus anderen Wechselrichtern oder aus dem Netz geladen wird.
Bei Batterie Wechselrichtern ist das auch so.
Das ist nunmehr der Reelle wert vom Wechselrichter.
Du könntest alternativ den Wert der DC-Leistung nehmen, der geht nicht ins negative.

Also bei mir wurde heute morgen bei zwei von fünf Wechselrichtern einer der ExxDAY readings nicht zurück gesetzt.
Bei den anderen war alles gut.
Bei meinem Hybridwechselrichter wurde nur EPVTODAY nicht zurück gesetzt die anderen drei Werte aber schon.
:o

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

fhemfreund

@Max,

Kann auch noch was zum Thema Nullung beitragen - siehe Anhang (habe mal deine letzte Version durchlaufen lassen)
Für mich sieht das so aus, als ob erst (teilweise?) genullt wird, wenn Readings-Änderungen auftreten, und nicht wenn es Mitternacht ist ...

Andreas

MadMax

Hallo Zusammen,

ich habe hier das mit den Abnullen und dem Speicher der Werte vom Vortag nochmal komplett überarbeitet.
Das läuft gerade bei mir zum testen, wer testen möchte, bitte gerne :)

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

fhemfreund

Zitat von: MadMax am 08 Februar 2023, 17:28:04
Hallo Zusammen,

ich habe hier das mit den Abnullen und dem Speicher der Werte vom Vortag nochmal komplett überarbeitet.
Das läuft gerade bei mir zum testen, wer testen möchte, bitte gerne :)

Gruß
Max

dann berichte ich mal später ;-)

Habe jetzt folgende Version geladen:


FVERSION  76_SMAInverter.pm:v2.21.5-s27097/2023-01-22
INVCLASS  8007
INVTYPE   9356

fhemfreund

@Max,

fyi - sieht bis jetzt bei mir gut aus (siehe Anhang) ...

Andreas

isy

Zitat von: MadMax am 08 Februar 2023, 06:08:03
Hallo Helmut,

Das werde ich nicht einbauen da es wechselrichter gibt, unter Sndeten die Hybridwechselrichter die Negative Werte haben könne. Wenn zum Beispiel aus anderen Wechselrichtern oder aus dem Netz geladen wird.

Hallo Max,
das ist schade. Ich bin sicher, damit erzeugen wir in FHEM nicht ganz korrekte Daten und Abweichungen zu den Anzeigen am WR und im Sunny Portal.

Da im SolarView Modul für alle SMA Wechselrichter über Modbus die genannte Formel eingerichtet ist, bilden die Hybrid-WR keine Ausnahme.

Ich hoffe, ich kann mir ein userReading einrichten, welches die negativen Readings unterdrückt und was ich dann zur Statistik heranziehen kann.
Sonst gibt es Abweichungen zu den Erträgen (-10Wh * 365d, ist nicht gerade viel pro Jahr).

VG Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax

Hallo Helmut,

noch einmal.
Die Hybrid Wechselrichter und Batteriewechselrichter können negative Werte haben!
Bei normalen Einspeisewechselrichter kann ich sowas einbauen.

Das heist in SolarView werden die Daten nicht korrekt angezeigt.
Die Energiemenge wird im Wechselrichter ermittelt und nicht im Modul berechnet.
Der Wechselrichter wird schon wissen was er dort berechnen muss.

Nimm doch zur Anzeige diesen Wert: SPOT_PDC

@Andreas, bei mir sieht es heute gut aus.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

isy

Hallo Max,
Wiederholung ist die Mutter des Lernens. Sagt ein altes Sprichwort. :)
Also ich kriege die negativen Werte sicherlich mit eigenen Mitteln auf Null.

Lassen wir mal das (professionell vertriebene) Solarview ausser Acht.

Nach deiner Info macht SMA selbst im Web Frontend und auch im Sunny Portal einen Fehler mit der Unterdrückung der negativen Solarerträge?
Kaum zu glauben, aber ich möchte wirklich keine überbordende Diskussion anzetteln.

Dein Modul ist klasse und erlaubt eine gute Integration der gesamten Daten.

Viele Grüße,
Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax

#1270
Du musst nur den Richtigen Wert anschauen....
SPOT_PAC kann negativ sein, SPOT_PDC also die PV Leistung nicht.
Was genau zeigt denn SolarView an?
Ich denke im Sunnyportal wird nicht direkt der AC-Wert angezeigt.
Ich sehen nur Erzeugung, Batterie, Verbrauch und Einspeisung.
Kannst du mir sagen welche Werte SMA dort nimmt?
Ich habe 5 Wechselrichter, davon drei unterschiedliche.

Das Modul ließt die rohen Daten aus dem WR, was man damit macht muss jeder selbst entscheiden.
Darum will ich diese auch nicht im Modul beeinflussen.

Gruß Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

isy

#1271
Hallo Max,

Die negativen Werte sind technisch zu begründen, aber ich kenne mich natürlich nicht mit den "trafolosen" Wechselrichtern aus.
Ich nehme an, dass die AC Versorgung des WR (bei Hybrid-Geräten ohne Batterie muss das so sein eigentlich oder?) über die gleichen AC Leitungen läuft, wie die PV Einspeisung (intern über ein Schaltnetzteil). Und da fließt natürlich Strom ins Gerät der dann - vielleicht - negativ angezeigt wird. Dieser Zustand dauert nicht lange, dazu lege ich gleich mal ein Log an und schau mir das an heute Abend.

Mein Hybrid-WR kann ja Inselbetrieb, d.h. wenn die Batterie angeschaltet ist, wird die eigene Betriebsspannung der Batterie entnommen. Ich warte immer noch auf das Ersatzteil, eventuell bekomme ich neue Erkenntnisse, wenn die Batterie läuft.

Ich brauche den Wert "Aktuelle Leistung" , welches ich im Reading "state" und "SPOT_PACTOT" finde.
Das korreliert mit den Werten im HomeManager (recht genau) und im SolarView (nicht immer so genau). Die Werte sind gleich, aber nicht zum gleichen Zeitstempel. Das liegt am Timing der unterschiedlichen Systeme.
SPOT_PDC habe ich nicht als Summenwert (detail-level 1), nur pro String als SPOT_PDC1 und SPOT_PDC2.

Wann wer "nullt" schaue ich mir heute Abend an.

Bis denne,
VG Helmut

P.S: Ich habe noch keinen Weg gefunden, in einem userReadings neg. Werte auf "0" zu setzen, hi!



Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax

Hallo Isy,

ich habe jetzt noch eine Abfrage mehr eingebaut.
Und zwar wird beim Hybridwechselrichter der Wert PV Erzeugung->Leistung PV-Erzeugung (v6100_0046C200) gelesen.
Dieser wird als Reading SPOT_PDC / strings_pds ausgegebeg, diese Readings gabs es auch schon vorher, war quasi die Summe der Beiden Strings.

Außerdem zeige ich jetzt bei den Hybridwechselrichtern um Status die PV-Leistung und nicht die AC-Leistung an.

Hier noch mein devStateIcon für den Hybridwechselrichter.

{
my $mode = 'measure_power@green';;
$mode = 'measure_power@yellow' if (ReadingsVal($name, "SPOT_PACTOT", "") < 1);;

my $dc_sum = ReadingsVal($name,"SPOT_PDC",0);

my $mode2 = 'sani_solar@green';;
$mode2 = 'sani_solar@yellow' if ($dc_sum < 1);;

my $mode3 = 'solar@green';;
$mode3 = 'solar@yellow' if (ReadingsVal($name,"SPOT_PDC1",0) < 1);;

my $mode4 = 'solar@green';;
$mode4 = 'solar@yellow' if (ReadingsVal($name,"SPOT_PDC2",0) < 1);;

my $chargePw = ReadingsVal($name, "BAT_PDC", "");;

my $charge = '';;
$charge = 'control_arrow_leftward@greenyellow' if ($chargePw < 0);;
$charge = 'control_arrow_rightward@green' if ($chargePw > 0);;

my $ChargeStatusPCT = ReadingsVal($name, "ChargeStatus", "");
my $ChargeStatus = 'measure_battery_100@green';;
$ChargeStatus = 'measure_battery_75@green' if ($ChargeStatusPCT < 80);;
$ChargeStatus = 'measure_battery_50@yellow' if ($ChargeStatusPCT < 55);;
$ChargeStatus = 'measure_battery_25@orange' if ($ChargeStatusPCT < 30);;
$ChargeStatus = 'measure_battery_0@red' if ($ChargeStatusPCT < 6);;

my $Cap = ($ChargeStatusPCT -5) * 190;


"<div>" .
FW_makeImage($mode,"measure_power") ." AC ". ReadingsVal($name,"SPOT_PACTOT",0) ."W  ".
FW_makeImage($mode2,"sani_solar") ." DC ".$dc_sum."W  ".
FW_makeImage($mode3,"solar") ." MPP1 ".ReadingsVal($name,"SPOT_PDC1",0)."W  ".
FW_makeImage($mode4,"solar") ." MPP2 ".ReadingsVal($name,"SPOT_PDC2",0)."W  </br>".
FW_makeImage($ChargeStatus,"") .
FW_makeImage($charge,"") ." ". $chargePw ."W   ".
$ChargeStatusPCT ."% ".
$Cap."wh  ".
"</div>"}


UNd hier für einen Einspeisewechselrichter.

{
my $mode = 'measure_power@green';;
$mode = 'measure_power@yellow' if (ReadingsVal($name, "SPOT_PACTOT", "") < 1);;

my $dc_sum = ReadingsVal($name,"SPOT_PDC1",0) + ReadingsVal($name,"SPOT_PDC2",0);

my $mode2 = 'sani_solar@green';;
$mode2 = 'sani_solar@yellow' if ($dc_sum < 1);;

my $mode3 = 'solar@green';;
$mode3 = 'solar@yellow' if (ReadingsVal($name,"SPOT_PDC1",0) < 1);;

my $mode4 = 'solar@green';;
$mode4 = 'solar@yellow' if (ReadingsVal($name,"SPOT_PDC2",0) < 1);;

"<div>" .
FW_makeImage($mode,"measure_power") ." AC ". ReadingsVal($name,"SPOT_PACTOT",0) ."W  ".
FW_makeImage($mode2,"sani_solar") ." DC ".$dc_sum."W  ".
FW_makeImage($mode3,"solar") ." MPP1 ".ReadingsVal($name,"SPOT_PDC1",0)."W  ".
FW_makeImage($mode4,"solar") ." MPP2 ".ReadingsVal($name,"SPOT_PDC2",0)."W  ".
"</div>"}


Wenn keine Probleme aufallen, dann würde ich diese Version auch mal wieder einchecken wollen.
Das mit den ETODAY Werten scheint ja jetzt auch zu klappen, zumindest hatte ich keine ausreißer merh.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

isy

#1273
Bei Suche gefunden. Gleiche Thematik.
https://forum.iobroker.net/topic/21401/modbus-adapter-mit-sma-wechselrichter-minuswerte

Update:
https://github.com/ioBroker/ioBroker.modbus/issues/58
Manche WR erzeugen noch mehr seltsame Daten

Bei openhab ebenso Thema. Die User sind per Software am Basteln,  die Daten vom Modbus zu korrigieren.

NodeRed dito:
https://discourse.nodered.org/t/modbus-negative-numbers/4074

Ich denke nach wie vor, dass die Adapter den Müll korrigieren sollten:
Ein User braucht die Daten aufbereitet.
Ein Nerd braucht die Rohdaten.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax

#1274
Zum Thma Müll korrigieren...


     $Meter_Grid_FeedIn_PAC1 = unpack("l*", substr $data, 62, 4);
     if($Meter_Grid_FeedIn_PAC1 eq -2147483648) {$Meter_Grid_FeedIn_PAC1 = "-"; }   # Catch 0x80000000 as 0 value
     $Meter_Grid_FeedIn_PAC2 = unpack("l*", substr $data, 90, 4);
     if($Meter_Grid_FeedIn_PAC2 eq -2147483648) {$Meter_Grid_FeedIn_PAC2 = "-"; }   # Catch 0x80000000 as 0 value
     $Meter_Grid_FeedIn_PAC3 = unpack("l*", substr $data, 118, 4);
     if($Meter_Grid_FeedIn_PAC3 eq -2147483648) {$Meter_Grid_FeedIn_PAC3 = "-"; }   # Catch 0x80000000 as 0 value



if(($inv_SPOT_ETODAY eq -2147483648) || ($inv_SPOT_ETODAY eq 0xFFFFFFFF) || $inv_SPOT_ETODAY <= 0) {$inv_SPOT_ETODAY = "-"; }



     $inv_SPOT_PDC1 = ($inv_SPOT_PDC1 == 2147483648) ? 0 : $inv_SPOT_PDC1;
     $inv_SPOT_PDC2 = ($inv_SPOT_PDC2 == 2147483648) ? 0 : $inv_SPOT_PDC2;



     $inv_SPOT_PAC1 = unpack("l*", substr $data, 62, 4);
     if($inv_SPOT_PAC1 eq -2147483648) {$inv_SPOT_PAC1 = "-"; }   # Catch 0x80000000 as 0 value
     $inv_SPOT_PAC2 = unpack("l*", substr $data, 90, 4);
     if($inv_SPOT_PAC2 eq -2147483648) {$inv_SPOT_PAC2 = "-"; }   # Catch 0x80000000 as 0 value
     $inv_SPOT_PAC3 = unpack("l*", substr $data, 118, 4);
     if($inv_SPOT_PAC3 eq -2147483648) {$inv_SPOT_PAC3 = "-"; }   # Catch 0x80000000 as 0 value



     if(($inv_SPOT_UDC1 eq -2147483648) || ($inv_SPOT_UDC1 eq 0xFFFFFFFF)) {$inv_SPOT_UDC1 = 0; } else {$inv_SPOT_UDC1 = $inv_SPOT_UDC1 / 100; }    # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_UDC2 eq -2147483648) || ($inv_SPOT_UDC2 eq 0xFFFFFFFF)) {$inv_SPOT_UDC2 = 0; } else {$inv_SPOT_UDC2 = $inv_SPOT_UDC2 / 100; }    # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_IDC1 eq -2147483648) || ($inv_SPOT_IDC1 eq 0xFFFFFFFF)) {$inv_SPOT_IDC1 = 0; } else {$inv_SPOT_IDC1 = $inv_SPOT_IDC1 / 1000; }   # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_IDC2 eq -2147483648) || ($inv_SPOT_IDC2 eq 0xFFFFFFFF)) {$inv_SPOT_IDC2 = 0; } else {$inv_SPOT_IDC2 = $inv_SPOT_IDC2 / 1000; }   # Catch 0x80000000 and 0xFFFFFFFF as 0 value



     if(($inv_SPOT_UAC1 eq -2147483648) || ($inv_SPOT_UAC1 eq 0xFFFFFFFF) || $inv_SPOT_UAC1 < 0) {$inv_SPOT_UAC1 = "-"; } else {$inv_SPOT_UAC1 = $inv_SPOT_UAC1 / 100; }  # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_UAC2 eq -2147483648) || ($inv_SPOT_UAC2 eq 0xFFFFFFFF) || $inv_SPOT_UAC2 < 0) {$inv_SPOT_UAC2 = "-"; } else {$inv_SPOT_UAC2 = $inv_SPOT_UAC2 / 100; }  # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_UAC3 eq -2147483648) || ($inv_SPOT_UAC3 eq 0xFFFFFFFF) || $inv_SPOT_UAC3 < 0) {$inv_SPOT_UAC3 = "-"; } else {$inv_SPOT_UAC3 = $inv_SPOT_UAC3 / 100; }  # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_UAC1_2 eq -2147483648) || ($inv_SPOT_UAC1_2 eq 0xFFFFFFFF) || $inv_SPOT_UAC1_2 < 0) {$inv_SPOT_UAC1_2 = "-"; } else {$inv_SPOT_UAC1_2 = $inv_SPOT_UAC1_2 / 100; }   # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_UAC2_3 eq -2147483648) || ($inv_SPOT_UAC2_3 eq 0xFFFFFFFF) || $inv_SPOT_UAC2_3 < 0) {$inv_SPOT_UAC2_3 = "-"; } else {$inv_SPOT_UAC2_3 = $inv_SPOT_UAC2_3 / 100; }   # Catch 0x80000000 and 0xFFFFFFFF as 0 value
     if(($inv_SPOT_UAC3_1 eq -2147483648) || ($inv_SPOT_UAC3_1 eq 0xFFFFFFFF) || $inv_SPOT_UAC3_1 < 0) {$inv_SPOT_UAC3_1 = "-"; } else {$inv_SPOT_UAC3_1 = $inv_SPOT_UAC3_1 / 100; }   # Catch 0x80000000 and 0xFFFFFFFF as 0 value


Solache Abfragen sind etwa 100mal im ganzen Modul...

Nimm einfach den Passenden Wert und gut ist!
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax