SolarMax Inverter Integration

Thank you so much for that detailed explenation :slight_smile:

Unfortunately, this whole Wireshark and conversion is new to me and that’s what I’m stuck on. I see that some is sent to the inverter and also comes back again.
I have seen two potential payloads and tried to get the data into Home assistant.

The sensors are there, but unfortunately no data is coming in.

sensor:
  - platform: tcp
    scan_interval:
      seconds: 5
    name: solarmax3000s
    host: 192.168.178.223
    port: 12345
    payload: "{FB;01;26|64:KDY;KMT;KT0;KYR;PAC|08BC}"

  - platform: tcp
    scan_interval:
      seconds: 5
    name: solarmax3000st
    host: 192.168.178.223
    port: 12345
    payload: "{FB;01;1E|64:PAM;SAL;SYS|06A4}"

template:
  - sensor:
      - name: solarmax3000s_3_monthly
        device_class: energy
        unit_of_measurement: "kWh"
        state: >
          {{ states('sensor.solarmax3000s').split(';')[3] | regex_findall_index('\=(.*)') | int(base=16) }}

  - sensor:
      - name: solarmax3000s_3_daily
        device_class: energy
        state_class: total_increasing
        unit_of_measurement: "kWh"
        state: >
          {{ states('sensor.solarmax3000s').split(';')[2] | regex_findall_index('\=(.*)') | int(base=16) | int / 10 }}

  - sensor:
      - name: solarmax3000s_3_current_w
        device_class: power
        unit_of_measurement: "w"
        state: >
          {{ states('sensor.solarmax3000s').split(';')[6] | regex_findall_index('(?<=\=)(.*?)(?=\|)') | int(base=16) | int / 2 | int }}

Can you help me how to get the correct information from Wireshark?
I would be happy to send you the recordings as well.

Ok, I found it out myself. The payload of solarmax3000s was already correct, but as long as the software MaxTalk is running, the sensor gets no values. Why? No idea :smiley:
Now I finally have my values in Home assistant. One question can you possibly still read out the total fed current or tell me which sensor I need for this?

Sorry for the late reply , so are you getting data correctly now?

No worries. Yes, I got it working a short time later. The error was that I still had MaxTalk open and somehow it “grabs” the data as long as it is active and Home Assistant does not get it. In the meantime everything arrives cleanly.
I have one last question. Do you happen to have an idea how to read the total number of kWh fed? Quasi solarmax “total generated energy”.

I have also noticed if MaxTalk is running then HA can not access the data. I haven’t got that particular metric out of mine yet , I will take a look tomorrow as it should be just another call that we can capture and work out.

1 Like

Hmm… I don’t get it where you guys got the payload from.
I can see a lot of my two inverter’s (SolarMax 3000s and SolarmMax 2000s) TCP data packages on Wireshark on port 12345, and I’ve looked through a lot of packages now, but there is no similiar payload to yours.
You just double clicked the packages and looked deeper into them, right?

Well guys, ti works now. I was not aware I have to look out for the according payload within the packet bytes:
Unbenannt
But holy crap @Dbuckley1712, I wonder how the hell you were able to find out on which bytes are relevant and then even how to covert them correctly? :face_with_monocle:

EDIT: It lacks indeed the possibility to get kWh to implement it to the energy dashboard.

Apologies for spamming too much here, but I just discovered this:

@Buddinski88 Should work for you I guess?

EDIT: I tried it and it works perfectly in my case and this way I can use it within the HA energy dashboard.

1 Like

Thank you @Dbuckley1712 ! I am so glad you took the effort to explain how to get this done :+1:t2:

1 Like

Just for anyone looking for the same for the more recent Solarmax / Solarmax Ultimate inverters: Those can be easily integrated via ModBus. Solarmax has been posting the relevant information at their homepage (https://www.solarmax.com/download), and from there it is easy getting this into HA.

1 Like

Hi David,
thanks a lot for your investigation regarding SolarMax. I will also reduce the equipment (RPi running Solaranzeige and Volkszähler) and integrate SolarMax directly into HA (as long as the inverters keep running …). Unfortunally I get bad info from config check…
Do you, or anyone else here, have any idea
Dieter

sensor:
  - platform: tcp
    scan_interval:
      seconds: 5
    name: solarmaxTest1
    host: 192.168.178.100
    port: 12300
    payload: '{FB;01;26|64:KDY;KMT;KT0;KYR;PAC|08BC}'

  - sensor:
      - name: solar_Test1_monthly
        device_class: energy
        unit_of_measurement: "kWh"
        state: >
          {{ states('sensor.solarmaxTest1').split(';')[3] | regex_findall_index('\=(.*)') | int(base=16) }}
          
  - sensor:
      - name: solar_Test1_daily
        device_class: energy
        state_class: total_increasing
        unit_of_measurement: "kWh"
        state: >
          {{ states('sensor.solarmaxTest1').split(';')[2] | regex_findall_index('\=(.*)') | int(base=16) | int / 10 }}
          
  - sensor:
      - name: solar_Test1_current_w
        device_class: power
        unit_of_measurement: "w"
        state: >
          {{ states('sensor.solarmaxTest1').split(';')[6] | regex_findall_index('(?<=\=)(.*?)(?=\|)') | int(base=16) | int / 2 | int }}


WireShark1

Do you have any example-config-file?

I tried multiple times, but always failed.

Sure, here it is. I struggled also hugely until I learnt that you need to add the “input_type: input” so HA knows which register “family” to do the lookup in. Just add your IP address below, and all should work.

modbus:

  - name: solarmax
    type: tcp
    host: YOUR LOCAL IP ADDRESS
    port: 502
    sensors:
      - name: solarmax_firmware
        slave: 1
        address: 102
        input_type: input
        scan_interval: 3600
      - name: solarmax_dc_leistung_wechselrichter
        slave: 1
        address: 110
        input_type: input
        scan_interval: 1
      - name: solarmax_batterie_ladeleistung
        slave: 1
        address: 114
        input_type: input
        scan_interval: 1
      - name: solarmax_eigenverbrauchs_leistung
        slave: 1
        address: 116
        input_type: input
        scan_interval: 1
      - name: solarmax_einspeiseleistung
        slave: 1
        address: 118
        input_type: input
        scan_interval: 1
      - name: solarmax_ac_leistung_komplettanlage
        slave: 1
        address: 120
        input_type: input
        scan_interval: 1
      - name: solarmax_batterie_ladezustand
        slave: 1
        address: 122
        input_type: input
        scan_interval: 1
1 Like

Thanks alot :slight_smile:

Working perfectly :slight_smile:

Glad to hear!

Hello, I’m following your post carefully, but I can’t get a good result.
Can someone help me because I don’t see where I made the mistake.
thank you very much

Hello, I follow your post carefully, but I can’t get a good result. Can someone help me ? thank you very much

# SOLARMAX
sensor:
  - platform: tcp
    scan_interval:
      seconds: 5
    name: solarmax3000s
    host: 192.168.1.123
    port: 12345
    payload: "{FB;01;3E|64:IDC;UL1;TKK;IL1;SYS;TNF;UDC;PAC;PRL;KT0;SYS|0F66}"


template:
  - sensor:
      - name: solarmax3000s_3_monthly
        device_class: energy
        unit_of_measurement: "kWh"
        state: >
          {{ states('sensor.solarmax3000s').split(';')[3] | regex_findall_index('\=(.*)') | int(base=16) }}

  - sensor:
      - name: solarmax3000s_3_daily
        device_class: energy
        state_class: total_increasing
        unit_of_measurement: "kWh"
        state: >
          {{ states('sensor.solarmax3000s').split(';')[2] | regex_findall_index('\=(.*)') | int(base=16) | int / 10 }}

  - sensor:
      - name: solarmax3000s_3_current_w
        device_class: power
        unit_of_measurement: "w"
        state: >
          {{ states('sensor.solarmax3000s').split(';')[6] | regex_findall_index('(?<=\=)(.*?)(?=\|)') | int(base=16) | int / 2 | int }}

Just posted a tutorial on this.

1 Like

Hi,
I get it managed that I could connect via Modbus to my Solarmax 13SMT inverter. My biggest issue for now is to find the right Modbus addresses for the inverter. Every help is welcome. I’m not sure if all values are right. THX in advance.

modbus:
  - name: solarmax
    type: tcp
    host: 192.168.0.78
    port: 502
    sensors:
      - name: solarmax_current_power
        unique_id: 6a0a5b90-4ae8-4a33-8de9-0b5c59a6b8d1
        slave: 1
        address: 4151
        input_type: holding
        unit_of_measurement: kW
        data_type: int32
        scale: 0.0001
      - name: solarmax_total_power
        unique_id: d2a0e2cc-612f-47e9-9f24-f3fce5f9ac6a
        slave: 1
        address: 4129
        input_type: holding
        unit_of_measurement: MWh
        data_type: int32
        scale: 0.001
      - name: solarmax_max_power_today
        slave: 1
        unique_id: d2a0e2cc-612f-47e9-9f24-f3fce5f9ac6a
        address: 4155
        input_type: holding
        unit_of_measurement: kW
        data_type: int32
        scale: 0.0001
      - name: solarmax_internal_converter_temperature
        unique_id: 70b4357b-d7f7-4211-b141-a5a917cf0cc3
        slave: 1
        address: 4124
        input_type: holding
        unit_of_measurement: °C
        data_type: int16
        state_class: measurement
      - name: solarmax_total_power_today
        unique_id: ef4c1f35-6825-4298-ba55-65589efce315
        slave: 1
        address: 4136
        input_type: holding
        unit_of_measurement: kWh
        data_type: int16
        scale: 0.001
      - name: solarmax_spannung_1
        unique_id: 95ed4472-e34a-43fc-97db-e617d49a8e79
        slave: 1
        address: 4112
        input_type: holding
        unit_of_measurement: V
        data_type: int16
        scale: 0.1
      - name: solarmax_strom_1
        unique_id: 079ba81f-99bb-4bd8-a992-9ac2c89674d2
        slave: 1
        address: 4113
        input_type: holding
        unit_of_measurement: A
        data_type: int16
        scale: 0.1
      - name: solarmax_leistung_1
        unique_id: ba84af5e-1f35-4949-a1a8-98bcb53b0170
        slave: 1
        address: 4115
        input_type: holding
        unit_of_measurement: kW
        data_type: int16
        scale: 0.0001
      - name: solarmax_spannung_2
        unique_id: e27d4db8-1c82-4e65-8243-98e25d114a5a
        slave: 1
        address: 4116
        input_type: holding
        unit_of_measurement: V
        data_type: int16
        scale: 0.1
      - name: solarmax_strom_2
        unique_id: 6dfe8cae-9860-4a7e-9f40-e8edd25b2d9c
        slave: 1
        address: 4117
        input_type: holding
        unit_of_measurement: A
        data_type: int16
        scale: 0.1
      - name: solarmax_leistung_2
        unique_id: f3226562-5b7e-4b3c-9366-eeb4f091eabb
        slave: 1
        address: 4119
        input_type: holding
        unit_of_measurement: kW
        data_type: int16
        scale: 0.0001
      - name: solarmax_spannung_3
        unique_id: ca603951-18d0-475f-9a66-42da6da8eacb
        slave: 1
        address: 4107
        input_type: holding
        unit_of_measurement: V
        data_type: int16
        scale: 0.1
      - name: solarmax_strom_3
        unique_id: cb0aeea2-a69a-4d79-85ae-79d0e1b506d5
        slave: 1
        address: 4108
        input_type: holding
        unit_of_measurement: A
        data_type: int16
        scale: 0.1
      - name: solarmax_leistung_3
        unique_id: 67e7e1a7-feb6-45e8-8e26-4db7b086875d
        slave: 1
        address: 4110
        input_type: holding
        unit_of_measurement: kW
        data_type: int16
        scale: 0.0001

I added and updated some modbus addresses.

With the modbus data type fix from 2024.02.

So I had to adjust the following values to get it work again:

    sensors:
      - name: solarmax_current_power
        unique_id: 6a0a5b90-4ae8-4a33-8de9-0b5c59a6b8d1
        slave: 1
        address: 4151
        input_type: holding
        unit_of_measurement: W
        data_type: uint32
        scale: 0.1
        device_class: power
        state_class: measurement