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 Logger Integration into Home Assistant

Featured Replies

  • Author
6 minutes ago, SteveRCT said:

Excellent, after applying the inverter index I'm able to see the 2nd inverter's input and output in developer tools. I think now just adding the 2 together is the next step. Seeing the configuration file the Sunsynk PV uses 'sensor.sunsynk_input' rather than sensor.sunsynk_input+sensor.sunsynk_input2'

Yes , I need to work on that and others. 

Has to be a conditional based on if the 2nd invertor is enabled or not 

 

  • Replies 948
  • Views 131.6k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • randomfool
    randomfool

    I am making good progress on converting slip06x excellent dashboard to work with Gary's brilliant work on gathering the data from the latest Sunsynk inverters remotely. Will publish the dashboard

  • @Gary Waterworth   Did a quick YouTube video on how to install your software and to get the data into HASS, no cards or anything so very basic.  Please let me know what you guys think of my first

  • randomfool
    randomfool

    Ok here goes; caveats to begin with - I am no HA expert, in fact I only discovered HA a few weeks ago through Gary's post and his subsequent links to slip06x dashboard, so my ability to provide "suppo

Posted Images

Thanks Gary! Not going to lie reading your work and how it's integrated is teaching me so much in other areas of home assistant, as a tutorial,  and working with troubleshooting other  things I'm trying to get running in home assistant. 

@Gary Waterworth is the Energy Pattern perhaps in the sensors somewhere or something that could be added in the configuration file as a sensor.  Would be nice to know which state it is in on my info page and setup a notification to remind me to switch it back when conditions improve etc.

Or is this somewhere in the automation section?  At the moment I'm just using the Gather portion haven't looked at the automation part yet.

Thanks

image.png.1b9bc3f01e085f71a0ca21cec6491889.png

  • Author
21 minutes ago, -cK- said:

@Gary Waterworth is the Energy Pattern perhaps in the sensors somewhere or something that could be added in the configuration file as a sensor.  Would be nice to know which state it is in on my info page and setup a notification to remind me to switch it back when conditions improve etc.

Or is this somewhere in the automation section?  At the moment I'm just using the Gather portion haven't looked at the automation part yet.

Thanks

image.png.1b9bc3f01e085f71a0ca21cec6491889.png

I will have a look. Should be in the sunsynk_settings sensor.

But knowing what I have seen with them so far it wont be named that lol 

When I hae time I will toggle mine and see what changes :) 

Edited by Gary Waterworth

@Gary Waterworth think it might be energyMode:

Did a quick compare and that seemed to be 0 when Priority Batt and 1 when Priority Load

All other sensors matched previous values but you can confirm when you have time to have a peak 👍

Should be easy enough to just add a custom sensor based on the value then in the config, will give it a try tonight when I'm home

image.png.0301006e11fc9c9a4a44fc2873ba97e5.png

On 2023/05/04 at 12:29 PM, Jack007 said:

Sorry if this was asked/answered already.

Can anyone confirm if this will also work with Deye inverters? If so, what is the extent of the code change?

I need to decide if im going to go with Deye or Sunsynk for my 3phase setup.

Thanks so much

 

Hi Jack

from a parts perspective it seems they are identical.if you look at the sotware and the maturity of the sunsynk support/writeback capabilities of the dongle - that sold it for me.

 

The Daye is a good inverter, I would just pay the extra +/- R4k for the sunsynk software and config capabilities. by the way, the solman management dongle for Daye is not he most user friendly and support for it is a pain in the neck (need admins, internal, external users setup to manage own plant and to handover, such a pain and not very commercially end user friendly to do)

Sunsynk also develop a lot - they now have up to a 50kVA beast of an inverter... 

 

again, just my thoughts from a product perspective, decision still yours.

9 hours ago, -cK- said:

@Gary Waterworth think it might be energyMode:

Did a quick compare and that seemed to be 0 when Priority Batt and 1 when Priority Load

All other sensors matched previous values but you can confirm when you have time to have a peak 👍

Should be easy enough to just add a custom sensor based on the value then in the config, will give it a try tonight when I'm home

image.png.0301006e11fc9c9a4a44fc2873ba97e5.png

  - sensor:
      - name: "Sunsynk Energy Pattern"
        unique_id: "sensor.sunsynk_energy_pattern"
        state: >
          {% if is_state_attr('sensor.sunsynk_settings', 'energyMode', '1' ) %}
            Priority Load
          {% else %}
            Priority Battery
          {% endif %}

Added this sensor which should do the job

image.thumb.png.8c6b840ea97c29abc07876450aa42864.png

image.png.c632669c46cad082137d2a2afa656432.png

 

Edited by -cK-

22 hours ago, Gary Waterworth said:

This is most helpful Gary. thanks for all the work on this, been smashing away at this the last few evenings and trying to get to the bottom of the two inverter issue that is not displaying. The 2nd plant displays in the developer tools, only shows one inverter. Differences on plant shown and HA (tested with just a plain card to see if it pulls events etc sucessfully)

 

plant list = 2

inverter list = 1 - this baffles me, went though the flows and it collects inverter list, but nothing displays?

Screenshot2023-05-12at06_30_38.thumb.png.544dd3cb6d61e6518cd8d8d9210a914a.png

Screenshot2023-05-12at06_34_49.thumb.png.f1abd3adcfb96024b84125b204c0614f.png

Screenshot2023-05-12at06_43_23.png.2e0de20f95ceb72431f040993728b7b8.png

 

Screenshot2023-05-12at06_38_01.thumb.png.a0cd5bbec25c661c352076f493ff321e.png

  • Author
52 minutes ago, francoisj1 said:

This is most helpful Gary. thanks for all the work on this, been smashing away at this the last few evenings and trying to get to the bottom of the two inverter issue that is not displaying. The 2nd plant displays in the developer tools, only shows one inverter. Differences on plant shown and HA (tested with just a plain card to see if it pulls events etc sucessfully)

 

plant list = 2

inverter list = 1 - this baffles me, went though the flows and it collects inverter list, but nothing displays?

Screenshot2023-05-12at06_30_38.thumb.png.544dd3cb6d61e6518cd8d8d9210a914a.png

Screenshot2023-05-12at06_34_49.thumb.png.f1abd3adcfb96024b84125b204c0614f.png

Screenshot2023-05-12at06_43_23.png.2e0de20f95ceb72431f040993728b7b8.png

 

Screenshot2023-05-12at06_38_01.thumb.png.a0cd5bbec25c661c352076f493ff321e.png

I would hazard a guess that you have 2 seperate plants setup. Each with a single invertor (index 0).

Can you show me the full info on the plants_list . Just blank out sn etc.

Atm we get the invertor list based on the plant so index 1 wont work as it will only have 1 invertor in the list.

global.set("SS.url.plantinvlist", global.get("SS.url.hostname") + "/api/v1/plant/" + global.get("SS.Plantid") + "/inverters?page=1&limit=" + items +"&status=-1&type=-2");

There is another way to get the invertor list but it breaks a lot of other people due to the permissions given to them on the app

I have been pondering another solution to this but tbh it is a major coding change and not going to happen soon.

 

Ghetto... but wouldn't it be easier for him to transfer ownership of the plant to a 2nd email address? And then rename variables and sensors for the 2nd account and run the nodered as a 2nd flow instance with the different username and password?

  • Author
1 hour ago, SteveRCT said:

Ghetto... but wouldn't it be easier for him to transfer ownership of the plant to a 2nd email address? And then rename variables and sensors for the 2nd account and run the nodered as a 2nd flow instance with the different username and password?

Or reregister the 2nd invertor onto the same plant as the 1st

But will have a look at changing the code to scan fall plants for inverters

 

On 2022/11/20 at 10:53 AM, Sc00bs said:

So my thinking is, if the 5kw grid is connected to the load side of the 8kw and the 5kw is working in grid-tied mode it would is sync with the 8kw sinewave.

The 8kw would either be running either sync'd with the grid when their is grid power or generating it's own 50hz frequency when it is running in island mode either way the 5kw will sync with whatever the 8kw is doing. 

I don't think that the Sunsynks can run in island mode without a battery. 

Parallel mode is to keep the inverters in sync when they are running in island mode generating their own frequency, the master generates the 50hz frequency and the slave syncs with it. When they are connected to the grid they will sync with the grid frequency.  

 

hi there

 

the installation was done with the 8kva as primary and the 5kva feeding off the 8kva aux. works like a charm.

added all appliances on the 5kva (except geyser) and it is running like a boing. all excess power it needs that cannot be generated by the panels, it pulls from the 8kva and panel production that has.

 

removes the island mode dependency with the aux from 8kva that is the "grid feed" on the 5kva. per day it sips about 1kw from the 8kva - a drop in the ocean compared to the 35kw or more production from 8kva per day.

12 hours ago, Gary Waterworth said:

I would hazard a guess that you have 2 seperate plants setup. Each with a single invertor (index 0).

Can you show me the full info on the plants_list . Just blank out sn etc.

Atm we get the invertor list based on the plant so index 1 wont work as it will only have 1 invertor in the list.

global.set("SS.url.plantinvlist", global.get("SS.url.hostname") + "/api/v1/plant/" + global.get("SS.Plantid") + "/inverters?page=1&limit=" + items +"&status=-1&type=-2");

There is another way to get the invertor list but it breaks a lot of other people due to the permissions given to them on the app

I have been pondering another solution to this but tbh it is a major coding change and not going to happen soon.

 

 

so if i understand the flow, ultimately it is pulling inverter 0 from plant 0 then stops since there is a success response and stops. The debug info below. The 8kva and 5kva inverters have more or less the same MCU / firmware loaded, returns different results on the permissions attribute

 

pageSize: 10

pageNumber: 1

total: 2

infos_0_id: XXXXXX

infos_0_name: XXXXXX

infos_0_thumbUrl: https://static.inteless.com//plant/plant1.jpg@!650w

infos_0_status: 1

infos_0_address: XXXXXXX

infos_0_pac: 0

infos_0_efficiency: 0

infos_0_etoday: 8.6

infos_0_etotal: 757.4

infos_0_updateAt: 2023-05-12T18:28:02Z

infos_0_createAt: 2022-11-18T11:09:30.000+00:00

infos_0_type: 2

infos_0_masterId: XXXXXXX

infos_0_share: false

infos_0_plantPermission: gateway.unbind, gateway.add, gateway.download, inverter.setting.name, inverter.setting, inverter.delete, station.edit, station.delete, station.share.edit, station.generation.download, station.gateway.add, station.transfer, station.list.view, gateway.list.view, inverter.list.view, gateway.upload.cycle, station.share.view, smart.light.bind, smart.light.unbind, smart.light.setting, smart.light.view

infos_0_existCamera: false

 

infos_1_id: YYYYY

infos_1_name: YYYYYYY

infos_1_thumbUrl: https://static.inteless.com//plant/plant1.jpg@!650w

infos_1_status: 1

infos_1_address: YYYYY

infos_1_pac: 0

infos_1_efficiency: 0

infos_1_etoday: 19.6

infos_1_etotal: 4404.7

infos_1_updateAt: 2023-05-12T18:26:08Z

infos_1_createAt: 2022-10-22T09:07:30.000+00:00 infos_1_type: 2

infos_1_masterId: YYYYYY

infos_1_share: false infos_1_plantPermission_0_0: g..........

 

 

11 hours ago, Gary Waterworth said:

Or reregister the 2nd invertor onto the same plant as the 1st

But will have a look at changing the code to scan fall plants for inverters

 

 

will give this a bash too. the default registration process on the sunsynk dongle does create a new plant. will let you know how it went and what the output is.

 

thanks for all the conversations, thoughts.

 

  • Author

I have added functionality to be able to specify which invertor list method to use : 

Currently it is in the development branch under the e-linter region 

https://github.com/gdwaterworth/Home-Assistant---E-Linter-Logger---Sunsynk/tree/Development

 

Look at wiki and try set to option 1

https://github.com/gdwaterworth/Home-Assistant---E-Linter-Logger---Sunsynk/wiki/Plant-And-Invertor-Index-Numbers

2 hours ago, slipx said:

If any of you are using the Sunsynk Power Flow Card with the e-linter integration please can you share your sensor mappings (card config) so that I can update the wiki https://github.com/slipx06/sunsynk-power-flow-card/wiki/Sensor-Mappings

Thanks

Here you go. Also posted a few pages back the full dashboard with this in.

Quote

 type: custom:sunsynk-card

            view_layout:

              grid-area: flow

            entities: null

            content: >-

              <style>div {border-radius: 5px; background-color:

              var(--card-background-color); padding: 5px; }</style><div> <svg

              xmlns="http://www.w3.org/2000/svg"

              xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"

              width="100%" height="396px" viewBox="-0.5 -0.5 456 380">

              <defs/><g><path d="M 35 92 L 35.02 117 Q 35.03 127 43.02 127 L 51

              127" fill="none" stroke="#ff9933" stroke-width="2"

              stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> <path d="M 135 92 L 135.02 117 Q 135.03

              127 128.02 127 L 121 127" fill="none" stroke="#ff9933"

              stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> <style type="text/css">

              .st1{fill:#ff9b30;} .st2{fill:#f3b3ca;} .st3{font-size:9px;}

              .st4{font-size:12px;} .st5{fill:#969696;} .st6{fill:#5fb6ad;}

              .st7{fill:#5490c2;} .st8{font-weight:500} .st9{fill:#959595;} text

              { text-anchor: middle; alignment-baseline: middle; } </style>   

              <text id="pv2_power_187" x="30%" y="18.5%" class="st1 st4 st8

              ">0</text> <text id="pv1_power_186" x="8%" y="18.5%"

              class="st1 st4 st8">0</text> <text id="pvtotal_power" x="19%"

              y="33.5%" class="st1 st4 st8">0</text> <text x="4%" y="25%"

              class="st1 st3 st8">PV1</text> <text x="26%" y="25%" class="st1

              st3 st8">PV2</text> <text id="battery_voltage_183" x="8%"

              y="79.5%" class="st2 st4 st8">0</text> <text

              id="battery_soc_184" x="8%" y="84.5%" class="st2 st4

              st8">0</text> <text id="battery_out_190" x="8%" y="90%"

              class="st2 st4 st8">0</text> <text id="inverter_out_175" x="45%"

              y="42.5%" class="st4 st5 st8">0</text> <text

              id="inverter_out_164" x="45%" y="47.5%" class="st4 st5

              st8">0</text> <text id="ess_power" x="68.5%" y="18.5%" class="st4

              st6 st8">0</text> <text x="92%" y="29%" class="st3 st6

              st8">Load</text> <text id="inverter_grid_voltage_154" x="69%"

              y="40%" class="st4 st7 st8">0</text> <text

              id="inverter_load_freq_192" x="69%" y="45%" class="st4 st7

              st8">0</text> <text id="inverter_load_grid_167" x="69%"

              y="49.5%" class="st4 st7 st8">0</text> <text

              id="grid_external_power_172" x="91.5%" y="68.5%" class="st4 st7

              st8">0</text> <text x="91.5%" y="96%" class="st3 st7

              st8">Grid</text> <text x="45.5%" y="82%" class="st3 st7

              st9">Status</text> <text id="battery_left" x="55%" y="92%"

              class="st2 st4 st8">0</text> <text x="55%" y="88%" class="st3 st7

              st8">Battery Left to 25% SOC if no other power</text> <circle

              id="offline" cx="41%" cy="81.75%" r="3.5" fill="transparent"/> 

              <circle id="normal" cx="41%" cy="81.75%" r="3.5"

              fill="transparent"/> <circle id="warning" cx="41%" cy="81.75%"

              r="3.5" fill="transparent"/> <circle id="alarm" cx="41%"

              cy="81.75%" r="3.5" fill="transparent"/> <circle id="upgrading"

              cx="41%" cy="81.75%" r="3.5" fill="transparent"/> <circle

              id="grid" cx="88%" cy="95.75%" r="3.5" fill="transparent"/>   

              <rect x="51" y="112" width="70" height="30" rx="4.5" ry="4.5"

              fill="none" stroke="#ff9933" pointer-events="all"/> <path

              id="bat-line" d="M 179 259.87 L 105.03 259.89 Q 95.03 259.9 95.03

              269.86 L 95.03 279.83" fill="none" stroke="#f3b1c9"

              stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/>

               <circle id="power-dot-charge" cx="0" cy="0" r="3" fill="transparent">

                <animateMotion dur="6s" repeatCount="indefinite" keyPoints="1;0" keyTimes="0;1" calcMode="linear">

                  <mpath xlink:href="#bat-line"/>

                </animateMotion>

               </circle>

               <circle id="power-dot-discharge" cx="0" cy="0" r="3" fill="transparent">

                <animateMotion dur="6s" repeatCount="indefinite" keyPoints="0;1" keyTimes="0;1" calcMode="linear">

                  <mpath xlink:href="#bat-line"/>

                </animateMotion>

              </circle> <image x="178.5" y="219.5" width="50.3" height="79.75"

              xlink:href="data:image/png;base64,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"

              preserveAspectRatio="none"/><rect x="0" y="284.75" width="70"

              height="70" rx="10.5" ry="10.5" fill="none" stroke="#f3b1c9"

              pointer-events="all"/> <path id="so-line" d="M 179 239.94 L 96

              239.9 Q 86 239.9 86 229.9 L 86 142" fill="none" stroke="#ff9933"

              stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> 

               <circle id="so-dot" cx="0" cy="0" r="3" fill="#ff9933">

                <animateMotion dur="9s" repeatCount="indefinite" keyPoints="1;0" keyTimes="0;1" calcMode="linear">

                  <mpath xlink:href="#so-line"/>

                </animateMotion>

               </circle>

              <path id="grid-line" d="M 349 170 L 407.03 170.03 Q 417.03 170.03

              417.03 180.03 L 417 243" fill="none" stroke="#558fc1"

              stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/>

               <circle id="grid-dot" cx="0" cy="0" r="3" fill="#558fc1">

                <animateMotion dur="8s" repeatCount="indefinite" keyPoints="1;0.2" keyTimes="0;1" calcMode="linear">

                  <mpath xlink:href="#grid-line"/>

                </animateMotion>

               </circle>

              <rect x="279" y="135" width="70" height="70" rx="10.5" ry="10.5"

              fill="none" stroke="#558fc1" pointer-events="all"/> <path d="M 417

              273 L 417 293.5" fill="none" stroke="#558fc1" stroke-width="2"

              stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> <rect x="382" y="243" width="70"

              height="30" rx="4.5" ry="4.5" fill="none" stroke="#558fc1"

              pointer-events="all"/> <path d="M 278 69 L 215.03 69 Q 205.03 69

              205.03 79 L 205.03 110.03 Q 205.03 120.03 204.68 130.03 L 204.15

              145" fill="none" stroke="#5fb5ab" stroke-width="2"

              stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> <path id="es-line" d="M 348 69 L 377.5

              69" fill="none" stroke="#5fb5ab" stroke-width="2"

              stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> <rect x="278" y="54" width="70"

              height="30" rx="4.5" ry="4.5" fill="none" stroke="#5fb5ab"

              pointer-events="all"/> 

               <circle id="es-dot" cx="0" cy="0" r="3" fill="#5fb5ab">

                <animateMotion dur="4s" repeatCount="indefinite" keyPoints="0;1" keyTimes="0;1" calcMode="linear">

                  <mpath xlink:href="#es-line"/>

                </animateMotion>

               </circle>

              <path d="M 239.15 170 L 279 170" fill="none" stroke="#558fc1"

              stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> <path d="M 204.15 195 L 204.15 220"

              fill="none" stroke="#959595" stroke-width="2"

              stroke-miterlimit="10" stroke-dasharray="2 2"

              pointer-events="stroke"/> <rect x="169.15" y="145" width="70"

              height="50" rx="7.5" ry="7.5" fill="none" stroke="#959595"

              pointer-events="all"/> <image x="6.5" y="-0.5" width="56"

              height="56"

              xlink:href="data:image/png;base64,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"

              preserveAspectRatio="none"/> <image x="107.5" y="-0.5" width="56"

              height="56"

              xlink:href="data:image/png;base64,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"

              preserveAspectRatio="none"/> <svg

              xmlns="http://www.w3.org/2000/svg" id="bat-high" x="73.5"

              y="279.25" width="82" height="82" preserveAspectRatio="none"

              opacity="0" viewBox="0 0 24 24"><path fill="#f3b1c9" d="M12

              20H4V6h8m.67-2H11V2H5v2H3.33C2.6 4 2 4.6 2 5.33v15.34C2 21.4 2.6

              22 3.33 22h9.34c.74 0 1.33-.59 1.33-1.33V5.33C14 4.6 13.4 4 12.67

              4M11 16H5v3h6v-3m0-9H5v3h6V7m0 4.5H5v3h6v-3M23 10h-3V3l-5

              10h3v8"/></svg> <svg xmlns="http://www.w3.org/2000/svg"

              id="bat-med" x="73.5" y="279.25" width="82" height="82"

              preserveAspectRatio="none" opacity="0" viewBox="0 0 24 24"><path

              fill="#f3b1c9" d="M12 20H4V6h8m.67-2H11V2H5v2H3.33C2.6 4 2 4.6 2

              5.33v15.34C2 21.4 2.6 22 3.33 22h9.34c.74 0 1.33-.59

              1.33-1.33V5.33C14 4.6 13.4 4 12.67 4M11

              16H5v3h6v-3m0-4.5H5v3h6v-3M23 10h-3V3l-5 10h3v8"/></svg> <svg

              xmlns="http://www.w3.org/2000/svg" id="bat-low" x="73.5"

              y="279.25" width="82" height="82" preserveAspectRatio="none"

              opacity="0" viewBox="0 0 24 24"><path fill="#f3b1c9" d="M12

              20H4V6h8m.67-2H11V2H5v2H3.33C2.6 4 2 4.6 2 5.33v15.34C2 21.4 2.6

              22 3.33 22h9.34c.74 0 1.33-.59 1.33-1.33V5.33C14 4.6 13.4 4 12.67

              4M11 16H5v3h6v-3m12-6h-3V3l-5 10h3v8"/></svg> <svg

              xmlns="http://www.w3.org/2000/svg" id="bat-empty" x="73.5"

              y="279.25" width="82" height="82" preserveAspectRatio="none"

              opacity="0" viewBox="0 0 24 24"><path fill="#f3b1c9" d="M23.05

              11h-3V4l-5 10h3v8M12 20H4l.05-14h8m.67-2h-1.67V2h-6v2H3.38a1.33

              1.33 0 0 0-1.33 1.33v15.34c0 .73.6 1.33 1.33 1.33h9.34c.73 0

              1.33-.6 1.33-1.33V5.33A1.33 1.33 0 0 0 12.72 4Z"/></svg> <image

              x="383" y="293" width="67" height="67"

              xlink:href="data:image/png;base64,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"

              preserveAspectRatio="none"/> <image x="377" y="30" width="77"

              height="77"

              xlink:href="data:image/png;base64,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"

              preserveAspectRatio="none"/> <rect x="0" y="54" width="70"

              height="30" rx="4.5" ry="4.5" fill="none" stroke="#ff9933"

              pointer-events="all"/> <rect x="101" y="54" width="70" height="30"

              rx="4.5" ry="4.5" fill="none" stroke="#ff9933"

              pointer-events="all"/> </g></svg> </div>

            actions: null

            bindings:

              - bind: >-

                  return hass.states["sensor.sunsynk_input"].attributes.pv1 + '

                  W'

                selector: '#pv1_power_186'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_input"].attributes.pv2 + '

                  W'

                selector: '#pv2_power_187'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_input"].attributes.pv + '

                  W'

                selector: '#pvtotal_power'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_battery"].attributes.temp +

                  ' C'

                selector: '#battery_voltage_183'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_battery"].attributes.soc +

                  ' %'

                selector: '#battery_soc_184'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_battery"].attributes.power

                  + ' W'

                selector: '#battery_out_190'

                type: html

              - bind: return hass.states["sensor.sunsynk_battery_depletion"].state

                selector: '#battery_left'

                type: html

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_load"].attributes.totalpower + '

                  W'

                selector: '#inverter_out_175'

                type: html

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_load"].attributes.calc_current + '

                  A'

                selector: '#inverter_out_164'

                type: html

              - bind: return hass.states[""].state + ' W'

                selector: '#aux_power_166'

                type: html

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_load"].attributes.totalpower + '

                  W'

                selector: '#ess_power'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_grid"].attributes.volt + '

                  V'

                selector: '#inverter_grid_voltage_154'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_grid"].attributes.fac + '

                  Hz'

                selector: '#inverter_load_freq_192'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_grid"].attributes.power + '

                  W'

                selector: '#inverter_load_grid_167'

                type: html

              - bind: >-

                  return hass.states["sensor.sunsynk_grid"].attributes.power + '

                  W'

                selector: '#grid_external_power_172'

                type: html

              - bind: >-

                  return

                  parseInt(hass.states["sensor.sunsynk_grid"].attributes.power)

                  - parseInt(hass.states[""].state) + ' W'

                selector: '#non_ess_power'

                type: html

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status

                  == "0" ? "grey" : "transparent"

                selector: '#offline'

                type: fill

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status

                  == "1" ? "green" : "transparent"

                selector: '#normal'

                type: fill

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status

                  == "2" ? "orange" : "transparent"

                selector: '#warning'

                type: fill

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status

                  == "3" ? "red" : "transparent"

                selector: '#alarm'

                type: fill

              - bind: >-

                  return

                  hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status

                  == "4" ? "blue" : "transparent"

                selector: '#upgrading'

                type: fill

              - bind: >-

                  return hass.states["sensor.sunsynk_grid_online"].state == "0"

                  ? "red" : "transparent"

                selector: '#grid'

                type: fill

              - bind: >-

                  return hass.states["sensor.sunsynk_grid_power"].state <= "0" ?

                  "transparent" : "#558fc1"

                selector: '#grid-dot'

                type: fill

              - bind: >-

                  return hass.states["sensor.sunsynk_pv"].state == "0" ?

                  "transparent" : "#ff9933"

                selector: '#so-dot'

                type: fill

              - bind: >-

                  return hass.states["sensor.sunsynk_load_power"].state == "0"

                  ? "transparent" : "#5fb5ab"

                selector: '#es-dot'

                type: fill

              - bind: >-

                  return hass.states["sensor.sunsynk_battery_power"].state >=

                  "0" ? "transparent" : "#f3b1c9"

                selector: '#power-dot-discharge'

                type: fill

              - bind: >-

                  return hass.states["sensor.sunsynk_battery_power"].state <

                  "0" ? "transparent" : "#f3b1c9"

                selector: '#power-dot-charge'

                type: fill

              - bind: >-

                  return

                  parseInt(hass.states["sensor.sunsynk_battery_soc"].state) > 80

                  ? "1" : "0"

                selector: '#bat-high'

                type: opacity

              - bind: >-

                  return

                  parseInt(hass.states["sensor.sunsynk_battery_soc"].state) <=

                  80 &&

                  parseInt(hass.states["sensor.sunsynk_battery_soc"].state) >=

                  50 ? "1" : "0"

                selector: '#bat-med'

                type: opacity

              - bind: >-

                  return

                  parseInt(hass.states["sensor.sunsynk_battery_soc"].state) <=

                  49 &&

                  parseInt(hass.states["sensor.sunsynk_battery_soc"].state) >

                  30 ? "1" : "0"

                selector: '#bat-low'

                type: opacity

              - bind: >-

                  return

                  parseInt(hass.states["sensor.sunsynk_battery_soc"].state) <=

                  30 ? "1" : "0"

                selector: '#bat-empty'

                type: opacity

 

Edited by randomfool

16 hours ago, Gary Waterworth said:

I have added functionality to be able to specify which invertor list method to use : 

Currently it is in the development branch under the e-linter region 

https://github.com/gdwaterworth/Home-Assistant---E-Linter-Logger---Sunsynk/tree/Development

 

Look at wiki and try set to option 1

https://github.com/gdwaterworth/Home-Assistant---E-Linter-Logger---Sunsynk/wiki/Plant-And-Invertor-Index-Numbers

hey there

 

changed opt to 1 and left inverter donotedit the same and also as 1 = the result the same - attached outcome

 

the plant list still reflects 2 plants though

 

Screenshot 2023-05-13 at 21.39.15.png

Edited by francoisj1

  • Author
On 2023/05/13 at 9:42 PM, francoisj1 said:

hey there

 

changed opt to 1 and left inverter donotedit the same and also as 1 = the result the same - attached outcome

 

the plant list still reflects 2 plants though

 

Screenshot 2023-05-13 at 21.39.15.png

Show me a screen of the nodered flows. 

Edited by Gary Waterworth

  • Author
On 2023/05/13 at 2:54 PM, slipx said:

If any of you are using the Sunsynk Power Flow Card with the e-linter integration please can you share your sensor mappings (card config) so that I can update the wiki https://github.com/slipx06/sunsynk-power-flow-card/wiki/Sensor-Mappings

Thanks

gdwaterworth/Home-Assistant---E-Linter-Logger---Sunsynk (github.com)

 

Not completed yet

Hi,

Was just wondering is there no way to connect the SunSynk inverter to HA with this dongle they already put in it?

I'm just wondering because the data is in sync with the SunSynk website so surely it gets exposed somehow?

spacer.png

  • Author
1 hour ago, Chris Bongers said:

Hi,

Was just wondering is there no way to connect the SunSynk inverter to HA with this dongle they already put in it?

I'm just wondering because the data is in sync with the SunSynk website so surely it gets exposed somehow?

spacer.png

It does not get exposed. It is pushed to teh website

Hi there

Firstly, Gary thanks so much for this, been using it for a few weeks and it's been great. Quick question, I think they may have migrated me to region 2 since my app data has been offline since about 16:30 this afternoon. my question is will I need to redo all the node red slows and yaml config or will it update as it currently is once I can get data from the app again?

 

Thanks so much

On 2023/05/13 at 2:54 PM, slipx said:

If any of you are using the Sunsynk Power Flow Card with the e-linter integration please can you share your sensor mappings (card config) so that I can update the wiki https://github.com/slipx06/sunsynk-power-flow-card/wiki/Sensor-Mappings

Thanks

Here is my binding for you @slipx should be the same as @randomfool

bindings:
  - bind: return hass.states["sensor.sunsynk_input"].attributes.pv1 + ' W'
    selector: '#pv1_power_186'
    type: html
  - bind: return hass.states["sensor.sunsynk_input"].attributes.pv2 + ' W'
    selector: '#pv2_power_187'
    type: html
  - bind: return hass.states["sensor.sunsynk_input"].attributes.pv + ' W'
    selector: '#pvtotal_power'
    type: html
  - bind: return hass.states["sensor.sunsynk_battery"].attributes.temp + ' C'
    selector: '#battery_voltage_183'
    type: html
  - bind: return hass.states["sensor.sunsynk_battery"].attributes.soc + ' %'
    selector: '#battery_soc_184'
    type: html
  - bind: return hass.states["sensor.sunsynk_battery"].attributes.power + ' W'
    selector: '#battery_out_190'
    type: html
  - bind: return hass.states["sensor.soc_battery_time_left_friendly"].state
    selector: '#battery_left'
    type: html
  - bind: return hass.states["sensor.sunsynk_load"].attributes.totalpower + ' W'
    selector: '#inverter_out_175'
    type: html
  - bind: return hass.states["sensor.sunsynk_load"].attributes.calc_current + ' A'
    selector: '#inverter_out_164'
    type: html
  - bind: return hass.states[""].state + ' W'
    selector: '#aux_power_166'
    type: html
  - bind: return hass.states["sensor.sunsynk_load"].attributes.totalpower + ' W'
    selector: '#ess_power'
    type: html
  - bind: return hass.states["sensor.sunsynk_grid"].attributes.volt + ' V'
    selector: '#inverter_grid_voltage_154'
    type: html
  - bind: return hass.states["sensor.sunsynk_grid"].attributes.fac + ' Hz'
    selector: '#inverter_load_freq_192'
    type: html
  - bind: return hass.states["sensor.sunsynk_grid"].attributes.power + ' W'
    selector: '#inverter_load_grid_167'
    type: html
  - bind: return hass.states["sensor.sunsynk_grid"].attributes.power + ' W'
    selector: '#grid_external_power_172'
    type: html
  - bind: >-
      return parseInt(hass.states["sensor.sunsynk_grid"].attributes.power) -
      parseInt(hass.states[""].state) + ' W'
    selector: '#non_ess_power'
    type: html
  - bind: >-
      return
      hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status ==
      "0" ? "grey" : "transparent"
    selector: '#offline'
    type: fill
  - bind: >-
      return
      hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status ==
      "1" ? "green" : "transparent"
    selector: '#normal'
    type: fill
  - bind: >-
      return
      hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status ==
      "2" ? "orange" : "transparent"
    selector: '#warning'
    type: fill
  - bind: >-
      return
      hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status ==
      "3" ? "red" : "transparent"
    selector: '#alarm'
    type: fill
  - bind: >-
      return
      hass.states["sensor.sunsynk_invertor_list"].attributes.infos_0_status ==
      "4" ? "blue" : "transparent"
    selector: '#upgrading'
    type: fill
  - bind: >-
      return hass.states["sensor.sunsynk_grid_online"].state == "0" ? "red" :
      "transparent"
    selector: '#grid'
    type: fill
  - bind: >-
      return hass.states["sensor.sunsynk_grid_power"].state <= "0" ?
      "transparent" : "#558fc1"
    selector: '#grid-dot'
    type: fill
  - bind: >-
      return hass.states["sensor.sunsynk_pv"].state == "0" ? "transparent" :
      "#ff9933"
    selector: '#so-dot'
    type: fill
  - bind: >-
      return hass.states["sensor.sunsynk_load_power"].state  == "0" ?
      "transparent" : "#5fb5ab"
    selector: '#es-dot'
    type: fill
  - bind: >-
      return hass.states["sensor.sunsynk_battery_power"].state  >= "0" ?
      "transparent" : "#f3b1c9"
    selector: '#power-dot-discharge'
    type: fill
  - bind: >-
      return hass.states["sensor.sunsynk_battery_power"].state  < "0" ?
      "transparent" : "#f3b1c9"
    selector: '#power-dot-charge'
    type: fill
  - bind: >-
      return parseInt(hass.states["sensor.sunsynk_battery_soc"].state) > 80 ?
      "1" : "0"
    selector: '#bat-high'
    type: opacity
  - bind: >-
      return parseInt(hass.states["sensor.sunsynk_battery_soc"].state)  <= 80 &&
      parseInt(hass.states["sensor.sunsynk_battery_soc"].state)  >= 50 ?  "1" :
      "0"
    selector: '#bat-med'
    type: opacity
  - bind: >-
      return parseInt(hass.states["sensor.sunsynk_battery_soc"].state)  <= 49 &&
      parseInt(hass.states["sensor.sunsynk_battery_soc"].state)  > 30 ?  "1" :
      "0"
    selector: '#bat-low'
    type: opacity
  - bind: >-
      return parseInt(hass.states["sensor.sunsynk_battery_soc"].state) <= 30 ?
      "1" : "0"
    selector: '#bat-empty'
    type: opacity

Note that I have added the following sensors in my config file based of your suggestion but modified to work with the sensor from the E-linter integration of @Gary Waterworth to get the estimated runtime to 20% working.

sensor:
  - platform: template
    sensors:     
      soc_battery_time_left:
        friendly_name: "Battery Depletion Seconds"
        unit_of_measurement: Seconds
        value_template: >
          {% set state = states('sensor.sunsynk_battery_power') | int %}
          {% if state == 0 -%}
           {{ ((((states('sensor.sunsynk_battery_soc') | float - 20) /100) * 10640) / (1) * 60 * 60 ) | timestamp_custom('%s', 0) }}
          {%- else -%}
           {{ ((((states('sensor.sunsynk_battery_soc') | float - 20) /100) * 10640) / (states('sensor.sunsynk_battery_power') | float) * 60 * 60 ) | timestamp_custom('%s', 0) }}
          {%- endif %}
      soc_battery_time_left_friendly:
        friendly_name: "Battery Depletion Time"
        value_template: >
          {% set state = states('sensor.sunsynk_battery_power') | int %}
          {% if state > 0 -%}
           {%- set time = states('sensor.soc_battery_time_left') | int %}
           {%- set minutes = ((time % 3600) // 60) %}
           {%- set minutes = '{} minutes'.format(minutes) if minutes > 0 else '' %}
           {%- set hours = ((time % 86400) // 3600) %}
           {%- set hours = '{} hours, '.format(hours) if hours > 0 else '' %}
           {%- set days = (time // 86400) %}
           {%- set days = '{} day, '.format(days) if days > 0 else '' %}
           {{ 'Less than 1 minute' if time < 60 else days + hours + minutes }}
          {%- else -%}
           {{ 'Running on solar power' }}
          {%- endif %}

 

Edited by -cK-

14 hours ago, Gary Waterworth said:

Show me a screen of the nodered flows. 

 

hi there

 

attached. i tried with create request inverter list enabled and disabled, same result. 

 

Screenshot2023-05-15at21_10_14.thumb.png.3c0ce0eabbddadbb1ef96ba323c4fee6.png

 

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.