Skip to content
View in the app

A better way to browse. Learn more.

Power Forum - Renewable Energy Discussion

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SunSynk - Inverter Monitoring

Featured Replies

14 hours ago, Scubadude said:

4 hours of cloud cover? Unlikely. If your battery is full and demand is low, production is throttled back. Solarman will show it clearly.

I'm trying to programmatically confirm if the inverter is "throttling back PV production".
I was hoping to use the SunSynk MPPT registers.
Adapted from https://github.com/kellerza/sunsynk/blob/main/sunsynk/definitions.py

# SunSynk PV MPPT
    Sensor(186, "PV1 power", WATT, -1),
    Sensor(109, "PV1 voltage", VOLT, 0.1),
    Sensor(110, "PV1 current", AMPS, 0.1),
    Sensor(187, "PV2 power", WATT, -1),
    Sensor(111, "PV2 voltage", VOLT, 0.1),
    Sensor(112, "PV2 current", AMPS, 0.1),

Any ideas?
 

  • Replies 734
  • Views 205.8k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • Thanks to @Bloubul7and all the other contributors. This is my HA dashboard. It has all I need to view at a glance. (PS: really impressed with the Sunsynk)  

  • Thanks for sharing. Did not know about the horseshoe or plotly cards. Added to Dashboard  

  • Think I figured it out. Copied the Raw Config file. EDIT: Open the file at the bottom with notepad or Text Editor. Copy and paste in Dashboard "Raw configuration editor" You need to install

Posted Images

I'm not an expert but if you overlay consumption and SOC on the chart you will see it clearly like the crudely shaded section on the graph below.  The MPPT wont give you all the answers - don't you have BMS and consumtion data that you can query?

 

image.thumb.png.20fe422669b27c5d843d8a5cc2f22319.png

Edited by Scubadude

7 hours ago, system32 said:

I'm trying to programmatically confirm if the inverter is "throttling back PV production".
I was hoping to use the SunSynk MPPT registers.
Adapted from https://github.com/kellerza/sunsynk/blob/main/sunsynk/definitions.py

# SunSynk PV MPPT
    Sensor(186, "PV1 power", WATT, -1),
    Sensor(109, "PV1 voltage", VOLT, 0.1),
    Sensor(110, "PV1 current", AMPS, 0.1),
    Sensor(187, "PV2 power", WATT, -1),
    Sensor(111, "PV2 voltage", VOLT, 0.1),
    Sensor(112, "PV2 current", AMPS, 0.1),

Any ideas?
 

You might be able to use PV voltage, but it won't be easy. Perhaps augmented with solcast data will get you there.

  • 1 month later...

Hi there,

is there any reason why we only get L1 and L2 Amps?

What is about L3? 

Im not sure if this allready was discussed here.

Thanks for comments

Hi all,

 

I recently had a Sunsynk 12kW inverter, Greenrich batteries and 12 x solar panels installed. I am trying to integrate the inverter into Home Assistant as many of you have done, but not having much success. I am using a RS485 to Ethernet gateway and running HA in a virtual machine in Windows 10. I have wired the gateway as per the instructions for the pinout on the inverter (I know the diagram is correct and the table is incorrect) and installed @kellerza addon from Github. I'm still not getting any readings from the inverter. I suspect that my issue is that my inverter is set to modbus SN 00 (which, from what I read, doesn't work, even if you set the modbus ID to 00 in the config). However, every time I change the SN to 01 on my inverter, the inverter shuts down. Then I have to turn it off and back on again to restart it and the SN reverts back to 00. I seem to recall reading somewhere on the forum that this happened to somebody else, but I can't find the post again to see if the issue was resolved.

 

Any ideas?

 

Thanks very much.

 

  • 4 weeks later...

Hi all. I have now added the Sunsynk support to SMH as well, so you can use profiles to reprogram the inverter based on the loadshedding schedule. The full range from 3kw all the way to 16kw works.

The only issue I have is on the 16kw I am not able to update any registers. I keep on getting a modbus timeout.  Has anybody got the updates working on the 16Kw?

Random question - Has anyone noticed that their inverter battery never charges to 100%. It seems like 99% is the highest it goes and I'm wondering if that is wasting power constantly trickling it to "try" and reach 100%.

Is it possibly just a setting on the inverter that I can change to make it satisfied with the 99%?

Oh forgot to mention - For those who did not know, ESP recently released a loadshedding API which can be used by personal users and integrated directly into HA. Just need to request an API key from them. Been using it for a week. Works very well

2 hours ago, jacauc said:

Oh forgot to mention - For those who did not know, ESP recently released a loadshedding API which can be used by personal users and integrated directly into HA. Just need to request an API key from them. Been using it for a week. Works very well

Just a headsup - they are changing the way they do things and which tokens are valid - check your email for the new method and process

On 2022/10/27 at 7:31 PM, jacauc said:

Oh forgot to mention - For those who did not know, ESP recently released a loadshedding API which can be used by personal users and integrated directly into HA. Just need to request an API key from them. Been using it for a week. Works very well

hi, how would you integrate it into HA? what would you do? would you be able to share your code? 

thanks

2 hours ago, McAllstar said:

hi, how would you integrate it into HA? what would you do? would you be able to share your code? 

thanks

  1. Get a token here >> Signup for an API token via Gumroad: https://eskomsepush.gumroad.com/l/api
  2. In Home Assistant, click the terminal
  3. it should show you something like [core-ssh ~]$
  4. Search for your area by pasting / typing this code into the terminal - replace olivedale at the end with your specific area >> curl --header "Token: <<your token here>>" --location --request GET 'https://developer.sepush.co.za/business/2.0/areas_search?text=olivedale'
  5. you should get output similar to this >>
    {"areas":[{"id":"jhbcitypower2-10-olivedale","name":"Olivedale (10)","region":"JHB City Power"},{"id":"eskomdirect-33470-olivedaleswellendamwesterncape","name":"Olivedale","region":"Eskom Direct (Web), Swellendam, Western Cape"}]}
     
  6. Your area would be "jhbcitypower2-10-olivedale"

Copy this YAML code into your configuration.yaml.file and replace your token and area id as needed. Code is by user Tinuva from MyBB

rest:
  - resource: "https://developer.sepush.co.za/business/2.0/area"
    scan_interval: '01:00:00' # RATE LIMIT!
    headers:
      Token: !secret EskomSePush
    params:
      id: "capetown-6-durbanville"
      #id: "<your area id here>"
    sensor:
      - name: EskomSePush
        force_update: true
        value_template: "OK"
        json_attributes:
          - events
          - info
          - schedule

sensor:
  #Eskom se push sensor
  - platform: rest
    name: EskomSePushAllowance
    resource: "https://developer.sepush.co.za/business/2.0/api_allowance"
    headers:
      Token: !secret EskomSePush
    json_attributes_path: "$.allowance"
    json_attributes:
      - count
      - limit
      - type
    value_template: "OK"
    scan_interval: 3600

  # template sensors abased on ESP above
  - platform: template
    sensors:
      next_loadshedding_time:
        friendly_name: Next loadshedding time
        device_class: timestamp
        unique_id: Next_Loadshedding_Time
        value_template: "{{ state_attr('sensor.eskomsepush','events')[0].start }}"
      next_loadshedding_event:
        friendly_name: Next loadshedding event
        unique_id: Next_Loadshedding_Event
        value_template: "{{ state_attr('sensor.eskomsepush','events')[0].note }}"
      next_loadshedding_time_end:
        friendly_name: Next loadshedding end time
        unique_id: Next_Loadshedding_End_Time
        device_class: timestamp
        value_template: "{{ state_attr('sensor.eskomsepush','events')[0].end }}"
      next_loadshedding_duration:
        friendly_name: Next loadshedding duration
        unique_id: Next_Loadshedding_Duration
        unit_of_measurement: mins
        value_template: '{{ [( as_timestamp(states.sensor.next_loadshedding_time_end.state) | int - as_timestamp(states.sensor.next_loadshedding_time.state) | int ) / 60,-1] | max | round(0) }}'
      time_till_loadshedding:
        friendly_name: Time until next loadshedding
        unique_id: Time_Until_Next_Loadshedding
        unit_of_measurement: mins
        value_template: '{{ [( as_timestamp(states.sensor.next_loadshedding_time.state) | int - as_timestamp(now()) | int ) / 60,-1] | max | round(0) }}'
      time_till_loadshedding_ends:
        friendly_name: Time until next loadshedding ends
        unique_id: Time_Until_Next_Loadshedding_ends
        unit_of_measurement: mins
        value_template: '{{ [( as_timestamp(states.sensor.next_loadshedding_time_end.state) | int - as_timestamp(now()) | int ) / 60,-1] | max | round(0) }}'

      eskomsepush_calls_remaining:
        friendly_name: EskomSePush API Calls remaining
        unique_id: EskomSePush_calls_remaining
        value_template: '{{ int(state_attr("sensor.eskomsepushallowance","limit")) - int(state_attr("sensor.eskomsepushallowance","count")) }}'

      loadshedding_slot_forecast:
        friendly_name: Loadshedding slot forecast
        unique_id: loadshedding_slot_forecast
        value_template: >
          {%- for event in states['sensor.eskomsepush'].attributes.events -%} {{
          as_timestamp(event['start']) | timestamp_custom('%a %d %b:') }} {{ event['note'] }} {{
          as_timestamp(event['start']) | timestamp_custom('from %H:%M') }} to {{
          as_timestamp(event['end']) | timestamp_custom('%H:%M') }}
          {{- '\n' -}} {%- endfor -%}
binary_sensor:
  - platform: template
    sensors:
      loadshedding_active:
        friendly_name: "Loadshedding active"
        device_class: problem
        value_template: >
            {% if (int(states('sensor.time_till_loadshedding')) <= 0 ) %}
             True
            {% else %}
             False
            {% endif %}

Once done your entities should appear as normal in HA and you should be able to create cards etc with them

Edited by mzezman

16 minutes ago, mzezman said:
  1. Get a token here >> Signup for an API token via Gumroad: https://eskomsepush.gumroad.com/l/api
  2. In Home Assistant, click the terminal
  3. it should show you something like [core-ssh ~]$
  4. Search for your area by pasting / typing this code into the terminal - replace olivedale at the end with your specific area >> curl --header "Token: <<your token here>>" --location --request GET 'https://developer.sepush.co.za/business/2.0/areas_search?text=olivedale'
  5. you should get output similar to this >>
    {"areas":[{"id":"jhbcitypower2-10-olivedale","name":"Olivedale (10)","region":"JHB City Power"},{"id":"eskomdirect-33470-olivedaleswellendamwesterncape","name":"Olivedale","region":"Eskom Direct (Web), Swellendam, Western Cape"}]}
     
  6. Your area would be "jhbcitypower2-10-olivedale"

Copy this YAML code into your configuration.yaml.file and replace your token and area id as needed. Code is by user Tinuva from MyBB

rest:
  - resource: "https://developer.sepush.co.za/business/2.0/area"
    scan_interval: '01:00:00' # RATE LIMIT!
    headers:
      Token: !secret EskomSePush
    params:
      id: "capetown-6-durbanville"
      #id: "<your area id here>"
    sensor:
      - name: EskomSePush
        force_update: true
        value_template: "OK"
        json_attributes:
          - events
          - info
          - schedule

sensor:
  #Eskom se push sensor
  - platform: rest
    name: EskomSePushAllowance
    resource: "https://developer.sepush.co.za/business/2.0/api_allowance"
    headers:
      Token: !secret EskomSePush
    json_attributes_path: "$.allowance"
    json_attributes:
      - count
      - limit
      - type
    value_template: "OK"
    scan_interval: 3600

  # template sensors abased on ESP above
  - platform: template
    sensors:
      next_loadshedding_time:
        friendly_name: Next loadshedding time
        device_class: timestamp
        unique_id: Next_Loadshedding_Time
        value_template: "{{ state_attr('sensor.eskomsepush','events')[0].start }}"
      next_loadshedding_event:
        friendly_name: Next loadshedding event
        unique_id: Next_Loadshedding_Event
        value_template: "{{ state_attr('sensor.eskomsepush','events')[0].note }}"
      next_loadshedding_time_end:
        friendly_name: Next loadshedding end time
        unique_id: Next_Loadshedding_End_Time
        device_class: timestamp
        value_template: "{{ state_attr('sensor.eskomsepush','events')[0].end }}"
      next_loadshedding_duration:
        friendly_name: Next loadshedding duration
        unique_id: Next_Loadshedding_Duration
        unit_of_measurement: mins
        value_template: '{{ [( as_timestamp(states.sensor.next_loadshedding_time_end.state) | int - as_timestamp(states.sensor.next_loadshedding_time.state) | int ) / 60,-1] | max | round(0) }}'
      time_till_loadshedding:
        friendly_name: Time until next loadshedding
        unique_id: Time_Until_Next_Loadshedding
        unit_of_measurement: mins
        value_template: '{{ [( as_timestamp(states.sensor.next_loadshedding_time.state) | int - as_timestamp(now()) | int ) / 60,-1] | max | round(0) }}'
      time_till_loadshedding_ends:
        friendly_name: Time until next loadshedding ends
        unique_id: Time_Until_Next_Loadshedding_ends
        unit_of_measurement: mins
        value_template: '{{ [( as_timestamp(states.sensor.next_loadshedding_time_end.state) | int - as_timestamp(now()) | int ) / 60,-1] | max | round(0) }}'

      eskomsepush_calls_remaining:
        friendly_name: EskomSePush API Calls remaining
        unique_id: EskomSePush_calls_remaining
        value_template: '{{ int(state_attr("sensor.eskomsepushallowance","limit")) - int(state_attr("sensor.eskomsepushallowance","count")) }}'

      loadshedding_slot_forecast:
        friendly_name: Loadshedding slot forecast
        unique_id: loadshedding_slot_forecast
        value_template: >
          {%- for event in states['sensor.eskomsepush'].attributes.events -%} {{
          as_timestamp(event['start']) | timestamp_custom('%a %d %b:') }} {{ event['note'] }} {{
          as_timestamp(event['start']) | timestamp_custom('from %H:%M') }} to {{
          as_timestamp(event['end']) | timestamp_custom('%H:%M') }}
          {{- '\n' -}} {%- endfor -%}
binary_sensor:
  - platform: template
    sensors:
      loadshedding_active:
        friendly_name: "Loadshedding active"
        device_class: problem
        value_template: >
            {% if (int(states('sensor.time_till_loadshedding')) <= 0 ) %}
             True
            {% else %}
             False
            {% endif %}

Once done your entities should appear as normal in HA and you should be able to create cards etc with them

brilliant, thanks a mil. I was getting invalid token and found the info below on their website. I ran that and it worked. 

curl --location --request GET 'https://developer.sepush.co.za/business/2.0/areas_search?text=edenvale' \--header 'token: licence key'

25 minutes ago, jacauc said:

Alternatively, install the HACS Addon by swartjean and it's all done for you 

Just set it up with my key and it works well. Thanks for all of the assistance. 

Hi,

I'm new to this topic and home assistant. I have a Sunsynk 8.8kw are people using @kellerzaexcellent add on, or the original brilliant code from @Bloubul7? I have noticed @jacaucrepo hasn't changed since sept 21. 
 

Also, I noticed that @kellerzaadd on now writes to the inverter. 
1) would I be able to update date/time
2) would I be able to change System mode to change my charging profile based on the next days weather

Thanks
Peter

Edited by pedro54

If you are a tinkerer and know/want to learn NodeRed then it's a good project, but except for this forum you are mostly on your own.

The Addon is tailored for Home Assistant. It's easier to use, quicker to setup and has additional functionality (filters, write UI elements in HA, full discovery/removal of entities). There have been some excellent contributions to the docs & code (like writable sensors).

Today you cannot update the time, but the System Mode is probably the main use case for adding the capability to write.

@kellerza what is the best way to transition from the original Bloubul7 flows to your packaged addon? Is it a case of full remove and fresh install or will new sensors be created and duplicated (which isnt really an issue)?

I really don't want to start again but then I also really, really want the write to system mode added in HA directly and not in node-red!

@Robbo The biggest issue is probably that the new sensors will have a different name, so you will lose your historical Energy data (the HA community forum might have a solution to rename historical data, but I've never tried this) 

You can test it: Simply install & configure the addon. Since only one application can access the USB (RS485 converter) at a time, you will have to stop Node-RED polling the inverter and then you can start the addon.

Once the Addon starts you start it will create all the new sensors and start updating values.

Using "MQTT Explorer" you can then delete the MQTT auto-discovery info for either Node-Red or the Addon depending on which one you choose to keep around. Auto-Discovery for MQTT is under \homeassistant\sensors\<serial>\<sensor>, the Node-Red addon will likely be similar. Once deleted the sensors should disappear from HA.

Lastly reconfigure the energy management dashboard & any UI sensors.

3 minutes ago, kellerza said:

Since only one application can access the USB (RS485 converter) at a time, you will have to stop Node-RED polling the inverter and then you can start the addon

Ah thanks, only one polling at a time is quite a sticking point.

The only way around it is using something like mbusd connected to the USB port and everything else connects over TCP to mbusd. The addon repo contains an mbusd addon as well. I use mbusd permanently in my setup

3 hours ago, pedro54 said:

Hi,

I'm new to this topic and home assistant. I have a Sunsynk 8.8kw are people using @kellerzaexcellent add on, or the original brilliant code from @Bloubul7? I have noticed @jacaucrepo hasn't changed since sept 21. 
 

Also, I noticed that @kellerzaadd on now writes to the inverter. 
1) would I be able to update date/time
2) would I be able to change System mode to change my charging profile based on the next days weather

Thanks
Peter

Repo hasn't changed much because it didn't really need changes. All is well with that code. 

 

We're focusing right now on moving the functionality out of node red and raspberry Pi to be able to poll it with a much more lightweight ESP32 on the Esphome platform for situations where the HA instance is not close to the inverter 

1 hour ago, jacauc said:

We're focusing right now on moving the functionality out of node red and raspberry Pi to be able to poll it with a much more lightweight ESP32 on the Esphome platform for situations where the HA instance is not close to the inverter 

This violates one of my Home Automation commandments: "Thou shalt not use a soldering iron" 😉

If it's really far away, you get various TCP to RS485 gateways

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.