SMA Modbus SUNNY TRIPOWER 8.0

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

Vorheriges Thema - Nächstes Thema

fireball

Servus,

ich habe aktuell einen SunnyBoy 2.5 hier rumliegen und wollte den mal über FHEM auslesen.
Jetzt habe ich mich ein wenig in das Thema eingelesen und glaube, die für mich einfachste Variante, die auch offline funktioniert ist über MODBUS?!

Jetzt habe ich habe mal ne Frage... Anbei ist die Modbusbeschreibung für den SunnyBoy 2.5
Wie komme ich an die Werte?

Mit define SunnyBoy ModbusAttr  3  30   192.168.178.8:502  TCP  habe ich den WR erreicht... ich habe mir jetzt eure Attribute angeschaut aber werde noch nicht recht schlau draus.

Was ich verstanden habe:
Hiermit lege ich ein Reading Wirkleistung an, lese das aus dem obj-h (Holding register) mit der Nummer aus meiner ModbusTabelle aus, unpack sagt noch was es ist, also Strink, Int, etc?! und len sagt wieviel Register das läuft (steh auch in der Tabelle)

attr PWP obj-h30775-len 2
attr PWP obj-h30775-unpack N
attr PWP obj-h30775-poll 1
attr PWP obj-h30775-reading Wirkleistung


Aber ich bekomme nix...
Habt ihr mal ein Beispiel und wie ich das genau in FHEM eintrage...

Internals:
   DEF        3  30   192.168.178.8:502  TCP
   DeviceName 192.168.178.8:502
   EXPECT     idle
   FD         4
   FUUID      60520f2d-f33f-2912-baf1-c87fd5987c23dd54
   IODev      SunnyBoy
   Interval   30
   LASTOPEN   1615997146.6411
   MODBUSID   3
   MODE       master
   MODULEVERSION Modbus 4.4.00 - 7.2.2021
   NAME       SunnyBoy
   NOTIFYDEV  global
   NR         16
   NTFY_ORDER 50-SunnyBoy
   PARTIAL   
   PROTOCOL   TCP
   STATE      opened
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   READ:
   READINGS:
     2021-03-17 17:05:47   state           opened
   defptr:
     SunnyBoy   3
   lastRead:
Attributes:
   obj-h30055-len 2
   obj-h30055-reading Hersteller


Hier im IOBroker geht das irgendwie einfacher... ab Minute 11...
https://www.youtube.com/watch?v=bX7py1NiRLA

VG+Danke
René

Wzut

ähh ... warum ist in deinem list in Bruchstücken Register h30055 drin , lesen willst du aber h30775 ?
dein mini list ist schon richtig, nur musst du es auch beim Device benutzen :)
Tipp : du kannst beim SMA einiges an Tipparbeit sparen wenn du poll/len& unpack quasi als default fest legst, dann du nur noch ein Attribut pro Reading

attr SunnyBoy dev-h-defExpr $val & 0x1FFFFFFF
attr SunnyBoy dev-h-defLen 2
attr SunnyBoy dev-h-defPoll 1
attr SunnyBoy dev-h-defUnpack N
attr SunnyBoy obj-h30775-reading Wirkleistung
attr SunnyBoy obj-h30201-reading Status
attr SunnyBoy obj-h30953-reading Temperatur
attr SunnyBoy obj-h30529-reading Gesamtertrag
attr SunnyBoy obj-h30535-reading Tagesertrag


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

fireball

Hi,

danke für die schnelle Reaktion...

Deine Werte funktionieren bei mir auch...
h30055 war bei mir drin, weil ich den Hersteller rauslesen wollte so als Test... laut Doku/Tabelle ist das

Nameplate.Vendor 30055    2     U32   TAGLIST RO

Mit deinen 3 defaults habe ich quasi die 2 Register,  immer An unsigned long werte (Pack-Doku) und Poll 1 ist immer alle Werte aktualisieren, richtig?!

Wie gebe ich das denn eigentlich über FHEM Oberfläche als Attribut ein?! zB obj-[cdih][1-9][0-9]*-reading ???
Ich habe jetzt alles in die fhem.cfg kopiert. Aber die Oberfläche meckert immer wenn ich ein Reading anlege, dass es nicht dem Format entspricht...

Was ist aber mit den anderen Werten, die so interessant sind... die sind zum Teil ja nicht alle U32 sondern S32 oder U64...
Dann muss ich ein extra obj-[cdih][1-9][0-9]*-unpack anlegen oder?

Wzut

ei , ei wie bist du den zum Developer Status gekommen, das sind doch Basics :)
Nix fhem.cfg kopieren, ich hatte in meinem Beispiel extra schon deinen Device Namen verwendet.
Du hättest nur Zeile für Zeile kopieren und in FHEMWEB in die Eingabezeile pasten müssen oder eben die raw Ansicht öffnen und alles am Stück reinpacken.

Wenn du nun an Register kommst die nicht mehr dem default entsprechen must du halt mehr machen , Bsp das Temperatur Register:
(ich bleibe jetzt bei meinen Namen)
attr 8000TL obj-h30953-expr ($val  & 0xFFFF) / 10
attr 8000TL obj-h30953-format %.0f
attr 8000TL obj-h30953-reading Temperatur

oder noch eines
attr 8000TL obj-h30211-map 336:Contact manufacturer, 337:Contact installer, 338:invalid, 887:none
attr 8000TL obj-h30211-reading Aktion
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Hi,

ja, das war mir durchaus klar, dass ich das Zeile für Zeile oben ins FHEMWEB eintragen kann oder der schlechtere Web über die cfg-Datei.

Ich wollte nur wissen in welchem Format das Modul das unten in der Attribut Zeile fordert, da habe ich jetzt schon X-Sachen ausprobiert, das Modul nimmt  da nix an oder geht das überhaupt so oder nur über die FHEMWEB Zeile mit den attr-Einträgen?!

VG
René

fireball

So ich habe jetzt ein wenig weiter mit den Attributen rumgespielt... so langsam wird es.
Auch mit den Formatierungen und den Maps habe ich schon was gebaut.

Leider liegt der WR hier bei mir trocken und sauber im Büro und nicht alle Werte liefern auch ein Ergebniss... daher die Frage...

Ich habe zwar nur einen 1phasigen WR, aber warum zeigt er  bei Netzspannung_Phase_L1  so einen komischen Wert an: 536870911.00?!!?
Ist das unpack da nicht richtig?! Laut Doku ist es ein U32 und das sollte dann ja passen mit dem Defaultwert?!

Die zweite Frage wäre, warum wird keine Temperatur angezeigt?!

Oder muss das Gerät auch komplett eingeschaltet sein?! Aktuell hat es zwar Strom und Netzwerk, aber der Hauptschalter am Gerät ist aus.

VG+Danke
René




Internals:
   DEF        3  30   192.168.178.8:502  TCP
   DeviceName 192.168.178.8:502
   EXPECT     idle
   FD         4
   FUUID      60520f2d-f33f-2912-baf1-c87fd5987c23dd54
   IODev      SunnyBoy
   Interval   30
   LASTOPEN   1616090389.6054
   MODBUSID   3
   MODE       master
   MODULEVERSION Modbus 4.4.00 - 7.2.2021
   NAME       SunnyBoy
   NOTIFYDEV  global
   NR         16
   NTFY_ORDER 50-SunnyBoy
   PARTIAL   
   PROTOCOL   TCP
   STATE      opened
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2021-03-18 19:09:50   DC_Leistung_Eingang 0.00
     2021-03-18 19:09:50   DC_Spannung_Eingang 0.00
     2021-03-18 19:09:50   DC_Strom_Eingang 0.00
     2021-03-18 19:09:50   Gesamtertrag    6863862
     2021-03-18 19:09:51   Nennfrequenz    50.00
     2021-03-18 19:09:50   Netzspannung_Phase_L1 536870911.00
     2021-03-18 19:09:50   Netzspannung_Phase_L2 536870911.00
     2021-03-18 19:09:51   Netzspannung_Phase_L3 536870911.00
     2021-03-18 19:09:51   Netzstrom_Phase_L1 0.000
     2021-03-18 19:09:51   Netzstrom_Phase_L2 0.000
     2021-03-18 19:09:51   Netzstrom_Phase_L3 0.000
     2021-03-18 19:09:49   Status          OK
     2021-03-18 19:09:50   Tagesertrag     0
     2021-03-18 19:09:51   Temperatur      0
     2021-03-18 19:09:50   Wirkleistung    0
     2021-03-18 18:59:49   state           opened
   REMEMBER:
     lid        3
     lname      SunnyBoy
     lrecv      1616090991.698
     lsend      1616090991.68283
   defptr:
     SunnyBoy   3
   gotReadings:
     Nennfrequenz 50.00
   lastRead:
     h30201     1616090990.00274
     h30529     1616090990.12247
     h30535     1616090990.24268
     h30769     1616090990.36266
     h30771     1616090990.48264
     h30773     1616090990.62256
     h30775     1616090990.74286
     h30783     1616090990.86457
     h30785     1616090990.98272
     h30787     1616090991.10264
     h30953     1616090991.22272
     h30977     1616090991.34533
     h30979     1616090991.46292
     h30981     1616090991.58273
     h40135     1616090991.70258
Attributes:
   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-h30529-reading Gesamtertrag
   obj-h30535-reading Tagesertrag
   obj-h30769-format %.2f
   obj-h30769-reading DC_Strom_Eingang
   obj-h30771-format %.2f
   obj-h30771-reading DC_Spannung_Eingang
   obj-h30773-format %.2f
   obj-h30773-reading DC_Leistung_Eingang
   obj-h30775-reading Wirkleistung
   obj-h30783-format %.2f
   obj-h30783-reading Netzspannung_Phase_L1
   obj-h30785-format %.2f
   obj-h30785-reading Netzspannung_Phase_L2
   obj-h30787-format %.2f
   obj-h30787-reading Netzspannung_Phase_L3
   obj-h30953-expr ($val  & 0xFFFF) / 10
   obj-h30953-format %.0f
   obj-h30953-reading Temperatur
   obj-h30977-format %.3f
   obj-h30977-reading Netzstrom_Phase_L1
   obj-h30979-format %.3f
   obj-h30979-reading Netzstrom_Phase_L2
   obj-h30981-format %.3f
   obj-h30981-reading Netzstrom_Phase_L3
   obj-h40135-expr ($val  & 0xFFFF) / 100
   obj-h40135-format %2.2f
   obj-h40135-reading Nennfrequenz




Wzut

Temperatur ist bei mir z.Z. auch 0 da er jetzt nichts produziert , wegen L1 schaue ich morgen wenn wieder Sonne da ist.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

So ich kann dich beruhigen : Sobald er arbeitet gibt es auch eine Temperatur.
Mit der L1 ist genauso, gestern Abend hatte ich mit unpack N auch so irre Werte wie du, heute morgen habe ich 23474
Wenn da noch zwei Nachkommastellen drin sind ergäbe das 234,74 - klingt plausibel.
Das ist so ein Thema das ich bei SMA noch nier verstanden habe, einige Werte sind nur "echt" wenn der WR wirklich arbeitet, aber statt im anderen Fall einfach 0 ins Register zu schreiben setzen sie irgendwelche höhere Bits und man hat dann diese unsinnig hohen Werte.
In dem Fall hilft nur das Register noch mit einer Bitmaske zu verunden und damit die ganzen Bits die im Normalfall nie 1 sein können einfach platt zumachen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Moinsen,

cool, danke für dein Feedback, dann bleibt das erstmal so bei mir...
Das mit der Logik bei SMA ist wirklich komisch, denn bei Netzstrom_Phase_L1 also den Ampere, da steht ja bei mir 0.000 drin.
Da müsstest du ja jetzt auch Werte größer 0 haben, oder?!

Ich weiß zwar noch nicht ob ich das jemals brauchen werde, aber die so kann man die Netzspannung ja in kein Diagramm bringen.

VG
Rene

Wzut

Gib mal die Register Nr, ich habe das bei mir per default nicht drin und das schöne Exel Sheet von SMA mit allen Modbus Werten ist auch irgendwo in meinen Backups versteckt.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Moinsen,

ich habe diese Attribute hier, das Dokument für den SunnyBoy2.5 habe ich auch ein paar Posts weiter unten drangehangen gehabt.

attr SunnyBoy obj-h30783-format %.2f
attr SunnyBoy obj-h30783-reading Netzspannung_Phase_L1
attr SunnyBoy obj-h30785-format %.2f
attr SunnyBoy obj-h30785-reading Netzspannung_Phase_L2
attr SunnyBoy obj-h30787-format %.2f
attr SunnyBoy obj-h30787-reading Netzspannung_Phase_L3
attr SunnyBoy obj-h30837-reading Wirkleistung_Max
attr SunnyBoy obj-h30953-expr ($val  & 0xFFFF) / 10
attr SunnyBoy obj-h30953-format %.0f
attr SunnyBoy obj-h30953-reading Temperatur
attr SunnyBoy obj-h30977-format %.3f
attr SunnyBoy obj-h30977-reading Netzstrom_Phase_L1
attr SunnyBoy obj-h30979-format %.3f
attr SunnyBoy obj-h30979-reading Netzstrom_Phase_L2
attr SunnyBoy obj-h30981-format %.3f
attr SunnyBoy obj-h30981-reading Netzstrom_Phase_L3


Also h30977, h30979 und h30981.
VG+Danke
René

Wzut

h30977 liefert bei mir z.Z. unformatiert 8275 , schaut also auch ganz gut aus
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

ja super... wäre also 8,275 A. Mal sehen was heute abend ist.
Gibts eine Möglichkeit das Format so anzupassen bei den Volt-Zahlen, dass man sagen kann, alles über 240V = X, sodass da nie solche (536870911.00) extremen Werte rauskommen können?! X könnte 0 oder ein max Wert sein, aber nie ein so krasser Wert.
Die Doku von MODBUS gibt mir leider nichts her dafür...

Man könnte ja mal mit Stefan, der das MODBUS Modul geschrieben hat sonst sprechen?!

VG
REné

Wzut

na klar , habe ich doch geschrieben , Bitmaske drüber und alle unerwünschten Bits totschlagen.
Per default gibt es ja schon
dev-h-defExpr $val & 0x1FFFFFFF
ergo neue passende Bitmaske nach persönlichem Geschmack nehmen und dem Register direkt zuweisen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Moinsen,
ich habe mal versucht mich in das Thema reinzulesen...

Volt auf der Phase 1-3 gehen ja bis 240V.
240 entspricht 11110000 in Bits.

Damit ich alle Zahlen von 0-240 abbilden kann, müssen alle diese Stellen 1 werden können, alle darüber müsste ich mit mit 0 belegen...
Ist das die Bitmaske nicht 11111111 = 255 = FF?

Jetzt wird bei mir der 255,00 angezeigt.

   obj-h30783-format %.2f
   obj-h30783-reading Netzspannung_Phase_L1
   obj-h30785-expr $val & 0xFF
   obj-h30785-format %.2f
   obj-h30785-reading Netzspannung_Phase_L2
   obj-h30787-expr $val & 0xFF
   obj-h30787-format %.2f
   obj-h30787-reading Netzspannung_Phase_L


Wäre das richtig?!
VG
René