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

  • Replies 589
  • Views 126k
  • 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

@slipx Thanks much appreciated will update tonight when I'm home.  Just a quick question is this only on the essential loads entities (1-6)? From my quick peak at the notes and changes it looks like only the essential loads. 

If so, any possibility to have this option on the daily load as well perhaps as a overall usage warning?

E.G. on my 5.5kw system I can set 5kw as the max. 

Will help with the less tech inclined to understand RED means bad, load to high than having them squint to read the Watt reading on the tablet screen I have setup in the house.

image.png.76d9aca22b6370d5b6b6f6afb42933c4.png

If this is include already, apologies and ignore above 😉

Thanks

Hi guys, first of all excuse my English.

I am trying to get the Slipx06 layout to work in HA.
The inverter is a Deye 5kw and I have put the Slipx yaml on the ESP32. I have communication and I can see data but when it comes to setting the layout I see nothing. 
The screen looks without any graphs or data, I have noticed that if I uninstall ApexCharts Card and reinstall it the graphs appear (although not all, some with error). But if I move to another tab (summary for example) and return the created one, nothing is shown again.

I also tried to create separate charts, but only 3 or 4 charts show graphs.

I don't know what else to do... if someone can help me, I would appreciate it.

image.thumb.png.7e20c5c851a4330f36e24993773c2f61.pngimage.thumb.png.b93e99e6a8676b30640d0dce3894537e.pngimage.thumb.png.196cff2c29dfdddf473be111d0593491.pngimage.thumb.png.d268a1813af487bc5be9f9a86ef0a2b3.png

  • Author

I tried to create a short clip on how to set it up some time back. You might find it useful

https://photos.app.goo.gl/unhJubM2r4BkjW3A8

The horseshoe breaks the dashboard if entities are not correct so perhaps remove those cards first. Also make sure you have all the required entities for the Sunsynk Power Flow Card. The error in your screenshot shows that you have not provided an entity for `day_pv_energy_108:`

Also the ploty graphs take time to populate. For the daily you need to wait 24 hours for data to start showing up etc.

Edited by slipx

3 hours ago, slipx said:

I tried to create a short clip on how to set it up some time back. You might find it useful

https://photos.app.goo.gl/unhJubM2r4BkjW3A8

The horseshoe breaks the dashboard if entities are not correct so perhaps remove those cards first. Also make sure you have all the required entities for the Sunsynk Power Flow Card. The error in your screenshot shows that you have not provided an entity for `day_pv_energy_108:`

Also the ploty graphs take time to populate. For the daily you need to wait 24 hours for data to start showing up etc.

Thanks for replying Slipx,

If I'm using the yaml “ESPHome-1P-Sunsynk-Deye.yaml” that you have on github, it should have all the entities you say, right?

I put just as the files that come up in github. The weird thing is what I said, that if I uninstall ApexCharts Card and reinstall it, the card works (with some errors) but it disappears if I go somewhere else and come back.... If I press F5 to reload it reappears, I just found out....

I have deleted the card entities that referenced sonoff and TUYA geiser sensors. The only card that appears with errors I do not know why. I can't see anything on the phone at all....

Thank you again for everything, from the bottom of my heart.

image.thumb.png.7d8d7bb87a9947646ab04571586abb05.png

Edited by minerillo

  • Author

@minerillo the latest version of the dashboard does not use any Apex Charts. I moved everything to plotly graphs. For the solar forecast are you using Open-Meteo or Solcast ?

I'm adding two arrays together so you would need to modify the sensors for your integration. Try the code below

 

type: custom:plotly-graph
view_layout:
  grid-area: solar
hours_to_show: 4d
time_offset: 2.5d
refresh_interval: auto
entities:
  - entity: sensor.sunsynk_solar_power
    name: Solar Power
    line:
      color: rgb(255, 155, 48)
      shape: spline
      width: 1
    fill: tozeroy
    fillcolor: rgba(255, 155, 48, 0.3)
    yaxis: y3
    show_value: false
    showlegend: false
  - entity: sensor.energy_production_today
    line:
      color: rgb(125, 125, 125)
      shape: spline
    fill: tozeroy
    filters:
      - fn: |
          ({meta}) => {
            const entries = Object.entries(meta.wh_period); 
            const xs = entries.map(([start, _]) => new Date(start));
            const ys = entries.map(([_, value]) => value);
            return { xs, ys };
          }
    yaxis: y1
    showlegend: true
  - entity: sensor.energy_production_tomorrow
    line:
      color: rgb(90,90,90)
      shape: spline
    fill: tozeroy
    filters:
      - fn: |
          ({meta}) => {
            const entries = Object.entries(meta.wh_period); 
            const xs = entries.map(([start, _]) => new Date(start));
            const ys = entries.map(([_, value]) => value);
            return { xs, ys };
          }
    yaxis: y1
  - entity: sensor.energy_production_d2
    line:
      color: rgb(50,50,50)
      shape: spline
    fill: tozeroy
    filters:
      - fn: |
          ({meta}) => {
            const entries = Object.entries(meta.wh_period); 
            const xs = entries.map(([start, _]) => new Date(start));
            const ys = entries.map(([_, value]) => value);
            return { xs, ys };
          }
    yaxis: y1
    showlegend: true
  - entity: sensor.sunsynk_battery_soc
    name: Battery
    line:
      color: red
      shape: spline
      width: 1
    yaxis: y2
    show_value: true
    showlegend: false
    visible: true
  - entity: ""
    name: Now
    yaxis: y9
    showlegend: false
    line:
      width: 2
      dash: dot
      color: aqua
    x: $ex [Date.now(), Date.now()]
    "y":
      - 0
      - 1
defaults:
  yaxes:
    fixedrange: true
layout:
  height: 410
  margin:
    t: 55
    l: 50
  showlegend: false
  legend:
    x: 0.1
    "y": -0.8
  yaxis2:
    range:
      - 20
      - 105
    fixedrange: true
  annotations:
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: orange'>"
          + Number(hass.states['sensor.energy_production_today'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Forecast Today</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.06
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: dodgerblue'>"
          + Number(hass.states['sensor.meteo_energy_production_today_remaining'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Remaining</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.28
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: '>"
          + Number(hass.states['sensor.energy_production_tomorrow'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Forecast Tomorrow</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: centre
      x: 0.5
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: white'>"
          + Number(hass.states['sensor.energy_production_d2'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Forecast Day 2</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.72
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: red'>"
          + Number(hass.states['sensor.sunsynk_battery_soc'].state) + "</span></span>%<br>"
          +  "</span><span style=''>SOC</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.94
      "y": 1.2
      showarrow: false
config:
  scrollZoom: false

 

Edited by slipx

23 hours ago, slipx said:

@minerillo the latest version of the dashboard does not use any Apex Charts. I moved everything to plotly graphs. For the solar forecast are you using Open-Meteo or Solcast ?

I'm adding two arrays together so you would need to modify the sensors for your integration. Try the code below

 

type: custom:plotly-graph
view_layout:
  grid-area: solar
hours_to_show: 4d
time_offset: 2.5d
refresh_interval: auto
entities:
  - entity: sensor.sunsynk_solar_power
    name: Solar Power
    line:
      color: rgb(255, 155, 48)
      shape: spline
      width: 1
    fill: tozeroy
    fillcolor: rgba(255, 155, 48, 0.3)
    yaxis: y3
    show_value: false
    showlegend: false
  - entity: sensor.energy_production_today
    line:
      color: rgb(125, 125, 125)
      shape: spline
    fill: tozeroy
    filters:
      - fn: |
          ({meta}) => {
            const entries = Object.entries(meta.wh_period); 
            const xs = entries.map(([start, _]) => new Date(start));
            const ys = entries.map(([_, value]) => value);
            return { xs, ys };
          }
    yaxis: y1
    showlegend: true
  - entity: sensor.energy_production_tomorrow
    line:
      color: rgb(90,90,90)
      shape: spline
    fill: tozeroy
    filters:
      - fn: |
          ({meta}) => {
            const entries = Object.entries(meta.wh_period); 
            const xs = entries.map(([start, _]) => new Date(start));
            const ys = entries.map(([_, value]) => value);
            return { xs, ys };
          }
    yaxis: y1
  - entity: sensor.energy_production_d2
    line:
      color: rgb(50,50,50)
      shape: spline
    fill: tozeroy
    filters:
      - fn: |
          ({meta}) => {
            const entries = Object.entries(meta.wh_period); 
            const xs = entries.map(([start, _]) => new Date(start));
            const ys = entries.map(([_, value]) => value);
            return { xs, ys };
          }
    yaxis: y1
    showlegend: true
  - entity: sensor.sunsynk_battery_soc
    name: Battery
    line:
      color: red
      shape: spline
      width: 1
    yaxis: y2
    show_value: true
    showlegend: false
    visible: true
  - entity: ""
    name: Now
    yaxis: y9
    showlegend: false
    line:
      width: 2
      dash: dot
      color: aqua
    x: $ex [Date.now(), Date.now()]
    "y":
      - 0
      - 1
defaults:
  yaxes:
    fixedrange: true
layout:
  height: 410
  margin:
    t: 55
    l: 50
  showlegend: false
  legend:
    x: 0.1
    "y": -0.8
  yaxis2:
    range:
      - 20
      - 105
    fixedrange: true
  annotations:
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: orange'>"
          + Number(hass.states['sensor.energy_production_today'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Forecast Today</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.06
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: dodgerblue'>"
          + Number(hass.states['sensor.meteo_energy_production_today_remaining'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Remaining</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.28
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: '>"
          + Number(hass.states['sensor.energy_production_tomorrow'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Forecast Tomorrow</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: centre
      x: 0.5
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: white'>"
          + Number(hass.states['sensor.energy_production_d2'].state).toFixed(1) + "</span></span>kWh<br>"
          +  "</span><span style=''>Forecast Day 2</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.72
      "y": 1.2
      showarrow: false
    - text: |-
        $fn ({hass}) =>
          "<span style='font-size: 24px;'><span style='color: red'>"
          + Number(hass.states['sensor.sunsynk_battery_soc'].state) + "</span></span>%<br>"
          +  "</span><span style=''>SOC</span><br>"
      xref: x domain
      yref: y domain
      xanchor: center
      yanchor: center
      x: 0.94
      "y": 1.2
      showarrow: false
config:
  scrollZoom: false

 

First of all, thank you again for everything.

Finally I have been able to install the dashboard well by changing several parameters in the yaml and removing things that I am not going to use. I think everything works correctly and it is beautiful.

I still have a lot of work to do and learn, but I am definitely grateful for the work you do for the community.

I'll keep an eye out for updates, I'll probably need help again hahaha.

Translated with DeepL.com (free version)

On 2024/10/28 at 7:23 PM, IggyP said:

Update: I forgot to add that in the logs of ESP32 it is reading 100% from inverter. 

              in config of inverter is no battery configured.

Hi all, 

Since June I have running this power flow card without issues connected via ESP32.

Yesterday night Deye support installed a new Firmware to my inverter Deye 12kw 3p HV.

Don't have any battery installed but since this morning it is showing the Battery SOC at 100% (see screenshot) before it was 0%

Any where I can look into? Thanks in advance.

Regards

Joern

 

Battery SOC.JPG

ESP_yaml.JPG

SOC_entity.JPG

Hi all, Hi Slipx, 

I asked Deye Support regarding the issue that after Firmware update Battery SOC is showing 100% though no Battery is connected.

Also I have asked for the latest version of Modbus RTU address list (see attached)

My inverter is giving the value 100 which I checked in ESP32 logs.

Battrey 1 SoC address is 588 and Battery 2 Soc address is 589. 

So it looks like that inverter is giving wrong values which I raised already to Deye support.

Does anyone seen this behavior before? 

Regards

Iggy

 

MODBUSRTU_V105.2-20240401(1).doc

Edited by IggyP

Hi all,

I just had my first solar system installed, and while researching homeassistant integration I stumbled on slipx's dash. and would just like to say "I love it :)"

I do have a feature request tho,

It would be nice to have plotly graphs recording the individual pv strings, voltage and wattage. and daily peak graphs for each string.

Reason I would like this, I believe my installers have put too much on 1 of the strings and dont want to risk blowing the inverter.

Im pretty new to ha as well so dont really know how to start about doing this.

has anyone done anything similar or could help me with it ?

 

Regards

Mike

 

 

  • 1 month later...
4 minutes ago, IggyP said:

Hello Silpx,

Since today my Horseshoe card are not working anymore. Didn't changed anything.

Any idea where to check?

image.png

Thanks

Iggy

Encountered the same issue today—everything works fine on the desktop, but not on mobile. I tried re-downloading the plugin, but it didn’t help on the mobile side. Also, I can't seem to find the clear cache settings on iOS.

7 hours ago, Muttley said:

Encountered the same issue today—everything works fine on the desktop, but not on mobile. I tried re-downloading the plugin, but it didn’t help on the mobile side. Also, I can't seem to find the clear cache settings on iOS.

For me it do not work for both Desktop or Mobile.

  • 2 weeks later...
  • Author

v6.7.0

🚀 Exciting New Features

  • feat: added new inverter models for EASun, Ferroamp, Sigenergy and Linky closes #657#579

  • feat: six essential loads can now be displayed on the card without the need for wide screen display mode if certain conditions are met i.e. mppt <=3 on lite card and !show_aux on full card etc closes #635


Full6.png

Compact6.png

Full Change

Edited by slipx

  • 3 months later...

@slipx I've seen this request on your github and here for more batteries in the card (3, 4 and 5 etc).

Seeing as this card is severely space limited with all the info and options already added in, the only option I see for more batteries in the card self beyond the 2 battery option currently, is when running it in full mode and on a wide panel setup. Just trying to think about how you would incorporate that to the card makes my brain hurt. So what I've done is add my batteries using standard grid layout cards and markdown cards below this one to get what I want on my one dashboard.

It is still WIP but perhaps the easiest solution to all those request for additional batteries would be to make an independent card for just batteries or enable an option that the card can be setup for just displaying the battery section that can then be stacked up or something 🤷‍♂️.

This option using markdown cards however is very flexible and customizable to setup your own info and monitoring.

image.png

2 hours ago, -cK- said:

@slipx I've seen this request on your github and here for more batteries in the card (3, 4 and 5 etc).

Seeing as this card is severely space limited with all the info and options already added in, the only option I see for more batteries in the card self beyond the 2 battery option currently, is when running it in full mode and on a wide panel setup. Just trying to think about how you would incorporate that to the card makes my brain hurt. So what I've done is add my batteries using standard grid layout cards and markdown cards below this one to get what I want on my one dashboard.

It is still WIP but perhaps the easiest solution to all those request for additional batteries would be to make an independent card for just batteries or enable an option that the card can be setup for just displaying the battery section that can then be stacked up or something 🤷‍♂️.

This option using markdown cards however is very flexible and customizable to setup your own info and monitoring.

image.png

Please share your YAML... I need this on my dashboard 😁

18 hours ago, Muttley said:

Please share your YAML... I need this on my dashboard 😁

Sure thing.

I'm using a Grid-layout Dashboard:

image.png

My layout config is as follow, adjust to fit your needs:

grid-template-columns: 35% 35% 10% 10% 10%
grid-template-rows: auto
grid-template-areas: |
  "flow flow flow2 flow2 flow2" 
  "batt1 batt2 acc acc acc" 
justify-items: stretch
mediaquery:
  "(max-width: 800px)":
    grid-template-columns: 100%
    grid-template-areas: |
      "flow"
      "batt1" 
      "batt2"
      "flow2"
      "acc"

Here is one of the pairs of yaml.

IndBatts.yaml

Just adjust your parameters to your battery specs.

There is also 2 monitors related to the Temp section. One for min and max with 🌡️ icon and one for when there is a big deviation on the temp sensors ⚠️icon. Adjust or remove as you see fit.

Note I've set them up in a pair configuration so that when viewed on my phone I have pair showing in one row, you can split it off as 4 indivuals if you want but this is how I have mine setup.

image.png

22 hours ago, -cK- said:

I've made a small tweak to my markdown card with regard to the information it displays.

I've added in a check to indicated if the SOH of the battery drops below 100% to display a warning, see below:

image.png

This is the updated markdown section if anyone want to incorporate that as well.

IndBattMarkdownv2.yaml

Thanks so much!!
This is awesome 😍

On 2024/06/13 at 10:08 PM, slipx said:

@rgt.dnl I created my own template sensor that sums the data from two arrays and adjusted how the attributes are created. If you are using the default integration sensor then replace the filters for each entity in the graph 

filters:
      - fn: |
          ({meta}) => ({
             xs: meta.wh_period.map(({ start }) => new Date(start)),
             ys: meta.wh_period.map(({ value }) => value),
          })

with

filters:
      - fn: |
          ({meta}) => {
            const entries = Object.entries(meta.wh_period); 
            const xs = entries.map(([start, _]) => new Date(start));
            const ys = entries.map(([_, value]) => value);
            
            return { xs, ys };
          }

I've updated the code on GitHub 

@slipx Could you perhaps share the template sensor config? I have 2 arrays and I think I need to do the same as you did, I have a basic config to just sum the state value but getting this error on the graph:

Error: at [entities.1.filters.0]: Error in filter: TypeError: can't convert undefined to object

Error: at [entities.2.filters.0]: Error in filter: TypeError: can't convert undefined to object

I think it might be because I'm not addressing the attributes of the sensors I'm combining 🤷‍♂️.

Thanks

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.