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.

Home Assistant Sunsynk Power Flow Card and Dashboard

Featured Replies

19 hours ago, iiznh said:

Just setup the standard energy dashboard. It will give you breakdown per hour.

image.thumb.png.12ff292c0f7ac3787c888b2a011e1428.png

Getting rid of Eskom is not a financially sound decision as you will never recoup the cost from your batteries(at current prices). You can still inflict a lot of hurt by just using as much solar as possible and giving them the few remaining kWh.

Thanks for this - didn't think to check the energy dashboard 🤓

Don't want to get rid of them, just want to get sufficient battery capacity to see us through the evenings so trying to get an average load.

  • Replies 592
  • Views 129.9k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • thank you @slipx, I've been using the power flow card for a while now but didn't know about the animations. now thanks your examples I've implemented the animations. I use a generator on my AUX port

  • I've made  a small update to the Dashboard. The load shedding card shows remaining time based on battery SOC and battery power. You will need to create some template sensors as discussed here and prov

  • Here's a slight contribution to the goodness on this thread which lives on my main HA screen: type: custom:bar-card entities: - entity: sensor.load_shedding_area_eskde_4_sandownext10cityofj

Posted Images

is my modbus working ?

[10:15:01] INFO: Starting mbusd -d -L - -v 2 -p /dev/ttyUSB0 -s 9600 -m 8N1 -P 502
31 Aug 2023 10:15:01 mbusd-0.5.1 started...
31 Aug 2023 10:15:01 tty: trying to open /dev/ttyUSB0 (speed 9600 mode 8N1)
31 Aug 2023 10:15:25 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:15:34 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:20:05 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:20:15 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:20:27 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:20:38 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:20:51 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:21:01 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:21:13 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:21:24 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:21:36 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:21:47 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:22:00 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:22:10 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:22:24 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:22:35 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:22:48 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:22:58 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:23:11 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:23:21 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:23:34 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:23:45 conn_close(): closing connection from 172.30.33.0
31 Aug 2023 10:23:57 conn_open(): accepting connection from 172.30.33.0
31 Aug 2023 10:24:08 conn_close(): closing connection from 172.30.33.0

because SS add on log stops ?

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun sunsynk (no readiness notification)
s6-rc: info: service legacy-services successfully started
09:23:56 INFO    Loading HASS OS configuration
09:23:57 INFO    Schedules:
+-----------+-----+------+--------+-----------+----------+------------+
|    Key    | src | Read | Report | Change by | Change % | Change any |
+-----------+-----+------+--------+-----------+----------+------------+
| date_time |     |  60  |   60   |           |          |    True    |
|     rw    |     |  5   |  300   |           |          |    True    |
|     w     |  *  |  5   |   60   |     80    |          |            |
|    kwh    |     | 300  |  300   |           |          |            |
|  any_unit |     |  15  |  300   |           |          |            |
|  no_unit  |     |  15  |  300   |           |          |    True    |
+-----------+-----+------+--------+-----------+----------+------------+
09:23:57 INFO    Using Single phase sensor definitions.
09:23:57 INFO    Added hidden sensors as other sensors depend on it: Rated power, Serial
09:23:57 INFO    Connecting to tcp://homeassistant.local:502
09:23:57 INFO    PyModbus 3.4.1 tcp: homeassistant.local:502
09:23:57 INFO    Reading startup sensors Battery Low Capacity, Prog3 Time, Prog1 Time, Serial, Rated power, Prog6 Time, Prog4 Time, Prog5 Time, Prog2 Time
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/local/lib/python3.11/site-packages/ha_addon_sunsynk_multi/__main__.py", line 72, in <module>
    main()
  File "/usr/local/lib/python3.11/site-packages/ha_addon_sunsynk_multi/__main__.py", line 67, in main
    loop.run_until_complete(main_loop(loop))
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/ha_addon_sunsynk_multi/__main__.py", line 37, in main_loop
    await ist.connect()
  File "/usr/local/lib/python3.11/site-packages/ha_addon_sunsynk_multi/a_inverter.py", line 103, in connect
    if not await self.read_sensors(sensors=SOPT.startup):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/ha_addon_sunsynk_multi/a_inverter.py", line 59, in read_sensors
    await self.inv.read_sensors(sensors)
  File "/usr/local/lib/python3.11/site-packages/sunsynk/sunsynk.py", line 134, in read_sensors
    raise IOError("; ".join(errs))
OSError: OSError reading 5 registers from 3: failed to read register 3 - function code: 131; OSError reading 2 registers from 16: failed to read register 16 - function code: 131; OSError reading 1 registers from 219: failed to read register 219 - function code: 131; OSError reading 5 registers from 250: failed to read register 250 - function code: 131; OSError reading 1 registers from 255: failed to read register 255 - function code: 131
[09:24:08] WARNING: Halt add-on with exit code 1
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped

 

 

Edited by leecavturbo

@slipx Hi, hope you doing well.

Is there any chance you can help and add forecasts days ( Solcast ) D4, D5,D6, and D7 to the forecast card , would really appreciate it. 

Solcast has added 7 days to their forecasts.

Thanks

Vaughan

 

I’m all up and running with kellerz add on now and have data on dashboard.

the only thing I'm missing is Pv2 power and Pv1+Pv2 power.

then looking for an automation to turn off solar export while battery charging 

  • Author
On 2023/09/04 at 8:31 PM, Vaughanza said:

@slipx Hi, hope you doing well.

Is there any chance you can help and add forecasts days ( Solcast ) D4, D5,D6, and D7 to the forecast card , would really appreciate it. 

Solcast has added 7 days to their forecasts.

Thanks

Vaughan

 

Here you go

type: custom:apexcharts-card
view_layout:
  grid-area: solar
header:
  show: true
  standard_format: true
  show_states: true
  colorize_states: true
apex_config:
  chart:
    height: 350px
  tooltip:
    enabled: true
    shared: true
    followCursor: true
graph_span: 8d
now:
  show: true
  label: Now
span:
  start: day
  offset: '-1day'
all_series_config:
  type: area
  opacity: 0.3
  stroke_width: 1
series:
  - entity: sensor.sunsynk_battery_soc
    name: Battery
    float_precision: 0
    type: line
    color: '#f06292'
    opacity: 0.6
    yaxis_id: capacity
    extend_to: now
    show:
      legend_value: true
      in_header: false
    group_by:
      func: last
      duration: 5m
  - entity: sensor.sunsynk_solar_power
    name: Solar Power
    float_precision: 3
    color: '#ff9800'
    yaxis_id: kWh
    unit: kW
    transform: return x/1000;
    extend_to: now
    show:
      legend_value: true
      in_header: false
    group_by:
      func: avg
      duration: 5m
  - entity: sensor.solcast_pv_forecast_forecast_today
    name: Solar Forecast (D1)
    extend_to: false
    color: grey
    opacity: 0.3
    stroke_width: 0
    yaxis_id: kWh
    show:
      legend_value: false
      in_header: false
    data_generator: |
      return entity.attributes.detailedForecast.map((entry) => {
            return [new Date(entry.period_start), entry.pv_estimate];
          });
  - entity: sensor.solcast_pv_forecast_forecast_tomorrow
    name: Solar Forecast (D2)
    float_precision: 3
    extend_to: false
    color: grey
    opacity: 0.3
    stroke_width: 0
    yaxis_id: kWh
    show:
      legend_value: false
      in_header: false
    data_generator: |
      return entity.attributes.detailedForecast.map((entry) => {
            return [new Date(entry.period_start), entry.pv_estimate];
          });
  - entity: sensor.solcast_pv_forecast_forecast_day_3
    name: Solar Forecast (D3)
    float_precision: 3
    extend_to: false
    color: grey
    opacity: 0.3
    stroke_width: 0
    yaxis_id: kWh
    show:
      legend_value: false
      in_header: false
    data_generator: |
      return entity.attributes.detailedForecast.map((entry) => {
            return [new Date(entry.period_start), entry.pv_estimate];
          });
  - entity: sensor.solcast_pv_forecast_forecast_day_4
    name: Solar Forecast (D4)
    float_precision: 3
    extend_to: false
    color: grey
    opacity: 0.3
    stroke_width: 0
    yaxis_id: kWh
    show:
      legend_value: false
      in_header: false
    data_generator: |
      return entity.attributes.detailedForecast.map((entry) => {
            return [new Date(entry.period_start), entry.pv_estimate];
          });
  - entity: sensor.solcast_pv_forecast_forecast_day_5
    name: Solar Forecast (D5)
    float_precision: 3
    extend_to: false
    color: grey
    opacity: 0.3
    stroke_width: 0
    yaxis_id: kWh
    show:
      legend_value: false
      in_header: false
    data_generator: |
      return entity.attributes.detailedForecast.map((entry) => {
            return [new Date(entry.period_start), entry.pv_estimate];
          });
  - entity: sensor.solcast_pv_forecast_forecast_day_6
    name: Solar Forecast (D6)
    float_precision: 3
    extend_to: false
    color: grey
    opacity: 0.3
    stroke_width: 0
    yaxis_id: kWh
    show:
      legend_value: false
      in_header: false
    data_generator: |
      return entity.attributes.detailedForecast.map((entry) => {
            return [new Date(entry.period_start), entry.pv_estimate];
          });
  - entity: sensor.solcast_pv_forecast_forecast_day_7
    name: Solar Forecast (D7)
    float_precision: 3
    extend_to: false
    color: grey
    opacity: 0.3
    stroke_width: 0
    yaxis_id: kWh
    show:
      legend_value: false
      in_header: false
    data_generator: |
      return entity.attributes.detailedForecast.map((entry) => {
            return [new Date(entry.period_start), entry.pv_estimate];
          });
  - entity: sensor.solcast_pv_forecast_forecast_today
    yaxis_id: header_only
    name: Solar Forecast (D1)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_forecast_remaining_today
    yaxis_id: header_only
    name: Forecast (D1 Remaining)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_forecast_tomorrow
    yaxis_id: header_only
    name: Forecast (D2)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_forecast_day_3
    yaxis_id: header_only
    name: Solar Forecast (D3)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_forecast_day_4
    yaxis_id: header_only
    name: Solar Forecast (D4)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_forecast_day_5
    yaxis_id: header_only
    name: Solar Forecast (D5)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_forecast_day_6
    yaxis_id: header_only
    name: Solar Forecast (D6)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_forecast_day_7
    yaxis_id: header_only
    name: Solar Forecast (D7)
    color: grey
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.solcast_pv_forecast_api_last_polled
    yaxis_id: header_only
    name: Forecast (Last Update)
    color: grey
    unit: ' min.'
    transform: return ((Date.now()) - (new Date(x).getTime())) / 60 / 60 / 24
    show:
      legend_value: true
      in_header: true
      in_chart: false
yaxis:
  - id: capacity
    show: true
    opposite: true
    decimals: 0
    max: 100
    min: 0
    apex_config:
      tickAmount: 5
  - id: kWh
    show: true
    min: 0
    apex_config:
      tickAmount: 5
  - id: header_only
    show: false
  • Author

Hi All

2.5.1 has been released. The card can now be configured to hide all battery information if you don't have any energy storage. I've also fixed the display of additional essential loads when show_solar and/or show_battery attributes are set to false. The can be configured for both the lite and full version of the card. Some pics below.

image

image

image

 

The card can now be configured to hide all battery information if you don't have any energy storage. I've also fixed the display of additional essential loads when show_solar and/or show_battery attributes are set to false.

Very Nice! This will work well with a SolisSmartDongle that I recently built for a friend in the UK. The inverter is purely grid-tied

What would be your recommendation for people that have 3Phase systems? Currently I am thinking of just adding the  3Phases together? Are you planning on adding options to display the different Phases (would also work well for american bi-phase/split phase systems)

  • Author

Thanks. I would recommend you add the phases together for now using template sensors. The current card size limits how much data can be displayed (specifically in the full mode). Adding individual phases would require a larger canvas and redesign. 

Slipx thank you for the nice card 

is it possoble for you to make the power and current on the battery show minus when the battery is charging ? 

IMG_7914.jpeg

  • Author
 

Slipx thank you for the nice card 

is it possoble for you to make the power and current on the battery show minus when the battery is charging ? 

IMG_7914.jpeg

Hi. They only show absolute values on the card. The animated dot shows the state of charge or discharge.

On second thought maybe I should make that an option....

Edited by slipx

 

@Yuri I've released 2.6.1. Battery power and current are now displayed as reported by the sensor. If you prefer the absolute values you can use the `show_absolute: true` battery setting

Thanks!

  • 2 weeks later...
  • Author

v2.7.0

🚀 Exciting New Features

feat: adds optional auto scaling of power values for each of the card sections i.e. battery, solar, grid , load and inverter. When auto_scale: true power values greater than 999W will be displayed as kW i.e. 4,32kW. The number of decimal places is set to 2 by default but can be adjusted globally using the card decimal_places: attribute

Full Changelog: Comparing v2.6.1...v2.7.0

  • 2 weeks later...
  • Author

v2.8.0

🚀 Exciting New Features

  • feat: you can now display extra sensor data for your additional essential loads e.g. daily energy or temperature etc. The following optional entities can be used: essential_load1_extra and essential_load2_extra. This data is not displayed on the full card if show_aux: true due to insufficient space.

Full Changelog: Comparing v2.7.2...v2.8.0

image.png.f0c6592f7136bcfd02995cf9d729fcb2.png

Edited by slipx

  • Author

v2.9.0

🚀 Exciting New Features

  • doc: add support for CZ language. Thanks @Legnava89. Closes #84 
  • feat: Battery shutdown (`shutdown_soc:`) accepts either a numeric value or sensor e,g, `sensor.sunsynk_battery_capacity_shutdown` Closes #85
  • Author

v2.11.0

🚀 Exciting New Features

  • feat: adds support for 3 phase inverter data. Setting the three_phase: true attribute will display additional 3 phase sensors. Requires entity attributes to be defined i.e. inverter_current_L2inverter_current_L3inverter_voltage_L2inverter_voltage_L3 , grid_ct_power_L2grid_ct_power_L3load_power_L1load_power_L2load_power_L3
  • docs: updates French Translation. Thanks @adnovea

really loving the power flow card now, thanks @slipx, decided to replace my modified version of the early svg...
I have a Sunsynk 5kW pulling the data via RS485 into NodeRed and many of my sensor names do not match the defaults the card uses.
To help me remap my sensor names I pulled the entity list from here
https://github.com/slipx06/sunsynk-power-flow-card/blob/master/docs/configuration.md
and put them into a spread sheet to make things easier.
Here is my .ods file for those that may be in a similar boat
Sunsynk-Power-Flow-Card sensor mappings.ods

use column E to enter your relevant HA entity names, enter "none" for those you don't have or don't want to use, just ensure you have values for the "Required" entities.
To then get your entity list for your card just use the filter at the top of column F
Sunsynk-Power-Flow-Cardsensormappingsfilter1.png.12342f36c474a38224d34e61fa535e72.png
and untick the "(empty)" option on the dialog that pops up, then click OK at the bottom which will hide all the entities that had "none" in column E.
Sunsynk-Power-Flow-Cardsensormappingsfilter2.png.052ac783192935e27ed6ec583c27f21a.png
You can then select all the cells in column F with values, including row 1 ("entities:") and past them into your card.

The only thing I haven't got working on the card is the use timer and priority load but I assume that's because my HA entities for them are a "sensor" and not a "switch", just need to figure out how to get them to be switches.

good.
there is one additional small issue. I tried to connect a few daily energy sensors and found that the card doesn't recognize they are in Wh - displays values as is. so i made workaround with template sensors. but it would be nice if the card will able to recognize and autoscale energy values

@slipx I am running Luxpower inverters and am using v2.7.2 of your card, if I do an upgrade it seems to break it and I just get NaN displayed. So I have had to restore a backup.

 

Any ideas why this might be the case?

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.