Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- title: Batterij Monitor
- views:
- - type: sections
- max_columns: 3
- title: BMS Overzicht
- path: bms-overzicht
- icon: mdi:battery-charging
- dense_section_placement: false
- sections:
- - type: grid
- column_span: 3
- visibility:
- - condition: screen
- media_query: '(min-width: 1280px)'
- cards:
- - type: custom:mushroom-template-card
- primary: Batterijsysteem
- secondary: >-
- {% set soc = states('sensor.inverter_battery') %}{% set cc =
- states('sensor.coulomb_soc_totaal') %}{% set ns = namespace(n=0)
- %}{% for i in range(1, 7) %}{% if
- is_number(states('sensor.pace_bms_bms' ~ i ~ '_soc')) %}{% set
- ns.n = ns.n + 1 %}{% endif %}{% endfor %}Deye {{ (soc | float |
- round(0) | int) if is_number(soc) else '–' }}% · Coulomb {{ (cc |
- float | round(0) | int) if is_number(cc) else '–' }}% · {{ ns.n
- }}/6 online
- icon: >-
- {% set s = states('sensor.inverter_battery') | float(0) %}{% if s
- > 80 %}mdi:battery{% elif s > 60 %}mdi:battery-80{% elif s > 40
- %}mdi:battery-60{% elif s > 20 %}mdi:battery-40{% else
- %}mdi:battery-alert{% endif %}
- badge_icon: |-
- {% set ns = namespace(f=false) %}
- {% for i in range(1, 7) %}
- {% if states('sensor.pace_bms_bms' ~ i ~ '_fault_status') not in ['', 'unavailable', 'unknown', 'none'] %}{% set ns.f = true %}{% endif %}
- {% endfor %}
- {% if ns.f %}mdi:alert-circle{% endif %}
- badge_color: red
- color: >-
- {% set s = states('sensor.inverter_battery') | float(0) %}{% if s
- >= 74.9 %}green{% elif s >= 50 %}amber{% elif s >= 30 %}orange{%
- else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 18
- rows: 1
- - type: custom:mushroom-template-card
- primary: Totaal vermogen
- secondary: |-
- {% set ns = namespace(p=0) %}
- {% for i in range(1, 7) %}
- {% set ns.p = ns.p + states('sensor.pace_bms_bms' ~ i ~ '_power') | float(0) %}
- {% endfor %}
- {{ ns.p | round(0) }} W
- icon: mdi:lightning-bolt
- icon_color: >-
- {% set ns = namespace(p=0) %}
- {% for i in range(1, 7) %}
- {% set ns.p = ns.p + states('sensor.pace_bms_bms' ~ i ~ '_power') | float(0) %}
- {% endfor %}
- {% if ns.p > 0 %}green{% elif ns.p < 0 %}orange{% else %}grey{%
- endif %}
- grid_options:
- columns: 18
- rows: 1
- - type: grid
- visibility:
- - condition: screen
- media_query: '(min-width: 0px) and (max-width: 1279px)'
- cards:
- - type: custom:mushroom-template-card
- primary: Batterijsysteem
- secondary: >-
- {% set soc = states('sensor.inverter_battery') %}{% set cc =
- states('sensor.coulomb_soc_totaal') %}{% set ns = namespace(n=0)
- %}{% for i in range(1, 7) %}{% if
- is_number(states('sensor.pace_bms_bms' ~ i ~ '_soc')) %}{% set
- ns.n = ns.n + 1 %}{% endif %}{% endfor %}Deye {{ (soc | float |
- round(0) | int) if is_number(soc) else '–' }}% · Coulomb {{ (cc |
- float | round(0) | int) if is_number(cc) else '–' }}% · {{ ns.n
- }}/6 online
- icon: >-
- {% set s = states('sensor.inverter_battery') | float(0) %}{% if s
- > 80 %}mdi:battery{% elif s > 60 %}mdi:battery-80{% elif s > 40
- %}mdi:battery-60{% elif s > 20 %}mdi:battery-40{% else
- %}mdi:battery-alert{% endif %}
- badge_icon: |-
- {% set ns = namespace(f=false) %}
- {% for i in range(1, 7) %}
- {% if states('sensor.pace_bms_bms' ~ i ~ '_fault_status') not in ['', 'unavailable', 'unknown', 'none'] %}{% set ns.f = true %}{% endif %}
- {% endfor %}
- {% if ns.f %}mdi:alert-circle{% endif %}
- badge_color: red
- color: >-
- {% set s = states('sensor.inverter_battery') | float(0) %}{% if s
- >= 74.9 %}green{% elif s >= 50 %}amber{% elif s >= 30 %}orange{%
- else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 12
- rows: 1
- - type: custom:mushroom-template-card
- primary: Totaal vermogen
- secondary: |-
- {% set ns = namespace(p=0) %}
- {% for i in range(1, 7) %}
- {% set ns.p = ns.p + states('sensor.pace_bms_bms' ~ i ~ '_power') | float(0) %}
- {% endfor %}
- {{ ns.p | round(0) }} W
- icon: mdi:lightning-bolt
- icon_color: >-
- {% set ns = namespace(p=0) %}
- {% for i in range(1, 7) %}
- {% set ns.p = ns.p + states('sensor.pace_bms_bms' ~ i ~ '_power') | float(0) %}
- {% endfor %}
- {% if ns.p > 0 %}green{% elif ns.p < 0 %}orange{% else %}grey{%
- endif %}
- grid_options:
- columns: 12
- rows: 1
- - type: grid
- column_span: 3
- cards:
- - type: custom:mushroom-template-card
- primary: ACCU 1 (master)
- secondary: >-
- Coulomb {% set c = states('sensor.coulomb_bms1_soc') %}{{ (c |
- float | round(1)) if is_number(c) else '–' }}% (BMS {{
- states('sensor.pace_bms_bms1_soc') | float(0) | round(1) }}%) · {{
- states('sensor.pace_bms_bms1_environment_temperature') | float(0)
- | round(1) }}°C · {{ states('sensor.pace_bms_bms1_system_status')
- }}
- icon: >-
- {% set c = states('sensor.coulomb_bms1_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms1_soc') |
- float(0) %}
- {% if soc >= 95 %}mdi:battery
- {% elif soc >= 85 %}mdi:battery-90
- {% elif soc >= 75 %}mdi:battery-80
- {% elif soc >= 65 %}mdi:battery-70
- {% elif soc >= 55 %}mdi:battery-60
- {% elif soc >= 45 %}mdi:battery-50
- {% elif soc >= 35 %}mdi:battery-40
- {% elif soc >= 25 %}mdi:battery-30
- {% elif soc >= 15 %}mdi:battery-20
- {% elif soc >= 5 %}mdi:battery-10
- {% else %}mdi:battery-alert
- {% endif %}
- badge_icon: >-
- {% if states('sensor.pace_bms_bms1_fault_status') not in ['',
- 'unavailable', 'unknown', 'none'] %}mdi:alert{% endif %}
- badge_color: red
- color: >-
- {% set c = states('sensor.coulomb_bms1_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms1_soc') |
- float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 12
- rows: 1
- tap_action:
- action: navigate
- navigation_path: bms1
- - type: custom:mushroom-template-card
- primary: ACCU 2
- secondary: >-
- Coulomb {% set c = states('sensor.coulomb_bms2_soc') %}{{ (c |
- float | round(1)) if is_number(c) else '–' }}% (BMS {{
- states('sensor.pace_bms_bms2_soc') | float(0) | round(1) }}%) · {{
- states('sensor.pace_bms_bms2_environment_temperature') | float(0)
- | round(1) }}°C · {{ states('sensor.pace_bms_bms2_system_status')
- }}
- icon: >-
- {% set c = states('sensor.coulomb_bms2_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms2_soc') |
- float(0) %}
- {% if soc >= 95 %}mdi:battery
- {% elif soc >= 85 %}mdi:battery-90
- {% elif soc >= 75 %}mdi:battery-80
- {% elif soc >= 65 %}mdi:battery-70
- {% elif soc >= 55 %}mdi:battery-60
- {% elif soc >= 45 %}mdi:battery-50
- {% elif soc >= 35 %}mdi:battery-40
- {% elif soc >= 25 %}mdi:battery-30
- {% elif soc >= 15 %}mdi:battery-20
- {% elif soc >= 5 %}mdi:battery-10
- {% else %}mdi:battery-alert
- {% endif %}
- badge_icon: >-
- {% if states('sensor.pace_bms_bms2_fault_status') not in ['',
- 'unavailable', 'unknown', 'none'] %}mdi:alert{% endif %}
- badge_color: red
- color: >-
- {% set c = states('sensor.coulomb_bms2_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms2_soc') |
- float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 12
- rows: 1
- tap_action:
- action: navigate
- navigation_path: bms2
- - type: custom:mushroom-template-card
- primary: ACCU 3
- secondary: >-
- Coulomb {% set c = states('sensor.coulomb_bms3_soc') %}{{ (c |
- float | round(1)) if is_number(c) else '–' }}% (BMS {{
- states('sensor.pace_bms_bms3_soc') | float(0) | round(1) }}%) · {{
- states('sensor.pace_bms_bms3_environment_temperature') | float(0)
- | round(1) }}°C · {{ states('sensor.pace_bms_bms3_system_status')
- }}
- icon: >-
- {% set c = states('sensor.coulomb_bms3_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms3_soc') |
- float(0) %}
- {% if soc >= 95 %}mdi:battery
- {% elif soc >= 85 %}mdi:battery-90
- {% elif soc >= 75 %}mdi:battery-80
- {% elif soc >= 65 %}mdi:battery-70
- {% elif soc >= 55 %}mdi:battery-60
- {% elif soc >= 45 %}mdi:battery-50
- {% elif soc >= 35 %}mdi:battery-40
- {% elif soc >= 25 %}mdi:battery-30
- {% elif soc >= 15 %}mdi:battery-20
- {% elif soc >= 5 %}mdi:battery-10
- {% else %}mdi:battery-alert
- {% endif %}
- badge_icon: >-
- {% if states('sensor.pace_bms_bms3_fault_status') not in ['',
- 'unavailable', 'unknown', 'none'] %}mdi:alert{% endif %}
- badge_color: red
- color: >-
- {% set c = states('sensor.coulomb_bms3_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms3_soc') |
- float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 12
- rows: 1
- tap_action:
- action: navigate
- navigation_path: bms3
- - type: custom:mushroom-template-card
- primary: ACCU 4
- secondary: >-
- Coulomb {% set c = states('sensor.coulomb_bms4_soc') %}{{ (c |
- float | round(1)) if is_number(c) else '–' }}% (BMS {{
- states('sensor.pace_bms_bms4_soc') | float(0) | round(1) }}%) · {{
- states('sensor.pace_bms_bms4_environment_temperature') | float(0)
- | round(1) }}°C · {{ states('sensor.pace_bms_bms4_system_status')
- }}
- icon: >-
- {% set c = states('sensor.coulomb_bms4_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms4_soc') |
- float(0) %}
- {% if soc >= 95 %}mdi:battery
- {% elif soc >= 85 %}mdi:battery-90
- {% elif soc >= 75 %}mdi:battery-80
- {% elif soc >= 65 %}mdi:battery-70
- {% elif soc >= 55 %}mdi:battery-60
- {% elif soc >= 45 %}mdi:battery-50
- {% elif soc >= 35 %}mdi:battery-40
- {% elif soc >= 25 %}mdi:battery-30
- {% elif soc >= 15 %}mdi:battery-20
- {% elif soc >= 5 %}mdi:battery-10
- {% else %}mdi:battery-alert
- {% endif %}
- badge_icon: >-
- {% if states('sensor.pace_bms_bms4_fault_status') not in ['',
- 'unavailable', 'unknown', 'none'] %}mdi:alert{% endif %}
- badge_color: red
- color: >-
- {% set c = states('sensor.coulomb_bms4_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms4_soc') |
- float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 12
- rows: 1
- tap_action:
- action: navigate
- navigation_path: bms4
- - type: custom:mushroom-template-card
- primary: ACCU 5
- secondary: >-
- Coulomb {% set c = states('sensor.coulomb_bms5_soc') %}{{ (c |
- float | round(1)) if is_number(c) else '–' }}% (BMS {{
- states('sensor.pace_bms_bms5_soc') | float(0) | round(1) }}%) · {{
- states('sensor.pace_bms_bms5_environment_temperature') | float(0)
- | round(1) }}°C · {{ states('sensor.pace_bms_bms5_system_status')
- }}
- icon: >-
- {% set c = states('sensor.coulomb_bms5_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms5_soc') |
- float(0) %}
- {% if soc >= 95 %}mdi:battery
- {% elif soc >= 85 %}mdi:battery-90
- {% elif soc >= 75 %}mdi:battery-80
- {% elif soc >= 65 %}mdi:battery-70
- {% elif soc >= 55 %}mdi:battery-60
- {% elif soc >= 45 %}mdi:battery-50
- {% elif soc >= 35 %}mdi:battery-40
- {% elif soc >= 25 %}mdi:battery-30
- {% elif soc >= 15 %}mdi:battery-20
- {% elif soc >= 5 %}mdi:battery-10
- {% else %}mdi:battery-alert
- {% endif %}
- badge_icon: >-
- {% if states('sensor.pace_bms_bms5_fault_status') not in ['',
- 'unavailable', 'unknown', 'none'] %}mdi:alert{% endif %}
- badge_color: red
- color: >-
- {% set c = states('sensor.coulomb_bms5_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms5_soc') |
- float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 12
- rows: 1
- tap_action:
- action: navigate
- navigation_path: bms5
- - type: custom:mushroom-template-card
- primary: ACCU 6
- secondary: >-
- Coulomb {% set c = states('sensor.coulomb_bms6_soc') %}{{ (c |
- float | round(1)) if is_number(c) else '–' }}% (BMS {{
- states('sensor.pace_bms_bms6_soc') | float(0) | round(1) }}%) · {{
- states('sensor.pace_bms_bms6_environment_temperature') | float(0)
- | round(1) }}°C · {{ states('sensor.pace_bms_bms6_system_status')
- }}
- icon: >-
- {% set c = states('sensor.coulomb_bms6_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms6_soc') |
- float(0) %}
- {% if soc >= 95 %}mdi:battery
- {% elif soc >= 85 %}mdi:battery-90
- {% elif soc >= 75 %}mdi:battery-80
- {% elif soc >= 65 %}mdi:battery-70
- {% elif soc >= 55 %}mdi:battery-60
- {% elif soc >= 45 %}mdi:battery-50
- {% elif soc >= 35 %}mdi:battery-40
- {% elif soc >= 25 %}mdi:battery-30
- {% elif soc >= 15 %}mdi:battery-20
- {% elif soc >= 5 %}mdi:battery-10
- {% else %}mdi:battery-alert
- {% endif %}
- badge_icon: >-
- {% if states('sensor.pace_bms_bms6_fault_status') not in ['',
- 'unavailable', 'unknown', 'none'] %}mdi:alert{% endif %}
- badge_color: red
- color: >-
- {% set c = states('sensor.coulomb_bms6_soc') %}{% set soc = (c |
- float) if is_number(c) else states('sensor.pace_bms_bms6_soc') |
- float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- features_position: bottom
- grid_options:
- columns: 12
- rows: 1
- tap_action:
- action: navigate
- navigation_path: bms6
- - type: grid
- column_span: 3
- cards:
- - type: custom:apexcharts-card
- grid_options:
- columns: full
- header:
- show: true
- title: SOC Coulomb stack vs Deye
- show_states: false
- graph_span: 24h
- apex_config:
- chart:
- height: 380
- toolbar:
- show: false
- yaxis:
- forceNiceScale: true
- legend:
- show: true
- position: bottom
- onItemClick:
- toggleDataSeries: true
- tooltip:
- shared: true
- intersect: false
- 'true':
- formatter: function(value) { return value.toFixed(1) + ' %'; }
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.inverter_battery
- name: Deye
- color: '#9e9e9e'
- float_precision: 0
- stroke_width: 2
- stroke_dash: 4
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.coulomb_soc_totaal
- name: Coulomb stack
- color: '#FFD600'
- float_precision: 1
- stroke_width: 3
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - type: grid
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: SOC
- show_states: true
- colorize_states: true
- graph_span: 2h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- yaxis:
- forceNiceScale: true
- legend:
- show: false
- tooltip:
- shared: true
- intersect: false
- 'true':
- formatter: function(value) { return value.toFixed(1) + ' %'; }
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.pace_bms_bms1_soc
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms1_soc
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms2_soc
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms2_soc
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms3_soc
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms3_soc
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms4_soc
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms4_soc
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms5_soc
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms5_soc
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms6_soc
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms6_soc
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - type: grid
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: SOC Coulomb per BMS
- show_states: true
- colorize_states: true
- graph_span: 2h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- yaxis:
- forceNiceScale: true
- legend:
- show: false
- tooltip:
- shared: true
- intersect: false
- 'true':
- formatter: function(value) { return value.toFixed(1) + ' %'; }
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.coulomb_bms1_soc
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.coulomb_bms1_soc
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.coulomb_bms2_soc
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.coulomb_bms2_soc
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.coulomb_bms3_soc
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.coulomb_bms3_soc
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.coulomb_bms4_soc
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.coulomb_bms4_soc
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.coulomb_bms5_soc
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.coulomb_bms5_soc
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.coulomb_bms6_soc
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.coulomb_bms6_soc
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - type: grid
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Stroom
- show_states: true
- colorize_states: true
- graph_span: 2h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- yaxis:
- forceNiceScale: true
- legend:
- show: false
- tooltip:
- shared: true
- intersect: false
- 'true':
- formatter: function(value) { return value.toFixed(1) + ' A'; }
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.pace_bms_bms1_current
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms1_current
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 30sec
- fill: last
- - entity: sensor.pace_bms_bms2_current
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms2_current
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 30sec
- fill: last
- - entity: sensor.pace_bms_bms3_current
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms3_current
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 30sec
- fill: last
- - entity: sensor.pace_bms_bms4_current
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms4_current
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 30sec
- fill: last
- - entity: sensor.pace_bms_bms5_current
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms5_current
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 30sec
- fill: last
- - entity: sensor.pace_bms_bms6_current
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms6_current
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 30sec
- fill: last
- - type: grid
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Spanning
- show_states: true
- colorize_states: true
- graph_span: 2h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- yaxis:
- forceNiceScale: true
- legend:
- show: false
- tooltip:
- shared: true
- intersect: false
- 'true':
- formatter: function(value) { return value.toFixed(2) + ' V'; }
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.pace_bms_bms1_total_voltage
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms1_total_voltage
- name: BMS 1
- color: '#4CAF50'
- float_precision: 2
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms2_total_voltage
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms2_total_voltage
- name: BMS 2
- color: '#2196F3'
- float_precision: 2
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms3_total_voltage
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms3_total_voltage
- name: BMS 3
- color: '#FF9800'
- float_precision: 2
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms4_total_voltage
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms4_total_voltage
- name: BMS 4
- color: '#E91E63'
- float_precision: 2
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms5_total_voltage
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms5_total_voltage
- name: BMS 5
- color: '#9C27B0'
- float_precision: 2
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - entity: sensor.pace_bms_bms6_total_voltage
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms6_total_voltage
- name: BMS 6
- color: '#00BCD4'
- float_precision: 2
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 1min
- fill: last
- - type: grid
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- yaxis:
- forceNiceScale: true
- legend:
- show: false
- tooltip:
- shared: true
- intersect: false
- 'true':
- formatter: function(value) { return value.toFixed(0) + ' mV'; }
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.pace_bms_bms1_max_cell_differential
- name: BMS 1
- color: '#4CAF50'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms1_max_cell_differential
- name: BMS 1
- color: '#4CAF50'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms2_max_cell_differential
- name: BMS 2
- color: '#2196F3'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms2_max_cell_differential
- name: BMS 2
- color: '#2196F3'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms3_max_cell_differential
- name: BMS 3
- color: '#FF9800'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms3_max_cell_differential
- name: BMS 3
- color: '#FF9800'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms4_max_cell_differential
- name: BMS 4
- color: '#E91E63'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms4_max_cell_differential
- name: BMS 4
- color: '#E91E63'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms5_max_cell_differential
- name: BMS 5
- color: '#9C27B0'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms5_max_cell_differential
- name: BMS 5
- color: '#9C27B0'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms6_max_cell_differential
- name: BMS 6
- color: '#00BCD4'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms6_max_cell_differential
- name: BMS 6
- color: '#00BCD4'
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - type: grid
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Omgevingstemperatuur
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- yaxis:
- forceNiceScale: true
- legend:
- show: false
- tooltip:
- shared: true
- intersect: false
- 'true':
- formatter: function(value) { return value.toFixed(1) + ' °C'; }
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.pace_bms_bms1_environment_temperature
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms1_environment_temperature
- name: BMS 1
- color: '#4CAF50'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms2_environment_temperature
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms2_environment_temperature
- name: BMS 2
- color: '#2196F3'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms3_environment_temperature
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms3_environment_temperature
- name: BMS 3
- color: '#FF9800'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms4_environment_temperature
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms4_environment_temperature
- name: BMS 4
- color: '#E91E63'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms5_environment_temperature
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms5_environment_temperature
- name: BMS 5
- color: '#9C27B0'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - entity: sensor.pace_bms_bms6_environment_temperature
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 0
- show:
- in_chart: false
- in_header: true
- name_in_header: true
- - entity: sensor.pace_bms_bms6_environment_temperature
- name: BMS 6
- color: '#00BCD4'
- float_precision: 1
- stroke_width: 1
- curve: smooth
- show:
- in_header: false
- group_by:
- func: avg
- duration: 5min
- fill: last
- - type: grid
- column_span: 3
- cards:
- - type: heading
- heading: Alle modules naast elkaar
- - type: markdown
- content: >+
- {%- macro v(e, d=2, m=1) -%}{%- set s = states(e) -%}{%- if
- is_number(s) -%}{%- if d == 0 -%}{{ ((s|float) * m) | round(0) |
- int }}{%- else -%}{{ ((s|float) * m) | round(d) }}{%- endif -%}{%-
- else -%}–{%- endif -%}{%- endmacro -%}
- {%- macro tmax(b) -%}{%- set t = [1,2,3,4] | map('string') |
- map('regex_replace', '^', 'sensor.pace_bms_bms' ~ b ~
- '_temperatuur_') | map('states') | select('is_number') |
- map('float') | list -%}{{ (t | max) | round(1) if t | count > 0
- else '–' }}{%- endmacro -%}
- {%- macro txt(e) -%}{%- set s = states(e) -%}{{ '' if s | lower in
- ['', 'unknown', 'unavailable', 'none', 'normal', 'ok'] else s
- }}{%- endmacro -%}
- {%- macro alarm(b) -%}{%- set p = 'sensor.pace_bms_bms' ~ b ~ '_'
- -%}{%- set t = [txt(p ~ 'protection_status'), txt(p ~
- 'fault_status')] | reject('eq', '') | join('; ') -%}{{ '[⚠️ ' ~ t
- ~ '](bms' ~ b ~ ')' if t else '✅' }}{%- endmacro -%}
- {%- macro warn(b) -%}{%- set t = txt('sensor.pace_bms_bms' ~ b ~
- '_warning_status') -%}{{ '[⚠️ ' ~ t ~ '](bms' ~ b ~ ')' if t else
- '–' }}{%- endmacro -%}
- | | [BMS 1](bms1) | [BMS 2](bms2) | [BMS 3](bms3) | [BMS 4](bms4)
- | [BMS 5](bms5) | [BMS 6](bms6) |
- |:--|--:|--:|--:|--:|--:|--:|
- | **SOC (%)** | {{ v('sensor.pace_bms_bms1_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms2_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms3_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms4_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms5_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms6_soc', 0, 1) }} |
- | **Coulomb SOC (%)** | {{ v('sensor.coulomb_bms1_soc', 1, 1) }} |
- {{ v('sensor.coulomb_bms2_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms3_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms4_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms5_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms6_soc', 1, 1) }} |
- | **Coulomb Δ BMS (%)** | {{ state_attr('sensor.coulomb_bms1_soc',
- 'verschil') | round(1, default='–') }} | {{
- state_attr('sensor.coulomb_bms2_soc', 'verschil') | round(1,
- default='–') }} | {{ state_attr('sensor.coulomb_bms3_soc',
- 'verschil') | round(1, default='–') }} | {{
- state_attr('sensor.coulomb_bms4_soc', 'verschil') | round(1,
- default='–') }} | {{ state_attr('sensor.coulomb_bms5_soc',
- 'verschil') | round(1, default='–') }} | {{
- state_attr('sensor.coulomb_bms6_soc', 'verschil') | round(1,
- default='–') }} |
- | **Spanning (V)** | {{ v('sensor.pace_bms_bms1_total_voltage', 2,
- 1) }} | {{ v('sensor.pace_bms_bms2_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms3_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms4_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms5_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms6_total_voltage', 2, 1) }} |
- | **Stroom (A)** | {{ v('sensor.pace_bms_bms1_current', 1, 1) }} |
- {{ v('sensor.pace_bms_bms2_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms3_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms4_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms5_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms6_current', 1, 1) }} |
- | **Vermogen (W)** | {{ v('sensor.pace_bms_bms1_power', 0, 1) }} |
- {{ v('sensor.pace_bms_bms2_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms3_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms4_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms5_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms6_power', 0, 1) }} |
- | **Capaciteit (Ah)** | {{ v('sensor.pace_bms_bms1_full_capacity',
- 1, 1) }} | {{ v('sensor.pace_bms_bms2_full_capacity', 1, 1) }} |
- {{ v('sensor.pace_bms_bms3_full_capacity', 1, 1) }} | {{
- v('sensor.pace_bms_bms4_full_capacity', 1, 1) }} | {{
- v('sensor.pace_bms_bms5_full_capacity', 1, 1) }} | {{
- v('sensor.pace_bms_bms6_full_capacity', 1, 1) }} |
- | **Min cel (V)** | {{ v('sensor.pace_bms_bms1_min_cell_voltage',
- 3, 1) }} | {{ v('sensor.pace_bms_bms2_min_cell_voltage', 3, 1) }}
- | {{ v('sensor.pace_bms_bms3_min_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms4_min_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms5_min_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms6_min_cell_voltage', 3, 1) }} |
- | **Max cel (V)** | {{ v('sensor.pace_bms_bms1_max_cell_voltage',
- 3, 1) }} | {{ v('sensor.pace_bms_bms2_max_cell_voltage', 3, 1) }}
- | {{ v('sensor.pace_bms_bms3_max_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms4_max_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms5_max_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms6_max_cell_voltage', 3, 1) }} |
- | **Δ cel (mV)** | {{
- v('sensor.pace_bms_bms1_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms2_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms3_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms4_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms5_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms6_max_cell_differential', 0, 1000) }} |
- | **Omgeving (°C)** | {{
- v('sensor.pace_bms_bms1_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms2_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms3_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms4_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms5_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms6_environment_temperature', 1, 1) }} |
- | **Cel temp max (°C)** | {{ tmax(1) }} | {{ tmax(2) }} | {{
- tmax(3) }} | {{ tmax(4) }} | {{ tmax(5) }} | {{ tmax(6) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms1_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms2_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms3_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms4_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms5_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms6_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} |
- | **Waarschuwing** | {{ warn(1) }} | {{ warn(2) }} | {{ warn(3) }}
- | {{ warn(4) }} | {{ warn(5) }} | {{ warn(6) }} |
- | **Bescherming/fout** | {{ alarm(1) }} | {{ alarm(2) }} | {{
- alarm(3) }} | {{ alarm(4) }} | {{ alarm(5) }} | {{ alarm(6) }} |
- {%- set ns = namespace(m=[]) -%}
- {%- for b in range(1, 7) -%}
- {%- if alarm(b) != '✅' or warn(b) != '–' -%}{%- set ns.m = ns.m +
- ['<a href="bms' ~ b ~ '">BMS ' ~ b ~ '</a>'] -%}{%- endif -%}
- {%- endfor %}
- {% if ns.m | count > 0 -%}
- <ha-alert alert-type="warning">Actieve melding bij {{ ns.m |
- join(', ') }}. Open de module en kijk in de kaart <b>Status</b>
- voor de details.</ha-alert>
- {%- endif %}
- grid_options:
- columns: 24
- visibility:
- - condition: screen
- media_query: '(min-width: 1280px)'
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil nu per module
- show_states: false
- graph_span: 1min
- span:
- end: minute
- update_interval: 30s
- yaxis:
- - min: 0
- decimals: 0
- apex_config:
- chart:
- height: 360
- legend:
- show: false
- xaxis:
- labels:
- show: false
- axisTicks:
- show: false
- plotOptions:
- bar:
- columnWidth: 70%
- dataLabels:
- enabled: true
- tooltip:
- x:
- show: true
- formatter: >
- EVAL:function(val) { return 'BMS ' + Math.round((val %
- 60000) / 8000); }
- series:
- - entity: sensor.pace_bms_bms1_max_cell_differential
- name: Δ cel
- type: column
- color: '#FF9800'
- float_precision: 0
- unit: mV
- data_generator: |
- const t0 = start.getTime();
- const out = [];
- for (let b = 1; b <= 6; b++) {
- const s = hass.states[`sensor.pace_bms_bms${b}_max_cell_differential`];
- const v = s ? parseFloat(s.state) : NaN;
- if (!isNaN(v)) out.push([t0 + b * 8000, v * 1000]);
- }
- return out;
- grid_options:
- columns: 12
- visibility:
- - condition: screen
- media_query: '(min-width: 1280px)'
- - type: markdown
- content: >+
- {%- macro v(e, d=2, m=1) -%}{%- set s = states(e) -%}{%- if
- is_number(s) -%}{%- if d == 0 -%}{{ ((s|float) * m) | round(0) |
- int }}{%- else -%}{{ ((s|float) * m) | round(d) }}{%- endif -%}{%-
- else -%}–{%- endif -%}{%- endmacro -%}
- {%- macro tmax(b) -%}{%- set t = [1,2,3,4] | map('string') |
- map('regex_replace', '^', 'sensor.pace_bms_bms' ~ b ~
- '_temperatuur_') | map('states') | select('is_number') |
- map('float') | list -%}{{ (t | max) | round(1) if t | count > 0
- else '–' }}{%- endmacro -%}
- {%- macro txt(e) -%}{%- set s = states(e) -%}{{ '' if s | lower in
- ['', 'unknown', 'unavailable', 'none', 'normal', 'ok'] else s
- }}{%- endmacro -%}
- {%- macro alarm(b) -%}{%- set p = 'sensor.pace_bms_bms' ~ b ~ '_'
- -%}{%- set t = [txt(p ~ 'protection_status'), txt(p ~
- 'fault_status')] | reject('eq', '') | join('; ') -%}{{ '[⚠️ ' ~ t
- ~ '](bms' ~ b ~ ')' if t else '✅' }}{%- endmacro -%}
- {%- macro warn(b) -%}{%- set t = txt('sensor.pace_bms_bms' ~ b ~
- '_warning_status') -%}{{ '[⚠️ ' ~ t ~ '](bms' ~ b ~ ')' if t else
- '–' }}{%- endmacro -%}
- | | [BMS 1](bms1) | [BMS 2](bms2) | [BMS 3](bms3) | [BMS 4](bms4)
- | [BMS 5](bms5) | [BMS 6](bms6) |
- |:--|--:|--:|--:|--:|--:|--:|
- | **SOC (%)** | {{ v('sensor.pace_bms_bms1_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms2_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms3_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms4_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms5_soc', 0, 1) }} | {{
- v('sensor.pace_bms_bms6_soc', 0, 1) }} |
- | **Coulomb SOC (%)** | {{ v('sensor.coulomb_bms1_soc', 1, 1) }} |
- {{ v('sensor.coulomb_bms2_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms3_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms4_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms5_soc', 1, 1) }} | {{
- v('sensor.coulomb_bms6_soc', 1, 1) }} |
- | **Coulomb Δ BMS (%)** | {{ state_attr('sensor.coulomb_bms1_soc',
- 'verschil') | round(1, default='–') }} | {{
- state_attr('sensor.coulomb_bms2_soc', 'verschil') | round(1,
- default='–') }} | {{ state_attr('sensor.coulomb_bms3_soc',
- 'verschil') | round(1, default='–') }} | {{
- state_attr('sensor.coulomb_bms4_soc', 'verschil') | round(1,
- default='–') }} | {{ state_attr('sensor.coulomb_bms5_soc',
- 'verschil') | round(1, default='–') }} | {{
- state_attr('sensor.coulomb_bms6_soc', 'verschil') | round(1,
- default='–') }} |
- | **Spanning (V)** | {{ v('sensor.pace_bms_bms1_total_voltage', 2,
- 1) }} | {{ v('sensor.pace_bms_bms2_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms3_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms4_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms5_total_voltage', 2, 1) }} | {{
- v('sensor.pace_bms_bms6_total_voltage', 2, 1) }} |
- | **Stroom (A)** | {{ v('sensor.pace_bms_bms1_current', 1, 1) }} |
- {{ v('sensor.pace_bms_bms2_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms3_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms4_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms5_current', 1, 1) }} | {{
- v('sensor.pace_bms_bms6_current', 1, 1) }} |
- | **Vermogen (W)** | {{ v('sensor.pace_bms_bms1_power', 0, 1) }} |
- {{ v('sensor.pace_bms_bms2_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms3_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms4_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms5_power', 0, 1) }} | {{
- v('sensor.pace_bms_bms6_power', 0, 1) }} |
- | **Capaciteit (Ah)** | {{ v('sensor.pace_bms_bms1_full_capacity',
- 1, 1) }} | {{ v('sensor.pace_bms_bms2_full_capacity', 1, 1) }} |
- {{ v('sensor.pace_bms_bms3_full_capacity', 1, 1) }} | {{
- v('sensor.pace_bms_bms4_full_capacity', 1, 1) }} | {{
- v('sensor.pace_bms_bms5_full_capacity', 1, 1) }} | {{
- v('sensor.pace_bms_bms6_full_capacity', 1, 1) }} |
- | **Min cel (V)** | {{ v('sensor.pace_bms_bms1_min_cell_voltage',
- 3, 1) }} | {{ v('sensor.pace_bms_bms2_min_cell_voltage', 3, 1) }}
- | {{ v('sensor.pace_bms_bms3_min_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms4_min_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms5_min_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms6_min_cell_voltage', 3, 1) }} |
- | **Max cel (V)** | {{ v('sensor.pace_bms_bms1_max_cell_voltage',
- 3, 1) }} | {{ v('sensor.pace_bms_bms2_max_cell_voltage', 3, 1) }}
- | {{ v('sensor.pace_bms_bms3_max_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms4_max_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms5_max_cell_voltage', 3, 1) }} | {{
- v('sensor.pace_bms_bms6_max_cell_voltage', 3, 1) }} |
- | **Δ cel (mV)** | {{
- v('sensor.pace_bms_bms1_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms2_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms3_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms4_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms5_max_cell_differential', 0, 1000) }} | {{
- v('sensor.pace_bms_bms6_max_cell_differential', 0, 1000) }} |
- | **Omgeving (°C)** | {{
- v('sensor.pace_bms_bms1_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms2_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms3_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms4_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms5_environment_temperature', 1, 1) }} | {{
- v('sensor.pace_bms_bms6_environment_temperature', 1, 1) }} |
- | **Cel temp max (°C)** | {{ tmax(1) }} | {{ tmax(2) }} | {{
- tmax(3) }} | {{ tmax(4) }} | {{ tmax(5) }} | {{ tmax(6) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms1_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms2_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms3_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms4_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms5_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} | {{
- states('sensor.pace_bms_bms6_balancing_cells') |
- replace('Balancing: ', '') | replace('cellen ', '') }} |
- | **Waarschuwing** | {{ warn(1) }} | {{ warn(2) }} | {{ warn(3) }}
- | {{ warn(4) }} | {{ warn(5) }} | {{ warn(6) }} |
- | **Bescherming/fout** | {{ alarm(1) }} | {{ alarm(2) }} | {{
- alarm(3) }} | {{ alarm(4) }} | {{ alarm(5) }} | {{ alarm(6) }} |
- {%- set ns = namespace(m=[]) -%}
- {%- for b in range(1, 7) -%}
- {%- if alarm(b) != '✅' or warn(b) != '–' -%}{%- set ns.m = ns.m +
- ['<a href="bms' ~ b ~ '">BMS ' ~ b ~ '</a>'] -%}{%- endif -%}
- {%- endfor %}
- {% if ns.m | count > 0 -%}
- <ha-alert alert-type="warning">Actieve melding bij {{ ns.m |
- join(', ') }}. Open de module en kijk in de kaart <b>Status</b>
- voor de details.</ha-alert>
- {%- endif %}
- grid_options:
- columns: full
- visibility:
- - condition: screen
- media_query: '(max-width: 1279px)'
- - type: markdown
- content: >
- <details><summary><b>Uitleg waarschuwingen en
- meldingen</b></summary>
- - **✅ / –** — de BMS meldt niets.
- - **⚠️ Waarschuwing** — een waarde nadert een grens (bijv. hoge
- celspanning of temperatuur). De BMS grijpt nog niet in.
- - **⚠️ Bescherming/fout** — de BMS heeft ingegrepen (bijv. laden
- of ontladen geblokkeerd) of meldt een hardwarefout.
- - De tekst achter ⚠️ komt rechtstreeks uit de BMS. Klik erop, of
- op de BMS-naam bovenaan de kolom, om de detailpagina te openen.
- - Op de detailpagina staat in de kaart **Status** per regel de
- tekst en de ruwe registerwaarde (hex). Daar staat ook uitleg over
- hoe je die leest.
- </details>
- grid_options:
- columns: full
- - title: BMS 1
- path: bms1
- icon: mdi:battery
- type: sections
- max_columns: 3
- dense_section_placement: false
- sections:
- - type: grid
- column_span: 3
- cards:
- - type: custom:mushroom-template-card
- primary: ACCU 1 (master) · positie 1 van boven · adres 2
- secondary: >-
- {%- set ok = ['', 'unknown', 'unavailable', 'none', 'normal',
- 'ok'] -%}
- {%- set ns = namespace(t=[]) -%}
- {%- for s in [states('sensor.pace_bms_bms1_protection_status'),
- states('sensor.pace_bms_bms1_fault_status')] if s | lower not in
- ok -%}{%- set ns.t = ns.t + [s] -%}{%- endfor -%}
- {{ states('sensor.pace_bms_bms1_system_status') or 'Normaal' }} ·
- {{ states('sensor.pace_bms_bms1_balancing_cells') }}{{ ' · ⚠️ ' ~
- (ns.t | join('; ')) if ns.t | count > 0 else '' }}
- icon: >-
- {% set soc = states('sensor.pace_bms_bms1_soc') | float(0) %}
- {% if soc >= 95 %}mdi:battery{% elif soc >= 85 %}mdi:battery-90{%
- elif soc >= 75 %}mdi:battery-80{% elif soc >= 65
- %}mdi:battery-70{% elif soc >= 55 %}mdi:battery-60{% elif soc >=
- 45 %}mdi:battery-50{% elif soc >= 35 %}mdi:battery-40{% elif soc
- >= 25 %}mdi:battery-30{% elif soc >= 15 %}mdi:battery-20{% elif
- soc >= 5 %}mdi:battery-10{% else %}mdi:battery-alert{% endif %}
- color: >-
- {% set soc = states('sensor.pace_bms_bms1_soc') | float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- badge_icon: >-
- {% set ok = ['', 'unknown', 'unavailable', 'none', 'normal', 'ok']
- %}{% if states('sensor.pace_bms_bms1_protection_status') | lower
- not in ok or states('sensor.pace_bms_bms1_fault_status') | lower
- not in ok %}mdi:alert{% endif %}
- badge_color: red
- tap_action:
- action: navigate
- navigation_path: bms-overzicht
- grid_options:
- columns: full
- rows: 1
- - type: tile
- entity: sensor.pace_bms_bms1_soc
- name: SOC
- - type: tile
- entity: sensor.coulomb_bms1_soc
- name: Coulomb SOC
- icon: mdi:battery-sync
- - type: tile
- entity: sensor.pace_bms_bms1_total_voltage
- name: Spanning
- - type: tile
- entity: sensor.pace_bms_bms1_current
- name: Stroom
- - type: tile
- entity: sensor.pace_bms_bms1_power
- name: Vermogen
- - type: tile
- entity: sensor.pace_bms_bms1_max_cell_differential
- name: Celverschil
- icon: mdi:arrow-expand-vertical
- - type: tile
- entity: sensor.pace_bms_bms1_full_capacity
- name: Capaciteit
- - type: tile
- entity: script.coulomb_herijk
- name: Herijk Coulomb
- icon: mdi:battery-sync
- tap_action:
- action: perform-action
- perform_action: script.coulomb_herijk
- data:
- module: 1
- confirmation:
- text: Coulomb-SOC van BMS 1 gelijkzetten aan de SOC van de BMS?
- - type: grid
- column_span: 2
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celspanningen
- show_states: false
- graph_span: 1min
- span:
- end: minute
- update_interval: 30s
- yaxis:
- - min: '|-0.005|'
- max: '|+0.005|'
- decimals: 3
- apex_config:
- tickAmount: 4
- apex_config:
- chart:
- height: 330
- legend:
- show: false
- xaxis:
- labels:
- show: false
- axisTicks:
- show: false
- plotOptions:
- bar:
- columnWidth: 80%
- dataLabels:
- enabled: false
- tooltip:
- x:
- show: true
- formatter: >
- EVAL:function(val) { return 'Cel ' + Math.round((val %
- 60000) / 3500); }
- series:
- - entity: sensor.pace_bms_bms1_cel_01_voltage
- name: Spanning
- type: column
- color: '#4CAF50'
- float_precision: 3
- unit: V
- data_generator: >
- const base = entity.entity_id.replace(/_cel_\d+_voltage$/,
- '');
- const t0 = start.getTime();
- const out = [];
- for (let i = 1; i <= 16; i++) {
- const s = hass.states[`${base}_cel_${String(i).padStart(2, '0')}_voltage`];
- const v = s ? parseFloat(s.state) : NaN;
- if (!isNaN(v)) out.push([t0 + i * 3500, v]);
- }
- return out;
- grid_options:
- columns: full
- - type: grid
- column_span: 1
- cards:
- - type: markdown
- content: >
- {%- set p = 'sensor.pace_bms_bms1_cel_' -%}
- {%- set ns = namespace(v=[]) -%}
- {%- for i in range(1, 17) -%}
- {%- set ns.v = ns.v + [states(p ~ ('%02d' | format(i)) ~
- '_voltage') | float(0)] -%}
- {%- endfor -%}
- {%- set bal = states('sensor.pace_bms_bms1_balancing_status_raw')
- | int(0) -%}
- {%- set ok = ns.v | select('>', 0) | list -%}
- {%- if ok | count == 16 -%}
- {%- set vmin = ok | min -%}{%- set vmax = ok | max -%}{%- set avg
- = (ok | sum) / 16 -%}
- {%- macro c(i) -%}
- {%- set v = ns.v[i - 1] -%}
- {%- set d = ((v - avg) * 1000) | round(0) | int -%}
- {%- set s = '%.3f' | format(v) -%}
- {{ i }}{{ ' ⚖️' if (bal // (2 ** (i - 1))) % 2 == 1 else '' }} |
- {% if v == vmax %}<font color="#e53935">**{{ s }}**</font>{% elif
- v == vmin %}<font color="#1e88e5">**{{ s }}**</font>{% else %}{{ s
- }}{% endif %} | {{ '%+d' | format(d) }}
- {%- endmacro -%}
- Gem. **{{ '%.3f' | format(avg) }} V** · Δ **{{ ((vmax - vmin) *
- 1000) | round(0) | int }} mV**
- | Cel | V | mV | Cel | V | mV |
- |:--|--:|--:|:--|--:|--:|
- {% for i in range(1, 9) -%}
- | {{ c(i) }} | {{ c(i + 8) }} |
- {% endfor %}
- <font color="#e53935">■</font> hoogste · <font
- color="#1e88e5">■</font> laagste · ⚖️ balanceert · mV t.o.v. gem.
- {%- else -%}
- Celdata (nog) niet beschikbaar.
- {%- endif %}
- grid_options:
- columns: full
- - type: grid
- column_span: 3
- cards:
- - type: entities
- title: Temperaturen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms1_temperatuur_1
- name: Celsensor 1
- - entity: sensor.pace_bms_bms1_temperatuur_2
- name: Celsensor 2
- - entity: sensor.pace_bms_bms1_temperatuur_3
- name: Celsensor 3
- - entity: sensor.pace_bms_bms1_temperatuur_4
- name: Celsensor 4
- - entity: sensor.pace_bms_bms1_environment_temperature
- name: Omgeving
- - type: entities
- title: Cellen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms1_min_cell_voltage
- name: Laagste cel
- - entity: sensor.pace_bms_bms1_avg_cell_voltage
- name: Gemiddeld
- - entity: sensor.pace_bms_bms1_max_cell_voltage
- name: Hoogste cel
- - entity: sensor.pace_bms_bms1_max_cell_differential
- name: Verschil
- - entity: sensor.pace_bms_bms1_balancing_cells
- name: Balancing
- icon: mdi:scale-balance
- - type: vertical-stack
- grid_options:
- columns: 12
- cards:
- - type: markdown
- title: Status
- content: >+
- | | Status | Ruw |
- |:--|:--|--:|
- | **Systeem** | {{
- states('sensor.pace_bms_bms1_system_status') if
- states('sensor.pace_bms_bms1_system_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms1_system_status_raw') |
- int(0)) }} |
- | **Waarschuwing** | {{
- states('sensor.pace_bms_bms1_warning_status') if
- states('sensor.pace_bms_bms1_warning_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | |
- | **Bescherming** | {{
- states('sensor.pace_bms_bms1_protection_status') if
- states('sensor.pace_bms_bms1_protection_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms1_protection1_raw') |
- int(0)) }} / {{ '0x%04X' |
- format(states('sensor.pace_bms_bms1_protection2_raw') |
- int(0)) }} |
- | **Fout** | {{ states('sensor.pace_bms_bms1_fault_status') if
- states('sensor.pace_bms_bms1_fault_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms1_fault_status_raw') |
- int(0)) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms1_balancing_status') if
- states('sensor.pace_bms_bms1_balancing_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms1_balancing_status_raw') |
- int(0)) }} |
- | **Configuratie** | {{
- states('sensor.pace_bms_bms1_configuration_status') if
- states('sensor.pace_bms_bms1_configuration_status') not in
- ['', 'unknown', 'unavailable'] else '–' }} | |
- - type: markdown
- content: >
- <details><summary><b>Hoe lees ik dit?</b></summary>
- - **Status** is wat de BMS zelf rapporteert. Een – betekent:
- niets actief.
- - **Waarschuwing**: een waarde nadert een grens. Er wordt nog
- niet ingegrepen.
- - **Bescherming**: de BMS heeft ingegrepen, bijv. laden of
- ontladen geblokkeerd bij te hoge of te lage celspanning, te
- hoge stroom of een temperatuur buiten bereik. Dit heft
- zichzelf meestal op zodra de waarde weer normaal is.
- - **Fout**: een hardwareprobleem (meting, MOSFET,
- communicatie). Dit verdwijnt meestal niet vanzelf. Blijft het
- staan, neem dan contact op met de installateur.
- - **Ruw** is de registerwaarde als bitmask. `0x0000` = niets
- gezet. Een waarde ongelijk aan 0 terwijl de Status-kolom leeg
- is, is een informatief bit (bijv. "volledig geladen") en geen
- probleem.
- - Wil je terugzien wanneer iets speelde, open dan de entiteit
- (bijv. *BMS1 Protection Status*) via **Settings → Entities**
- en bekijk de geschiedenis.
- </details>
- - type: grid
- column_span: 3
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Min / gem. / max cel (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms1_min_cell_voltage
- name: Min
- float_precision: 3
- color: '#1e88e5'
- - entity: sensor.pace_bms_bms1_avg_cell_voltage
- name: Gem.
- float_precision: 3
- color: '#4CAF50'
- - entity: sensor.pace_bms_bms1_max_cell_voltage
- name: Max
- float_precision: 3
- color: '#e53935'
- yaxis:
- - decimals: 3
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms1_max_cell_differential
- name: Δ
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- color: '#4CAF50'
- yaxis:
- - min: 0
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Alle cellen (12 u)
- show_states: false
- colorize_states: true
- graph_span: 12h
- apex_config:
- chart:
- height: 320
- toolbar:
- show: false
- legend:
- show: true
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms1_cel_01_voltage
- name: '1'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_02_voltage
- name: '2'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_03_voltage
- name: '3'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_04_voltage
- name: '4'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_05_voltage
- name: '5'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_06_voltage
- name: '6'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_07_voltage
- name: '7'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_08_voltage
- name: '8'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_09_voltage
- name: '9'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_10_voltage
- name: '10'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_11_voltage
- name: '11'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_12_voltage
- name: '12'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_13_voltage
- name: '13'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_14_voltage
- name: '14'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_15_voltage
- name: '15'
- float_precision: 3
- - entity: sensor.pace_bms_bms1_cel_16_voltage
- name: '16'
- float_precision: 3
- yaxis:
- - min: '|-0.01|'
- max: '|+0.01|'
- decimals: 3
- grid_options:
- columns: full
- - type: custom:apexcharts-card
- header:
- show: true
- title: Stroom & SOC (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms1_current
- name: Stroom
- float_precision: 1
- yaxis_id: a
- color: '#4CAF50'
- - entity: sensor.pace_bms_bms1_soc
- name: SOC
- float_precision: 0
- yaxis_id: soc
- color: '#9e9e9e'
- - entity: sensor.coulomb_bms1_soc
- name: Coulomb SOC
- float_precision: 1
- yaxis_id: soc
- color: '#4CAF50'
- yaxis:
- - id: a
- decimals: 1
- - id: soc
- opposite: true
- min: 0
- max: 100
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Temperaturen (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms1_temperatuur_1
- name: T1
- float_precision: 1
- color: '#ef5350'
- - entity: sensor.pace_bms_bms1_temperatuur_2
- name: T2
- float_precision: 1
- color: '#ffa726'
- - entity: sensor.pace_bms_bms1_temperatuur_3
- name: T3
- float_precision: 1
- color: '#66bb6a'
- - entity: sensor.pace_bms_bms1_temperatuur_4
- name: T4
- float_precision: 1
- color: '#42a5f5'
- - entity: sensor.pace_bms_bms1_environment_temperature
- name: Omg.
- float_precision: 1
- color: '#9e9e9e'
- yaxis:
- - decimals: 1
- grid_options:
- columns: 18
- - title: BMS 2
- path: bms2
- icon: mdi:battery
- type: sections
- max_columns: 3
- dense_section_placement: false
- sections:
- - type: grid
- column_span: 3
- cards:
- - type: custom:mushroom-template-card
- primary: ACCU 2 · positie 2 van boven · adres 3
- secondary: >-
- {%- set ok = ['', 'unknown', 'unavailable', 'none', 'normal',
- 'ok'] -%}
- {%- set ns = namespace(t=[]) -%}
- {%- for s in [states('sensor.pace_bms_bms2_protection_status'),
- states('sensor.pace_bms_bms2_fault_status')] if s | lower not in
- ok -%}{%- set ns.t = ns.t + [s] -%}{%- endfor -%}
- {{ states('sensor.pace_bms_bms2_system_status') or 'Normaal' }} ·
- {{ states('sensor.pace_bms_bms2_balancing_cells') }}{{ ' · ⚠️ ' ~
- (ns.t | join('; ')) if ns.t | count > 0 else '' }}
- icon: >-
- {% set soc = states('sensor.pace_bms_bms2_soc') | float(0) %}
- {% if soc >= 95 %}mdi:battery{% elif soc >= 85 %}mdi:battery-90{%
- elif soc >= 75 %}mdi:battery-80{% elif soc >= 65
- %}mdi:battery-70{% elif soc >= 55 %}mdi:battery-60{% elif soc >=
- 45 %}mdi:battery-50{% elif soc >= 35 %}mdi:battery-40{% elif soc
- >= 25 %}mdi:battery-30{% elif soc >= 15 %}mdi:battery-20{% elif
- soc >= 5 %}mdi:battery-10{% else %}mdi:battery-alert{% endif %}
- color: >-
- {% set soc = states('sensor.pace_bms_bms2_soc') | float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- badge_icon: >-
- {% set ok = ['', 'unknown', 'unavailable', 'none', 'normal', 'ok']
- %}{% if states('sensor.pace_bms_bms2_protection_status') | lower
- not in ok or states('sensor.pace_bms_bms2_fault_status') | lower
- not in ok %}mdi:alert{% endif %}
- badge_color: red
- tap_action:
- action: navigate
- navigation_path: bms-overzicht
- grid_options:
- columns: full
- rows: 1
- - type: tile
- entity: sensor.pace_bms_bms2_soc
- name: SOC
- - type: tile
- entity: sensor.coulomb_bms2_soc
- name: Coulomb SOC
- icon: mdi:battery-sync
- - type: tile
- entity: sensor.pace_bms_bms2_total_voltage
- name: Spanning
- - type: tile
- entity: sensor.pace_bms_bms2_current
- name: Stroom
- - type: tile
- entity: sensor.pace_bms_bms2_power
- name: Vermogen
- - type: tile
- entity: sensor.pace_bms_bms2_max_cell_differential
- name: Celverschil
- icon: mdi:arrow-expand-vertical
- - type: tile
- entity: sensor.pace_bms_bms2_full_capacity
- name: Capaciteit
- - type: tile
- entity: script.coulomb_herijk
- name: Herijk Coulomb
- icon: mdi:battery-sync
- tap_action:
- action: perform-action
- perform_action: script.coulomb_herijk
- data:
- module: 2
- confirmation:
- text: Coulomb-SOC van BMS 2 gelijkzetten aan de SOC van de BMS?
- - type: grid
- column_span: 2
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celspanningen
- show_states: false
- graph_span: 1min
- span:
- end: minute
- update_interval: 30s
- yaxis:
- - min: '|-0.005|'
- max: '|+0.005|'
- decimals: 3
- apex_config:
- tickAmount: 4
- apex_config:
- chart:
- height: 330
- legend:
- show: false
- xaxis:
- labels:
- show: false
- axisTicks:
- show: false
- plotOptions:
- bar:
- columnWidth: 80%
- dataLabels:
- enabled: false
- tooltip:
- x:
- show: true
- formatter: >
- EVAL:function(val) { return 'Cel ' + Math.round((val %
- 60000) / 3500); }
- series:
- - entity: sensor.pace_bms_bms2_cel_01_voltage
- name: Spanning
- type: column
- color: '#2196F3'
- float_precision: 3
- unit: V
- data_generator: >
- const base = entity.entity_id.replace(/_cel_\d+_voltage$/,
- '');
- const t0 = start.getTime();
- const out = [];
- for (let i = 1; i <= 16; i++) {
- const s = hass.states[`${base}_cel_${String(i).padStart(2, '0')}_voltage`];
- const v = s ? parseFloat(s.state) : NaN;
- if (!isNaN(v)) out.push([t0 + i * 3500, v]);
- }
- return out;
- grid_options:
- columns: full
- - type: grid
- column_span: 1
- cards:
- - type: markdown
- content: >
- {%- set p = 'sensor.pace_bms_bms2_cel_' -%}
- {%- set ns = namespace(v=[]) -%}
- {%- for i in range(1, 17) -%}
- {%- set ns.v = ns.v + [states(p ~ ('%02d' | format(i)) ~
- '_voltage') | float(0)] -%}
- {%- endfor -%}
- {%- set bal = states('sensor.pace_bms_bms2_balancing_status_raw')
- | int(0) -%}
- {%- set ok = ns.v | select('>', 0) | list -%}
- {%- if ok | count == 16 -%}
- {%- set vmin = ok | min -%}{%- set vmax = ok | max -%}{%- set avg
- = (ok | sum) / 16 -%}
- {%- macro c(i) -%}
- {%- set v = ns.v[i - 1] -%}
- {%- set d = ((v - avg) * 1000) | round(0) | int -%}
- {%- set s = '%.3f' | format(v) -%}
- {{ i }}{{ ' ⚖️' if (bal // (2 ** (i - 1))) % 2 == 1 else '' }} |
- {% if v == vmax %}<font color="#e53935">**{{ s }}**</font>{% elif
- v == vmin %}<font color="#1e88e5">**{{ s }}**</font>{% else %}{{ s
- }}{% endif %} | {{ '%+d' | format(d) }}
- {%- endmacro -%}
- Gem. **{{ '%.3f' | format(avg) }} V** · Δ **{{ ((vmax - vmin) *
- 1000) | round(0) | int }} mV**
- | Cel | V | mV | Cel | V | mV |
- |:--|--:|--:|:--|--:|--:|
- {% for i in range(1, 9) -%}
- | {{ c(i) }} | {{ c(i + 8) }} |
- {% endfor %}
- <font color="#e53935">■</font> hoogste · <font
- color="#1e88e5">■</font> laagste · ⚖️ balanceert · mV t.o.v. gem.
- {%- else -%}
- Celdata (nog) niet beschikbaar.
- {%- endif %}
- grid_options:
- columns: full
- - type: grid
- column_span: 3
- cards:
- - type: entities
- title: Temperaturen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms2_temperatuur_1
- name: Celsensor 1
- - entity: sensor.pace_bms_bms2_temperatuur_2
- name: Celsensor 2
- - entity: sensor.pace_bms_bms2_temperatuur_3
- name: Celsensor 3
- - entity: sensor.pace_bms_bms2_temperatuur_4
- name: Celsensor 4
- - entity: sensor.pace_bms_bms2_environment_temperature
- name: Omgeving
- - type: entities
- title: Cellen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms2_min_cell_voltage
- name: Laagste cel
- - entity: sensor.pace_bms_bms2_avg_cell_voltage
- name: Gemiddeld
- - entity: sensor.pace_bms_bms2_max_cell_voltage
- name: Hoogste cel
- - entity: sensor.pace_bms_bms2_max_cell_differential
- name: Verschil
- - entity: sensor.pace_bms_bms2_balancing_cells
- name: Balancing
- icon: mdi:scale-balance
- - type: vertical-stack
- grid_options:
- columns: 12
- cards:
- - type: markdown
- title: Status
- content: >+
- | | Status | Ruw |
- |:--|:--|--:|
- | **Systeem** | {{
- states('sensor.pace_bms_bms2_system_status') if
- states('sensor.pace_bms_bms2_system_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms2_system_status_raw') |
- int(0)) }} |
- | **Waarschuwing** | {{
- states('sensor.pace_bms_bms2_warning_status') if
- states('sensor.pace_bms_bms2_warning_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | |
- | **Bescherming** | {{
- states('sensor.pace_bms_bms2_protection_status') if
- states('sensor.pace_bms_bms2_protection_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms2_protection1_raw') |
- int(0)) }} / {{ '0x%04X' |
- format(states('sensor.pace_bms_bms2_protection2_raw') |
- int(0)) }} |
- | **Fout** | {{ states('sensor.pace_bms_bms2_fault_status') if
- states('sensor.pace_bms_bms2_fault_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms2_fault_status_raw') |
- int(0)) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms2_balancing_status') if
- states('sensor.pace_bms_bms2_balancing_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms2_balancing_status_raw') |
- int(0)) }} |
- | **Configuratie** | {{
- states('sensor.pace_bms_bms2_configuration_status') if
- states('sensor.pace_bms_bms2_configuration_status') not in
- ['', 'unknown', 'unavailable'] else '–' }} | |
- - type: markdown
- content: >
- <details><summary><b>Hoe lees ik dit?</b></summary>
- - **Status** is wat de BMS zelf rapporteert. Een – betekent:
- niets actief.
- - **Waarschuwing**: een waarde nadert een grens. Er wordt nog
- niet ingegrepen.
- - **Bescherming**: de BMS heeft ingegrepen, bijv. laden of
- ontladen geblokkeerd bij te hoge of te lage celspanning, te
- hoge stroom of een temperatuur buiten bereik. Dit heft
- zichzelf meestal op zodra de waarde weer normaal is.
- - **Fout**: een hardwareprobleem (meting, MOSFET,
- communicatie). Dit verdwijnt meestal niet vanzelf. Blijft het
- staan, neem dan contact op met de installateur.
- - **Ruw** is de registerwaarde als bitmask. `0x0000` = niets
- gezet. Een waarde ongelijk aan 0 terwijl de Status-kolom leeg
- is, is een informatief bit (bijv. "volledig geladen") en geen
- probleem.
- - Wil je terugzien wanneer iets speelde, open dan de entiteit
- (bijv. *BMS2 Protection Status*) via **Settings → Entities**
- en bekijk de geschiedenis.
- </details>
- - type: grid
- column_span: 3
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Min / gem. / max cel (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms2_min_cell_voltage
- name: Min
- float_precision: 3
- color: '#1e88e5'
- - entity: sensor.pace_bms_bms2_avg_cell_voltage
- name: Gem.
- float_precision: 3
- color: '#2196F3'
- - entity: sensor.pace_bms_bms2_max_cell_voltage
- name: Max
- float_precision: 3
- color: '#e53935'
- yaxis:
- - decimals: 3
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms2_max_cell_differential
- name: Δ
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- color: '#2196F3'
- yaxis:
- - min: 0
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Alle cellen (12 u)
- show_states: false
- colorize_states: true
- graph_span: 12h
- apex_config:
- chart:
- height: 320
- toolbar:
- show: false
- legend:
- show: true
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms2_cel_01_voltage
- name: '1'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_02_voltage
- name: '2'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_03_voltage
- name: '3'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_04_voltage
- name: '4'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_05_voltage
- name: '5'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_06_voltage
- name: '6'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_07_voltage
- name: '7'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_08_voltage
- name: '8'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_09_voltage
- name: '9'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_10_voltage
- name: '10'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_11_voltage
- name: '11'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_12_voltage
- name: '12'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_13_voltage
- name: '13'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_14_voltage
- name: '14'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_15_voltage
- name: '15'
- float_precision: 3
- - entity: sensor.pace_bms_bms2_cel_16_voltage
- name: '16'
- float_precision: 3
- yaxis:
- - min: '|-0.01|'
- max: '|+0.01|'
- decimals: 3
- grid_options:
- columns: full
- - type: custom:apexcharts-card
- header:
- show: true
- title: Stroom & SOC (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms2_current
- name: Stroom
- float_precision: 1
- yaxis_id: a
- color: '#2196F3'
- - entity: sensor.pace_bms_bms2_soc
- name: SOC
- float_precision: 0
- yaxis_id: soc
- color: '#9e9e9e'
- - entity: sensor.coulomb_bms2_soc
- name: Coulomb SOC
- float_precision: 1
- yaxis_id: soc
- color: '#2196F3'
- yaxis:
- - id: a
- decimals: 1
- - id: soc
- opposite: true
- min: 0
- max: 100
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Temperaturen (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms2_temperatuur_1
- name: T1
- float_precision: 1
- color: '#ef5350'
- - entity: sensor.pace_bms_bms2_temperatuur_2
- name: T2
- float_precision: 1
- color: '#ffa726'
- - entity: sensor.pace_bms_bms2_temperatuur_3
- name: T3
- float_precision: 1
- color: '#66bb6a'
- - entity: sensor.pace_bms_bms2_temperatuur_4
- name: T4
- float_precision: 1
- color: '#42a5f5'
- - entity: sensor.pace_bms_bms2_environment_temperature
- name: Omg.
- float_precision: 1
- color: '#9e9e9e'
- yaxis:
- - decimals: 1
- grid_options:
- columns: 18
- - title: BMS 3
- path: bms3
- icon: mdi:battery
- type: sections
- max_columns: 3
- dense_section_placement: false
- sections:
- - type: grid
- column_span: 3
- cards:
- - type: custom:mushroom-template-card
- primary: ACCU 3 · positie 3 van boven · adres 5
- secondary: >-
- {%- set ok = ['', 'unknown', 'unavailable', 'none', 'normal',
- 'ok'] -%}
- {%- set ns = namespace(t=[]) -%}
- {%- for s in [states('sensor.pace_bms_bms3_protection_status'),
- states('sensor.pace_bms_bms3_fault_status')] if s | lower not in
- ok -%}{%- set ns.t = ns.t + [s] -%}{%- endfor -%}
- {{ states('sensor.pace_bms_bms3_system_status') or 'Normaal' }} ·
- {{ states('sensor.pace_bms_bms3_balancing_cells') }}{{ ' · ⚠️ ' ~
- (ns.t | join('; ')) if ns.t | count > 0 else '' }}
- icon: >-
- {% set soc = states('sensor.pace_bms_bms3_soc') | float(0) %}
- {% if soc >= 95 %}mdi:battery{% elif soc >= 85 %}mdi:battery-90{%
- elif soc >= 75 %}mdi:battery-80{% elif soc >= 65
- %}mdi:battery-70{% elif soc >= 55 %}mdi:battery-60{% elif soc >=
- 45 %}mdi:battery-50{% elif soc >= 35 %}mdi:battery-40{% elif soc
- >= 25 %}mdi:battery-30{% elif soc >= 15 %}mdi:battery-20{% elif
- soc >= 5 %}mdi:battery-10{% else %}mdi:battery-alert{% endif %}
- color: >-
- {% set soc = states('sensor.pace_bms_bms3_soc') | float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- badge_icon: >-
- {% set ok = ['', 'unknown', 'unavailable', 'none', 'normal', 'ok']
- %}{% if states('sensor.pace_bms_bms3_protection_status') | lower
- not in ok or states('sensor.pace_bms_bms3_fault_status') | lower
- not in ok %}mdi:alert{% endif %}
- badge_color: red
- tap_action:
- action: navigate
- navigation_path: bms-overzicht
- grid_options:
- columns: full
- rows: 1
- - type: tile
- entity: sensor.pace_bms_bms3_soc
- name: SOC
- - type: tile
- entity: sensor.coulomb_bms3_soc
- name: Coulomb SOC
- icon: mdi:battery-sync
- - type: tile
- entity: sensor.pace_bms_bms3_total_voltage
- name: Spanning
- - type: tile
- entity: sensor.pace_bms_bms3_current
- name: Stroom
- - type: tile
- entity: sensor.pace_bms_bms3_power
- name: Vermogen
- - type: tile
- entity: sensor.pace_bms_bms3_max_cell_differential
- name: Celverschil
- icon: mdi:arrow-expand-vertical
- - type: tile
- entity: sensor.pace_bms_bms3_full_capacity
- name: Capaciteit
- - type: tile
- entity: script.coulomb_herijk
- name: Herijk Coulomb
- icon: mdi:battery-sync
- tap_action:
- action: perform-action
- perform_action: script.coulomb_herijk
- data:
- module: 3
- confirmation:
- text: Coulomb-SOC van BMS 3 gelijkzetten aan de SOC van de BMS?
- - type: grid
- column_span: 2
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celspanningen
- show_states: false
- graph_span: 1min
- span:
- end: minute
- update_interval: 30s
- yaxis:
- - min: '|-0.005|'
- max: '|+0.005|'
- decimals: 3
- apex_config:
- tickAmount: 4
- apex_config:
- chart:
- height: 330
- legend:
- show: false
- xaxis:
- labels:
- show: false
- axisTicks:
- show: false
- plotOptions:
- bar:
- columnWidth: 80%
- dataLabels:
- enabled: false
- tooltip:
- x:
- show: true
- formatter: >
- EVAL:function(val) { return 'Cel ' + Math.round((val %
- 60000) / 3500); }
- series:
- - entity: sensor.pace_bms_bms3_cel_01_voltage
- name: Spanning
- type: column
- color: '#FF9800'
- float_precision: 3
- unit: V
- data_generator: >
- const base = entity.entity_id.replace(/_cel_\d+_voltage$/,
- '');
- const t0 = start.getTime();
- const out = [];
- for (let i = 1; i <= 16; i++) {
- const s = hass.states[`${base}_cel_${String(i).padStart(2, '0')}_voltage`];
- const v = s ? parseFloat(s.state) : NaN;
- if (!isNaN(v)) out.push([t0 + i * 3500, v]);
- }
- return out;
- grid_options:
- columns: full
- - type: grid
- column_span: 1
- cards:
- - type: markdown
- content: >
- {%- set p = 'sensor.pace_bms_bms3_cel_' -%}
- {%- set ns = namespace(v=[]) -%}
- {%- for i in range(1, 17) -%}
- {%- set ns.v = ns.v + [states(p ~ ('%02d' | format(i)) ~
- '_voltage') | float(0)] -%}
- {%- endfor -%}
- {%- set bal = states('sensor.pace_bms_bms3_balancing_status_raw')
- | int(0) -%}
- {%- set ok = ns.v | select('>', 0) | list -%}
- {%- if ok | count == 16 -%}
- {%- set vmin = ok | min -%}{%- set vmax = ok | max -%}{%- set avg
- = (ok | sum) / 16 -%}
- {%- macro c(i) -%}
- {%- set v = ns.v[i - 1] -%}
- {%- set d = ((v - avg) * 1000) | round(0) | int -%}
- {%- set s = '%.3f' | format(v) -%}
- {{ i }}{{ ' ⚖️' if (bal // (2 ** (i - 1))) % 2 == 1 else '' }} |
- {% if v == vmax %}<font color="#e53935">**{{ s }}**</font>{% elif
- v == vmin %}<font color="#1e88e5">**{{ s }}**</font>{% else %}{{ s
- }}{% endif %} | {{ '%+d' | format(d) }}
- {%- endmacro -%}
- Gem. **{{ '%.3f' | format(avg) }} V** · Δ **{{ ((vmax - vmin) *
- 1000) | round(0) | int }} mV**
- | Cel | V | mV | Cel | V | mV |
- |:--|--:|--:|:--|--:|--:|
- {% for i in range(1, 9) -%}
- | {{ c(i) }} | {{ c(i + 8) }} |
- {% endfor %}
- <font color="#e53935">■</font> hoogste · <font
- color="#1e88e5">■</font> laagste · ⚖️ balanceert · mV t.o.v. gem.
- {%- else -%}
- Celdata (nog) niet beschikbaar.
- {%- endif %}
- grid_options:
- columns: full
- - type: grid
- column_span: 3
- cards:
- - type: entities
- title: Temperaturen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms3_temperatuur_1
- name: Celsensor 1
- - entity: sensor.pace_bms_bms3_temperatuur_2
- name: Celsensor 2
- - entity: sensor.pace_bms_bms3_temperatuur_3
- name: Celsensor 3
- - entity: sensor.pace_bms_bms3_temperatuur_4
- name: Celsensor 4
- - entity: sensor.pace_bms_bms3_environment_temperature
- name: Omgeving
- - type: entities
- title: Cellen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms3_min_cell_voltage
- name: Laagste cel
- - entity: sensor.pace_bms_bms3_avg_cell_voltage
- name: Gemiddeld
- - entity: sensor.pace_bms_bms3_max_cell_voltage
- name: Hoogste cel
- - entity: sensor.pace_bms_bms3_max_cell_differential
- name: Verschil
- - entity: sensor.pace_bms_bms3_balancing_cells
- name: Balancing
- icon: mdi:scale-balance
- - type: vertical-stack
- grid_options:
- columns: 12
- cards:
- - type: markdown
- title: Status
- content: >+
- | | Status | Ruw |
- |:--|:--|--:|
- | **Systeem** | {{
- states('sensor.pace_bms_bms3_system_status') if
- states('sensor.pace_bms_bms3_system_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms3_system_status_raw') |
- int(0)) }} |
- | **Waarschuwing** | {{
- states('sensor.pace_bms_bms3_warning_status') if
- states('sensor.pace_bms_bms3_warning_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | |
- | **Bescherming** | {{
- states('sensor.pace_bms_bms3_protection_status') if
- states('sensor.pace_bms_bms3_protection_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms3_protection1_raw') |
- int(0)) }} / {{ '0x%04X' |
- format(states('sensor.pace_bms_bms3_protection2_raw') |
- int(0)) }} |
- | **Fout** | {{ states('sensor.pace_bms_bms3_fault_status') if
- states('sensor.pace_bms_bms3_fault_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms3_fault_status_raw') |
- int(0)) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms3_balancing_status') if
- states('sensor.pace_bms_bms3_balancing_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms3_balancing_status_raw') |
- int(0)) }} |
- | **Configuratie** | {{
- states('sensor.pace_bms_bms3_configuration_status') if
- states('sensor.pace_bms_bms3_configuration_status') not in
- ['', 'unknown', 'unavailable'] else '–' }} | |
- - type: markdown
- content: >
- <details><summary><b>Hoe lees ik dit?</b></summary>
- - **Status** is wat de BMS zelf rapporteert. Een – betekent:
- niets actief.
- - **Waarschuwing**: een waarde nadert een grens. Er wordt nog
- niet ingegrepen.
- - **Bescherming**: de BMS heeft ingegrepen, bijv. laden of
- ontladen geblokkeerd bij te hoge of te lage celspanning, te
- hoge stroom of een temperatuur buiten bereik. Dit heft
- zichzelf meestal op zodra de waarde weer normaal is.
- - **Fout**: een hardwareprobleem (meting, MOSFET,
- communicatie). Dit verdwijnt meestal niet vanzelf. Blijft het
- staan, neem dan contact op met de installateur.
- - **Ruw** is de registerwaarde als bitmask. `0x0000` = niets
- gezet. Een waarde ongelijk aan 0 terwijl de Status-kolom leeg
- is, is een informatief bit (bijv. "volledig geladen") en geen
- probleem.
- - Wil je terugzien wanneer iets speelde, open dan de entiteit
- (bijv. *BMS3 Protection Status*) via **Settings → Entities**
- en bekijk de geschiedenis.
- </details>
- - type: grid
- column_span: 3
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Min / gem. / max cel (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms3_min_cell_voltage
- name: Min
- float_precision: 3
- color: '#1e88e5'
- - entity: sensor.pace_bms_bms3_avg_cell_voltage
- name: Gem.
- float_precision: 3
- color: '#FF9800'
- - entity: sensor.pace_bms_bms3_max_cell_voltage
- name: Max
- float_precision: 3
- color: '#e53935'
- yaxis:
- - decimals: 3
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms3_max_cell_differential
- name: Δ
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- color: '#FF9800'
- yaxis:
- - min: 0
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Alle cellen (12 u)
- show_states: false
- colorize_states: true
- graph_span: 12h
- apex_config:
- chart:
- height: 320
- toolbar:
- show: false
- legend:
- show: true
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms3_cel_01_voltage
- name: '1'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_02_voltage
- name: '2'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_03_voltage
- name: '3'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_04_voltage
- name: '4'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_05_voltage
- name: '5'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_06_voltage
- name: '6'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_07_voltage
- name: '7'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_08_voltage
- name: '8'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_09_voltage
- name: '9'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_10_voltage
- name: '10'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_11_voltage
- name: '11'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_12_voltage
- name: '12'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_13_voltage
- name: '13'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_14_voltage
- name: '14'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_15_voltage
- name: '15'
- float_precision: 3
- - entity: sensor.pace_bms_bms3_cel_16_voltage
- name: '16'
- float_precision: 3
- yaxis:
- - min: '|-0.01|'
- max: '|+0.01|'
- decimals: 3
- grid_options:
- columns: full
- - type: custom:apexcharts-card
- header:
- show: true
- title: Stroom & SOC (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms3_current
- name: Stroom
- float_precision: 1
- yaxis_id: a
- color: '#FF9800'
- - entity: sensor.pace_bms_bms3_soc
- name: SOC
- float_precision: 0
- yaxis_id: soc
- color: '#9e9e9e'
- - entity: sensor.coulomb_bms3_soc
- name: Coulomb SOC
- float_precision: 1
- yaxis_id: soc
- color: '#FF9800'
- yaxis:
- - id: a
- decimals: 1
- - id: soc
- opposite: true
- min: 0
- max: 100
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Temperaturen (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms3_temperatuur_1
- name: T1
- float_precision: 1
- color: '#ef5350'
- - entity: sensor.pace_bms_bms3_temperatuur_2
- name: T2
- float_precision: 1
- color: '#ffa726'
- - entity: sensor.pace_bms_bms3_temperatuur_3
- name: T3
- float_precision: 1
- color: '#66bb6a'
- - entity: sensor.pace_bms_bms3_temperatuur_4
- name: T4
- float_precision: 1
- color: '#42a5f5'
- - entity: sensor.pace_bms_bms3_environment_temperature
- name: Omg.
- float_precision: 1
- color: '#9e9e9e'
- yaxis:
- - decimals: 1
- grid_options:
- columns: 18
- - title: BMS 4
- path: bms4
- icon: mdi:battery
- type: sections
- max_columns: 3
- dense_section_placement: false
- sections:
- - type: grid
- column_span: 3
- cards:
- - type: custom:mushroom-template-card
- primary: ACCU 4 · positie 4 van boven · adres 9
- secondary: >-
- {%- set ok = ['', 'unknown', 'unavailable', 'none', 'normal',
- 'ok'] -%}
- {%- set ns = namespace(t=[]) -%}
- {%- for s in [states('sensor.pace_bms_bms4_protection_status'),
- states('sensor.pace_bms_bms4_fault_status')] if s | lower not in
- ok -%}{%- set ns.t = ns.t + [s] -%}{%- endfor -%}
- {{ states('sensor.pace_bms_bms4_system_status') or 'Normaal' }} ·
- {{ states('sensor.pace_bms_bms4_balancing_cells') }}{{ ' · ⚠️ ' ~
- (ns.t | join('; ')) if ns.t | count > 0 else '' }}
- icon: >-
- {% set soc = states('sensor.pace_bms_bms4_soc') | float(0) %}
- {% if soc >= 95 %}mdi:battery{% elif soc >= 85 %}mdi:battery-90{%
- elif soc >= 75 %}mdi:battery-80{% elif soc >= 65
- %}mdi:battery-70{% elif soc >= 55 %}mdi:battery-60{% elif soc >=
- 45 %}mdi:battery-50{% elif soc >= 35 %}mdi:battery-40{% elif soc
- >= 25 %}mdi:battery-30{% elif soc >= 15 %}mdi:battery-20{% elif
- soc >= 5 %}mdi:battery-10{% else %}mdi:battery-alert{% endif %}
- color: >-
- {% set soc = states('sensor.pace_bms_bms4_soc') | float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- badge_icon: >-
- {% set ok = ['', 'unknown', 'unavailable', 'none', 'normal', 'ok']
- %}{% if states('sensor.pace_bms_bms4_protection_status') | lower
- not in ok or states('sensor.pace_bms_bms4_fault_status') | lower
- not in ok %}mdi:alert{% endif %}
- badge_color: red
- tap_action:
- action: navigate
- navigation_path: bms-overzicht
- grid_options:
- columns: full
- rows: 1
- - type: tile
- entity: sensor.pace_bms_bms4_soc
- name: SOC
- - type: tile
- entity: sensor.coulomb_bms4_soc
- name: Coulomb SOC
- icon: mdi:battery-sync
- - type: tile
- entity: sensor.pace_bms_bms4_total_voltage
- name: Spanning
- - type: tile
- entity: sensor.pace_bms_bms4_current
- name: Stroom
- - type: tile
- entity: sensor.pace_bms_bms4_power
- name: Vermogen
- - type: tile
- entity: sensor.pace_bms_bms4_max_cell_differential
- name: Celverschil
- icon: mdi:arrow-expand-vertical
- - type: tile
- entity: sensor.pace_bms_bms4_full_capacity
- name: Capaciteit
- - type: tile
- entity: script.coulomb_herijk
- name: Herijk Coulomb
- icon: mdi:battery-sync
- tap_action:
- action: perform-action
- perform_action: script.coulomb_herijk
- data:
- module: 4
- confirmation:
- text: Coulomb-SOC van BMS 4 gelijkzetten aan de SOC van de BMS?
- - type: grid
- column_span: 2
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celspanningen
- show_states: false
- graph_span: 1min
- span:
- end: minute
- update_interval: 30s
- yaxis:
- - min: '|-0.005|'
- max: '|+0.005|'
- decimals: 3
- apex_config:
- tickAmount: 4
- apex_config:
- chart:
- height: 330
- legend:
- show: false
- xaxis:
- labels:
- show: false
- axisTicks:
- show: false
- plotOptions:
- bar:
- columnWidth: 80%
- dataLabels:
- enabled: false
- tooltip:
- x:
- show: true
- formatter: >
- EVAL:function(val) { return 'Cel ' + Math.round((val %
- 60000) / 3500); }
- series:
- - entity: sensor.pace_bms_bms4_cel_01_voltage
- name: Spanning
- type: column
- color: '#E91E63'
- float_precision: 3
- unit: V
- data_generator: >
- const base = entity.entity_id.replace(/_cel_\d+_voltage$/,
- '');
- const t0 = start.getTime();
- const out = [];
- for (let i = 1; i <= 16; i++) {
- const s = hass.states[`${base}_cel_${String(i).padStart(2, '0')}_voltage`];
- const v = s ? parseFloat(s.state) : NaN;
- if (!isNaN(v)) out.push([t0 + i * 3500, v]);
- }
- return out;
- grid_options:
- columns: full
- - type: grid
- column_span: 1
- cards:
- - type: markdown
- content: >
- {%- set p = 'sensor.pace_bms_bms4_cel_' -%}
- {%- set ns = namespace(v=[]) -%}
- {%- for i in range(1, 17) -%}
- {%- set ns.v = ns.v + [states(p ~ ('%02d' | format(i)) ~
- '_voltage') | float(0)] -%}
- {%- endfor -%}
- {%- set bal = states('sensor.pace_bms_bms4_balancing_status_raw')
- | int(0) -%}
- {%- set ok = ns.v | select('>', 0) | list -%}
- {%- if ok | count == 16 -%}
- {%- set vmin = ok | min -%}{%- set vmax = ok | max -%}{%- set avg
- = (ok | sum) / 16 -%}
- {%- macro c(i) -%}
- {%- set v = ns.v[i - 1] -%}
- {%- set d = ((v - avg) * 1000) | round(0) | int -%}
- {%- set s = '%.3f' | format(v) -%}
- {{ i }}{{ ' ⚖️' if (bal // (2 ** (i - 1))) % 2 == 1 else '' }} |
- {% if v == vmax %}<font color="#e53935">**{{ s }}**</font>{% elif
- v == vmin %}<font color="#1e88e5">**{{ s }}**</font>{% else %}{{ s
- }}{% endif %} | {{ '%+d' | format(d) }}
- {%- endmacro -%}
- Gem. **{{ '%.3f' | format(avg) }} V** · Δ **{{ ((vmax - vmin) *
- 1000) | round(0) | int }} mV**
- | Cel | V | mV | Cel | V | mV |
- |:--|--:|--:|:--|--:|--:|
- {% for i in range(1, 9) -%}
- | {{ c(i) }} | {{ c(i + 8) }} |
- {% endfor %}
- <font color="#e53935">■</font> hoogste · <font
- color="#1e88e5">■</font> laagste · ⚖️ balanceert · mV t.o.v. gem.
- {%- else -%}
- Celdata (nog) niet beschikbaar.
- {%- endif %}
- grid_options:
- columns: full
- - type: grid
- column_span: 3
- cards:
- - type: entities
- title: Temperaturen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms4_temperatuur_1
- name: Celsensor 1
- - entity: sensor.pace_bms_bms4_temperatuur_2
- name: Celsensor 2
- - entity: sensor.pace_bms_bms4_temperatuur_3
- name: Celsensor 3
- - entity: sensor.pace_bms_bms4_temperatuur_4
- name: Celsensor 4
- - entity: sensor.pace_bms_bms4_environment_temperature
- name: Omgeving
- - type: entities
- title: Cellen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms4_min_cell_voltage
- name: Laagste cel
- - entity: sensor.pace_bms_bms4_avg_cell_voltage
- name: Gemiddeld
- - entity: sensor.pace_bms_bms4_max_cell_voltage
- name: Hoogste cel
- - entity: sensor.pace_bms_bms4_max_cell_differential
- name: Verschil
- - entity: sensor.pace_bms_bms4_balancing_cells
- name: Balancing
- icon: mdi:scale-balance
- - type: vertical-stack
- grid_options:
- columns: 12
- cards:
- - type: markdown
- title: Status
- content: >+
- | | Status | Ruw |
- |:--|:--|--:|
- | **Systeem** | {{
- states('sensor.pace_bms_bms4_system_status') if
- states('sensor.pace_bms_bms4_system_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms4_system_status_raw') |
- int(0)) }} |
- | **Waarschuwing** | {{
- states('sensor.pace_bms_bms4_warning_status') if
- states('sensor.pace_bms_bms4_warning_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | |
- | **Bescherming** | {{
- states('sensor.pace_bms_bms4_protection_status') if
- states('sensor.pace_bms_bms4_protection_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms4_protection1_raw') |
- int(0)) }} / {{ '0x%04X' |
- format(states('sensor.pace_bms_bms4_protection2_raw') |
- int(0)) }} |
- | **Fout** | {{ states('sensor.pace_bms_bms4_fault_status') if
- states('sensor.pace_bms_bms4_fault_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms4_fault_status_raw') |
- int(0)) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms4_balancing_status') if
- states('sensor.pace_bms_bms4_balancing_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms4_balancing_status_raw') |
- int(0)) }} |
- | **Configuratie** | {{
- states('sensor.pace_bms_bms4_configuration_status') if
- states('sensor.pace_bms_bms4_configuration_status') not in
- ['', 'unknown', 'unavailable'] else '–' }} | |
- - type: markdown
- content: >
- <details><summary><b>Hoe lees ik dit?</b></summary>
- - **Status** is wat de BMS zelf rapporteert. Een – betekent:
- niets actief.
- - **Waarschuwing**: een waarde nadert een grens. Er wordt nog
- niet ingegrepen.
- - **Bescherming**: de BMS heeft ingegrepen, bijv. laden of
- ontladen geblokkeerd bij te hoge of te lage celspanning, te
- hoge stroom of een temperatuur buiten bereik. Dit heft
- zichzelf meestal op zodra de waarde weer normaal is.
- - **Fout**: een hardwareprobleem (meting, MOSFET,
- communicatie). Dit verdwijnt meestal niet vanzelf. Blijft het
- staan, neem dan contact op met de installateur.
- - **Ruw** is de registerwaarde als bitmask. `0x0000` = niets
- gezet. Een waarde ongelijk aan 0 terwijl de Status-kolom leeg
- is, is een informatief bit (bijv. "volledig geladen") en geen
- probleem.
- - Wil je terugzien wanneer iets speelde, open dan de entiteit
- (bijv. *BMS4 Protection Status*) via **Settings → Entities**
- en bekijk de geschiedenis.
- </details>
- - type: grid
- column_span: 3
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Min / gem. / max cel (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms4_min_cell_voltage
- name: Min
- float_precision: 3
- color: '#1e88e5'
- - entity: sensor.pace_bms_bms4_avg_cell_voltage
- name: Gem.
- float_precision: 3
- color: '#E91E63'
- - entity: sensor.pace_bms_bms4_max_cell_voltage
- name: Max
- float_precision: 3
- color: '#e53935'
- yaxis:
- - decimals: 3
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms4_max_cell_differential
- name: Δ
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- color: '#E91E63'
- yaxis:
- - min: 0
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Alle cellen (12 u)
- show_states: false
- colorize_states: true
- graph_span: 12h
- apex_config:
- chart:
- height: 320
- toolbar:
- show: false
- legend:
- show: true
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms4_cel_01_voltage
- name: '1'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_02_voltage
- name: '2'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_03_voltage
- name: '3'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_04_voltage
- name: '4'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_05_voltage
- name: '5'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_06_voltage
- name: '6'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_07_voltage
- name: '7'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_08_voltage
- name: '8'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_09_voltage
- name: '9'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_10_voltage
- name: '10'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_11_voltage
- name: '11'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_12_voltage
- name: '12'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_13_voltage
- name: '13'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_14_voltage
- name: '14'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_15_voltage
- name: '15'
- float_precision: 3
- - entity: sensor.pace_bms_bms4_cel_16_voltage
- name: '16'
- float_precision: 3
- yaxis:
- - min: '|-0.01|'
- max: '|+0.01|'
- decimals: 3
- grid_options:
- columns: full
- - type: custom:apexcharts-card
- header:
- show: true
- title: Stroom & SOC (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms4_current
- name: Stroom
- float_precision: 1
- yaxis_id: a
- color: '#E91E63'
- - entity: sensor.pace_bms_bms4_soc
- name: SOC
- float_precision: 0
- yaxis_id: soc
- color: '#9e9e9e'
- - entity: sensor.coulomb_bms4_soc
- name: Coulomb SOC
- float_precision: 1
- yaxis_id: soc
- color: '#E91E63'
- yaxis:
- - id: a
- decimals: 1
- - id: soc
- opposite: true
- min: 0
- max: 100
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Temperaturen (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms4_temperatuur_1
- name: T1
- float_precision: 1
- color: '#ef5350'
- - entity: sensor.pace_bms_bms4_temperatuur_2
- name: T2
- float_precision: 1
- color: '#ffa726'
- - entity: sensor.pace_bms_bms4_temperatuur_3
- name: T3
- float_precision: 1
- color: '#66bb6a'
- - entity: sensor.pace_bms_bms4_temperatuur_4
- name: T4
- float_precision: 1
- color: '#42a5f5'
- - entity: sensor.pace_bms_bms4_environment_temperature
- name: Omg.
- float_precision: 1
- color: '#9e9e9e'
- yaxis:
- - decimals: 1
- grid_options:
- columns: 18
- - title: BMS 5
- path: bms5
- icon: mdi:battery
- type: sections
- max_columns: 3
- dense_section_placement: false
- sections:
- - type: grid
- column_span: 3
- cards:
- - type: custom:mushroom-template-card
- primary: ACCU 5 · positie 5 van boven · adres 10
- secondary: >-
- {%- set ok = ['', 'unknown', 'unavailable', 'none', 'normal',
- 'ok'] -%}
- {%- set ns = namespace(t=[]) -%}
- {%- for s in [states('sensor.pace_bms_bms5_protection_status'),
- states('sensor.pace_bms_bms5_fault_status')] if s | lower not in
- ok -%}{%- set ns.t = ns.t + [s] -%}{%- endfor -%}
- {{ states('sensor.pace_bms_bms5_system_status') or 'Normaal' }} ·
- {{ states('sensor.pace_bms_bms5_balancing_cells') }}{{ ' · ⚠️ ' ~
- (ns.t | join('; ')) if ns.t | count > 0 else '' }}
- icon: >-
- {% set soc = states('sensor.pace_bms_bms5_soc') | float(0) %}
- {% if soc >= 95 %}mdi:battery{% elif soc >= 85 %}mdi:battery-90{%
- elif soc >= 75 %}mdi:battery-80{% elif soc >= 65
- %}mdi:battery-70{% elif soc >= 55 %}mdi:battery-60{% elif soc >=
- 45 %}mdi:battery-50{% elif soc >= 35 %}mdi:battery-40{% elif soc
- >= 25 %}mdi:battery-30{% elif soc >= 15 %}mdi:battery-20{% elif
- soc >= 5 %}mdi:battery-10{% else %}mdi:battery-alert{% endif %}
- color: >-
- {% set soc = states('sensor.pace_bms_bms5_soc') | float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- badge_icon: >-
- {% set ok = ['', 'unknown', 'unavailable', 'none', 'normal', 'ok']
- %}{% if states('sensor.pace_bms_bms5_protection_status') | lower
- not in ok or states('sensor.pace_bms_bms5_fault_status') | lower
- not in ok %}mdi:alert{% endif %}
- badge_color: red
- tap_action:
- action: navigate
- navigation_path: bms-overzicht
- grid_options:
- columns: full
- rows: 1
- - type: tile
- entity: sensor.pace_bms_bms5_soc
- name: SOC
- - type: tile
- entity: sensor.coulomb_bms5_soc
- name: Coulomb SOC
- icon: mdi:battery-sync
- - type: tile
- entity: sensor.pace_bms_bms5_total_voltage
- name: Spanning
- - type: tile
- entity: sensor.pace_bms_bms5_current
- name: Stroom
- - type: tile
- entity: sensor.pace_bms_bms5_power
- name: Vermogen
- - type: tile
- entity: sensor.pace_bms_bms5_max_cell_differential
- name: Celverschil
- icon: mdi:arrow-expand-vertical
- - type: tile
- entity: sensor.pace_bms_bms5_full_capacity
- name: Capaciteit
- - type: tile
- entity: script.coulomb_herijk
- name: Herijk Coulomb
- icon: mdi:battery-sync
- tap_action:
- action: perform-action
- perform_action: script.coulomb_herijk
- data:
- module: 5
- confirmation:
- text: Coulomb-SOC van BMS 5 gelijkzetten aan de SOC van de BMS?
- - type: grid
- column_span: 2
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celspanningen
- show_states: false
- graph_span: 1min
- span:
- end: minute
- update_interval: 30s
- yaxis:
- - min: '|-0.005|'
- max: '|+0.005|'
- decimals: 3
- apex_config:
- tickAmount: 4
- apex_config:
- chart:
- height: 330
- legend:
- show: false
- xaxis:
- labels:
- show: false
- axisTicks:
- show: false
- plotOptions:
- bar:
- columnWidth: 80%
- dataLabels:
- enabled: false
- tooltip:
- x:
- show: true
- formatter: >
- EVAL:function(val) { return 'Cel ' + Math.round((val %
- 60000) / 3500); }
- series:
- - entity: sensor.pace_bms_bms5_cel_01_voltage
- name: Spanning
- type: column
- color: '#9C27B0'
- float_precision: 3
- unit: V
- data_generator: >
- const base = entity.entity_id.replace(/_cel_\d+_voltage$/,
- '');
- const t0 = start.getTime();
- const out = [];
- for (let i = 1; i <= 16; i++) {
- const s = hass.states[`${base}_cel_${String(i).padStart(2, '0')}_voltage`];
- const v = s ? parseFloat(s.state) : NaN;
- if (!isNaN(v)) out.push([t0 + i * 3500, v]);
- }
- return out;
- grid_options:
- columns: full
- - type: grid
- column_span: 1
- cards:
- - type: markdown
- content: >
- {%- set p = 'sensor.pace_bms_bms5_cel_' -%}
- {%- set ns = namespace(v=[]) -%}
- {%- for i in range(1, 17) -%}
- {%- set ns.v = ns.v + [states(p ~ ('%02d' | format(i)) ~
- '_voltage') | float(0)] -%}
- {%- endfor -%}
- {%- set bal = states('sensor.pace_bms_bms5_balancing_status_raw')
- | int(0) -%}
- {%- set ok = ns.v | select('>', 0) | list -%}
- {%- if ok | count == 16 -%}
- {%- set vmin = ok | min -%}{%- set vmax = ok | max -%}{%- set avg
- = (ok | sum) / 16 -%}
- {%- macro c(i) -%}
- {%- set v = ns.v[i - 1] -%}
- {%- set d = ((v - avg) * 1000) | round(0) | int -%}
- {%- set s = '%.3f' | format(v) -%}
- {{ i }}{{ ' ⚖️' if (bal // (2 ** (i - 1))) % 2 == 1 else '' }} |
- {% if v == vmax %}<font color="#e53935">**{{ s }}**</font>{% elif
- v == vmin %}<font color="#1e88e5">**{{ s }}**</font>{% else %}{{ s
- }}{% endif %} | {{ '%+d' | format(d) }}
- {%- endmacro -%}
- Gem. **{{ '%.3f' | format(avg) }} V** · Δ **{{ ((vmax - vmin) *
- 1000) | round(0) | int }} mV**
- | Cel | V | mV | Cel | V | mV |
- |:--|--:|--:|:--|--:|--:|
- {% for i in range(1, 9) -%}
- | {{ c(i) }} | {{ c(i + 8) }} |
- {% endfor %}
- <font color="#e53935">■</font> hoogste · <font
- color="#1e88e5">■</font> laagste · ⚖️ balanceert · mV t.o.v. gem.
- {%- else -%}
- Celdata (nog) niet beschikbaar.
- {%- endif %}
- grid_options:
- columns: full
- - type: grid
- column_span: 3
- cards:
- - type: entities
- title: Temperaturen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms5_temperatuur_1
- name: Celsensor 1
- - entity: sensor.pace_bms_bms5_temperatuur_2
- name: Celsensor 2
- - entity: sensor.pace_bms_bms5_temperatuur_3
- name: Celsensor 3
- - entity: sensor.pace_bms_bms5_temperatuur_4
- name: Celsensor 4
- - entity: sensor.pace_bms_bms5_environment_temperature
- name: Omgeving
- - type: entities
- title: Cellen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms5_min_cell_voltage
- name: Laagste cel
- - entity: sensor.pace_bms_bms5_avg_cell_voltage
- name: Gemiddeld
- - entity: sensor.pace_bms_bms5_max_cell_voltage
- name: Hoogste cel
- - entity: sensor.pace_bms_bms5_max_cell_differential
- name: Verschil
- - entity: sensor.pace_bms_bms5_balancing_cells
- name: Balancing
- icon: mdi:scale-balance
- - type: vertical-stack
- grid_options:
- columns: 12
- cards:
- - type: markdown
- title: Status
- content: >+
- | | Status | Ruw |
- |:--|:--|--:|
- | **Systeem** | {{
- states('sensor.pace_bms_bms5_system_status') if
- states('sensor.pace_bms_bms5_system_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms5_system_status_raw') |
- int(0)) }} |
- | **Waarschuwing** | {{
- states('sensor.pace_bms_bms5_warning_status') if
- states('sensor.pace_bms_bms5_warning_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | |
- | **Bescherming** | {{
- states('sensor.pace_bms_bms5_protection_status') if
- states('sensor.pace_bms_bms5_protection_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms5_protection1_raw') |
- int(0)) }} / {{ '0x%04X' |
- format(states('sensor.pace_bms_bms5_protection2_raw') |
- int(0)) }} |
- | **Fout** | {{ states('sensor.pace_bms_bms5_fault_status') if
- states('sensor.pace_bms_bms5_fault_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms5_fault_status_raw') |
- int(0)) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms5_balancing_status') if
- states('sensor.pace_bms_bms5_balancing_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms5_balancing_status_raw') |
- int(0)) }} |
- | **Configuratie** | {{
- states('sensor.pace_bms_bms5_configuration_status') if
- states('sensor.pace_bms_bms5_configuration_status') not in
- ['', 'unknown', 'unavailable'] else '–' }} | |
- - type: markdown
- content: >
- <details><summary><b>Hoe lees ik dit?</b></summary>
- - **Status** is wat de BMS zelf rapporteert. Een – betekent:
- niets actief.
- - **Waarschuwing**: een waarde nadert een grens. Er wordt nog
- niet ingegrepen.
- - **Bescherming**: de BMS heeft ingegrepen, bijv. laden of
- ontladen geblokkeerd bij te hoge of te lage celspanning, te
- hoge stroom of een temperatuur buiten bereik. Dit heft
- zichzelf meestal op zodra de waarde weer normaal is.
- - **Fout**: een hardwareprobleem (meting, MOSFET,
- communicatie). Dit verdwijnt meestal niet vanzelf. Blijft het
- staan, neem dan contact op met de installateur.
- - **Ruw** is de registerwaarde als bitmask. `0x0000` = niets
- gezet. Een waarde ongelijk aan 0 terwijl de Status-kolom leeg
- is, is een informatief bit (bijv. "volledig geladen") en geen
- probleem.
- - Wil je terugzien wanneer iets speelde, open dan de entiteit
- (bijv. *BMS5 Protection Status*) via **Settings → Entities**
- en bekijk de geschiedenis.
- </details>
- - type: grid
- column_span: 3
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Min / gem. / max cel (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms5_min_cell_voltage
- name: Min
- float_precision: 3
- color: '#1e88e5'
- - entity: sensor.pace_bms_bms5_avg_cell_voltage
- name: Gem.
- float_precision: 3
- color: '#9C27B0'
- - entity: sensor.pace_bms_bms5_max_cell_voltage
- name: Max
- float_precision: 3
- color: '#e53935'
- yaxis:
- - decimals: 3
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms5_max_cell_differential
- name: Δ
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- color: '#9C27B0'
- yaxis:
- - min: 0
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Alle cellen (12 u)
- show_states: false
- colorize_states: true
- graph_span: 12h
- apex_config:
- chart:
- height: 320
- toolbar:
- show: false
- legend:
- show: true
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms5_cel_01_voltage
- name: '1'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_02_voltage
- name: '2'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_03_voltage
- name: '3'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_04_voltage
- name: '4'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_05_voltage
- name: '5'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_06_voltage
- name: '6'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_07_voltage
- name: '7'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_08_voltage
- name: '8'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_09_voltage
- name: '9'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_10_voltage
- name: '10'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_11_voltage
- name: '11'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_12_voltage
- name: '12'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_13_voltage
- name: '13'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_14_voltage
- name: '14'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_15_voltage
- name: '15'
- float_precision: 3
- - entity: sensor.pace_bms_bms5_cel_16_voltage
- name: '16'
- float_precision: 3
- yaxis:
- - min: '|-0.01|'
- max: '|+0.01|'
- decimals: 3
- grid_options:
- columns: full
- - type: custom:apexcharts-card
- header:
- show: true
- title: Stroom & SOC (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms5_current
- name: Stroom
- float_precision: 1
- yaxis_id: a
- color: '#9C27B0'
- - entity: sensor.pace_bms_bms5_soc
- name: SOC
- float_precision: 0
- yaxis_id: soc
- color: '#9e9e9e'
- - entity: sensor.coulomb_bms5_soc
- name: Coulomb SOC
- float_precision: 1
- yaxis_id: soc
- color: '#9C27B0'
- yaxis:
- - id: a
- decimals: 1
- - id: soc
- opposite: true
- min: 0
- max: 100
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Temperaturen (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms5_temperatuur_1
- name: T1
- float_precision: 1
- color: '#ef5350'
- - entity: sensor.pace_bms_bms5_temperatuur_2
- name: T2
- float_precision: 1
- color: '#ffa726'
- - entity: sensor.pace_bms_bms5_temperatuur_3
- name: T3
- float_precision: 1
- color: '#66bb6a'
- - entity: sensor.pace_bms_bms5_temperatuur_4
- name: T4
- float_precision: 1
- color: '#42a5f5'
- - entity: sensor.pace_bms_bms5_environment_temperature
- name: Omg.
- float_precision: 1
- color: '#9e9e9e'
- yaxis:
- - decimals: 1
- grid_options:
- columns: 18
- - title: BMS 6
- path: bms6
- icon: mdi:battery
- type: sections
- max_columns: 3
- dense_section_placement: false
- sections:
- - type: grid
- column_span: 3
- cards:
- - type: custom:mushroom-template-card
- primary: ACCU 6 · positie 6 van boven · adres 11
- secondary: >-
- {%- set ok = ['', 'unknown', 'unavailable', 'none', 'normal',
- 'ok'] -%}
- {%- set ns = namespace(t=[]) -%}
- {%- for s in [states('sensor.pace_bms_bms6_protection_status'),
- states('sensor.pace_bms_bms6_fault_status')] if s | lower not in
- ok -%}{%- set ns.t = ns.t + [s] -%}{%- endfor -%}
- {{ states('sensor.pace_bms_bms6_system_status') or 'Normaal' }} ·
- {{ states('sensor.pace_bms_bms6_balancing_cells') }}{{ ' · ⚠️ ' ~
- (ns.t | join('; ')) if ns.t | count > 0 else '' }}
- icon: >-
- {% set soc = states('sensor.pace_bms_bms6_soc') | float(0) %}
- {% if soc >= 95 %}mdi:battery{% elif soc >= 85 %}mdi:battery-90{%
- elif soc >= 75 %}mdi:battery-80{% elif soc >= 65
- %}mdi:battery-70{% elif soc >= 55 %}mdi:battery-60{% elif soc >=
- 45 %}mdi:battery-50{% elif soc >= 35 %}mdi:battery-40{% elif soc
- >= 25 %}mdi:battery-30{% elif soc >= 15 %}mdi:battery-20{% elif
- soc >= 5 %}mdi:battery-10{% else %}mdi:battery-alert{% endif %}
- color: >-
- {% set soc = states('sensor.pace_bms_bms6_soc') | float(0) %}
- {% if soc >= 75 %}green{% elif soc >= 50 %}amber{% elif soc >= 30
- %}orange{% else %}red{% endif %}
- badge_icon: >-
- {% set ok = ['', 'unknown', 'unavailable', 'none', 'normal', 'ok']
- %}{% if states('sensor.pace_bms_bms6_protection_status') | lower
- not in ok or states('sensor.pace_bms_bms6_fault_status') | lower
- not in ok %}mdi:alert{% endif %}
- badge_color: red
- tap_action:
- action: navigate
- navigation_path: bms-overzicht
- grid_options:
- columns: full
- rows: 1
- - type: tile
- entity: sensor.pace_bms_bms6_soc
- name: SOC
- - type: tile
- entity: sensor.coulomb_bms6_soc
- name: Coulomb SOC
- icon: mdi:battery-sync
- - type: tile
- entity: sensor.pace_bms_bms6_total_voltage
- name: Spanning
- - type: tile
- entity: sensor.pace_bms_bms6_current
- name: Stroom
- - type: tile
- entity: sensor.pace_bms_bms6_power
- name: Vermogen
- - type: tile
- entity: sensor.pace_bms_bms6_max_cell_differential
- name: Celverschil
- icon: mdi:arrow-expand-vertical
- - type: tile
- entity: sensor.pace_bms_bms6_full_capacity
- name: Capaciteit
- - type: tile
- entity: script.coulomb_herijk
- name: Herijk Coulomb
- icon: mdi:battery-sync
- tap_action:
- action: perform-action
- perform_action: script.coulomb_herijk
- data:
- module: 6
- confirmation:
- text: Coulomb-SOC van BMS 6 gelijkzetten aan de SOC van de BMS?
- - type: grid
- column_span: 2
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celspanningen
- show_states: false
- graph_span: 1min
- span:
- end: minute
- update_interval: 30s
- yaxis:
- - min: '|-0.005|'
- max: '|+0.005|'
- decimals: 3
- apex_config:
- tickAmount: 4
- apex_config:
- chart:
- height: 330
- legend:
- show: false
- xaxis:
- labels:
- show: false
- axisTicks:
- show: false
- plotOptions:
- bar:
- columnWidth: 80%
- dataLabels:
- enabled: false
- tooltip:
- x:
- show: true
- formatter: >
- EVAL:function(val) { return 'Cel ' + Math.round((val %
- 60000) / 3500); }
- series:
- - entity: sensor.pace_bms_bms6_cel_01_voltage
- name: Spanning
- type: column
- color: '#00BCD4'
- float_precision: 3
- unit: V
- data_generator: >
- const base = entity.entity_id.replace(/_cel_\d+_voltage$/,
- '');
- const t0 = start.getTime();
- const out = [];
- for (let i = 1; i <= 16; i++) {
- const s = hass.states[`${base}_cel_${String(i).padStart(2, '0')}_voltage`];
- const v = s ? parseFloat(s.state) : NaN;
- if (!isNaN(v)) out.push([t0 + i * 3500, v]);
- }
- return out;
- grid_options:
- columns: full
- - type: grid
- column_span: 1
- cards:
- - type: markdown
- content: >
- {%- set p = 'sensor.pace_bms_bms6_cel_' -%}
- {%- set ns = namespace(v=[]) -%}
- {%- for i in range(1, 17) -%}
- {%- set ns.v = ns.v + [states(p ~ ('%02d' | format(i)) ~
- '_voltage') | float(0)] -%}
- {%- endfor -%}
- {%- set bal = states('sensor.pace_bms_bms6_balancing_status_raw')
- | int(0) -%}
- {%- set ok = ns.v | select('>', 0) | list -%}
- {%- if ok | count == 16 -%}
- {%- set vmin = ok | min -%}{%- set vmax = ok | max -%}{%- set avg
- = (ok | sum) / 16 -%}
- {%- macro c(i) -%}
- {%- set v = ns.v[i - 1] -%}
- {%- set d = ((v - avg) * 1000) | round(0) | int -%}
- {%- set s = '%.3f' | format(v) -%}
- {{ i }}{{ ' ⚖️' if (bal // (2 ** (i - 1))) % 2 == 1 else '' }} |
- {% if v == vmax %}<font color="#e53935">**{{ s }}**</font>{% elif
- v == vmin %}<font color="#1e88e5">**{{ s }}**</font>{% else %}{{ s
- }}{% endif %} | {{ '%+d' | format(d) }}
- {%- endmacro -%}
- Gem. **{{ '%.3f' | format(avg) }} V** · Δ **{{ ((vmax - vmin) *
- 1000) | round(0) | int }} mV**
- | Cel | V | mV | Cel | V | mV |
- |:--|--:|--:|:--|--:|--:|
- {% for i in range(1, 9) -%}
- | {{ c(i) }} | {{ c(i + 8) }} |
- {% endfor %}
- <font color="#e53935">■</font> hoogste · <font
- color="#1e88e5">■</font> laagste · ⚖️ balanceert · mV t.o.v. gem.
- {%- else -%}
- Celdata (nog) niet beschikbaar.
- {%- endif %}
- grid_options:
- columns: full
- - type: grid
- column_span: 3
- cards:
- - type: entities
- title: Temperaturen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms6_temperatuur_1
- name: Celsensor 1
- - entity: sensor.pace_bms_bms6_temperatuur_2
- name: Celsensor 2
- - entity: sensor.pace_bms_bms6_temperatuur_3
- name: Celsensor 3
- - entity: sensor.pace_bms_bms6_temperatuur_4
- name: Celsensor 4
- - entity: sensor.pace_bms_bms6_environment_temperature
- name: Omgeving
- - type: entities
- title: Cellen
- grid_options:
- columns: 12
- entities:
- - entity: sensor.pace_bms_bms6_min_cell_voltage
- name: Laagste cel
- - entity: sensor.pace_bms_bms6_avg_cell_voltage
- name: Gemiddeld
- - entity: sensor.pace_bms_bms6_max_cell_voltage
- name: Hoogste cel
- - entity: sensor.pace_bms_bms6_max_cell_differential
- name: Verschil
- - entity: sensor.pace_bms_bms6_balancing_cells
- name: Balancing
- icon: mdi:scale-balance
- - type: vertical-stack
- grid_options:
- columns: 12
- cards:
- - type: markdown
- title: Status
- content: >+
- | | Status | Ruw |
- |:--|:--|--:|
- | **Systeem** | {{
- states('sensor.pace_bms_bms6_system_status') if
- states('sensor.pace_bms_bms6_system_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms6_system_status_raw') |
- int(0)) }} |
- | **Waarschuwing** | {{
- states('sensor.pace_bms_bms6_warning_status') if
- states('sensor.pace_bms_bms6_warning_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | |
- | **Bescherming** | {{
- states('sensor.pace_bms_bms6_protection_status') if
- states('sensor.pace_bms_bms6_protection_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms6_protection1_raw') |
- int(0)) }} / {{ '0x%04X' |
- format(states('sensor.pace_bms_bms6_protection2_raw') |
- int(0)) }} |
- | **Fout** | {{ states('sensor.pace_bms_bms6_fault_status') if
- states('sensor.pace_bms_bms6_fault_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms6_fault_status_raw') |
- int(0)) }} |
- | **Balancing** | {{
- states('sensor.pace_bms_bms6_balancing_status') if
- states('sensor.pace_bms_bms6_balancing_status') not in ['',
- 'unknown', 'unavailable'] else '–' }} | {{ '0x%04X' |
- format(states('sensor.pace_bms_bms6_balancing_status_raw') |
- int(0)) }} |
- | **Configuratie** | {{
- states('sensor.pace_bms_bms6_configuration_status') if
- states('sensor.pace_bms_bms6_configuration_status') not in
- ['', 'unknown', 'unavailable'] else '–' }} | |
- - type: markdown
- content: >
- <details><summary><b>Hoe lees ik dit?</b></summary>
- - **Status** is wat de BMS zelf rapporteert. Een – betekent:
- niets actief.
- - **Waarschuwing**: een waarde nadert een grens. Er wordt nog
- niet ingegrepen.
- - **Bescherming**: de BMS heeft ingegrepen, bijv. laden of
- ontladen geblokkeerd bij te hoge of te lage celspanning, te
- hoge stroom of een temperatuur buiten bereik. Dit heft
- zichzelf meestal op zodra de waarde weer normaal is.
- - **Fout**: een hardwareprobleem (meting, MOSFET,
- communicatie). Dit verdwijnt meestal niet vanzelf. Blijft het
- staan, neem dan contact op met de installateur.
- - **Ruw** is de registerwaarde als bitmask. `0x0000` = niets
- gezet. Een waarde ongelijk aan 0 terwijl de Status-kolom leeg
- is, is een informatief bit (bijv. "volledig geladen") en geen
- probleem.
- - Wil je terugzien wanneer iets speelde, open dan de entiteit
- (bijv. *BMS6 Protection Status*) via **Settings → Entities**
- en bekijk de geschiedenis.
- </details>
- - type: grid
- column_span: 3
- cards:
- - type: custom:apexcharts-card
- header:
- show: true
- title: Min / gem. / max cel (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms6_min_cell_voltage
- name: Min
- float_precision: 3
- color: '#1e88e5'
- - entity: sensor.pace_bms_bms6_avg_cell_voltage
- name: Gem.
- float_precision: 3
- color: '#00BCD4'
- - entity: sensor.pace_bms_bms6_max_cell_voltage
- name: Max
- float_precision: 3
- color: '#e53935'
- yaxis:
- - decimals: 3
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Celverschil (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms6_max_cell_differential
- name: Δ
- float_precision: 0
- transform: return x * 1000;
- unit: mV
- color: '#00BCD4'
- yaxis:
- - min: 0
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Alle cellen (12 u)
- show_states: false
- colorize_states: true
- graph_span: 12h
- apex_config:
- chart:
- height: 320
- toolbar:
- show: false
- legend:
- show: true
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms6_cel_01_voltage
- name: '1'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_02_voltage
- name: '2'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_03_voltage
- name: '3'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_04_voltage
- name: '4'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_05_voltage
- name: '5'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_06_voltage
- name: '6'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_07_voltage
- name: '7'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_08_voltage
- name: '8'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_09_voltage
- name: '9'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_10_voltage
- name: '10'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_11_voltage
- name: '11'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_12_voltage
- name: '12'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_13_voltage
- name: '13'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_14_voltage
- name: '14'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_15_voltage
- name: '15'
- float_precision: 3
- - entity: sensor.pace_bms_bms6_cel_16_voltage
- name: '16'
- float_precision: 3
- yaxis:
- - min: '|-0.01|'
- max: '|+0.01|'
- decimals: 3
- grid_options:
- columns: full
- - type: custom:apexcharts-card
- header:
- show: true
- title: Stroom & SOC (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms6_current
- name: Stroom
- float_precision: 1
- yaxis_id: a
- color: '#00BCD4'
- - entity: sensor.pace_bms_bms6_soc
- name: SOC
- float_precision: 0
- yaxis_id: soc
- color: '#9e9e9e'
- - entity: sensor.coulomb_bms6_soc
- name: Coulomb SOC
- float_precision: 1
- yaxis_id: soc
- color: '#00BCD4'
- yaxis:
- - id: a
- decimals: 1
- - id: soc
- opposite: true
- min: 0
- max: 100
- decimals: 0
- grid_options:
- columns: 18
- - type: custom:apexcharts-card
- header:
- show: true
- title: Temperaturen (24 u)
- show_states: true
- colorize_states: true
- graph_span: 24h
- apex_config:
- chart:
- height: 260
- toolbar:
- show: false
- legend:
- show: false
- fontSize: 11px
- tooltip:
- shared: true
- intersect: false
- xaxis:
- tooltip:
- enabled: false
- all_series_config:
- stroke_width: 1.5
- curve: smooth
- group_by:
- func: avg
- duration: 5min
- fill: last
- series:
- - entity: sensor.pace_bms_bms6_temperatuur_1
- name: T1
- float_precision: 1
- color: '#ef5350'
- - entity: sensor.pace_bms_bms6_temperatuur_2
- name: T2
- float_precision: 1
- color: '#ffa726'
- - entity: sensor.pace_bms_bms6_temperatuur_3
- name: T3
- float_precision: 1
- color: '#66bb6a'
- - entity: sensor.pace_bms_bms6_temperatuur_4
- name: T4
- float_precision: 1
- color: '#42a5f5'
- - entity: sensor.pace_bms_bms6_environment_temperature
- name: Omg.
- float_precision: 1
- color: '#9e9e9e'
- yaxis:
- - decimals: 1
- grid_options:
- columns: 18
Add Comment
Please, Sign In to add comment