Custom Component: ABB/Power-One/FIMER PV Inverters - SunSpec Modbus TCP

Ciao Pietro,

on the forum only english is allowed.

You didn’t specify what you use to connect the inverter…VSN300? VSN700? RS485 gateway?

i’m sorry, ok only english.
i have access at dashboard from http.

So you have an integrated VSN300 or VSN700. You need to find out the Slave ID of the inverter, either in the web interface (I don’t have the same system as yours) or from the inverter display. Check your manual.

Ciao Pietro,
if you’re logged as Admin user you should be able to find slave ID under:

Connectivity–>RS485–>Node Address

It’s usually 1

Hi,
I would really like to integrate my iverter to HA with this integration buy I have this issue and hope someone could help.
I’ve bought an already used inverter UNO-DM-4.6-TL-PLUS that was previously connected to another WiFi network. When I connected for the first time the inverter it tried to connect to old WiFi for a while and then stop.
The problem is the the inverter did not switch automatically in Acess Point mode and is not providing a wi-fi networks.
In addition to that the inverter menu doesn’t show the section “WLAN Logger” where I should restore the AP Mode.
What can I do?
Thanks a lot

Hi,
you should contact Fimer support, the one you’re describing is an inverter/logger problem, not a HA related one.
My Fimer inverter (REACT2) doesn’t switch Wifi from AP to host mode, my logger sets up, on the same channel, one AP connection for direct connection to the logger and a client one to join another Wifi. Are you sure your is not doing it?
Have you searched the inverter/logger manual for a reset procedure?

Yes I Have,
It says only that in case of WiFi connection lost the invert should switch to AP mode and the relates WiFi network would be available.
I search but didn’t find any Reset procedure.
Neither a Reset button on the boards.

Ask the guy you bought it from the SSID and the password. Then you set an additional wifi network with those parameters, and once the VSN connects, you access it and change wifi again.

What is it, a VSN300 or VSN700?

Should be a VSN300, now I’m out of home, I will check on Monday.
Unfortunately the inverter after a first try is not trying to connect to WiFi anymore.

Ciao Alex,

looks like there was a little step thanks to fabyano’s help! We have the same inverter/interface btw.
I had lots of connectivity problems here at home due to the heavy storm at the end of july, fortunately the plant wan not impacted at all and it works. Let me know if you need any help!

Ciao Federico,

finally thanks to @wrongisthenwright’s help I’ve managed to modify the python script so that it works both for VSN300 and VSN700 authentication schemes. :slight_smile:

Now the problem is that I have to develop a totally different component that is based on parsing the json data received by VSNx00 cards. Obviously it will only work for users with VSN cards, so it will exclude users with RS485 bridges/gateways that need modbus. I’m a bit undecided on how to proceed, I’m thinking about these options:

  1. A new version of the same component that adds the VSN JSON functionality, so users can configure the component specifying they want to use that vs modbus, or configure modbus tcp as usual.

  2. A separate component specific for VSNx00 users.

Let me know your toughts…haven’t made up my mind yet. :slight_smile:

Ciao Alex,
I think it’s up to you, since you’'l write the code :slight_smile: having said that a single integration that works both ways is preferable in my view, the ultimate device is the same, a Fimer/ABB/PowerOne appliance that can have:

  • meter
  • inverter
  • battery (module from 1 to 4)

Json parsing can be done natively by HA, below an example, I was able to gather some parameters using HA native rest integration:

rest:
    resource: http://VSN700-IP/v1/livedata
    username: USERNAME
    password: PWD
    authentication: basic
    scan_interval: 60
    sensor:
      - name: devtype
        value_template: "{{value_json['?METER-ID-OR-SERIAL?']['device_type']}}"

also modbus registers (serial or TCP) can be accessed via the native HA modbus integration.

Having a custom integration that gathers data give the plus of:

  • having a GUI for configuration
  • being able of converting/formatting the resulting data to be integrated in the energy dashboard
  • in the JSON case, where the structure is based on the device internal serials (meter, inverter, battery etc), the custom module can help to get all the data without having to decode the json in advance

Hi there,

i have added your ABB Integration and it works fine at first moment!
Just added my inverter ip and left Slave adress to 247, Register Base 40000.
Everything works fine, but the DC Volt-sensor does always have 0.0V even on screenshots of other people.
i dont have to use this sensor, but it would be fine to see the pv-voltage.


Do you have an idea how to get the right values of that sensor?

Ciao Fabyano,

I know that you can do modbus and json readings via native functions, but there’s no comparison vs a custom component, mainly because of data consistency: reading via native functions implies a lot of overhead because every single register requires a read operation, while in the component you do a sort of sweep then parse all data, and this has a great benefit for speed and data consistency.

For json, since I’m not an expert python developer, I’ll need to check how to do it in python and parse data in the most efficient way. If I find a good custom component that does json data retrieval and parsing, I will use it as starting point for the code, otherwise I’ll have to learn python a little bit more. :slight_smile:

I’ll keep you posted when I’ll start working on it…

Hi Wolfram, glad the component is working fine for you.

Regarding that missing value, I found out that the register map I’m using does not apply 100% for ALL inverter models configurations, there might be some inconsistencies. I would expect that none of the DC sensors would work in your case, it’s strange that only the DC voltage is not working.

Do you have any error in HA logs specific for that sensor? It would help debug the issue.

In the meantime, if you don’t want to wait for the fix, you could use a calculated template sensor by dividing the working sensors: DC Power / DC Current.

If you know how to edit the source of an installed component, try this:

in const.py, replace lines 35-37

    "DC_Curr": ["DC Current", "dccurr", UnitOfElectricCurrent.AMPERE, "mdi:current-ac", SensorDeviceClass.CURRENT, STATE_CLASS_MEASUREMENT],
    "DC_Volt": ["DC Voltage", "dcvolt", UnitOfElectricPotential.VOLT, "mdi:lightning-bolt", SensorDeviceClass.VOLTAGE, STATE_CLASS_MEASUREMENT],
    "DC_Power": ["DC Power", "dcpower", UnitOfPower.WATT, "mdi:solar-power", SensorDeviceClass.POWER, STATE_CLASS_MEASUREMENT],

with these:

    "DC_Curr": ["DC Current", "dc1curr", UnitOfElectricCurrent.AMPERE, "mdi:current-ac", SensorDeviceClass.CURRENT, STATE_CLASS_MEASUREMENT],
    "DC_Volt": ["DC Voltage", "dc1volt", UnitOfElectricPotential.VOLT, "mdi:lightning-bolt", SensorDeviceClass.VOLTAGE, STATE_CLASS_MEASUREMENT],
    "DC_Power": ["DC Power", "dc1power", UnitOfPower.WATT, "mdi:solar-power", SensorDeviceClass.POWER, STATE_CLASS_MEASUREMENT],

Then restart HA, and let me know if the 3 sensors have proper values.

after changing to dc1currr, dc1volt and dc1power it shows me 1V now . ok, its night-time but moon is there.
Seems to work now, i will tell you tommorrow at daylight!

Thank you very much for this !!!

BTW: i have a sungrow 10KW Inverter and also the ABB React2-3.6tl running, sungrow south-sided panels and Abb westside.

The nice thing about sungrows is:
you can tell “him” that there is 3KW more to use.
So today at sun i got 7Kw from south and 2Kw from West, the battery hooked up to the sungrow was charging with nearly 9KW. Thats really cool.
In HA i only have to add PV1 with PV2 and get the whole PV Power, thats easy.

1 Like

it would be great if we just could invert the voltage and current for nighttime to get some of the dark-energy :slight_smile:
or do i have to install the pv-modules mirrored? :slight_smile:

1 Like

No need to thank me, I have to thank you. This bug was there for a long time, and now I hope I finally fixed it.

Please let me know if tomorrow morning it shows correct values so I can implement the proper fix. :slight_smile:

Wolfram, can you please try this fix for me and tomorrow morning let me know if it works? Thanks.

In const.py, replace lines 23-42 with the following:

SENSOR_TYPES_SINGLE_PHASE = {
    "Manufacturer": ["Manufacturer", "comm_manufact", None, "mdi:information-outline", None, None],
    "Model": ["Model", "comm_model", None, "mdi:information-outline", None, None],
    "Options": ["Options", "comm_options", None, "mdi:information-outline", None, None],
    "Version": ["Firmware Version", "comm_version", None, "mdi:information-outline", None, None],
    "Serial": ["Serial", "comm_sernum", None, "mdi:information-outline", None, None],
    "Inverter_Type": ["Inverter Type", "invtype", None, "mdi:information-outline", None, None],
    "AC_Current": ["AC Current", "accurrent", UnitOfElectricCurrent.AMPERE, "mdi:current-ac", SensorDeviceClass.CURRENT, STATE_CLASS_MEASUREMENT],
    "AC_VoltageAN": ["AC Voltage AN", "acvoltagean", UnitOfElectricPotential.VOLT, "mdi:lightning-bolt", SensorDeviceClass.VOLTAGE, STATE_CLASS_MEASUREMENT],
    "AC_Power": ["AC Power", "acpower", UnitOfPower.WATT, "mdi:solar-power", SensorDeviceClass.POWER, STATE_CLASS_MEASUREMENT],
    "AC_Frequency": ["AC Frequency", "acfreq", UnitOfFrequency.HERTZ, "mdi:sine-wave", None, STATE_CLASS_MEASUREMENT],
    "Total_Energy": ["Total Energy", "totalenergy", UnitOfEnergy.WATT_HOUR, "mdi:solar-power", SensorDeviceClass.ENERGY, STATE_CLASS_TOTAL_INCREASING],
    "DC_Power": ["DC Power", "dcpower", UnitOfPower.WATT, "mdi:solar-power", SensorDeviceClass.POWER, STATE_CLASS_MEASUREMENT],
    "DC1_Curr": ["DC1 Current", "dc1curr", UnitOfElectricCurrent.AMPERE, "mdi:current-ac", SensorDeviceClass.CURRENT, STATE_CLASS_MEASUREMENT],
    "DC1_Volt": ["DC1 Voltage", "dc1volt", UnitOfElectricPotential.VOLT, "mdi:lightning-bolt", SensorDeviceClass.VOLTAGE, STATE_CLASS_MEASUREMENT],
    "DC1_Power": ["DC1 Power", "dc1power", UnitOfPower.WATT, "mdi:solar-power", SensorDeviceClass.POWER, STATE_CLASS_MEASUREMENT],
    "DC2_Curr": ["DC2 Current", "dc2curr", UnitOfElectricCurrent.AMPERE, "mdi:current-ac", SensorDeviceClass.CURRENT, STATE_CLASS_MEASUREMENT],
    "DC2_Volt": ["DC2 Voltage", "dc2volt", UnitOfElectricPotential.VOLT, "mdi:lightning-bolt", SensorDeviceClass.VOLTAGE, STATE_CLASS_MEASUREMENT],
    "DC2_Power": ["DC2 Power", "dc2power", UnitOfPower.WATT, "mdi:solar-power", SensorDeviceClass.POWER, STATE_CLASS_MEASUREMENT],
    "Status": ["Operating State", "status", None, "mdi:information-outline", None, None],
    "Status_Vendor": ["Vendor Operating State", "statusvendor", None, "mdi:information-outline", None, None],
    "Temp_Cab": ["Ambient Temperature", "tempcab", UnitOfTemperature.CELSIUS, "mdi:temperature-celsius", SensorDeviceClass.TEMPERATURE, STATE_CLASS_MEASUREMENT],
    "Temp_Oth": ["Inverter Temperature", "tempoth", UnitOfTemperature.CELSIUS, "mdi:temperature-celsius", SensorDeviceClass.TEMPERATURE, STATE_CLASS_MEASUREMENT],
}