DataManager und Modbus Register mit Modbus TCP

Alles über netzgekoppelte Wechselrichter Fronius IG, Fronius IG Plus und Fronius IG Zentralwechselrichter

Moderator: Mod-Team

 

0.00 (0 Bewertungen)

DataManager und Modbus Register mit Modbus TCP

Beitragvon Peter aus dem Hotzenwald » 20.03.2017, 00:43

Fronius Hybrid 5.0, SmartMeter, Batteriespeicher.
Inverter: Fronius Modell: Symo Hyb
SW Version: Datamanager 1.4.1-12
SW Version: Inverter 0.3.12.4

Beim Abfragen von Registern gemäß der ModBus Tabelle verzweifle ich. Prinzipiell kann ich es und auch die Angaben zum Inverter und die SW-Versionen kommen aus der ModBus Abfrage.
Ich mach das in Python auf einem Raspberry und bekomme nur wenige Werte tatsächlich so wie ich es erwarte.
Wahrscheinlich liegt mein Problem eher daran, dass ich die Namen der Register nicht verstehe.
Register 40130 im MeterModel sollte "Total Watt-hours Exported" angeben. Da kommt auch was raus, hat aber nichts mit Gesamtleistung oder Gesamtbezug zu tun. Das prüfe ich quer mit der JSON Schnittstelle.
Sogar in der Tabelle angegebene Werte wie 40313+8 "Setpoint for minimum reserve for storage as a percentage of the nominal maximum storage" wird mit 0 ausgegeben, Da habe ich als Notstromreserve 30% drinstehen und als absolutes Minimum 7% eingetragen. Die Abfrage ergibt 0.
Register 40313+9 mit der Angabe wieviel sich gerade im Akku in % befindet stimmt wiederum.
Die Temperaturen aus Register 40110 und 40112 sind immer 0.

Ja, ich weiss, dass ich die Registernummer - 1 abfragen muss, ich weiss wie ich float32 und unit16 behandeln muss.

Hat mir jemand einen Hinweis was mit "Total VA-hours Imported" und ähnliche Begriffe heissen ?
Hat jemand dem Fronius Datamanager über Modbus TCP schon vernünftige Informationen rauslocken können ?
17 * Solarwatt 36M XL glass West ausgerichtet als Regenschutzdach auf 1.000m Höhe
Fronius Symo Hybrid 5.0
Fronius Solar Batterie 6.0
Fronius Smartmeter 63A
Notstromfunktion tut seit July 2016 nicht.
Benutzeravatar
Peter aus dem Hotzenwald
Öfters hier
Öfters hier
 
- Threadstarter -
 
Beiträge: 14
Registriert: 24.01.2017, 11:38
PV-Anlage [kWp]: 2.8
Speicher [kWh]: 6
Info: Betreiber

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon eloboy » 20.03.2017, 11:52

Halle Peter,

ich habe zwar einen normalen Fronius Symo mit Smartmeter.
Aber auch sehr viel gekämpft ;-)

Hast du die Doku mit den Register von Fronius heruntergeladen?

Nun Temperature steht bei mir "Not supported" . Also kommt bei mir auch 0 raus.

"Register 40130" hast du mit richtige Variablentype (Unit32) gearbeitet?


gruß
eloboy
Öfters hier
Öfters hier
 
Beiträge: 18
Registriert: 17.06.2009, 08:53

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon Peter aus dem Hotzenwald » 20.03.2017, 12:00

eloboy ich mach das so:

value= client.read_holding_registers(40130-1,2,unit=240)
smTotWhexp = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
print(" SmartMeter Total exp. " + str(round(smTotWhexp.decode_32bit_float()/1000))+"kW")

der Typ sollte stimmen.
17 * Solarwatt 36M XL glass West ausgerichtet als Regenschutzdach auf 1.000m Höhe
Fronius Symo Hybrid 5.0
Fronius Solar Batterie 6.0
Fronius Smartmeter 63A
Notstromfunktion tut seit July 2016 nicht.
Benutzeravatar
Peter aus dem Hotzenwald
Öfters hier
Öfters hier
 
- Threadstarter -
 
Beiträge: 14
Registriert: 24.01.2017, 11:38
PV-Anlage [kWp]: 2.8
Speicher [kWh]: 6
Info: Betreiber

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon Juraj » 20.03.2017, 14:43

4 kWp; Fronius Symo Hybrid 4.0-3-S; Battery 5 x 1,2 kWh; Notstromfunktion
(bitte entschuldigen Sie mein schlechtes Deutsch)
Benutzeravatar
Juraj
Stammmitglied
Stammmitglied
 
Beiträge: 98
Registriert: 25.12.2016, 12:49
Wohnort: Kosice, Slowakei
PV-Anlage [kWp]: 4
Speicher [kWh]: 6
Info: Betreiber

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon eloboy » 20.03.2017, 18:02

Am besten erst mal mit einem Modbusmaster
http://modbustool.codeplex.com/downloads/get/711357
die Register anschauen.

Bei mir sind die Register 40129 u 40130 = 0
register.jpg
eloboy
Öfters hier
Öfters hier
 
Beiträge: 18
Registriert: 17.06.2009, 08:53

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon Peter aus dem Hotzenwald » 20.03.2017, 23:27



'Danke Juraj,
ich habe jetzt mit dem Skalierungsfaktor gearbeitet. Allerdings war das egal, da sich die Zahlen schon in den ersten Stellen deutlich unterschieden haben. Da machte der Skalierungsfaktor kein Problem.

Mein Problem besteht darin, dass ich die Register nicht zuordnen kann und dass ich nur gelegentlich Werte finde, die passen.
Dabei halte ich mich an Datentypen. Wahrscheinlich muss ich mich in die Sunspec Modelle einlesen.

Inzwischen bin ich soweit, dass ich auf dem Raspberry mit einem 2-Zeilen Display den Modus des Wechselrichters und der Batterie anzeigen kann, sowie den Bezug vom Energiedienst, den Ertrag der PV Anlage und wieviel Watt gerade in den Akku oder aus dem Akku kommen. Dazu noch den Ladestand des Akkus in %.

Gerade beim Ertrag der PV oder dem Fluss zum/vom Akku ändert sich der Skalierungsfaktor ständig. Das habe ich jetzt im Griff.

Den ganzen Aufwand mit der ModBus TCP Schnittstelle mache ich, weil ich da hoffe auch Werte setzen zu können, während die JSON API nur zum Lesen taugt.
17 * Solarwatt 36M XL glass West ausgerichtet als Regenschutzdach auf 1.000m Höhe
Fronius Symo Hybrid 5.0
Fronius Solar Batterie 6.0
Fronius Smartmeter 63A
Notstromfunktion tut seit July 2016 nicht.
Benutzeravatar
Peter aus dem Hotzenwald
Öfters hier
Öfters hier
 
- Threadstarter -
 
Beiträge: 14
Registriert: 24.01.2017, 11:38
PV-Anlage [kWp]: 2.8
Speicher [kWh]: 6
Info: Betreiber

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon Juraj » 14.04.2017, 11:04

Peter, wie liest du die Batteriedaten? Welches Register für wieviel Watt gerade in den Akku oder aus dem Akku kommen?

update: ich habe es gefunden :-)
4 kWp; Fronius Symo Hybrid 4.0-3-S; Battery 5 x 1,2 kWh; Notstromfunktion
(bitte entschuldigen Sie mein schlechtes Deutsch)
Benutzeravatar
Juraj
Stammmitglied
Stammmitglied
 
Beiträge: 98
Registriert: 25.12.2016, 12:49
Wohnort: Kosice, Slowakei
PV-Anlage [kWp]: 4
Speicher [kWh]: 6
Info: Betreiber

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon Peter aus dem Hotzenwald » 26.04.2017, 22:44

Inzwischen habe ich die ModbusTCP-Schnittstelle am Raspberry eingelesen.
An einem Display lasse ich mir die Eckdaten anzeigen.
Bild

Hier mein Python Code:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Abfrage einiger Werte am Fronius-Datamanager
# Anzeige am i2c LCD Plate von Adafruit
# Peter Fürle, April 2017 @Alpensichtung
#
# Modbus
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
from pymodbus.diag_message import *
from pymodbus.file_message import *
from pymodbus.other_message import *
from pymodbus.mei_message import *
# LCD
import Adafruit_CharLCD as LCD
# sonstiges
import time

# Stati als Klartext
iStatus=["ist aus","Auto-Shutdown","startet","Normalbetrieb","Leistungsred.","schaltet ab","Fehler !","Standby","kein SolarNet","Kommunikationsfehler","Überstrom am SolarNet Stecker","WR im Update", "AFCI-Event"]
ba_Stat=["AUS","LEER","ENTLADEN","AUFLADEN","VOLL","WARTEN","TEST"]



#---------------------------------------------------------------------------#
# initialize LCD
#---------------------------------------------------------------------------#
lcd = LCD.Adafruit_CharLCDPlate()
lcd.clear()
lcd.message("Abfrage Fronius\n")
lcd.message("ModBus TCP")
#lcd.set_backlight(0)
#---------------------------------------------------------------------------#
# configure the client logging
#---------------------------------------------------------------------------#
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.ERROR)

#---------------------------------------------------------------------------#
# We are going to use a simple client to send our requests
#---------------------------------------------------------------------------#
ip='192.168.22.188'
client = ModbusClient(ip,port=502)
client.connect()

# Fronius Wechselrichter #00 ist Modbus Geräte-ID 100
# Fronius Wechselrichter #01 ist Modbus Geräte-ID 001
# Fronius Wechselrichter #02 ist Modbus Geräte-ID 002
# Fronius Smartmeter hat fixe Geräte-ID 240
# HINWEIS! Die ausgesendete Registeradresse ist also immer um 1 geringer als die eigentliche Registernummer.
## Ähnlich wie bei den Inverter Models gibt es auch hier zwei verschiedene SunSpec Models:
## das Meter Model mit Gleitkommadarstellung
## (Einstellung „float“; M211, M212 oder M213)
# Datentypen der Register "float32","uint64","uint16"
##    'string': decoder.decode_string(8),
##    'float': decoder.decode_32bit_float(),
##    '16uint': decoder.decode_16bit_uint(),
##    '8int': decoder.decode_8bit_int(),
##    'bits': decoder.decode_bits(),



print(" ModbusTCP Abfrage Fronius Geräte an " + ip)
print(" ")

#---------------------------------------------------------------------------#
# read register
#---------------------------------------------------------------------------#
# Hersteller
r2=client.read_holding_registers(40005-1,4,unit=1)
invBrand = BinaryPayloadDecoder.fromRegisters(r2.registers, endian=Endian.Big)
# Modell
r3=client.read_holding_registers(40021-1,4,unit=1)
invModel = BinaryPayloadDecoder.fromRegisters(r3.registers, endian=Endian.Big)
print(" Inverter: " + invBrand.decode_string(8)+ " Modell: " +  invModel.decode_string(8))
# Datamanager
swDM= client.read_holding_registers(40037-1,8,unit=1)
swDMdecode = BinaryPayloadDecoder.fromRegisters(swDM.registers, endian=Endian.Big)
print(" SW Versions: Datamanager " + swDMdecode.decode_string(16))
# Inverter
swInv= client.read_holding_registers(40045-1,8,unit=1)
swInvdecode = BinaryPayloadDecoder.fromRegisters(swInv.registers, endian=Endian.Big)
print(" SW Versions: Inverter " + swInvdecode.decode_string(16))

while 1:
    # SmartMeter
    value= client.read_holding_registers(40098-1,2,unit=240)
    smACPower = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
    ED = "ED:"+str(int(smACPower.decode_32bit_float()))+"W"

    # MPPT 1 and 2
    # sunssf scale factor -1 or -2
    value= client.read_holding_registers(40263+5-1,1,unit=1)
    sf = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
    DCW_SF = 10**sf.decode_16bit_int()
    #print DCW_SF

    value= client.read_holding_registers(40263+22-1,1,unit=1)
    mppt1DCW = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
    PV="PV:" + str(int(float(mppt1DCW.decode_16bit_uint()*DCW_SF)))+"W"

    value= client.read_holding_registers(40263+42-1,1,unit=1)
    mppt2DCW = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
    BA=" " + str(int(mppt2DCW.decode_16bit_uint()*DCW_SF))+"W"
   
    # Stati WR und Akku
    value= client.read_holding_registers(40119-1,1,unit=1)
    wrStat = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
    result = wrStat.decode_16bit_uint()
    wrStatus = "WR:"+iStatus[int(result)-1]

    value= client.read_holding_registers(40313+12-1,1,unit=1)
    baStat = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
    result = baStat.decode_16bit_int()
    baStatus = "BA:"+ba_Stat[int(result)-1]
    #print(result)

    value= client.read_holding_registers(40313+9-1,1,unit=1)
    baProz = BinaryPayloadDecoder.fromRegisters(value.registers, endian=Endian.Big)
    result = baProz.decode_16bit_uint()
    baStand = "Akku:"+str(int(result)/100)+"%"

    ##print("LCD-Ausgabe:")
    lcd.clear()
    lcd.message(wrStatus+"\n"+baStatus)
    time.sleep(1)
    lcd.clear()
    lcd.message(baStand+BA+"\n"+ED+" "+PV)
    time.sleep(4)

#---------------------------------------------------------------------------#
# close the client
#---------------------------------------------------------------------------#
client.close()
print('Done')
17 * Solarwatt 36M XL glass West ausgerichtet als Regenschutzdach auf 1.000m Höhe
Fronius Symo Hybrid 5.0
Fronius Solar Batterie 6.0
Fronius Smartmeter 63A
Notstromfunktion tut seit July 2016 nicht.
Benutzeravatar
Peter aus dem Hotzenwald
Öfters hier
Öfters hier
 
- Threadstarter -
 
Beiträge: 14
Registriert: 24.01.2017, 11:38
PV-Anlage [kWp]: 2.8
Speicher [kWh]: 6
Info: Betreiber

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon MagicMight » 10.05.2017, 06:53

Hi,

sehr coole Sache & danke für den Code 8)
Hast Du auch schon versucht Werte zu schreiben?

Gruß,
MagicMight
________________________________________
9,9 kWp @ Symo 10.0-3-M
Symo Hybrid 5.0-3-S @ Energy Package 12kW
Ausrichtung: DN: 28°, Süd
Benutzeravatar
MagicMight
Öfters hier
Öfters hier
 
Beiträge: 25
Registriert: 03.05.2017, 09:41
Wohnort: Pfaffenhofen/Ilm
PV-Anlage [kWp]: 9,9
Speicher [kWh]: 12
Info: Betreiber

Re: DataManager und Modbus Register mit Modbus TCP

Beitragvon Duke_TBH » 10.05.2017, 07:35

Ja schön Sache Peter. Weiter so!
4,24 kWp @Fronius Energy Package 9kW
Ausrichtung: DN:25°, -30° SSO
3,19 kWp @ Symo 3.7-3
Ausrichtung: 90°, +60° SSW

Mitglied im SFV

Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.
Benutzeravatar
Duke_TBH
Forumsinventar
Forumsinventar
 
Beiträge: 2586
Registriert: 21.02.2014, 20:53
PV-Anlage [kWp]: 7,43
Speicher [kWh]: 9
Info: Betreiber

Nächste

Zurück zu Fronius - Wechselrichter



Ähnliche Beiträge


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste