May 11, 20233 yr 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
May 11, 20233 yr 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.
May 11, 20233 yr @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
May 11, 20233 yr 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 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 May 11, 20233 yr by Gary Waterworth
May 11, 20233 yr @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
May 11, 20233 yr 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.
May 11, 20233 yr 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 - 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 Edited May 11, 20233 yr by -cK-
May 12, 20233 yr 22 hours ago, Gary Waterworth said: Plant And Invertor Index Numbers · gdwaterworth/Home-Assistant---E-Linter-Logger---Sunsynk Wiki (github.com) 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?
May 12, 20233 yr 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? 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.
May 12, 20233 yr 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?
May 12, 20233 yr 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
May 12, 20233 yr 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.
May 12, 20233 yr 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..........
May 12, 20233 yr 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.
May 13, 20233 yr 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
May 13, 20233 yr 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
May 13, 20233 yr 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 May 13, 20233 yr by randomfool
May 13, 20233 yr 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 Edited May 13, 20233 yr by francoisj1
May 15, 20233 yr 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 Show me a screen of the nodered flows. Edited May 15, 20233 yr by Gary Waterworth
May 15, 20233 yr 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
May 15, 20233 yr 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?
May 15, 20233 yr 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? It does not get exposed. It is pushed to teh website
May 15, 20233 yr 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
May 15, 20233 yr 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 May 15, 20233 yr by -cK-
May 15, 20233 yr 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.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.