SMA Modbus SUNNY TRIPOWER 8.0

Begonnen von mediastudio, 30 August 2019, 21:12:22

Vorheriges Thema - Nächstes Thema

Wzut

#30
ne Denkfehler , die 240 sind in Wahrheit 24000 da ja später noch das Komma gesetzt werden kann :)
attr 8000TL obj-h30783-expr ($val & 0x5FFF) /100

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

MadMax

Hallo Zusammen,

ich hoffe ich bin hier richtig.
Nachdem das SMA Inverter Modul sich nicht mit meinem neuen SMA STP8.0SE Hybridwechselrichter verbindet (eigentlich kann der Speedwire aber es kommt nur Timeout) versuche ich es nun mit Modbus.


defmod STP8SE ModbusAttr 3  30   192.168.xx.xx:502  TCP
attr STP8SE dev-h-defExpr $val & 0x1FFFFFFF
attr STP8SE dev-h-defLen 2
attr STP8SE dev-h-defPoll 1
attr STP8SE dev-h-defUnpack N
attr STP8SE event-on-change-reading .*
attr STP8SE obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
attr STP8SE obj-h30201-reading Status
attr STP8SE obj-h30217-map 16777213:Fehler, 51:geschlossen, 311:offen
attr STP8SE obj-h30217-reading Netzrelais
attr STP8SE obj-h30529-reading Gesamtertrag
attr STP8SE obj-h30535-reading Tagesertrag
attr STP8SE obj-h30769-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30769-format %.3f
attr STP8SE obj-h30769-reading DC_Strom_1
attr STP8SE obj-h30771-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30771-format %.2f
attr STP8SE obj-h30771-reading DC_Spannung_1
attr STP8SE obj-h30773-reading DC_Leistung_1
attr STP8SE obj-h30775-reading Wirkleistung
attr STP8SE obj-h30777-reading Wirkleistung_L1
attr STP8SE obj-h30779-reading Wirkleistung_L2
attr STP8SE obj-h30781-reading Wirkleistung_L3
attr STP8SE obj-h30843-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30843-format %.3f
attr STP8SE obj-h30843-reading Batteriestrom
attr STP8SE obj-h30845-reading Ladezustand
attr STP8SE obj-h30849-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30849-format %.1f
attr STP8SE obj-h30849-reading Batterietemperatur
attr STP8SE obj-h30851-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30851-format %.2f
attr STP8SE obj-h30851-reading Batteriespannung
attr STP8SE obj-h30953-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30953-format %.1f
attr STP8SE obj-h30953-reading Temperatur
attr STP8SE obj-h30955-map 16777213:Fehler, 303:Aus, 2291:standby, 2292:laden, 2293:entladen
attr STP8SE obj-h30955-reading Batteriestatus
attr STP8SE obj-h30957-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30957-format %.3f
attr STP8SE obj-h30957-reading DC_Strom_2
attr STP8SE obj-h30959-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30959-format %.2f
attr STP8SE obj-h30959-reading DC_Spannung_2
attr STP8SE obj-h30961-reading DC_Leistung_2
attr STP8SE obj-h31393-reading Batterieladeleistung
attr STP8SE obj-h31395-reading Batterieentladleistung
attr STP8SE obj-h34661-len 4
attr STP8SE obj-h34661-reading Batterieladung
attr STP8SE obj-h34665-len 4
attr STP8SE obj-h34665-reading Batterieentladung
attr STP8SE room PV->Stromversorgung

setstate STP8SE opened
setstate STP8SE 2022-07-06 18:12:50 Batterieentladleistung 0
setstate STP8SE 2022-07-06 18:12:50 Batterieentladung 0
setstate STP8SE 2022-07-06 18:12:50 Batterieladeleistung 0
setstate STP8SE 2022-07-06 18:12:50 Batterieladung 536870911
setstate STP8SE 2022-07-06 18:12:49 Batteriespannung 374.80
setstate STP8SE 2022-07-06 18:12:49 Batteriestatus standby
setstate STP8SE 2022-07-06 18:12:48 Batteriestrom 0.000
setstate STP8SE 2022-07-06 18:12:49 Batterietemperatur 20.0
setstate STP8SE 2022-07-06 18:12:47 DC_Leistung_1 1512
setstate STP8SE 2022-07-06 18:12:50 DC_Leistung_2 450
setstate STP8SE 2022-07-06 18:12:47 DC_Spannung_1 576.50
setstate STP8SE 2022-07-06 18:12:49 DC_Spannung_2 404.40
setstate STP8SE 2022-07-06 18:12:47 DC_Strom_1 2.622
setstate STP8SE 2022-07-06 18:12:49 DC_Strom_2 1.086
setstate STP8SE 2022-07-06 18:12:46 Gesamtertrag 41117
setstate STP8SE 2022-07-06 18:12:48 Ladezustand 100
setstate STP8SE 2022-07-06 18:12:46 Netzrelais geschlossen
setstate STP8SE 2022-07-06 18:12:46 Status OK
setstate STP8SE 2022-07-06 18:12:46 Tagesertrag 21216
setstate STP8SE 2022-07-06 18:12:49 Temperatur 38.8
setstate STP8SE 2022-07-06 18:12:47 Wirkleistung 1870
setstate STP8SE 2022-07-06 18:12:47 Wirkleistung_L1 663
setstate STP8SE 2022-07-06 18:12:48 Wirkleistung_L2 665
setstate STP8SE 2022-07-06 18:12:48 Wirkleistung_L3 667
setstate STP8SE 2022-07-06 17:44:10 state opened


Soweit komme ich an alle Interessanten werte ran, nur nicht die Batterieladung und Entladung in wh.
Da kommt nur Blödsinn raus.

Die Register sind vom SBS2.5 aber liefern mir keine Plausiblen werte...

31397 Battery charge Wh U64 FIX0 RO
31401 Battery discharge Wh U64 FIX0 RO
34661 Charge of current battery Wh U64 FIX0 RO
34665 Battery discharge of current battery Wh U64 FIX0 RO


Hat Jemand eine Idee oder kennt ein neueres Dokument?

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

MadMax

Hallo,

ich bekomme jetzt soweit alle Daten die ich aktuell benötige.
Hier die Konfiguration falls jemand auch einen SMA STP Smart Energy hat.


defmod STP8SE ModbusAttr 3  30   192.168.xx.xx:502  TCP
attr STP8SE dev-h-defExpr $val & 0x1FFFFFFF
attr STP8SE dev-h-defLen 2
attr STP8SE dev-h-defPoll 1
attr STP8SE dev-h-defUnpack N
attr STP8SE event-min-interval .*:1200
attr STP8SE event-on-change-reading .*eistung.*:10,.*DC_Spannung.*:5,.*trom.*:0.2,.*EYESTERDAY.*,.*Batteriespannung.*:0.5
attr STP8SE obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
attr STP8SE obj-h30201-reading Status
attr STP8SE obj-h30217-map 16777213:Fehler, 51:geschlossen, 311:offen
attr STP8SE obj-h30217-reading Netzrelais
attr STP8SE obj-h30529-reading Gesamtertrag
attr STP8SE obj-h30535-reading Tagesertrag
attr STP8SE obj-h30769-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30769-format %.3f
attr STP8SE obj-h30769-reading DC_Strom_1
attr STP8SE obj-h30771-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30771-format %.2f
attr STP8SE obj-h30771-reading DC_Spannung_1
attr STP8SE obj-h30773-reading DC_Leistung_1
attr STP8SE obj-h30775-expr $val & 0xFFFFFFFF
attr STP8SE obj-h30775-len 2
attr STP8SE obj-h30775-reading Wirkleistung
attr STP8SE obj-h30775-unpack l>
attr STP8SE obj-h30777-reading Wirkleistung_L1
attr STP8SE obj-h30779-reading Wirkleistung_L2
attr STP8SE obj-h30781-reading Wirkleistung_L3
attr STP8SE obj-h30843-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30843-format %.3f
attr STP8SE obj-h30843-reading Batteriestrom
attr STP8SE obj-h30845-reading Ladezustand
attr STP8SE obj-h30849-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30849-format %.1f
attr STP8SE obj-h30849-reading Batterietemperatur
attr STP8SE obj-h30851-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30851-format %.2f
attr STP8SE obj-h30851-reading Batteriespannung
attr STP8SE obj-h30953-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30953-format %.1f
attr STP8SE obj-h30953-reading Temperatur
attr STP8SE obj-h30955-map 16777213:Fehler, 303:Aus, 2291:standby, 2292:laden, 2293:entladen
attr STP8SE obj-h30955-reading Batteriestatus
attr STP8SE obj-h30957-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30957-format %.3f
attr STP8SE obj-h30957-reading DC_Strom_2
attr STP8SE obj-h30959-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30959-format %.2f
attr STP8SE obj-h30959-reading DC_Spannung_2
attr STP8SE obj-h30961-reading DC_Leistung_2
attr STP8SE obj-h31393-reading Batterieladeleistung
attr STP8SE obj-h31395-reading Batterieentladleistung
attr STP8SE obj-h31397-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31397-len 4
attr STP8SE obj-h31397-reading Batterieladung
attr STP8SE obj-h31397-unpack Q>
attr STP8SE obj-h31401-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31401-len 4
attr STP8SE obj-h31401-reading Batterieentladung
attr STP8SE obj-h31401-unpack Q>



attr STP8SE devStateIcon {\
my $mode = 'measure_power@green';;;;\
$mode = 'measure_power@yellow' if (ReadingsVal($name, "Wirkleistung", "") < 1);;;;\
\
my $dc_sum = ReadingsVal($name,"DC_Leistung",0);; \
\
my $mode2 = 'sani_solar@green';;;;\
$mode2 = 'sani_solar@yellow' if ($dc_sum < 1);;;;\
\
my $mode3 = 'solar@green';;;;\
$mode3 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_1",0) < 1);;;;\
\
my $mode4 = 'solar@green';;;;\
$mode4 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_2",0) < 1);;;;\
\
my $chargePw = ReadingsVal($name, "Batterieleistung", "");;;;\
\
my $charge = '';;;;\
$charge = 'control_arrow_leftward@greenyellow' if ($chargePw < 0);;;;\
$charge = 'control_arrow_rightward@green' if ($chargePw > 0);;;;\
\
my $ChargeStatus = 'measure_battery_100@green';;;;\
$ChargeStatus = 'measure_battery_75@green' if (ReadingsVal($name, "Ladezustand", "") < 80);;;;\
$ChargeStatus = 'measure_battery_50@yellow' if (ReadingsVal($name, "Ladezustand", "") < 55);;;;\
$ChargeStatus = 'measure_battery_25@orange' if (ReadingsVal($name, "Ladezustand", "") < 30);;;;\
$ChargeStatus = 'measure_battery_0@red' if (ReadingsVal($name, "Ladezustand", "") < 6);;;;\
\
my $Cap = (ReadingsVal($name,"Ladezustand",0) -5) * 190;;\
\
\
"<div>" . \
FW_makeImage($mode,"measure_power") ." AC ". ReadingsVal($name,"Wirkleistung",0) ."W  ". \
FW_makeImage($mode2,"sani_solar") ." DC ".$dc_sum."W  ". \
FW_makeImage($mode3,"solar") ." MPP1 ".ReadingsVal($name,"DC_Leistung_1",0)."W  ". \
FW_makeImage($mode4,"solar") ." MPP2 ".ReadingsVal($name,"DC_Leistung_2",0)."W  ". \
FW_makeImage($ChargeStatus,"") . \
FW_makeImage($charge,"") ." ". $chargePw ."W   ". \
ReadingsVal($name,"Ladezustand",0) ."% ".\
$Cap."wh  ".\
"</div>"}


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

didy

#33
Zitat von: MadMax am 09 Juli 2022, 15:00:25
Hallo,

ich bekomme jetzt soweit alle Daten die ich aktuell benötige.
Hier die Konfiguration falls jemand auch einen SMA STP Smart Energy hat.
Danke!
Hab die Namen etwas für mich angepasst, aber warst mir eine große Hilfe, allein das ModbusAttr-Modul verstehen.

Interessanterweise ist bei mir die Summe der Wirkleistung L1+L2+L3 nicht das selbe wie die gesamte Wirkleistung. Ist das bei dir auch so?

Das was man aktuell an Verbrauch hat (was der WR selbst ja berechnet für seine eigene Websiten-Darstellung bzw. für die App) scheint man nicht abrufen zu können. Ich rechne das dann selbst aus, sieh hier:
https://forum.fhem.de/index.php/topic,128947.0.html
(War eigentlich ne Frage, hab mir die Antwort dann 20min später selber gegeben....)

didy

Ganz passt das noch nicht. Ich bekomme bei Wirkleistung keine negativer Werte sondern stattdessen Werte kurz vor 32bit-Vollausschlag, trotz des "attr STP8SE obj-h30775-unpack l>". (Eingenverbrauch WR nachts wenn auch keine Batterie-Einspeisung mehr.)

Die Wirkleistung der drei Phasen ist auch signed Datentyp, hier fehlt bei dir das passende unpack. (Generell wäre zu überlegen, ob es nicht sinnvoller ist, signed als default zu machen und bei den unsigned einen entsprechenden unpack anzugeben.)

Was ich noch nicht verstehe: Warum blendest du per Default einige Bits aus per "attr STP8SE dev-h-defExpr $val & 0x1FFFFFFF"? Ist das der "Workaround" um das Vorzeichen zu ignorieren?
(Nein das ist nicht der Grund, dass das signed nicht funktioniert, das passende expr für den 30775 habe ich schon auch.)

MadMax

Hallo,

mittlerweile habe ich den WR so in betrieb:


defmod STP8SE ModbusAttr 3  30   192.168.xx.xx:502  TCP
attr STP8SE dev-h-defLen 2
attr STP8SE dev-h-defPoll 1
attr STP8SE dev-h-defUnpack N
attr STP8SE devStateIcon {\
my $mode = 'measure_power@green';;;;\
$mode = 'measure_power@yellow' if (ReadingsVal($name, "Wirkleistung", "") < 1);;;;\
\
my $dc_sum = ReadingsVal($name,"DC_Leistung",0);; \
\
my $mode2 = 'sani_solar@green';;;;\
$mode2 = 'sani_solar@yellow' if ($dc_sum < 1);;;;\
\
my $mode3 = 'solar@green';;;;\
$mode3 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_1",0) < 1);;;;\
\
my $mode4 = 'solar@green';;;;\
$mode4 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_2",0) < 1);;;;\
\
my $chargePw = ReadingsVal($name, "Batterieleistung", "");;;;\
\
my $charge = '';;;;\
$charge = 'control_arrow_leftward@greenyellow' if ($chargePw < 0);;;;\
$charge = 'control_arrow_rightward@green' if ($chargePw > 0);;;;\
\
my $ChargeStatus = 'measure_battery_100@green';;;;\
$ChargeStatus = 'measure_battery_75@green' if (ReadingsVal($name, "Ladezustand", "") < 80);;;;\
$ChargeStatus = 'measure_battery_50@yellow' if (ReadingsVal($name, "Ladezustand", "") < 55);;;;\
$ChargeStatus = 'measure_battery_25@orange' if (ReadingsVal($name, "Ladezustand", "") < 30);;;;\
$ChargeStatus = 'measure_battery_0@red' if (ReadingsVal($name, "Ladezustand", "") < 6);;;;\
\
my $Cap = (ReadingsVal($name,"Ladezustand",0) -5) * 190;;\
\
\
"<div>" . \
FW_makeImage($mode,"measure_power") ." AC ". ReadingsVal($name,"Wirkleistung",0) ."W  ". \
FW_makeImage($mode2,"sani_solar") ." DC ".$dc_sum."W  ". \
FW_makeImage($mode3,"solar") ." MPP1 ".ReadingsVal($name,"DC_Leistung_1",0)."W  ". \
FW_makeImage($mode4,"solar") ." MPP2 ".ReadingsVal($name,"DC_Leistung_2",0)."W  ". \
FW_makeImage($ChargeStatus,"") . \
FW_makeImage($charge,"") ." ". $chargePw ."W   ". \
ReadingsVal($name,"Ladezustand",0) ."% ".\
$Cap."wh  ".\
"</div>"}
attr STP8SE event-min-interval .*:1200
attr STP8SE event-on-change-reading .*eistung.*:10,.*DC_Spannung.*:5,.*trom.*:0.2,.*EYESTERDAY.*,.*Batteriespannung.*:0.5,Ladezustand.*
attr STP8SE group PV Energy
attr STP8SE obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
attr STP8SE obj-h30201-reading Status
attr STP8SE obj-h30217-map 16777213:Fehler, 51:geschlossen, 311:offen
attr STP8SE obj-h30217-reading Netzrelais
attr STP8SE obj-h30529-reading Gesamtertrag
attr STP8SE obj-h30535-reading Tagesertrag
attr STP8SE obj-h30769-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30769-format %.3f
attr STP8SE obj-h30769-reading DC_Strom_1
attr STP8SE obj-h30771-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30771-format %.2f
attr STP8SE obj-h30771-reading DC_Spannung_1
attr STP8SE obj-h30773-reading DC_Leistung_1
attr STP8SE obj-h30775-expr $val
attr STP8SE obj-h30775-len 2
attr STP8SE obj-h30775-reading Wirkleistung
attr STP8SE obj-h30775-unpack i>
attr STP8SE obj-h30777-expr $val
attr STP8SE obj-h30777-reading Wirkleistung_L1
attr STP8SE obj-h30777-unpack i>
attr STP8SE obj-h30779-expr $val
attr STP8SE obj-h30779-reading Wirkleistung_L2
attr STP8SE obj-h30779-unpack i>
attr STP8SE obj-h30781-expr $val
attr STP8SE obj-h30781-reading Wirkleistung_L3
attr STP8SE obj-h30781-unpack i>
attr STP8SE obj-h30843-expr $val/1000
attr STP8SE obj-h30843-format %.3f
attr STP8SE obj-h30843-reading Batteriestrom
attr STP8SE obj-h30843-unpack i>
attr STP8SE obj-h30845-reading Ladezustand
attr STP8SE obj-h30849-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30849-format %.1f
attr STP8SE obj-h30849-reading Batterietemperatur
attr STP8SE obj-h30851-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30851-format %.2f
attr STP8SE obj-h30851-reading Batteriespannung
attr STP8SE obj-h30953-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30953-format %.1f
attr STP8SE obj-h30953-reading Temperatur
attr STP8SE obj-h30955-map 16777213:Fehler, 303:Aus, 2291:standby, 2292:laden, 2293:entladen
attr STP8SE obj-h30955-reading Batteriestatus
attr STP8SE obj-h30957-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30957-format %.3f
attr STP8SE obj-h30957-reading DC_Strom_2
attr STP8SE obj-h30959-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30959-format %.2f
attr STP8SE obj-h30959-reading DC_Spannung_2
attr STP8SE obj-h30961-reading DC_Leistung_2
attr STP8SE obj-h31393-reading Batterieladeleistung
attr STP8SE obj-h31395-reading Batterieentladleistung
attr STP8SE obj-h31397-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31397-len 4
attr STP8SE obj-h31397-reading Batterieladung
attr STP8SE obj-h31397-unpack Q>
attr STP8SE obj-h31401-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31401-len 4
attr STP8SE obj-h31401-reading Batterieentladung
attr STP8SE obj-h31401-unpack Q>
attr STP8SE obj-h40073-reading BAT_EV_Untere_Batterieentladegrenze
attr STP8SE obj-h40149-len 2
attr STP8SE obj-h40149-reading Set_Leistung
attr STP8SE obj-h40149-set 1
attr STP8SE obj-h40149-unpack i>
attr STP8SE obj-h40151-reading Set_Aktiv
attr STP8SE obj-h40151-set 1
attr STP8SE obj-h40236-reading Set_BMS_Mode
attr STP8SE obj-h40236-set 1
attr STP8SE obj-h40721-reading BAT_Minimale_Breite_des_Tiefentladeschutzbereichs
attr STP8SE obj-h40781-reading Set_Netzaustauschleistung
attr STP8SE obj-h40781-set 1
attr STP8SE obj-h40793-reading Set_LadeP_min
attr STP8SE obj-h40793-set 1
attr STP8SE obj-h40795-reading Set_LadeP_max
attr STP8SE obj-h40795-set 1
attr STP8SE obj-h40797-reading Set_EntladeP_min
attr STP8SE obj-h40797-set 1
attr STP8SE obj-h40799-reading Set_EntladeP_max
attr STP8SE obj-h40799-set 1


Damit kann ich auf die Ladung manuell über Modbus steuern.


Ja die Summe der Leistungten passt bei mir auch nicht 100%, außerdem wird die Batterieentladung nur auf 10w genau gerundet.

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

didy

Hi,

Zitat von: MadMax am 29 August 2022, 18:20:11attr STP8SE obj-h30775-unpack i>
attr STP8SE obj-h30777-expr $val
Was ist der Hintergrund deines wechsels von l (klein L) auf i? Soweit ich sehe ist der Unterschied, dass du i nicht die Länge des Integers definierst - was macht das in der Praxis für einen Unterschied?
Und welchen Zweck hat ein "expr $val" - was macht das anders als das expr ganz wegzulassen?

Jedenfalls, ich habe jetzt mal angefangen mich ein wenig mit diesen ganzen Unpack-Optionen etc. zu beschäftigen. Du hast einen Standard definiert und Abweichungen davon jeweils einzeln definiert. Ich glaube ich mach das anders: Man kann auch Typen definieren. Man braucht ja fast immer die gleichen Dinge.
Ich hab mal mit folgenden angefangen, und die entsprechend der Tabelle von SMA benannt:

attr WR dev-type-S32_FIX0-len 2
attr WR dev-type-S32_FIX0-unpack l>

attr WR dev-type-U32_FIX2-len 2
attr WR dev-type-U32_FIX2-unpack L>
attr WR dev-type-U32_FIX2-expr $val / 100
attr WR dev-type-U32_FIX2-format %.2f

attr WR dev-type-S32_FIX3-len 2
attr WR dev-type-S32_FIX3-unpack l>
attr WR dev-type-S32_FIX3-expr $val / 1000
attr WR dev-type-S32_FIX3-format %.3f


Man braucht für die einzelnen Datenobjekte dann immer nur noch angeben, welchen Typ sie haben, spart einiges Copy&Paste, da ja viel gleich ist:

attr WR obj-h30775-reading Pw
attr WR obj-h30775-type S32_FIX0

attr WR obj-h30783-reading U_L1
attr WR obj-h30783-type U32_FIX2

attr WR obj-h30843-reading Bat_I
attr WR obj-h30783-type S32_FIX3


Ich denke ich arbeit da heut abend weiter, kann dann auch meine Lösung komplett posten wenn ichs fertig hab.
Das mit den Stati sieht auch interessant aus, aber damit hab ich mich noch gar nicht beschäftigt, ich muss erstmal die Daten vernünftig reinbekommen. Und das schreiben hab ich auch noch nicht angeschaut.

Zitat von: MadMax am 29 August 2022, 18:20:11Damit kann ich auf die Ladung manuell über Modbus steuern.
Blöde Frage, aber anhand was steuerst du das, und wieso lässt ihn nicht einfach selber machen, bzw. mit der Sunny-Portal-Prognose?

Zitat von: MadMax am 29 August 2022, 18:20:11Ja die Summe der Leistungten passt bei mir auch nicht 100%,
Ich hab mir das nochmal angeschaut. Wenn man Momentanwerte anschaut passt hat man ständig das Gefühl, es passt nicht. Plottet man beides (also die Wirkleistungssumme vom Wechselrichter sowie die selbstgerechnete Summe L1+L2+L3) als Diagramm, sieht es eher so aus, als sei der Hauptunterschied, dass die Zahlen ggf. ein paar Sekunden versatz haben, die Kurven passen jedenfalls recht gut zusammen. Kleine Abweichungen dann ggf. noch durch Rundungsfehler, er gibt ja nur ganze Watt aus.

Zitat von: MadMax am 29 August 2022, 18:20:11außerdem wird die Batterieentladung nur auf 10w genau gerundet.
Sicher, dass er nicht einfach nur 10W-Stufen macht? Auch beim Blick in die Wechselrichtereigene App/Webseite seh ich da meist nur 10W-Stufen, und die Differenz von 3-5W wird aus dem Netz bezogen oder ins Netz eingespeist.

Mich wundert an der Stelle eher was anderes - die Summe beider PV-String-DC-Leistungen ist größer als die AC-Leistung (also wenn keine Batterieladung), was logisch ist weil der Wechselrichter einen Wirkungsgrad <100% hat. Im nächtlichen Batteriebetrieb sieht aber die AC-Leistung und die Batterie-Entladeleistung gleich aus. Wahrscheinlich wird das aber daran liegen, dass 2% von 200W (nachts von der Batterie) absolut nur ne Handvoll Watt sind die in Rauschen und Rundungsfehler untergehen, bei >5kW vom Dach fällt das eher auf.

Grüße,
Didi

MadMax

Ich hatte irgendwann alle Werte dir ich brauchte.
Ich hab einfach nur viel rumprobiert bis die Werte gepasst hatten  :o

Die Ladung steuere ich manuell weil bei 37kwp im Sommer auch gerne mal über 20kw vom Dach kommen und da hat die Steuerung von SMA am Nachmittag die Batterie in 15minuten mit 10kw voll geladen was jedesmal für die Batterie ein Schlag ins Gesicht ist.
Darum Steuere ich das selbst. Außerdem muss ich die Batterie nicht immer auf 100% laden.

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

didy

Zitat von: MadMax am 29 August 2022, 19:09:26Ich hatte irgendwann alle Werte dir ich brauchte.
Ich hab einfach nur viel rumprobiert bis die Werte gepasst hatten  :o
Okay alles klar :D

Zitat von: MadMax am 29 August 2022, 19:09:26Die Ladung steuere ich manuell weil bei 37kwp
Und da hast du nur die 8kW-Version vom WR? :D
D.h. du hast nur einen Wechselrichter mit Batterie?

Zitat von: MadMax am 29 August 2022, 19:09:26im Sommer auch gerne mal über 20kw vom Dach kommen und da hat die Steuerung von SMA am Nachmittag die Batterie in 15minuten mit 10kw voll geladen was jedesmal für die Batterie ein Schlag ins Gesicht ist.
Okay, d.h. du steuerst weniger die Zeit sondern vielmehr die Ladeleistung.

MadMax

Ich habe insgesamt 5 Wechselrichter aber nur der STP8.0SE ist über Modbus eingebunden, die anderen über SMAInverter.

Ja genau, ich will wegen der Effizienz nur aus der PV vom STP8.0SE in die Batterie laden, darum gebe ich als sollwert zum laden die aktuelle DC Leistung mal 0.8 vor und begrenze das ganze noch auf 2000w.
Ich berechne den mindestladestand für die nächste Nacht mit etwas Reserve.
Dann lass ich noch "Platz" für die 70% Regelung und ab 15uhr lade ich dann mit maximal 2000w bis 80% und alle 7 Tage mal auf 100%.
Das Funktioniert aktuell sehr gut, ich denke wenn die Sonnenstunden weniger werden und es auch Diesiger wird werde ich auch noch über die anderen WR von der AC-Seite nachladen müssen.
Also die AC-Leistung kann auch negativ sein.

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

fireball

Hi,

wenn der WR keinen Strom mehr produziert, dann stehen bei mir sinnfrei Werte in den Readings.
Wie kann ich diese Werte einfach auf 0 setzen?
Bei eingigen Werte funktioniert es:
DC_Leistung_Eingang
Netzstrom_Phase_L2

bei einigen wie:
DC_Spannung_Eingang
DC_Strom_Eingang
Nennfrequenz
Netzspannung_Phase_L2
funktioniert es nicht...

Danke
VG
René

Internals:
   DEF        3  30   192.168.178.7:502  TCP
   DeviceName 192.168.178.7:502
   EXPECT     idle
   FD         60
   FUUID      608005a6-f33f-0804-ef70-a711145ff3715ef4
   IODev      SunnyBoy
   Interval   30
   LASTOPEN   1664861995.58783
   MODBUSID   3
   MODE       master
   MODULEVERSION Modbus 4.4.04 - 17.7.2021
   NAME       SunnyBoy
   NOTIFYDEV  global
   NR         576
   NTFY_ORDER 50-SunnyBoy
   PARTIAL   
   PROTOCOL   TCP
   STATE      OK
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   eventCount 18733
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2022-10-04 19:40:23   DC_Leistung_Eingang 0.00
     2022-10-04 19:40:22   DC_Spannung_Eingang 21474836.48
     2022-10-04 19:40:22   DC_Strom_Eingang 2147483.65
     2022-10-04 19:40:22   Gesamtertrag    6910104
     2022-10-04 19:40:23   Nennfrequenz    655.35
     2021-04-23 08:09:54   Nennleistung_im_Zustand_Ok 2500
     2022-10-04 19:40:23   Netzspannung_Phase_L2 42949672.95
     2022-10-04 19:40:23   Netzstrom_Phase_L2 0.00
     2022-10-04 19:40:22   Status          OK
     2022-10-04 19:40:22   Tagesertrag     9.143
     2022-10-04 19:40:23   Temperatur      0
     2022-10-04 19:40:22   Wirkleistung_Begrenzung 2500
     2022-10-04 19:40:23   Wirkleistung_Max 2500
     2022-10-04 19:40:23   Wirkleistung_Phase_L2 0
     2022-10-04 19:40:23   statStateDay    opened: 19:40:26 opened_Count: 1
     2022-10-03 23:59:55   statStateDayLast opened: 24:00:00 opened_Count: 1
     2022-10-04 19:40:23   statStateMonth  opened: 3d 19:40:26 opened_Count: 1
     2022-09-30 23:59:55   statStateMonthLast opened: 1d 01:18:31 opened_Count: 1 (since: 2022-09-29_22:41:24)
     2022-10-04 19:40:23   statStateYear   opened: 4d 20:58:57 opened_Count: 1 (since: 2022-09-29_22:41:24)
     2022-10-04 07:39:56   state           opened
   REMEMBER:
     lid        3
     lname      SunnyBoy
     lrecv      1664905223.7915
     lsend      1664905223.77444
   defptr:
     SunnyBoy   3
   gotReadings:
     Netzstrom_Phase_L2 0.00
   helper:
     _98_statistics EnergieManagement
   lastRead:
     h30201     1664905222.33045
     h30233     1664905222.46102
     h30529     1664905222.59304
     h30535     1664905222.71326
     h30769     1664905222.83658
     h30771     1664905222.95322
     h30773     1664905223.07406
     h30775     1664905223.19438
     h30785     1664905223.31375
     h30803     1664905223.43337
     h30837     1664905223.55426
     h30953     1664905223.67299
     h30979     1664905223.79283
Attributes:
   alias      SunnyBoy
   dev-h-defExpr $val & 0x1FFFFFFF
   dev-h-defLen 2
   dev-h-defPoll 1
   dev-h-defUnpack N
   obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
   obj-h30201-reading Status
   obj-h30233-reading Wirkleistung_Begrenzung
   obj-h30529-reading Gesamtertrag
   obj-h30535-expr $val/1000
   obj-h30535-format %.3f
   obj-h30535-reading Tagesertrag
   obj-h30769-expr $val/1000
   obj-h30769-format %.2f
   obj-h30769-reading DC_Strom_Eingang
   obj-h30771-expr $val/100
   obj-h30771-format %.2f
   obj-h30771-reading DC_Spannung_Eingang
   obj-h30773-format %.2f
   obj-h30773-reading DC_Leistung_Eingang
   obj-h30775-reading Wirkleistung_Phase_L2
   obj-h30785-expr $val/100
   obj-h30785-format %.2f
   obj-h30785-reading Netzspannung_Phase_L2
   obj-h30803-expr ($val  & 0xFFFF) / 100
   obj-h30803-format %2.2f
   obj-h30803-reading Nennfrequenz
   obj-h30837-reading Wirkleistung_Max
   obj-h30953-expr ($val  & 0xFFFF) / 10
   obj-h30953-format %.0f
   obj-h30953-reading Temperatur
   obj-h30979-expr ($val & 0x7FFF) /1000
   obj-h30979-format %.2f
   obj-h30979-reading Netzstrom_Phase_L2
   room       ENERGIE,HWR
   stateFormat Status

Wzut

#41
Zitat von: fireball am 04 Oktober 2022, 19:44:06
Wie kann ich diese Werte einfach auf 0 setzen?

   obj-h30803-expr ($val  & 0xFFFF) / 100

nicht unbedingt 0 aber um die sinnvoll zu bändigen kann man z.B. schon mal alles platt schlagen was nicht sein kann.
Am Beispiel Frequenz statt 0xFFFF runter gehen auf 0x13FF - also von 65535 auf nur noch 5119

   obj-h30803-expr ($val  & 0x13FF) / 100
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Danke, das hat soweit geklappt, jetzt steht da  51.19.

Warum dann aber nicht so, da steht dann glatt 50.00, zumindest solange kein echter Wert anliegt.
($val & 0x1388) / 100

Kannst du mir das Vorgehen nochmal genau erklären? $val ist der Wert, wenn der da ist, brauch ich nur noch ein Format und evtl. eine Umrechnung, zB /1000 oder so.
Was macht das ($val  & 0x13FF) genau?

Und warum setze ich das aktuell fast für jeden Wert, hab aber auch noch einen globalen Umrechner    dev-h-defExpr $val & 0x1FFFFFFF

VG+Danke
René

habl

SMA Geräte haben die Eigenschaft, sofern der WR die angefragten Werte nicht ermitteln kann, bestimmte Werte zurückzugeben. Das passiert z.B. bei einem Reboot, Update etc. Ich habe bei mir dafür das dev-h-defIgnoreExpr Attribut gesetzt:


( ( $val==536870911 ) || ( $val==2147483648 ) || ( $val==4294967295 ) || ( $val==65535 ) )



VG
  habl

stefanne

Das mit der PV Steckdose ist eine tolle Idee. Ich habe daran einen Heizlüfter angeschlossen der "überflüssigen" PV Strom in Heizenergie umwandelt.

Ich habe statt dem Notify ein DOIF verwandt. Damit kann ich mir das Dummy Device sparen.


defmod PWP_DOIF_1 DOIF ([PWP:"^Wirkleistung:.*$"] and ([PWP:Wirkleistung] >= [PWP_DOIF_1:PWP_sollwert] ))\
(\
  set MQTT2_shellyplus1pm_0cdc7ef63bdc on\
)\
DOELSEIF ([PWP:Wirkleistung] < [PWP_DOIF_1:PWP_sollwert] )\
(\
  set MQTT2_shellyplus1pm_0cdc7ef63bdc off\
)
attr PWP_DOIF_1 eventMap cmd_1:on cmd_2:off
attr PWP_DOIF_1 icon sani_heating_automatic
attr PWP_DOIF_1 readingList PWP_sollwert
attr PWP_DOIF_1 room SMA
attr PWP_DOIF_1 setList PWP_sollwert:slider,0,100.0,7000
attr PWP_DOIF_1 webCmd PWP_sollwert