Modbus abfragen von SMA z.B. SunnyBoy 3.0

Begonnen von Moli, 15 März 2026, 22:33:39

Vorheriges Thema - Nächstes Thema

Moli

Moin.

Da das alte Modul 76_SMAInverter.pm mir andauernd Timeouts brachte, was nicht nur im Log nervig war, habe ich auf Modbus umgestellt.

Obwohl ich schon Wallbe Ladestation, Marstek Venus E und anderes via Modbus Geräte eingebunden habe, wollte das nicht so wie ich wollte.

Lag wahrscheinlich an mir, jetzt wo es fertig ist, sieht es gar nicht schwer aus *g

Da die Werte ausgiebig weiterverarbeitet werden, möchte ich alle Werte wieder genau so haben, wie bei dem Modul vorher.

Ich dachte, ich poste es mal, falls noch jemand die Probleme hat und das hilfreich findet, der auch so nen altes Ding herumstehen hat.

Grüsse!




defmod SunnyBoy30 ModbusAttr 3 60 SMA-IP:502 TCP
attr SunnyBoy30 group Inverter
attr SunnyBoy30 obj-h30513-len 4
attr SunnyBoy30 obj-h30513-poll 1
attr SunnyBoy30 obj-h30513-reading SPOT_ETOTAL
attr SunnyBoy30 obj-h30513-type U64
attr SunnyBoy30 obj-h30513-unpack Q>
attr SunnyBoy30 obj-h30517-len 4
attr SunnyBoy30 obj-h30517-poll 1
attr SunnyBoy30 obj-h30517-reading SPOT_ETODAY
attr SunnyBoy30 obj-h30517-type U64
attr SunnyBoy30 obj-h30517-unpack Q>
attr SunnyBoy30 obj-h30771-expr ($val > 65534 ? 0 : $val / 100)
attr SunnyBoy30 obj-h30773-expr ($val > 2147483647 ? 0 : $val)
attr SunnyBoy30 obj-h30773-len 2
attr SunnyBoy30 obj-h30773-poll 1
attr SunnyBoy30 obj-h30773-reading SPOT_PDC1
attr SunnyBoy30 obj-h30773-type S32
attr SunnyBoy30 obj-h30773-unpack N
attr SunnyBoy30 obj-h30775-expr ($val > 2147483647 ? 0 : $val)
attr SunnyBoy30 obj-h30775-len 2
attr SunnyBoy30 obj-h30775-poll 1
attr SunnyBoy30 obj-h30775-reading SPOT_PACTOT
attr SunnyBoy30 obj-h30775-type S32
attr SunnyBoy30 obj-h30775-unpack N
attr SunnyBoy30 obj-h30961-expr ($val > 2147483647 ? 0 : $val)
attr SunnyBoy30 obj-h30961-len 2
attr SunnyBoy30 obj-h30961-poll 1
attr SunnyBoy30 obj-h30961-reading SPOT_PDC2
attr SunnyBoy30 obj-h30961-type S32
attr SunnyBoy30 obj-h30961-unpack N
attr SunnyBoy30 room Inverter
attr SunnyBoy30 stateFormat { my $m = ReadingsVal($name,"ModeNum",0);; my $p = ReadingsVal($name,"SPOT_PACTOT",0);; return "Schläft" if($m == 303);; return "W: $p - OK" if($m == 307);; return "Status: $m";; }
attr SunnyBoy30 userReadings Power1 {ReadingsVal($name,"SPOT_PACTOT",0)>10000 ? 0 : ReadingsVal($name,"SPOT_PDC1",0)},
Power2 {ReadingsVal($name,"SPOT_PACTOT",0)>10000 ? 0 : ReadingsVal($name,"SPOT_PDC2",0)},
SPOT_ETODAY1 {int((ReadingsNum("$name","SPOT_ETODAY","")*2/6))},
SPOT_ETODAY2 {int((ReadingsNum("$name","SPOT_ETODAY","")*4/6))}


AdamZBRG

Das kenne ich nur zu gut! Ich habe mich bei meinem alten Wechselrichter am Anfang auch ewig rumgeplagt, bis die Modbus-Register endlich das gemacht haben, was sie sollten.

Man beißt sich da erst mal rein, aber wenn es dann läuft, fragt man sich wirklich, warum man sich so angestellt hat. Deine Konfiguration ist auf jeden Fall super übersichtlich geworden. Schade, dass ich deinen Beitrag nicht schon vor ein paar Tagen gefunden habe – das hätte mir einiges an Kopfzerbrechen erspart. Danke fürs Teilen!

Grüsse.