Skip to content
View in the app

A better way to browse. Learn more.

Power Forum - Renewable Energy Discussion

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Home Assistant Sunsynk Power Flow Card and Dashboard

Featured Replies

3 hours ago, slipx said:

I have 3x5.32kWh batteries but the inverter sees this as 1 virtual battery. I assume the guys who want multiple batteries are running the bigger inverters that have two physical battery inputs or maybe reading data from the BMS directly?

Yeah... I'm totally happy with 1 battery icon that represents all 5 as it gives me visibility of total battery storage available.

I think your assumption is correct :)

 

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

Top Posters In This Topic

Most Popular Posts

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

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

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

Posted Images

I can dream, can't I?🤪

Basically, the big green block represents the pack info, as generated by the inverter (holistic view), with a Nav. path the graphs. The SOC%, time to full etc, stays below that. Data for each battery displayed inside the battery. 

 

Then instead of the 44% info to the right, display each bank's cell delta voltage difference. (I ran out of drawing skills) - not a biggy, as each batteries' navigation path can take one to a more detail summary/graph/info page.CaptureSSCard4batt.png.f2028ad0c0c0a3e4310157680cc67597.png

 

BTW, I have a USB/RS232 cable direct from the master battery to my HA server to collect all the batteries entities, so I have them all available. Fortunately, my batteries have Pace BMS, which does make life a little bit easier to get the info into HA.

3 hours ago, Sidewinder said:

I can dream, can't I?🤪

Basically, the big green block represents the pack info, as generated by the inverter (holistic view), with a Nav. path the graphs. The SOC%, time to full etc, stays below that. Data for each battery displayed inside the battery. 

 

Then instead of the 44% info to the right, display each bank's cell delta voltage difference. (I ran out of drawing skills) - not a biggy, as each batteries' navigation path can take one to a more detail summary/graph/info page.CaptureSSCard4batt.png.f2028ad0c0c0a3e4310157680cc67597.png

 

BTW, I have a USB/RS232 cable direct from the master battery to my HA server to collect all the batteries entities, so I have them all available. Fortunately, my batteries have Pace BMS, which does make life a little bit easier to get the info into HA.

Sorry to hijack your request but I've also got such a cable so would love to pull the info from my Greenrich batts.
Any input would greatly be appreciated :)

 

  • Author
18 hours ago, Sidewinder said:

I can dream, can't I?🤪

Basically, the big green block represents the pack info, as generated by the inverter (holistic view), with a Nav. path the graphs. The SOC%, time to full etc, stays below that. Data for each battery displayed inside the battery. 

 

Then instead of the 44% info to the right, display each bank's cell delta voltage difference. (I ran out of drawing skills) - not a biggy, as each batteries' navigation path can take one to a more detail summary/graph/info page.CaptureSSCard4batt.png.f2028ad0c0c0a3e4310157680cc67597.png

 

BTW, I have a USB/RS232 cable direct from the master battery to my HA server to collect all the batteries entities, so I have them all available. Fortunately, my batteries have Pace BMS, which does make life a little bit easier to get the info into HA.

OK so the runtime and charge text would only be for the "virtual" battery which is reported by the inverter. Then each individual battery voltage, current and power you read directly from the BMS?

Maybe there should be an option for different battery displays i.e.

Option 1 - 1 virtual battery (default)

Option 2- 2 virtual batteries (for larger inverters that support multiple inputs)

Option 3 - 1 virtual battery, but display individual battery stats from BMS ( as per your example above)

 

 

Edited by slipx

@slipx

I think those options should cover most use cases, with option 1 being in the majority, with a few takers for option 3, like me.

Not a lot of people can/know how to read the data directly from each battery. I was just lucky, but will be testing battery stats collection on a system with 4 Waco batteries. Not a lot of info available, still looking...but difficult to test, as I don't know someone in Gauteng with Waco's. 

Hi @slipx,

Been playing around with your latest version (

Here is what I have tried sofar:

Using my BMS's own references in the Entities for Battery 1 & 2, battery 1 goes "offline" - or red in my case, whereas Battery 2 is ok. (apart from the power value, but that is a HA template issue)image.png.8faf8ed5dc3dcba5a5e7463bf7f0d097.png

If I look at the entities tab, I see that Battery 1's references refers to the Virtual Battery bank entities, instead of "Battery 1" whereas Battery 2's references all include a "2" reference. Is this understanding c correct. 

My BMS entities looks like this "Generic Lithium Pack X parameter" , where X is the pack number, and parameter is all the normal battery related stuff, like Current, Voltage, State of Charge, Cell y voltage etc.

 image.png.1b4435eccab83566bb100124a2f97aee.png

Weird though, that Bank 1's capacity now reports in kWh, while the right on reports Wh.

When I revert back to virtual battery settings, this is the result:

image.png.43ef75760cb31cf528f4fd1c5e20d5d1.png

Looks better, but the values info of the battery 1 is the virtual info. I sure that was not your original intension.

  • Author

At the moment the card treats the two batteries independent of each other. (You can use virtual or individual battery data) Obviously you will only be able to monitor two batteries when using individual battery data. You can ignore the entity labels. if you provide power, voltage, current, shutdown soc, and total battery energy it should display and calculate the correct charge and runtime per battery (virtual or physical). I cant see why inputting the individual BMS readings would not work. The sensors would need to provide HA with the correct state information i.e. unit of measurement, entity type etc. You can check that in the developer tools.  When I was testing this I used two virtual batteries from two separate inverters and it was displayed correctly. The card does not know that the sensor is from the actual battery or the virtual battery provided by the inverter. It just needs to be in the expected format. 

@Sidewinder out of curiosity are you using this https://github.com/Tertiush/bmspace to get the Pace BMS data?  Been looking into this to perhaps get more data regarding the batteries into HA vs just the normal combined info pulled from the Inverter. 

If so does it also give the battery cycle data as well? (Tracking mine with some math calculations based on consumption etc, but if the data can be pulled in this will make life much easier)  The deployment of this for me is not mission critical at the moment but if this can give me more info regarding each battery state individually that I'm running this might be worth the rabbit hole to get this up and running.

@slipx,

Thanks for the quick reply.

I tested my calcs, as my BMS does not have a power entity, and it seems to calculate correctly.

I will needs to dig a bit deeper into HA. The example below was with battery max charge current = 35A

image.png.a1f1abcdebddff16a5eb737ccf81930d.png

Excellent Thanks @Sidewinder

Might just be worth the effort then just need to figure out how to get a RS232 connected between the battery pack and Server over a 30meter cat 5e.  I'm using that for the RS485 to the inverter and can pair off a twisted pair to a RS232 but I don't think the RS232 can carry signal that far (well according to chatGPT that is) so might need to go with a EPS32 bridge setup/RS232 to RS485 adapters on both ends or something.  Time to go some more research and digging down this rabbit hole 😄

I'm now part of the I'd like more batteries as an option club...

Digging the concept from Sidewinder as I'm runng two instances of the card.  One on my main dashboard in lite mode so the single virtual battery here is fine and then a panel card dedicated to just my solar setup and there I run the full card so thinking I could set the virtual battery as the default on the lite and then the 4 indipendant batteries as on the full card if this happens down the road.

In the mean time I've dumped the BMS data to a dedicated page for just the batteries.

image.thumb.png.4dca0440ceedb0a3603afb6c624e8fec.png

 

Edited by -cK-

  • 5 weeks later...
  • Author

V6.3.0

What's Changed

- feat: display up to 6 MPPT's on the lite or compact card when `wide` view is enabled closes #586

spacer.png


**Full Changelog**: https://github.com/slipx06/sunsynk-power-flow-card/compare/v6.2.2...v6.3.0

V6.4.0

What's Changed

- feat:  you can now assign entities to your essential loads that make the icons clickable. Useful if you want to turn a load on or off from the card. Set the entities using the load1_switch, load2_switch, load3_switch etc. attributes. 

spacer.png
**Full Changelog**: https://github.com/slipx06/sunsynk-power-flow-card/compare/v6.3.0...v6.4.0

15 hours ago, slipx said:

V6.3.0

What's Changed

- feat: display up to 6 MPPT's on the lite or compact card when `wide` view is enabled closes #586

spacer.png


**Full Changelog**: https://github.com/slipx06/sunsynk-power-flow-card/compare/v6.2.2...v6.3.0

V6.4.0

What's Changed

- feat:  you can now assign entities to your essential loads that make the icons clickable. Useful if you want to turn a load on or off from the card. Set the entities using the load1_switch, load2_switch, load3_switch etc. attributes. 

spacer.png
**Full Changelog**: https://github.com/slipx06/sunsynk-power-flow-card/compare/v6.3.0...v6.4.0

Hey @slipx

Compliments of the New Year, I hope you're well!

I've tried using the icon switch functionality mentioned above but it doesn't do anything. The icons remain un-clickable.

Running the latest version of HA and all other frontend cards etc are up to date. I've also tried different browsers and clearning cache etc but still the same result.

Here's the list of entities added under the entities section:

  load1_switch: switch.pool_pump
  load2_switch: switch.main_geyser
  load3_switch: switch.mns_geyser
  load4_switch: switch.kitchen_geyser

Any help would greatly be appreciated :)

On 2024/12/12 at 11:56 PM, -cK- said:

I'm now part of the I'd like more batteries as an option club...

Digging the concept from Sidewinder as I'm runng two instances of the card.  One on my main dashboard in lite mode so the single virtual battery here is fine and then a panel card dedicated to just my solar setup and there I run the full card so thinking I could set the virtual battery as the default on the lite and then the 4 indipendant batteries as on the full card if this happens down the road.

In the mean time I've dumped the BMS data to a dedicated page for just the batteries.

image.thumb.png.4dca0440ceedb0a3603afb6c624e8fec.png

 

This is awesome..
Would you mind sharing the hardware used to pull this info from the batteries?

I have a single RS232 cable plus converter to USB and can access each battery's data via the Greenrich app on my Windows PC but if you could share how you managed to connect them all so that they push the data in HA, that would be awesome.

Assuming it's all connected to an ESP32 or something but a wiring diagrim plus your config would be awesome

@Muttley what BMs system does your battery use?

My batteries uses the Pace BMS system so I'm using this integration to pull it to HA:

https://github.com/Tertiush/bmspace

If it uses something else you might need to look if it isn't perhaps on this list of other integrations:

https://powerforum.co.za/topic/27424-reading-battery-data-into-esphome/

My connectioin setup is using a EPS32 but that is just as a WiFi link from the RS232 to the server as the server is to far from the Batteries so the integration I use have the option of direct serial(usb) or IP address. 

image.thumb.png.103789ddeadf25d195757b96d6329bdd.png

With the Pace BMS you just hook it to the master battery setup the integration and it pulls all the battery entities into MQTT for all the batteries connected to the master.

My wiring setup you can see over here:

https://powerforum.co.za/topic/16639-revov-r100-rj232-pin-diagram/#findComment-213257

As for the card config this is the config for one of the batteries, you will just need to adjust accoding to your sensor naming.

type: vertical-stack
cards:
  - type: custom:stack-in-card
    keep:
      margin: false
      box_shadow: false
      background: false
    cards:
      - type: grid
        square: false
        columns: 1
        cards:
          - type: markdown
            content: >-
              <center><font size=4><b>Battery 1:&nbsp; {% if
              states('sensor.generic_lithium_pack_1_current') | float < 0 %}
              <font color="orange">Discharging</font>  {% elif
              states('sensor.generic_lithium_pack_1_current') | float > 0 %}  
              <font color="#3090C7">Charging</font>  {% else %}  <font
              color="#18f50c">Floating</font> {% endif %}  <br>
    card_mod:
      style: |
        ha-card {
           box-shadow: none;
           background: rgba(0,0,0,0);
           border: white solid 1px !important;
        }
  - type: vertical-stack
    cards:
      - type: horizontal-stack
        cards:
          - type: vertical-stack
            cards:
              - type: vertical-stack
                cards:
                  - type: entity
                    card_mod:
                      style: |
                        ha-card {
                           box-shadow: none;
                           background: rgba(0,0,0,0);
                           border: white solid 1px !important;
                        }
                    entity: sensor.generic_lithium_pack_1_voltage
                    name: Total voltage
                    icon: none
              - type: entities
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
                entities:
                  - entity: sensor.generic_lithium_pack_1_full_capacity
                    name: Capacity
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_remaining_capacity
                    name: Remaining
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_cell_max_volt_diff
                    name: Max Volt Diff
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_balancing1
                    name: Balancing
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
          - type: vertical-stack
            cards:
              - type: vertical-stack
                cards:
                  - type: entity
                    entity: sensor.generic_lithium_pack_1_current
                    name: Total Current
                    icon: none
                    card_mod:
                      style: |
                        ha-card {
                           box-shadow: none;
                           background: rgba(0,0,0,0);
                           border: white solid 1px !important;
                        }
              - type: entities
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
                entities:
                  - entity: sensor.generic_lithium_pack_1_state_of_health
                    name: SOH
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_state_of_charge
                    name: SOC
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_cycles
                    name: Cycles
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_balancing2
                    name: Balancing
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
      - square: false
        type: grid
        cards:
          - square: false
            type: grid
            cards:
              - type: markdown
                content: |2-
                   <center><font color="#18f50c"><font size=3>Cell 01-04&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_1') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_1') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_1') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_1') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_1') }} °C {% endif %}    
                            <br>
                            Cell 05-08&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_2') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_2') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_2') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_2') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_2') }} °C {% endif %} 
                            <br>
                            NOS Temp&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_5') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_5') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_5') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_5') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_5') }} °C {% endif %}   
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-
                   <center><font color="#18f50c"><font size=3>Cell 09-12&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_3') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_3') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_3') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_3') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_3') }} °C {% endif %}    
                            <br>
                            Cell 13-16&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_4') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_4') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_4') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_2') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_4') }} °C {% endif %} 
                            <br>
                            ENV Temp&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_6') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_6') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_6') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_6') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_6') }} °C {% endif %}   
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
            columns: 2
          - square: false
            type: grid
            cards:
              - type: markdown
                content: |2-
                   <center><font color="#18f50c"><font size=3>01.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_1_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_1_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_1_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_1_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_1_voltage') }} mV {% endif %}    
                            <br>
                            02.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_2_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_2_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_2_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_2_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_2_voltage') }} mV {% endif %}    
                            <br>
                            03.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_3_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_3_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_3_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_3_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_3_voltage') }} mV {% endif %}    
                            <br>
                            04.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_4_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_4_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_4_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_4_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_4_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-

                            <center><font color="#18f50c"><font size=3>09.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_9_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_9_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_9_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_9_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_9_voltage') }} mV {% endif %}    
                            <br>
                            10.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_10_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_10_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_10_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_10_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_10_voltage') }} mV {% endif %}    
                            <br>
                            11.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_11_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_11_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_11_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_11_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_11_voltage') }} mV {% endif %}    
                            <br>
                            12.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_12_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_12_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_12_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_12_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_12_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-
                            <center><font color="#18f50c"><font size=3>05.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_5_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_5_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_5_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_5_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_5_voltage') }} mV {% endif %}    
                            <br>
                            06.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_6_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_6_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_6_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_6_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_6_voltage') }} mV {% endif %}    
                            <br>
                            07.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_7_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_7_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_7_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_7_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_7_voltage') }} mV {% endif %}    
                            <br>
                            08.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_8_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_8_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_8_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_8_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_8_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-
                            <center><font color="#18f50c"><font size=3>13.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_13_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_13_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_13_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_13_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_13_voltage') }} mV {% endif %}    
                            <br>
                            14.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_14_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_14_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_14_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_14_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_14_voltage') }} mV {% endif %}    
                            <br>
                            15.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_15_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_15_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_15_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_15_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_15_voltage') }} mV {% endif %}    
                            <br>
                            16.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_16_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_16_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_16_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_16_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_16_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
            columns: 2
        columns: 1
  - type: custom:stack-in-card
    keep:
      margin: false
      box_shadow: false
      background: false
    cards:
      - type: grid
        square: false
        columns: 1
        cards:
          - type: markdown
            content: >-
              <center><font size=4><b>Warning:<br> <font
              color="orange">{{states('sensor.generic_lithium_pack_1_warnings')}}
    card_mod:
      style: |
        ha-card {
           box-shadow: none;
           background: rgba(0,0,0,0);
           border: white solid 1px !important;
        }
grid_options:
  columns: full
view_layout:
  column: 1

Just want to credit Dimumal for this card as I found this over on the HA community and tweaked it to my liking:

https://community.home-assistant.io/t/jk-bms-integration/604035/8

Edited by -cK-

  • Author
1 hour ago, Muttley said:

Hey @slipx

Compliments of the New Year, I hope you're well!

I've tried using the icon switch functionality mentioned above but it doesn't do anything. The icons remain un-clickable.

Running the latest version of HA and all other frontend cards etc are up to date. I've also tried different browsers and clearning cache etc but still the same result.

Here's the list of entities added under the entities section:

  load1_switch: switch.pool_pump
  load2_switch: switch.main_geyser
  load3_switch: switch.mns_geyser
  load4_switch: switch.kitchen_geyser

Any help would greatly be appreciated :)

Hi. Those should be added to the load section

load:
  show_aux: false
  off_colour: grey
  show_daily: true
  animation_speed: 8
  max_power: 8000
  load1_name: Geyser
  load1_switch: switch.geyser
  load1_icon: sensor.template_mdi
  auto_scale: true
  path_threshold: 90

etc

5 hours ago, -cK- said:

@Muttley what BMs system does your battery use?

My batteries uses the Pace BMS system so I'm using this integration to pull it to HA:

https://github.com/Tertiush/bmspace

If it uses something else you might need to look if it isn't perhaps on this list of other integrations:

https://powerforum.co.za/topic/27424-reading-battery-data-into-esphome/

My connectioin setup is using a EPS32 but that is just as a WiFi link from the RS232 to the server as the server is to far from the Batteries so the integration I use have the option of direct serial(usb) or IP address. 

image.thumb.png.103789ddeadf25d195757b96d6329bdd.png

With the Pace BMS you just hook it to the master battery setup the integration and it pulls all the battery entities into MQTT for all the batteries connected to the master.

My wiring setup you can see over here:

https://powerforum.co.za/topic/16639-revov-r100-rj232-pin-diagram/#findComment-213257

As for the card config this is the config for one of the batteries, you will just need to adjust accoding to your sensor naming.

type: vertical-stack
cards:
  - type: custom:stack-in-card
    keep:
      margin: false
      box_shadow: false
      background: false
    cards:
      - type: grid
        square: false
        columns: 1
        cards:
          - type: markdown
            content: >-
              <center><font size=4><b>Battery 1:&nbsp; {% if
              states('sensor.generic_lithium_pack_1_current') | float < 0 %}
              <font color="orange">Discharging</font>  {% elif
              states('sensor.generic_lithium_pack_1_current') | float > 0 %}  
              <font color="#3090C7">Charging</font>  {% else %}  <font
              color="#18f50c">Floating</font> {% endif %}  <br>
    card_mod:
      style: |
        ha-card {
           box-shadow: none;
           background: rgba(0,0,0,0);
           border: white solid 1px !important;
        }
  - type: vertical-stack
    cards:
      - type: horizontal-stack
        cards:
          - type: vertical-stack
            cards:
              - type: vertical-stack
                cards:
                  - type: entity
                    card_mod:
                      style: |
                        ha-card {
                           box-shadow: none;
                           background: rgba(0,0,0,0);
                           border: white solid 1px !important;
                        }
                    entity: sensor.generic_lithium_pack_1_voltage
                    name: Total voltage
                    icon: none
              - type: entities
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
                entities:
                  - entity: sensor.generic_lithium_pack_1_full_capacity
                    name: Capacity
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_remaining_capacity
                    name: Remaining
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_cell_max_volt_diff
                    name: Max Volt Diff
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_balancing1
                    name: Balancing
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
          - type: vertical-stack
            cards:
              - type: vertical-stack
                cards:
                  - type: entity
                    entity: sensor.generic_lithium_pack_1_current
                    name: Total Current
                    icon: none
                    card_mod:
                      style: |
                        ha-card {
                           box-shadow: none;
                           background: rgba(0,0,0,0);
                           border: white solid 1px !important;
                        }
              - type: entities
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
                entities:
                  - entity: sensor.generic_lithium_pack_1_state_of_health
                    name: SOH
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_state_of_charge
                    name: SOC
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_cycles
                    name: Cycles
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
                  - entity: sensor.generic_lithium_pack_1_balancing2
                    name: Balancing
                    card_mod:
                      style:
                        hui-generic-entity-row:
                          $: |
                            state-badge {
                              display: none;
                            }
                            .info {
                              margin-left:0 !important;
                              Color: white;
                            }
      - square: false
        type: grid
        cards:
          - square: false
            type: grid
            cards:
              - type: markdown
                content: |2-
                   <center><font color="#18f50c"><font size=3>Cell 01-04&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_1') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_1') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_1') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_1') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_1') }} °C {% endif %}    
                            <br>
                            Cell 05-08&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_2') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_2') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_2') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_2') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_2') }} °C {% endif %} 
                            <br>
                            NOS Temp&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_5') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_5') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_5') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_5') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_5') }} °C {% endif %}   
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-
                   <center><font color="#18f50c"><font size=3>Cell 09-12&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_3') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_3') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_3') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_3') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_3') }} °C {% endif %}    
                            <br>
                            Cell 13-16&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_4') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_4') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_4') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_2') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_4') }} °C {% endif %} 
                            <br>
                            ENV Temp&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_temperature_6') > states('input_number.bms_max_batt_temp') %}  <font
                            color="orange">{{ states('sensor.generic_lithium_pack_1_temperature_6') }}
                            °C</font> {% elif states('sensor.generic_lithium_pack_1_temperature_6') < states('input_number.bms_min_batt_temp') %}  <font color="#3090C7">{{
                            states('sensor.generic_lithium_pack_1_temperature_6') }} °C</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_temperature_6') }} °C {% endif %}   
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
            columns: 2
          - square: false
            type: grid
            cards:
              - type: markdown
                content: |2-
                   <center><font color="#18f50c"><font size=3>01.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_1_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_1_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_1_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_1_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_1_voltage') }} mV {% endif %}    
                            <br>
                            02.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_2_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_2_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_2_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_2_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_2_voltage') }} mV {% endif %}    
                            <br>
                            03.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_3_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_3_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_3_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_3_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_3_voltage') }} mV {% endif %}    
                            <br>
                            04.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_4_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_4_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_4_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_4_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_4_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-

                            <center><font color="#18f50c"><font size=3>09.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_9_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_9_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_9_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_9_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_9_voltage') }} mV {% endif %}    
                            <br>
                            10.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_10_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_10_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_10_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_10_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_10_voltage') }} mV {% endif %}    
                            <br>
                            11.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_11_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_11_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_11_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_11_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_11_voltage') }} mV {% endif %}    
                            <br>
                            12.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_12_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_12_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_12_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_12_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_12_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-
                            <center><font color="#18f50c"><font size=3>05.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_5_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_5_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_5_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_5_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_5_voltage') }} mV {% endif %}    
                            <br>
                            06.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_6_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_6_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_6_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_6_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_6_voltage') }} mV {% endif %}    
                            <br>
                            07.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_7_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_7_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_7_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_7_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_7_voltage') }} mV {% endif %}    
                            <br>
                            08.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_8_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_8_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_8_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_8_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_8_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
              - type: markdown
                content: |2-
                            <center><font color="#18f50c"><font size=3>13.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_13_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_13_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_13_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_13_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_13_voltage') }} mV {% endif %}    
                            <br>
                            14.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_14_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_14_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_14_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_14_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_14_voltage') }} mV {% endif %}    
                            <br>
                            15.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_15_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_15_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_15_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_15_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_15_voltage') }} mV {% endif %}    
                            <br>
                            16.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {% if
                            states('sensor.generic_lithium_pack_1_cell_16_voltage') > states('input_number.bms_max_voltage_cell') %}  <font
                            color="#3090C7">{{ states('sensor.generic_lithium_pack_1_cell_16_voltage') }}
                            mV</font> {% elif states('sensor.generic_lithium_pack_1_cell_16_voltage') < states('input_number.bms_min_voltage_cell') %}  <font color="orange">{{
                            states('sensor.generic_lithium_pack_1_cell_16_voltage') }} mV</font> {% else %}
                            {{ states('sensor.generic_lithium_pack_1_cell_16_voltage') }} mV {% endif %}    
                            <br>
                card_mod:
                  style: |
                    ha-card {
                       box-shadow: none;
                       background: rgba(0,0,0,0);
                       border: white solid 1px !important;
                    }
            columns: 2
        columns: 1
  - type: custom:stack-in-card
    keep:
      margin: false
      box_shadow: false
      background: false
    cards:
      - type: grid
        square: false
        columns: 1
        cards:
          - type: markdown
            content: >-
              <center><font size=4><b>Warning:<br> <font
              color="orange">{{states('sensor.generic_lithium_pack_1_warnings')}}
    card_mod:
      style: |
        ha-card {
           box-shadow: none;
           background: rgba(0,0,0,0);
           border: white solid 1px !important;
        }
grid_options:
  columns: full
view_layout:
  column: 1

Just want to credit Dimumal for this card as I found this over on the HA community and tweaked it to my liking:

https://community.home-assistant.io/t/jk-bms-integration/604035/8

Wowzers - thanks for all the info. I've got Greenrich batteries and not sure of the BMS software but I see that the BMSPace addon supports another model of Greenrich batts so hopefully I'll be ok.

Weekend project loading 😍

 

Thanks once again!

5 hours ago, slipx said:

Hi. Those should be added to the load section

load:
  show_aux: false
  off_colour: grey
  show_daily: true
  animation_speed: 8
  max_power: 8000
  load1_name: Geyser
  load1_switch: switch.geyser
  load1_icon: sensor.template_mdi
  auto_scale: true
  path_threshold: 90

etc

Thanks o grand master :)

 

@slipx I was wondering could an upper/max threshold be added to the load side of things?  I know there is the option to grey it out or hide it but it might be nice to get a bit of a visual representation when hitting your limits on devices or overall load.

E.G. in my case something like this:

Daily load below 5000 cyan, above 5000 red

Individual loads below 20 grey above 20 & below 2000 cyan above 2000 red (not sure if this would be possible as a per load option or just as global for all addition loads setting 🤔)

So in effect:

Grey = Off

Cyan = In use

Red = Loads to high/something is wrong

Not sure if this is something that would be possible or in the scope of the card just throwing it out there as a suggestion.

Ignore the 💩 paint skills but something like this.

image.png.e303ac1589081d37059e0a35d69d9363.png

Thanks

 

Edited by -cK-

@slipx and @kellerza Great work on this, I have previously only used thingsboard and nodered but now I am almost convinced HA is easier after all the new HA updates.
I have one small query/issue about the readings from the inverter that are used on the flows.
It looks like you have deprecated the dc and ac temperature readings?
Am I correct with that statement or am I maybe doing something wrong my side?
Sunsynk/Deye Inverter Add-on (multi) - Current version: 0.8.2

and these are the measurements I am getting (Missing The Temperatures)
 

07:09:07 INFO    Read every (inverter 1)
+-----+----------------------------------------------------------------------------------+
|  s  |                                     Sensors                                      |
+-----+----------------------------------------------------------------------------------+
|  3  |      essential_power, grid_l2_power, grid_power, load_l1_power, pv2_power,       |
|     |        load_l2_power, pv1_power, rated_power, load_power, grid_ct_power,         |
|     |          inverter_power, non_essential_power, aux_power, battery_power           |
|  5  |    prog6_capacity, grid_charge_battery_current, prog3_capacity, prog6_power,     |
|     |      prog5_capacity, load_limit, prog1_power, prog4_power, prog4_capacity,       |
|     | prog1_capacity, prog4_charge, prog2_power, prog1_time, solar_export, prog5_time, |
|     |  grid_charge_enabled, prog3_charge, battery_max_charge_current, priority_load,   |
|     |           prog2_time, battery_low_capacity, prog6_charge, prog3_time,            |
|     | battery_restart_capacity, prog2_capacity, use_timer, device_type, prog2_charge,  |
|     |               prog5_power, prog3_power, prog4_time, prog5_charge,                |
|     |     battery_max_discharge_current, prog1_charge, battery_shutdown_capacity,      |
|     |                                    prog6_time                                    |
|  15 |       grid_voltage, battery_current, pv1_voltage, serial, grid_frequency,        |
|     |      battery_voltage, protocol, overall_state, grid_connected, pv2_voltage,      |
|     |     battery_soc, pv1_current, pv2_current, inverter_current, load_frequency      |
|  60 |                                    date_time                                     |
| 300 | total_battery_charge, total_battery_discharge, day_load_energy, total_pv_energy, |
|     |     day_battery_charge, total_grid_import, day_grid_export, day_grid_import,     |
|     |             day_pv_energy, total_grid_export, day_battery_discharge              |
+-----+----------------------------------------------------------------------------------+
07:09:07 INFO    Report every (inverter 1)
+-----+----------------------------------------------------------------------------------+
|  s  |                                     Sensors                                      |
+-----+----------------------------------------------------------------------------------+
|  60 |      essential_power, grid_l2_power, grid_power, load_l1_power, pv2_power,       |
|     |       load_l2_power, pv1_power, load_power, grid_ct_power, inverter_power,       |
|     |             non_essential_power, date_time, aux_power, battery_power             |
| 300 |   grid_voltage, prog6_capacity, grid_charge_battery_current, day_load_energy,    |
|     |   prog3_capacity, prog6_power, total_grid_import, prog5_capacity, load_limit,    |
|     | prog1_power, prog4_power, battery_current, total_battery_discharge, pv1_voltage, |
|     |        prog4_capacity, total_pv_energy, day_grid_export, prog1_capacity,         |
|     |     day_grid_import, prog4_charge, battery_soc, day_pv_energy, prog2_power,      |
|     |     prog1_time, solar_export, prog5_time, grid_charge_enabled, prog3_charge,     |
|     |     battery_max_charge_current, battery_voltage, priority_load, prog2_time,      |
|     |            pv2_voltage, pv1_current, prog6_charge, total_grid_export,            |
|     |      day_battery_discharge, pv2_current, battery_low_capacity, prog3_time,       |
|     | load_frequency, battery_restart_capacity, prog2_capacity, total_battery_charge,  |
|     |    use_timer, prog2_charge, prog5_power, grid_frequency, day_battery_charge,     |
|     |      prog3_power, prog4_time, overall_state, grid_connected, prog5_charge,       |
|     |     battery_max_discharge_current, prog1_charge, battery_shutdown_capacity,      |
|     |                           inverter_current, prog6_time                           |
+-----+----------------------------------------------------------------------------------+

 

7 minutes ago, -cK- said:

Have you added them in the sensors section of the configuration?  This is where I added if to mine to get that additional sensor data.

🙃 I am new to HA so have no idea where that is inside HA... Maybe give me a hint in the right direction :)

Nevermind I found it :)
Thanks for pointing me in the right direction, gonna test quick and see if those readings are coming in :)

Edited by WannabeSolarSparky

  • Author
On 2025/01/15 at 10:16 AM, -cK- said:

@slipx I was wondering could an upper/max threshold be added to the load side of things?  I know there is the option to grey it out or hide it but it might be nice to get a bit of a visual representation when hitting your limits on devices or overall load.

E.G. in my case something like this:

Daily load below 5000 cyan, above 5000 red

Individual loads below 20 grey above 20 & below 2000 cyan above 2000 red (not sure if this would be possible as a per load option or just as global for all addition loads setting 🤔)

So in effect:

Grey = Off

Cyan = In use

Red = Loads to high/something is wrong

Not sure if this is something that would be possible or in the scope of the card just throwing it out there as a suggestion.

Ignore the 💩 paint skills but something like this.

image.png.e303ac1589081d37059e0a35d69d9363.png

Thanks

 

Hi. Its a good idea but setting this as a global variable (the easiest option) may not be that useful as I assume you would want to set this per load. I'll add it to the ideas list 😃

 

OK not so hard to implement

 

image.thumb.png.6c9f98149ad77ec81919f1fd680ee65c.png

Edited by slipx

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.