June 2, 20233 yr I do not have any data under my input_2 sensor so without a screenshot for reference to confirm my suspicion this is just a shot in the dark but if the sensor follow the pattern I'm seeing perhaps this should resemeble what you would need.🤷♂️ ####These templates are needed for the Sunsynk Power Flow Card https://github.com/slipx06/sunsynk-power-flow-card ####Solar Sensors ####solarday_108: sensor.sunsynk_daily_pv_108 ####pv1_power_186: sensor.sunsynk_pv1_186 ####pv2_power_187: sensor.sunsynk_pv1_187 ####pv3_power_188: sensor.sunsynk_pv1_188 ####pv4_power_189: none ####pv1_v_109: sensor.sunsynk_pv1_voltage_109 ####pv1_i_110: sensor.sunsynk_pv1_current_110 ####pv2_v_111: sensor.sunsynk_pv2_voltage_111 ####pv2_i_112: sensor.sunsynk_pv2_current_112 ####pv3_v_113: sensor.sunsynk_pv3_voltage_113 ####pv3_i_114: sensor.sunsynk_pv3_current_114 ####pv4_v_115: none ####pv4_i_116: none - sensor: - name: "Sunsynk Daily PV 108" state: > {{state_attr('sensor.sunsynk_input', 'etoday')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV1 186" state: > {{state_attr('sensor.sunsynk_input', 'pv1')|float(0)|round(0)}} - sensor: - name: "Sunsynk PV2 187" state: > {{state_attr('sensor.sunsynk_input', 'pv2')|float(0)|round(0)}} - sensor: - name: "Sunsynk PV3 188" state: > {{state_attr('sensor.sunsynk_input_2', 'pv3')|float(0)|round(0)}} - sensor: - name: "Sunsynk PV1 Voltage 109" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_0_vpv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV1 Current 110" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_0_ipv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV2 Voltage 111" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_1_vpv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV2 Current 112" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_1_ipv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV3 Voltage 113" state: > {{state_attr('sensor.sunsynk_input_2', 'pvIV_3_vpv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV3 Current 114" state: > {{state_attr('sensor.sunsynk_input_2', 'pvIV_3_ipv')|float(0)|round(1)}} Edited June 2, 20233 yr by -cK- typo
June 2, 20233 yr On 2023/05/31 at 11:31 PM, -cK- said: @slipx Think I've got all the major bugs ironed out so here is the code for that add-on: Template sensors needed in the configuration file: ##### ##### ##### Sunsynk-Power-Flow-Card: Add-On ##### Markdown Sensors Template ##### ##### battery_cap: friendly_name: "Battery Capacity" value_template: > {% set grid_online = states('sensor.sunsynk_grid_online') | float %} {% if grid_online | float == 0 %} {{ (states.sensor.sunsynk_settings.attributes.batteryShutdownCap) | float }} {% else %} {% set now = strptime(as_timestamp(now()) | timestamp_custom('%H:%M'), '%H:%M') %} {% set sellTime1 = strptime(state_attr('sensor.sunsynk_settings', 'sellTime1'), '%H:%M') %} {% set sellTime2 = strptime(state_attr('sensor.sunsynk_settings', 'sellTime2'), '%H:%M') %} {% set sellTime3 = strptime(state_attr('sensor.sunsynk_settings', 'sellTime3'), '%H:%M') %} {% set sellTime4 = strptime(state_attr('sensor.sunsynk_settings', 'sellTime4'), '%H:%M') %} {% set sellTime5 = strptime(state_attr('sensor.sunsynk_settings', 'sellTime5'), '%H:%M') %} {% set sellTime6 = strptime(state_attr('sensor.sunsynk_settings', 'sellTime6'), '%H:%M') %} {% if now >= sellTime1 and now < sellTime2 %} {{ state_attr('sensor.sunsynk_settings', 'cap1') | float }} {% elif now >= sellTime2 and now < sellTime3 %} {{ state_attr('sensor.sunsynk_settings', 'cap2') | float }} {% elif now >= sellTime3 and now < sellTime4 %} {{ state_attr('sensor.sunsynk_settings', 'cap3') | float }} {% elif now >= sellTime4 and now < sellTime5 %} {{ state_attr('sensor.sunsynk_settings', 'cap4') | float }} {% elif now >= sellTime5 and now < sellTime6 %} {{ state_attr('sensor.sunsynk_settings', 'cap5') | float }} {% elif now >= sellTime6 or now < sellTime1 %} {{ state_attr('sensor.sunsynk_settings', 'cap6') | float }} {% else %} {{ (states.sensor.sunsynk_settings.attributes.batteryShutdownCap) | float }} {% endif %} {% endif %} soc_battery_time_left: friendly_name: "Battery Depletion Seconds" unit_of_measurement: Seconds value_template: > {% set state = states('sensor.sunsynk_battery_power') | int %} {% set cap = states('sensor.battery_cap') | float %} {% if state == 0 %} {{ ((((states('sensor.sunsynk_battery_soc') | float - cap) / 100) * 10240) / 1 * 60 * 60) | int }} {% else %} {{ ((((states('sensor.sunsynk_battery_soc') | float - cap) / 100) * 10240) / (states('sensor.sunsynk_battery_power') | float) * 60 * 60) | int }} {% 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 = '{} min'.format(minutes) if minutes > 0 else '' %} {%- set hours = ((time % 86400) // 3600) %} {%- set hours = '{} hrs, '.format(hours) if hours > 0 else '' %} {%- set days = (time // 86400) %} {%- set days = '{} day, '.format(days) if days > 0 else '' %} {{ 'Floating' if time < 60 else days + hours + minutes }} {%- else -%} {{ 'Charging' }} {%- endif %} battery_charging_time_left: friendly_name: "Battery Charging Time Left" unit_of_measurement: Seconds value_template: > {% set power = states('sensor.sunsynk_battery_power') | float %} {% set soc = states('sensor.sunsynk_battery_soc') | float %} {% set cap = states('sensor.battery_cap') | float %} {% if power < 0 %} {% if soc < cap %} {{ ((((cap - soc) / 100) * 10240) / (-power) * 60 * 60) | int }} {% else %} {{ ((((100 - soc) / 100) * 10240) / (-power) * 60 * 60) | int }} {% endif %} {% else %} 0 {% endif %} battery_charging_time_left_friendly: friendly_name: "Battery Charging Time" value_template: > {% set state = states('sensor.sunsynk_battery_power') | int %} {% if state < 0 -%} {%- set time = states('sensor.battery_charging_time_left') | int %} {%- set minutes = ((time % 3600) // 60) %} {%- set minutes = '{} min'.format(minutes) if minutes > 0 else '' %} {%- set hours = ((time % 86400) // 3600) %} {%- set hours = '{} hrs, '.format(hours) if hours > 0 else '' %} {%- set days = (time // 86400) %} {%- set days = '{} day, '.format(days) if days > 0 else '' %} {{ 'Floating' if time < 60 else days + hours + minutes }} {%- else -%} {{ 'Discharging' }} {%- endif %} markdown_battery_charge_time_left: friendly_name: "Markdown Battery Charging Time" value_template: > {% if states('sensor.sunsynk_battery_soc') | float < states('sensor.battery_cap') | float %} {{ states('sensor.battery_cap') | float | round(0) }} {% else %} 100 {% endif %} markdown_discharge_time: friendly_name: "Markdown Discharge Time" value_template: > {% set now = as_timestamp(now()) %} {% set add = states('sensor.soc_battery_time_left') | int %} {% set future_time = now + add %} {{ future_time | timestamp_custom('%H:%M') }} markdown_charge_time: friendly_name: "Markdown Charging Time" value_template: > {% set now = as_timestamp(now()) %} {% set add = states('sensor.battery_charging_time_left') | int %} {% set future_time = now + add %} {{ future_time | timestamp_custom('%H:%M') }} battery_status: value_template: "{{ 'positive' if states('sensor.sunsynk_battery_power')|float > 0 else 'negative' }}" friendly_name: "Battery Status" 10240 is the battery size (2x5.12kW batteries so adjust this value accordingly to your setup) Then I have the different markdown cards setup as conditional cards below the Sunsynk Power Flow Card: - type: conditional conditions: - entity: sensor.battery_status state: positive card: type: markdown content: "<table width=\"100%\" border=0>\n <tbody> \n <tr>\n <td align=\"center\">\n <b>Discharge to {{ states('sensor.battery_cap') | float | round(0)}}% :\n {{ states('sensor.soc_battery_time_left_friendly') }} @ {{ states('sensor.markdown_discharge_time') }}</b> \n \t</td>\n </tr>\n </tbody>\n</table>" - type: conditional conditions: - entity: sensor.battery_status state: negative card: type: markdown content: "<table width=\"100%\" border=0>\n <tbody> \n <tr>\n <td align=\"center\">\n <b>Charge to {{ states('sensor.markdown_battery_charge_time_left') | float | round(0)}}% : \n {{ states('sensor.battery_charging_time_left_friendly') }} @ {{ states('sensor.markdown_charge_time') }}</b> \n \t</td>\n </tr>\n </tbody>\n</table>" - type: conditional conditions: - entity: sensor.battery_status state: unavailable card: type: markdown content: "<table width=\"100%\" border=0>\n <tbody> \n <tr>\n <td align=\"center\">\n <b>Houston, we have a Problem</b> \n \t</td>\n </tr>\n </tbody>\n</table>\n" Think that is everything needed for this add-on to work. Note that I'm using Gary's integration to pull the inverter data so not sure what the sensors would be on the other integrations like Solarman etc. sorry. Busy testing. I think we can create an input sensor for the battery capacity. Which should make it easier to setup. I updated with my sensor names and it seems to be working
June 3, 20233 yr 18 hours ago, -cK- said: Taking a stab in the dark but Perhaps those might be under input_2 instead of input? Hi thanks for the reply I tried input 2 but no luck either. Its weird that I get the amps and volts for pv 3 but not the wattage?
June 3, 20233 yr Still only seing the volts and amps on pv3 not sure where the issue lies. I did try input 2 but then I lose everything on pv 3 Here are my yaml settings if it helps? ##### Put in your Plant Index for your Plant. 0 should work - sensor: - name: "Sunsynk plant index" state: "0" unique_id: "sensor.sunsynk_plant_index" ##### Put in your Invertor Index for your 1st Invertor. 0 should work - sensor: - name: "Sunsynk Invertor 1 index" state: "0" unique_id: "sensor.sunsynk_invertor_1_index" ##### Put in your Invertor Index for your 2nd Invertor. Only Change if you have 2 Invertors - sensor: - name: "Sunsynk Invertor 2 index" state: "DONOTEDIT" unique_id: "sensor.sunsynk_invertor_2_index" ##### Number of Items to return in queries. Default 10 - sensor: - name: "Sunsynk Return Items" state: 10 unique_id: "sensor.sunsynk_return_items" ##### Source for Invertor List - P;ant based - sensor: - name: "Sunsynk Inverter URL" state: true unique_id: "sensor.sunsynk_inverter_url" ##### ##### ##### DO NOT EDIT ANYTHING UNDER HERE ##### ##### ##### Plant Information - sensor: - name: "Sunsynk Invertor List" state: "DONOTEDIT" unique_id: "sensor.sunsynk_invertor_list" - sensor: - name: "Sunsynk Plant List" state: "DONOTEDIT" unique_id: "sensor.sunsynk_plant_list" - sensor: - name: "Sunsynk Notifications" state: "" unique_id: "sensor.sunsynk_notifications" ##### Core Sensors Invertor 1 - sensor: - name: "Sunsynk Flow" state: "" unique_id: "sensor.sunsynk_flow" - sensor: - name: "Sunsynk Output" state: "" unique_id: "sensor.sunsynk_output" - sensor: - name: "Sunsynk Battery" state: "" unique_id: "sensor.sunsynk_battery" - sensor: - name: "Sunsynk Input" state: "" unique_id: "sensor.sunsynk_input" - sensor: - name: "Sunsynk Grid" state: "" unique_id: "sensor.sunsynk_grid" - sensor: - name: "Sunsynk Load" state: "" unique_id: "sensor.sunsynk_load" - sensor: - name: "Sunsynk Settings" state: "" unique_id: "sensor.sunsynk_settings" - sensor: - name: "Sunsynk Events 1" state: "" unique_id: "sensor.sunsynk_events_1" - sensor: - name: "Sunsynk Events 2" state: "" unique_id: "sensor.sunsynk_events_2" - sensor: - name: "Sunsynk Events 3" state: "" unique_id: "sensor.sunsynk_events_3" - sensor: - name: "Sunsynk Temp Data" state: "" unique_id: "sensor.sunsynk_temp_data" ##### Core Sensors Invertor 2 - sensor: - name: "Sunsynk Flow 2" state: "" unique_id: "sensor.sunsynk_flow_2" - sensor: - name: "Sunsynk Output 2" state: "" unique_id: "sensor.sunsynk_output_2" - sensor: - name: "Sunsynk Battery 2" state: "" unique_id: "sensor.sunsynk_battery_2" - sensor: - name: "Sunsynk Input 2" state: "" unique_id: "sensor.sunsynk_input_2" - sensor: - name: "Sunsynk Grid 2" state: "" unique_id: "sensor.sunsynk_grid_2" - sensor: - name: "Sunsynk Load 2" state: "" unique_id: "sensor.sunsynk_load_2" - sensor: - name: "Sunsynk Settings 2" state: "" unique_id: "sensor.sunsynk_settings_2" - sensor: - name: "Sunsynk Events 1 2" state: "" unique_id: "sensor.sunsynk_events_1_2" - sensor: - name: "Sunsynk Events 2 2" state: "" unique_id: "sensor.sunsynk_events_2_2" - sensor: - name: "Sunsynk Events 3 2" state: "" unique_id: "sensor.sunsynk_events_3_2" - sensor: - name: "Sunsynk Temp Data 2" state: "" unique_id: "sensor.sunsynk_temp_data_2" ##### Misc Sensors for Energy - sensor: - name: "Sunsynk Battery etotalchg" state_class: total_increasing unique_id: "sensor.sunsynk_battery_etotalchg" device_class: energy unit_of_measurement: kWh state: > {{state_attr('sensor.sunsynk_battery', 'etotalchg')|float}} - sensor: - name: "Sunsynk Battery etotaldischg" state_class: total_increasing unique_id: "sensor.sunsynk_battery_etotaldischg" device_class: energy unit_of_measurement: kWh state: > {{state_attr('sensor.sunsynk_battery', 'etotaldischg')|float}} - sensor: - name: "Sunsynk PV Total" state_class: total_increasing unique_id: "sensor.sunsynk_pv_total" device_class: energy unit_of_measurement: kWh state: > {{state_attr('sensor.sunsynk_input', 'pvtotal')|float}} - sensor: - name: "Sunsynk Grid Total" state_class: total_increasing unique_id: "sensor.sunsynk_grid_total" device_class: energy unit_of_measurement: kWh state: > {{state_attr('sensor.sunsynk_grid', 'total')|float}} - sensor: - name: "Sunsynk Load Total" state_class: total_increasing unique_id: "sensor.sunsynk_load_total" device_class: energy unit_of_measurement: kWh state: > {{state_attr('sensor.sunsynk_load', 'total')|float}} ##### Other Sensors - sensor: - name: "Current Use Timer" state: > {% if is_state_attr('sensor.sunsynk_settings', 'peakAndVallery', '1' ) %} Use Timer Enabled {% else %} Use Timer Disabled {% endif %} - sensor: - name: "Sunsynk Battery Temp" state: > {{state_attr('sensor.sunsynk_battery', 'temp')|float}} - sensor: - name: "Sunsynk AC Temp" state: > {{state_attr('sensor.sunsynk_temp_data', 'actemp')|float}} - sensor: - name: "Sunsynk DC Temp" state: > {{state_attr('sensor.sunsynk_temp_data', 'dctemp')|float}} - sensor: - name: "Sunsynk Battery Soc" state: > {{state_attr('sensor.sunsynk_battery', 'soc')|float}} - sensor: - name: "Sunsynk Battery Power" state: > {{state_attr('sensor.sunsynk_battery', 'power')|float}} - sensor: - name: "Sunsynk PV1" state: > {{state_attr('sensor.sunsynk_input', 'pv1')|float}} - sensor: - name: "Sunsynk PV2" state: > {{state_attr('sensor.sunsynk_input', 'pv2')|float}} - sensor: - name: "Sunsynk PV3" state: > {{state_attr('sensor.sunsynk_input', 'pv3')|float}} - sensor: - name: "Sunsynk Grid Power" state: > {{state_attr('sensor.sunsynk_grid', 'power')|float}} - sensor: - name: "Sunsynk Grid Online" state: > {{state_attr('sensor.sunsynk_grid', 'gridonline')|float}} - sensor: - name: "Sunsynk Load Power" state: > {{state_attr('sensor.sunsynk_load', 'totalpower')|float}} - sensor: - name: "SunSynk Logger Status" state: > {% if state_attr("sensor.sunsynk_invertor_list", "infos_0_status") == 0 -%} Offline {%- elif state_attr("sensor.sunsynk_invertor_list", "infos_0_status") == 1 -%} Online {%- elif state_attr("sensor.sunsynk_invertor_list", "infos_0_status") == 2 -%} Warning {%- elif state_attr("sensor.sunsynk_invertor_list", "infos_0_status") == 3 -%} Fault {%- elif state_attr("sensor.sunsynk_invertor_list", "infos_0_status") == 4 -%} Upgrading {%- else -%} {{state_attr("sensor.sunsynk_invertor_list", "infos_0_status")}} {%- endif %} - sensor: - name: "SunSynk Logger Last Update" device_class: timestamp state: > {{ state_attr("sensor.sunsynk_invertor_list", "infos_0_updateAt") }} - sensor: - name: "Weather Forecast Calc Result" state: "" unique_id: "sensor.weather_forecast_calc_result" - sensor: - name: "New Minutes To Load Shedding" state: 99999 unique_id: "sensor.new_minutes_to_load_shedding" - sensor: - name: "New SunSynk Override Result" state: " " unique_id: "sensor.new_sunsynk_override_result" - sensor: - name: "New Length Load Shedding" state: " " unique_id: "sensor.new_length_load_shedding" - sensor: - name: "New SunSynk Update Status" state: "Not Been Called Yet" unique_id: "sensor.new_sunsynk_update_status" - sensor: - name: "Calculated Current Solar Pred" unique_id: "sensor.calculated.current.solar.pred" state: > {{ ((float(states('sensor.power_production_now_2')) * 1 ) + (float(states('sensor.power_production_now')) * 1 ))|float }} - sensor: - name: "Sunsynk Stats Last Update" device_class: timestamp state: 0 unique_id: "sensor.sunsynk_stats_last_update" - sensor: - name: "Sunsynk Battery Depletion" state: 0 unique_id: "sensor.sunsynk_battery_depletion" - sensor: - name: "Sunsynk Battery Depletion Load" state: 0 unique_id: "sensor.sunsynk_battery_depletion_load" ####Solar Sensors ####solarday_108: sensor.sunsynk_daily_pv_108 ####pv1_power_186: sensor.sunsynk_pv1_186 ####pv2_power_187: sensor.sunsynk_pv1_187 ####pv3_power_188: sensor.sunsynk_pv1_188 ####pv4_power_189: none ####pv1_v_109: sensor.sunsynk_pv1_voltage_109 ####pv1_i_110: sensor.sunsynk_pv1_current_110 ####pv2_v_111: sensor.sunsynk_pv2_voltage_111 ####pv2_i_112: sensor.sunsynk_pv2_current_112 ####pv3_v_113: sensor.sunsynk_pv3_voltage_113 ####pv3_i_114: sensor.sunsynk_pv3_current_114 ####pv4_v_115: none ####pv4_i_116: none - sensor: - name: "Sunsynk Daily PV 108" state: > {{state_attr('sensor.sunsynk_input', 'etoday')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV1 186" state: > {{state_attr('sensor.sunsynk_input', 'pv1')|float(0)|round(0)}} - sensor: - name: "Sunsynk PV2 187" state: > {{state_attr('sensor.sunsynk_input', 'pv2')|float(0)|round(0)}} - sensor: - name: "Sunsynk PV3 188" state: > {{state_attr('sensor.sunsynk_input', 'pv3')|float(0)|round(0)}} - sensor: - name: "Sunsynk PV1 Voltage 109" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_0_vpv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV1 Current 110" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_0_ipv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV2 Voltage 111" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_1_vpv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV2 Current 112" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_1_ipv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV3 Voltage 113" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_2_vpv')|float(0)|round(1)}} - sensor: - name: "Sunsynk PV3 Current 114" state: > {{state_attr('sensor.sunsynk_input', 'pvIV_2_ipv')|float(0)|round(1)}} ####Battery Sensors ####batchargeday_70: sensor.sunsynk_battery_daily_charge_70 ####batdischargeday_71: sensor.sunsynk_battery_daily_discharge_71 ####battery_voltage_183: sensor.sunsynk_battery_voltage_183 ####battery_soc_184: sensor.sunsynk_battery_soc_184 ####battery_out_190: sensor.sunsynk_battery_power_190 ####battery_current_191: sensor.sunsynk_battery_current_191 - sensor: - name: "Sunsynk Battery Daily Charge 70" state: > {{state_attr('sensor.sunsynk_battery', 'etodayChg')|float(0)|round(1)}} - sensor: - name: "Sunsynk Battery Daily Discharge 71" state: > {{state_attr('sensor.sunsynk_battery', 'etodayDischg')|float(0)|round(1)}} - sensor: - name: "Sunsynk Battery Voltage 183" state: > {{state_attr('sensor.sunsynk_battery', 'voltage')|float(0)}} - sensor: - name: "Sunsynk Battery Soc 184" state: > {{state_attr('sensor.sunsynk_battery', 'soc')|float(0)|round(0)}} - sensor: - name: "Sunsynk Battery Power 190" state: > {{state_attr('sensor.sunsynk_battery', 'power')|float(0)|round(0)}} - sensor: - name: "Sunsynk Battery Current 191" state: > {{state_attr('sensor.sunsynk_battery', 'current')|float(0)}} ####Grid Sensors ####grid_buy_day_76: sensor.sunsynk_daily_grid_buy_76 ####grid_sell_day_77: sensor.sunsynk_daily_grid_sell_77 ####grid_external_power_172: sensor.sunsynk_grid_power_172 ####inverter_load_grid_169: sensor.sunsynk_grid_power_169 - sensor: - name: "Sunsynk Grid Power 169" state: > {{state_attr('sensor.sunsynk_grid', 'power')|float(0)|round(0)}} - sensor: - name: "Sunsynk Grid Power 172" state: > {{state_attr('sensor.sunsynk_grid', 'limiterTotalPower')|float(0)|round(0)}} - sensor: - name: "Sunsynk Daily Grid Buy 76" state: > {{state_attr('sensor.sunsynk_grid', 'etodayFrom')|float(0)|round(1)}} - sensor: - name: "Sunsynk Daily Grid Sell 77" state: > {{state_attr('sensor.sunsynk_grid', 'etodayTo')|float(0)|round(1)}} ####Load Sensors ####loadday_84: sensor.sunsynk_daily_load_84 ####essential_power: sensor.sunsynk_load_power_ess ####aux_power_166: sensor.sunsynk_output_aux_power_166 - sensor: - name: "Sunsynk Daily Load 84" state: > {{state_attr('sensor.sunsynk_load', 'dailyUsed')|float(0)|round(1)}} - sensor: - name: "Sunsynk Load Power Ess" state: > {{state_attr('sensor.sunsynk_load', 'totalpower')|float(0)|round(0)}} - sensor: - name: "Sunsynk Output Aux Power 166" state: > {{state_attr('sensor.sunsynk_output', 'poweraux')|float(0)|round(0)}} ####Inverter Sensors ####use_timer_248: sensor.current_use_timer_248 ####priority_load_243: sensor.energy_mode_243 ####inverter_grid_voltage_154: sensor.sunsynk_output_voltage_154 ####inverter_load_freq_192: sensor.sunsynk_output_frequency_192 ####inverter_out_164: sensor.sunsynk_output_current_164 ####inverter_out_175: sensor.sunsynk_output_total_power_175 ####grid_status_194: sensor.sunsynk_grid_online_194 ####inverter_status_59: sensor.sunsynk_inverter_status_59 - sensor: - name: "Current Use Timer 248" state: > {% if (state_attr('sensor.sunsynk_settings', 'peakAndVallery') | float) == 1 %} on {% else %} off {% endif %} - sensor: - name: "Energy Mode 243" state: > {% if (state_attr('sensor.sunsynk_settings', 'energyMode') | float) == 1 %} on {% else %} off {% endif %} - sensor: - name: "Sunsynk Output Voltage 154" state: > {{state_attr('sensor.sunsynk_output', 'vip_0_volt')|float(0)|round(1)}} - sensor: - name: "Sunsynk Output current 164" state: > {{state_attr('sensor.sunsynk_output', 'vip_0_current')|float(0)|round(1)}} - sensor: - name: "Sunsynk Output Frequency 192" state: > {{state_attr('sensor.sunsynk_output', 'fac')|float(0)|round(1)}} - sensor: - name: "Sunsynk Output Total Power 175" state: > {{state_attr('sensor.sunsynk_output', 'totalpower')|float(0)|round(0)}} - sensor: - name: "SunSynk Inverter Status 59" state: > {{ state_attr("sensor.sunsynk_invertor_list", "infos_0_gatewayVO_status") }} - sensor: - name: "Sunsynk Grid Online 194" state: > {{state_attr('sensor.sunsynk_grid', 'gridonline')|float|round(0)}} Edited June 3, 20233 yr by Jacques Jambo
June 3, 20233 yr Can you share a screenshot from developer tools of all the attributes being reported under sensor.sunsynk_input, sensor.sunsynk_input2, ensor.sunsynk_input3 etc
June 3, 20233 yr @-cK- I've opted for a single markdown card that uses if logic to replace the conditional cards (still testing). I guess the end result is the same. Also applied some other formatting. I've also started moving some of the logic onto the esp32 just as a POC. {% set bat_power = states('sensor.battery_output_power') | int %} {% if states('sensor.battery_status') == "negative" -%} {% if states('sensor.battery_charging_time_left') | float <= 10800 %} <ha-alert alert-type="success"> Charge to {{ states('sensor.markdown_battery_charge_time_left') | float | round(0)}}% : {{ states('sensor.battery_charging_time_left_friendly') }} @ {{ states('sensor.markdown_charge_time') }} </ha-alert> {% elif 10800 < (states('sensor.battery_charging_time_left') | float) <= 21600 %} <ha-alert alert-type="warning">Charge to {{ states('sensor.markdown_battery_charge_time_left') | float | round(0)}}% : {{ states('sensor.battery_charging_time_left_friendly') }} @ {{ states('sensor.markdown_charge_time') }} </ha-alert> {% elif states('sensor.battery_charging_time_left') | float > 21601 %} <ha-alert alert-type="error">Charge to {{ states('sensor.markdown_battery_charge_time_left') | float | round(0)}}% : {{ states('sensor.battery_charging_time_left_friendly') }} @ {{ states('sensor.markdown_charge_time') }} </ha-alert> {% endif %} {% elif states('sensor.battery_status') == "positive" %} {% if states('sensor.soc_battery_time_left') | float > 21601 %} <ha-alert alert-type="success"> Discharge to {{ states('sensor.battery_cap') | float | round(0)}}% @ {{ states('sensor.markdown_discharge_time') }} : Battery runtime is {{ states('sensor.soc_battery_time_left_friendly') }} at current ({{bat_power}} W) battery load</ha-alert> {% elif 10800 < (states('sensor.soc_battery_time_left') | float) <= 21600 %} <ha-alert alert-type="warning">Discharge to {{ states('sensor.battery_cap') | float | round(0)}}% @ {{ states('sensor.markdown_discharge_time') }} : Battery runtime is {{ states('sensor.soc_battery_time_left_friendly') }} at current ({{bat_power}} W) battery load</ha-alert> {% elif states('sensor.soc_battery_time_left') | float <= 10800 %} <ha-alert alert-type="error">Discharge to {{ states('sensor.battery_cap') | float | round(0)}}% @ {{ states('sensor.markdown_discharge_time') }} : Battery runtime is {{ states('sensor.soc_battery_time_left_friendly') }} at current ({{bat_power}} W) battery load</ha-alert> {% endif %} {% endif %}
June 3, 20233 yr looks like there are 3 there? pvIV_0_ppv pvIV_1_ppv pvIV_2_ppv. how do i access the 3rd one?
June 3, 20233 yr 37 minutes ago, slipx said: Can you share a screenshot from developer tools of all the attributes being reported under sensor.sunsynk_input, sensor.sunsynk_input2, ensor.sunsynk_input3 etc looks like there are 3 there? pvIV_0_ppv pvIV_1_ppv pvIV_2_ppv. how do i access the 3rd one? Edited June 3, 20233 yr by Jacques Jambo
June 3, 20233 yr I think the problem is with the integration. Try this. Open Node-Red. Double click the Sunsynk Inpu Data node Replace all the function code in here with this code if (typeof msg.payload === 'object') { } else { if (msg.payload.includes("RequestError")) { node.status("Request Error"); } else { node.status("Unknown Error"); } node.error(msg.payload); return null; } var returnvalue = {}; function scroll_all_items(s_payload, t_tkey) { Object.entries(s_payload).forEach((entry) => { const [key, value] = entry; if (value === null || value === "") { if (t_tkey === "") { returnvalue[key] = "Missing"; } else { returnvalue[t_tkey + "_" + key] = "Missing"; } } else if (s_payload[key].length === 0) { if (t_tkey === "") { returnvalue[key] = "Missing"; } else { returnvalue[t_tkey + "_" + key] = value; } } else if (typeof s_payload[key] === 'object') { if (Array.isArray(s_payload[key])) { if (t_tkey === "") { process_array(s_payload[key], key); } else { process_array(s_payload[key], t_tkey + "_" + key); } } else { if (t_tkey === "") { scroll_all_items(s_payload[key], key); } else { scroll_all_items(s_payload[key], t_tkey + "_" + key); } } } else { if (t_tkey === "") { returnvalue[key] = value; } else { returnvalue[t_tkey + "_" + key] = value; } } }); return; } function process_array(s_payload, t_tkey) { if (t_tkey === "infos_0_plantPermission") { returnvalue[t_tkey] = "Not Processed" } else { for (let i = 0; i < s_payload.length; i++) { scroll_all_items(s_payload[i], t_tkey + "_" + i); } } return; } var origpayload = msg.payload; if (origpayload.msg == "Success") { msg.payload.attributes = {}; scroll_all_items(msg.payload.data, ""); msg.payload.attributes = returnvalue; msg.payload.state = parseFloat(msg.payload.data.pvIV[0].ppv) + parseFloat(msg.payload.data.pvIV[1].ppv); let currdate = new Date(); node.status(origpayload.msg + " - " + currdate.toLocaleString()); msg.payload.attributes.pv = parseFloat(msg.payload.data.pvIV[0].ppv) + parseFloat(msg.payload.data.pvIV[1].ppv); msg.payload.attributes.pv1 = parseFloat(msg.payload.data.pvIV[0].ppv) ; msg.payload.attributes.pv1_volt = parseFloat(msg.payload.data.pvIV[0].vpv); msg.payload.attributes.pv1_current = parseFloat(msg.payload.data.pvIV[0].ipv); msg.payload.attributes.pv2 = parseFloat(msg.payload.data.pvIV[1].ppv); msg.payload.attributes.pv2_volt = parseFloat(msg.payload.data.pvIV[1].vpv); msg.payload.attributes.pv2_current = parseFloat(msg.payload.data.pvIV[1].ipv); msg.payload.attributes.pv3_current = parseFloat(msg.payload.data.pvIV[2].ipv); msg.payload.attributes.pv3 = parseFloat(msg.payload.data.pvIV[2].ppv); msg.payload.attributes.pv3_volt = parseFloat(msg.payload.data.pvIV[2].vpv); msg.payload.attributes.pv3_current = parseFloat(msg.payload.data.pvIV[2].ipv); msg.payload.attributes.pvtotal = parseFloat(msg.payload.data.etotal); if (global.get("SunSynkDebug") === 1) { node.error(msg); } return msg; } else { msg.payload = {}; node.status(origpayload.msg) node.error({ state: origpayload.msg, data: origpayload }); return null; } Edited June 3, 20233 yr by slipx
June 3, 20233 yr 26 minutes ago, slipx said: I think the problem is with the integration. Try this. Open Node-Red. Double click the Sunsynk Inpu Data node Replace all the function code in here with this code if (typeof msg.payload === 'object') { } else { if (msg.payload.includes("RequestError")) { node.status("Request Error"); } else { node.status("Unknown Error"); } node.error(msg.payload); return null; } var returnvalue = {}; function scroll_all_items(s_payload, t_tkey) { Object.entries(s_payload).forEach((entry) => { const [key, value] = entry; if (value === null || value === "") { if (t_tkey === "") { returnvalue[key] = "Missing"; } else { returnvalue[t_tkey + "_" + key] = "Missing"; } } else if (s_payload[key].length === 0) { if (t_tkey === "") { returnvalue[key] = "Missing"; } else { returnvalue[t_tkey + "_" + key] = value; } } else if (typeof s_payload[key] === 'object') { if (Array.isArray(s_payload[key])) { if (t_tkey === "") { process_array(s_payload[key], key); } else { process_array(s_payload[key], t_tkey + "_" + key); } } else { if (t_tkey === "") { scroll_all_items(s_payload[key], key); } else { scroll_all_items(s_payload[key], t_tkey + "_" + key); } } } else { if (t_tkey === "") { returnvalue[key] = value; } else { returnvalue[t_tkey + "_" + key] = value; } } }); return; } function process_array(s_payload, t_tkey) { if (t_tkey === "infos_0_plantPermission") { returnvalue[t_tkey] = "Not Processed" } else { for (let i = 0; i < s_payload.length; i++) { scroll_all_items(s_payload[i], t_tkey + "_" + i); } } return; } var origpayload = msg.payload; if (origpayload.msg == "Success") { msg.payload.attributes = {}; scroll_all_items(msg.payload.data, ""); msg.payload.attributes = returnvalue; msg.payload.state = parseFloat(msg.payload.data.pvIV[0].ppv) + parseFloat(msg.payload.data.pvIV[1].ppv); let currdate = new Date(); node.status(origpayload.msg + " - " + currdate.toLocaleString()); msg.payload.attributes.pv = parseFloat(msg.payload.data.pvIV[0].ppv) + parseFloat(msg.payload.data.pvIV[1].ppv); msg.payload.attributes.pv1 = parseFloat(msg.payload.data.pvIV[0].ppv) ; msg.payload.attributes.pv1_volt = parseFloat(msg.payload.data.pvIV[0].vpv); msg.payload.attributes.pv1_current = parseFloat(msg.payload.data.pvIV[0].ipv); msg.payload.attributes.pv2 = parseFloat(msg.payload.data.pvIV[1].ppv); msg.payload.attributes.pv2_volt = parseFloat(msg.payload.data.pvIV[1].vpv); msg.payload.attributes.pv2_current = parseFloat(msg.payload.data.pvIV[1].ipv); msg.payload.attributes.pv3_current = parseFloat(msg.payload.data.pvIV[2].ipv); msg.payload.attributes.pv3 = parseFloat(msg.payload.data.pvIV[2].ppv); msg.payload.attributes.pv3_volt = parseFloat(msg.payload.data.pvIV[2].vpv); msg.payload.attributes.pv3_current = parseFloat(msg.payload.data.pvIV[2].ipv); msg.payload.attributes.pvtotal = parseFloat(msg.payload.data.etotal); if (global.get("SunSynkDebug") === 1) { node.error(msg); } return msg; } else { msg.payload = {}; node.status(origpayload.msg) node.error({ state: origpayload.msg, data: origpayload }); return null; } you are a hero! Its finally working, thank you so much!
June 3, 20233 yr 6 hours ago, slipx said: @-cK- I've opted for a single markdown card that uses if logic to replace the conditional cards (still testing). I guess the end result is the same. Also applied some other formatting. I've also started moving some of the logic onto the esp32 just as a POC. {% set bat_power = states('sensor.battery_output_power') | int %} {% if states('sensor.battery_status') == "negative" -%} {% if states('sensor.battery_charging_time_left') | float <= 10800 %} <ha-alert alert-type="success"> Charge to {{ states('sensor.markdown_battery_charge_time_left') | float | round(0)}}% : {{ states('sensor.battery_charging_time_left_friendly') }} @ {{ states('sensor.markdown_charge_time') }} </ha-alert> {% elif 10800 < (states('sensor.battery_charging_time_left') | float) <= 21600 %} <ha-alert alert-type="warning">Charge to {{ states('sensor.markdown_battery_charge_time_left') | float | round(0)}}% : {{ states('sensor.battery_charging_time_left_friendly') }} @ {{ states('sensor.markdown_charge_time') }} </ha-alert> {% elif states('sensor.battery_charging_time_left') | float > 21601 %} <ha-alert alert-type="error">Charge to {{ states('sensor.markdown_battery_charge_time_left') | float | round(0)}}% : {{ states('sensor.battery_charging_time_left_friendly') }} @ {{ states('sensor.markdown_charge_time') }} </ha-alert> {% endif %} {% elif states('sensor.battery_status') == "positive" %} {% if states('sensor.soc_battery_time_left') | float > 21601 %} <ha-alert alert-type="success"> Discharge to {{ states('sensor.battery_cap') | float | round(0)}}% @ {{ states('sensor.markdown_discharge_time') }} : Battery runtime is {{ states('sensor.soc_battery_time_left_friendly') }} at current ({{bat_power}} W) battery load</ha-alert> {% elif 10800 < (states('sensor.soc_battery_time_left') | float) <= 21600 %} <ha-alert alert-type="warning">Discharge to {{ states('sensor.battery_cap') | float | round(0)}}% @ {{ states('sensor.markdown_discharge_time') }} : Battery runtime is {{ states('sensor.soc_battery_time_left_friendly') }} at current ({{bat_power}} W) battery load</ha-alert> {% elif states('sensor.soc_battery_time_left') | float <= 10800 %} <ha-alert alert-type="error">Discharge to {{ states('sensor.battery_cap') | float | round(0)}}% @ {{ states('sensor.markdown_discharge_time') }} : Battery runtime is {{ states('sensor.soc_battery_time_left_friendly') }} at current ({{bat_power}} W) battery load</ha-alert> {% endif %} {% endif %} Cool, yea my approach on the markdown was a bit on the clunky side so any cleanup and simplification to the setup will be awesome 👍 I also agree making the battery capacity (size) an input sensor will help simplify the code. I'm assuming this is a sensor you've added to the setup? Not seeing it in my devolper tools sensor.battery_output_power Edited June 3, 20233 yr by -cK-
June 3, 20233 yr I'm using ESHome. Its my sensor that reports battery power. For E-Linter it would be sensor.sunsynk_battery_power_190 or equivalent. BTW this is going to be added to the card soon. Here is a sneak peak. 70% is SOC for the current timeslot. The plug next to the "Timer On" text indicates if Grid Charge is enabled for that slot. The Battery message will update as per the logic in your card
June 3, 20233 yr 5 minutes ago, slipx said: I'm using ESHome. Its my sensor that reports battery power. For E-Linter it would be sensor.sunsynk_battery_power_190 or equivalent. BTW this is going to be added to the card soon. Here is a sneak peak. 70% is SOC for the current timeslot. The plug next to the "Timer On" text indicates if Grid Charge is enabled for that slot. The Battery message will update as per the logic in your card This is great! Looking forward to this! Edited June 3, 20233 yr by spotity
June 4, 20233 yr @Gary Waterworth I'm not versed in Node-Red so a bit lost when it comes to trying to do something in it. @slipx card has two entities that can control the energyMode and peakAndVallery if set to a switch entity. Quote if you provide the card with a switch entity for these two attributes you can already toggle them from the card. For E-Linter you may need to modify the flows as I know they currently only read data and don't write data use_timer_248: switch.toggle_system_timer priority_load_243: switch.toggle_priority_load What would the posibilty be to add a seperate "manual control file" for this perhaps. I'm trying to figure out the section in your automation file that deals with pushing the commands to sunsynk but to be honest this as a bit beyond my understing. I'm guessing one can setup a sensor in the config file for the above and then have the states of the switch correspond to the the input value for the attribute (on=1, off=0). Set up node-red to read the switch state when it changes and then push the command to the sunsynk app. So if you toggle it on slipx card it would send the command to node-red and onto sunsynk? This us just a copy paste from your automation file of the sections I think one would need to setup and modify. One for system timer and one for priority load.
June 4, 20233 yr 23 hours ago, spotity said: This is great! Looking forward to this! Included in v1.6.0
June 4, 20233 yr 17 minutes ago, slipx said: Included in v1.6.0 I'm assuming we will need to setup these sensor for it to work? sensor: - platform: template sensors: ss_prog1_time: friendly_name: "SS Prog1 Time" value_template: > {% set sellTime1 = state_attr('sensor.sunsynk_settings', 'sellTime1') %} {% if sellTime1 %} {{ strptime(sellTime1, '%H:%M').strftime('%H:%M') }} {% endif %} sensor: - platform: template sensors: ss_prog1_charge: friendly_name: "SS Prog1 Charge" value_template: > {% set time1on = state_attr('sensor.sunsynk_settings', 'time1on') %} {{ 0 if time1on == 'false' else 1 }} - sensor: - name: "SS Prog1 Capacity" state: > {{ state_attr('sensor.sunsynk_settings', 'cap1') | float }}
June 4, 20233 yr Okay think I've got it all setup so for ease of setup here is all the sensors: Bindings: prog1_time: sensor.ss_prog1_time prog1_capacity: sensor.ss_prog1_capacity prog1_charge: sensor.ss_prog1_charge prog2_time: sensor.ss_prog2_time prog2_capacity: sensor.ss_prog2_capacity prog2_charge: sensor.ss_prog2_charge prog3_time: sensor.ss_prog3_time prog3_capacity: sensor.ss_prog3_capacity prog3_charge: sensor.ss_prog3_charge prog4_time: sensor.ss_prog4_time prog4_capacity: sensor.ss_prog4_capacity prog4_charge: sensor.ss_prog4_charge prog5_time: sensor.ss_prog5_time prog5_capacity: sensor.ss_prog5_capacity prog5_charge: sensor.ss_prog5_charge prog6_time: sensor.ss_prog6_time prog6_capacity: sensor.ss_prog6_capacity prog6_charge: sensor.ss_prog6_charge Sensors: ##### ##### ##### Sunsynk-Power-Flow-Card: Add-On v1.6 ##### Sensors ##### ##### - sensor: - name: "SS Prog1 Capacity" state: > {{ state_attr('sensor.sunsynk_settings', 'cap1') | float }} - sensor: - name: "SS Prog2 Capacity" state: > {{ state_attr('sensor.sunsynk_settings', 'cap2') | float }} - sensor: - name: "SS Prog3 Capacity" state: > {{ state_attr('sensor.sunsynk_settings', 'cap3') | float }} - sensor: - name: "SS Prog4 Capacity" state: > {{ state_attr('sensor.sunsynk_settings', 'cap4') | float }} - sensor: - name: "SS Prog5 Capacity" state: > {{ state_attr('sensor.sunsynk_settings', 'cap5') | float }} - sensor: - name: "SS Prog6 Capacity" state: > {{ state_attr('sensor.sunsynk_settings', 'cap6') | float }} Template Sensors: ##### ##### ##### Sunsynk-Power-Flow-Card: Add-On v1.6 ##### Sensors Template ##### ##### ss_prog1_time: friendly_name: "SS Prog1 Time" value_template: > {% set sellTime1 = state_attr('sensor.sunsynk_settings', 'sellTime1') %} {% if sellTime1 %} {{ strptime(sellTime1, '%H:%M').strftime('%H:%M') }} {% endif %} ss_prog1_charge: friendly_name: "SS Prog1 Charge" value_template: > {% set time1on = state_attr('sensor.sunsynk_settings', 'time1on') %} {{ 0 if time1on == 'false' else 1 }} ss_prog2_time: friendly_name: "SS Prog2 Time" value_template: > {% set sellTime2 = state_attr('sensor.sunsynk_settings', 'sellTime2') %} {% if sellTime2 %} {{ strptime(sellTime2, '%H:%M').strftime('%H:%M') }} {% endif %} ss_prog2_charge: friendly_name: "SS Prog2 Charge" value_template: > {% set time2on = state_attr('sensor.sunsynk_settings', 'time2on') %} {{ 0 if time2on == 'false' else 1 }} ss_prog3_time: friendly_name: "SS Prog3 Time" value_template: > {% set sellTime3 = state_attr('sensor.sunsynk_settings', 'sellTime3') %} {% if sellTime3 %} {{ strptime(sellTime3, '%H:%M').strftime('%H:%M') }} {% endif %} ss_prog3_charge: friendly_name: "SS Prog3 Charge" value_template: > {% set time3on = state_attr('sensor.sunsynk_settings', 'time3on') %} {{ 0 if time3on == 'false' else 1 }} ss_prog4_time: friendly_name: "SS Prog4 Time" value_template: > {% set sellTime4 = state_attr('sensor.sunsynk_settings', 'sellTime4') %} {% if sellTime4 %} {{ strptime(sellTime4, '%H:%M').strftime('%H:%M') }} {% endif %} ss_prog4_charge: friendly_name: "SS Prog4 Charge" value_template: > {% set time4on = state_attr('sensor.sunsynk_settings', 'time4on') %} {{ 0 if time4on == 'false' else 1 }} ss_prog5_time: friendly_name: "SS Prog5 Time" value_template: > {% set sellTime5 = state_attr('sensor.sunsynk_settings', 'sellTime5') %} {% if sellTime5 %} {{ strptime(sellTime5, '%H:%M').strftime('%H:%M') }} {% endif %} ss_prog5_charge: friendly_name: "SS Prog5 Charge" value_template: > {% set time5on = state_attr('sensor.sunsynk_settings', 'time5on') %} {{ 0 if time5on == 'false' else 1 }} ss_prog6_time: friendly_name: "SS Prog6 Time" value_template: > {% set sellTime6 = state_attr('sensor.sunsynk_settings', 'sellTime6') %} {% if sellTime6 %} {{ strptime(sellTime6, '%H:%M').strftime('%H:%M') }} {% endif %} ss_prog6_charge: friendly_name: "SS Prog6 Charge" value_template: > {% set time6on = state_attr('sensor.sunsynk_settings', 'time6on') %} {{ 0 if time6on == 'false' else 1 }}
June 5, 20233 yr Hi Folks, So I've recently put a Sunsynk inverter in and got my pi out of the drawer this weekend and started with home assistant. I'm having an issue with login to my sunsync account and node-red is showing "account or password error" however using the api.sunsynk.net with those login credentials works on a web browser but not in the node-red flow. I'm new to this but I've been following the instructions on this thread and watched the video scoobs did of it. I'm in the correct region and have the correct flow json file etc. Anyone got any advice for me
June 5, 20233 yr @slipx Just noticed this and was wondering if this is correct, didn't it say floating on previous versions or did you opt to change it to show 0min instead? Just an observation.
June 5, 20233 yr It will change to floating if the current is between -2 and 2 amps and the battery charge is above or equal 99. Your battery current is -9.2 which is the reason it fails the condition
June 5, 20233 yr On 2023/06/03 at 6:16 PM, slipx said: I'm using ESHome. Its my sensor that reports battery power. For E-Linter it would be sensor.sunsynk_battery_power_190 or equivalent. BTW this is going to be added to the card soon. Here is a sneak peak. 70% is SOC for the current timeslot. The plug next to the "Timer On" text indicates if Grid Charge is enabled for that slot. The Battery message will update as per the logic in your card Does the SOC only work when grid charge enabled? Attribute shutdown_soc seems to be overriding mine
June 5, 20233 yr Not sure I fully understand the question but If the grid is connected it uses the time-slot SOC for calculations. If the grid is disconnected it used shutdown_soc or 100% depending on state. The time-slot SOC should always be reported next to current battery SOC
June 5, 20233 yr 32 minutes ago, slipx said: Not sure I fully understand the question but If the grid is connected it uses the time-slot SOC for calculations. If the grid is disconnected it used shutdown_soc or 100% depending on state. The time-slot SOC should always be reported next to current battery SOC Figured this out, was an issue on my timer config in HA. This is resolved Sorry didn't explain myself correctly. Rather then showing the current Time slow SOC, it uses the shutdown_soc. I don't use grid charge on my timer. Changing the value of shutdown_soc instead of the current Time SOC My Time 4 is 8am until 8 pm (time 5) with 100% SOC, so I'm in CAP4 which is correctly reflected in the attributes. I have this mapped to sensor.ss_prog4_capacity Edited June 5, 20233 yr by spotity Solved
June 5, 20233 yr Hi! Having a look at this integration. Is there any way to speed up the data and make it real-time?
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.