Guest User

Sensors Coulomb

a guest
Nov 12th, 2026
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 22.47 KB | None | 0 0
  1. # =====================================================================
  2. # Coulombtelling voor 6x Pace BMS  (packages/batterij_coulomb.yaml)
  3. #
  4. # Gebaseerd op de logica van BEdashboard (coulomb-core-beta.js):
  5. #   * SOC wordt uit stroom geintegreerd (Ah), onafhankelijk van BMS-SOC
  6. #   * automatische ijking aan de randen: >= 95 % (laden) en <= 10 % (ontladen)
  7. #   * handmatig herijken via script.coulomb_herijk
  8. # Verschil met het BE-script: dat rekent vermogen (W) om naar Ah met een
  9. # spanningsprofiel. Jouw BMS levert de stroom (A) rechtstreeks, dus dat
  10. # profiel is hier niet nodig.
  11. #
  12. # Vereist in configuration.yaml:
  13. #   homeassistant:
  14. #     packages: !include_dir_named packages
  15. #
  16. # Aanname: sensor.pace_bms_bmsN_current is POSITIEF bij laden.
  17. # Is dat bij jou andersom: zet bij 'initial' van coulomb_stroomteken -1 (of pas
  18. # de waarde in de UI aan en draai script.coulomb_herijk). NB: 'initial' zet de
  19. # waarde bij elke herstart terug.
  20. # =====================================================================
  21.  
  22. input_number:
  23.   coulomb_stroomteken:
  24.     name: Coulomb stroomteken (1 = laden positief, -1 = laden negatief)
  25.     min: -1
  26.     max: 1
  27.     step: 2
  28.     initial: 1   # zonder initial begint een input_number op min (= -1)!
  29.     mode: box
  30.     icon: mdi:plus-minus-variant
  31.   coulomb_drempel_stroom:
  32.     name: Coulomb ijking stroomdrempel (A)
  33.     min: 0
  34.     max: 5
  35.     step: 0.1
  36.     initial: 0.3
  37.     mode: box
  38.     unit_of_measurement: A
  39.     icon: mdi:current-dc
  40.   coulomb_bms1_ah0:
  41.     name: Coulomb BMS1 Ah-stand bij 0 %
  42.     # -1000000 = nog niet geinitialiseerd (wordt automatisch gezet)
  43.     min: -1000000
  44.     max: 1000000
  45.     step: 0.001
  46.     mode: box
  47.     unit_of_measurement: Ah
  48.     icon: mdi:battery-sync
  49.   coulomb_bms2_ah0:
  50.     name: Coulomb BMS2 Ah-stand bij 0 %
  51.     # -1000000 = nog niet geinitialiseerd (wordt automatisch gezet)
  52.     min: -1000000
  53.     max: 1000000
  54.     step: 0.001
  55.     mode: box
  56.     unit_of_measurement: Ah
  57.     icon: mdi:battery-sync
  58.   coulomb_bms3_ah0:
  59.     name: Coulomb BMS3 Ah-stand bij 0 %
  60.     # -1000000 = nog niet geinitialiseerd (wordt automatisch gezet)
  61.     min: -1000000
  62.     max: 1000000
  63.     step: 0.001
  64.     mode: box
  65.     unit_of_measurement: Ah
  66.     icon: mdi:battery-sync
  67.   coulomb_bms4_ah0:
  68.     name: Coulomb BMS4 Ah-stand bij 0 %
  69.     # -1000000 = nog niet geinitialiseerd (wordt automatisch gezet)
  70.     min: -1000000
  71.     max: 1000000
  72.     step: 0.001
  73.     mode: box
  74.     unit_of_measurement: Ah
  75.     icon: mdi:battery-sync
  76.   coulomb_bms5_ah0:
  77.     name: Coulomb BMS5 Ah-stand bij 0 %
  78.     # -1000000 = nog niet geinitialiseerd (wordt automatisch gezet)
  79.     min: -1000000
  80.     max: 1000000
  81.     step: 0.001
  82.     mode: box
  83.     unit_of_measurement: Ah
  84.     icon: mdi:battery-sync
  85.   coulomb_bms6_ah0:
  86.     name: Coulomb BMS6 Ah-stand bij 0 %
  87.     # -1000000 = nog niet geinitialiseerd (wordt automatisch gezet)
  88.     min: -1000000
  89.     max: 1000000
  90.     step: 0.001
  91.     mode: box
  92.     unit_of_measurement: Ah
  93.     icon: mdi:battery-sync
  94.  
  95. sensor:
  96.   - platform: integration
  97.     source: sensor.coulomb_bms1_stroom
  98.     name: Coulomb BMS1 Ah
  99.     unique_id: coulomb_bms1_ah
  100.     method: trapezoidal
  101.     unit_time: h
  102.     round: 3
  103.     max_sub_interval: "00:00:30"
  104.   - platform: integration
  105.     source: sensor.coulomb_bms2_stroom
  106.     name: Coulomb BMS2 Ah
  107.     unique_id: coulomb_bms2_ah
  108.     method: trapezoidal
  109.     unit_time: h
  110.     round: 3
  111.     max_sub_interval: "00:00:30"
  112.   - platform: integration
  113.     source: sensor.coulomb_bms3_stroom
  114.     name: Coulomb BMS3 Ah
  115.     unique_id: coulomb_bms3_ah
  116.     method: trapezoidal
  117.     unit_time: h
  118.     round: 3
  119.     max_sub_interval: "00:00:30"
  120.   - platform: integration
  121.     source: sensor.coulomb_bms4_stroom
  122.     name: Coulomb BMS4 Ah
  123.     unique_id: coulomb_bms4_ah
  124.     method: trapezoidal
  125.     unit_time: h
  126.     round: 3
  127.     max_sub_interval: "00:00:30"
  128.   - platform: integration
  129.     source: sensor.coulomb_bms5_stroom
  130.     name: Coulomb BMS5 Ah
  131.     unique_id: coulomb_bms5_ah
  132.     method: trapezoidal
  133.     unit_time: h
  134.     round: 3
  135.     max_sub_interval: "00:00:30"
  136.   - platform: integration
  137.     source: sensor.coulomb_bms6_stroom
  138.     name: Coulomb BMS6 Ah
  139.     unique_id: coulomb_bms6_ah
  140.     method: trapezoidal
  141.     unit_time: h
  142.     round: 3
  143.     max_sub_interval: "00:00:30"
  144.  
  145. template:
  146.   - sensor:
  147.       - name: Coulomb BMS1 stroom
  148.         unique_id: coulomb_bms1_stroom
  149.         unit_of_measurement: A
  150.         device_class: current
  151.         state_class: measurement
  152.         availability: "{{ is_number(states('sensor.pace_bms_bms1_current')) }}"
  153.         state: >-
  154.           {{ (states('sensor.pace_bms_bms1_current') | float(0)
  155.               * states('input_number.coulomb_stroomteken') | float(1)) | round(3) }}
  156.       - name: Coulomb BMS2 stroom
  157.         unique_id: coulomb_bms2_stroom
  158.         unit_of_measurement: A
  159.         device_class: current
  160.         state_class: measurement
  161.         availability: "{{ is_number(states('sensor.pace_bms_bms2_current')) }}"
  162.         state: >-
  163.           {{ (states('sensor.pace_bms_bms2_current') | float(0)
  164.               * states('input_number.coulomb_stroomteken') | float(1)) | round(3) }}
  165.       - name: Coulomb BMS3 stroom
  166.         unique_id: coulomb_bms3_stroom
  167.         unit_of_measurement: A
  168.         device_class: current
  169.         state_class: measurement
  170.         availability: "{{ is_number(states('sensor.pace_bms_bms3_current')) }}"
  171.         state: >-
  172.           {{ (states('sensor.pace_bms_bms3_current') | float(0)
  173.               * states('input_number.coulomb_stroomteken') | float(1)) | round(3) }}
  174.       - name: Coulomb BMS4 stroom
  175.         unique_id: coulomb_bms4_stroom
  176.         unit_of_measurement: A
  177.         device_class: current
  178.         state_class: measurement
  179.         availability: "{{ is_number(states('sensor.pace_bms_bms4_current')) }}"
  180.         state: >-
  181.           {{ (states('sensor.pace_bms_bms4_current') | float(0)
  182.               * states('input_number.coulomb_stroomteken') | float(1)) | round(3) }}
  183.       - name: Coulomb BMS5 stroom
  184.         unique_id: coulomb_bms5_stroom
  185.         unit_of_measurement: A
  186.         device_class: current
  187.         state_class: measurement
  188.         availability: "{{ is_number(states('sensor.pace_bms_bms5_current')) }}"
  189.         state: >-
  190.           {{ (states('sensor.pace_bms_bms5_current') | float(0)
  191.               * states('input_number.coulomb_stroomteken') | float(1)) | round(3) }}
  192.       - name: Coulomb BMS6 stroom
  193.         unique_id: coulomb_bms6_stroom
  194.         unit_of_measurement: A
  195.         device_class: current
  196.         state_class: measurement
  197.         availability: "{{ is_number(states('sensor.pace_bms_bms6_current')) }}"
  198.         state: >-
  199.           {{ (states('sensor.pace_bms_bms6_current') | float(0)
  200.               * states('input_number.coulomb_stroomteken') | float(1)) | round(3) }}
  201.       - name: Coulomb BMS1 SOC
  202.         unique_id: coulomb_bms1_soc
  203.         unit_of_measurement: "%"
  204.         state_class: measurement
  205.         icon: mdi:battery-sync
  206.         availability: >-
  207.           {{ is_number(states('sensor.coulomb_bms1_ah'))
  208.              and states('input_number.coulomb_bms1_ah0') | float(-1000000) > -999999
  209.              and states('sensor.pace_bms_bms1_full_capacity') | float(0) > 0 }}
  210.         state: >-
  211.           {% set cap = [states('sensor.pace_bms_bms1_full_capacity') | float(0), 330] | min %}
  212.           {% set ruw = 100 * (states('sensor.coulomb_bms1_ah') | float(0)
  213.                               - states('input_number.coulomb_bms1_ah0') | float(0)) / cap %}
  214.           {{ [0, [100, ruw] | min] | max | round(1) }}
  215.         attributes:
  216.           ongeklemd: >-
  217.             {% set cap = [states('sensor.pace_bms_bms1_full_capacity') | float(0), 330] | min %}
  218.             {{ (100 * (states('sensor.coulomb_bms1_ah') | float(0)
  219.                        - states('input_number.coulomb_bms1_ah0') | float(0)) / cap) | round(2) }}
  220.           bms_soc: "{{ states('sensor.pace_bms_bms1_soc') | float(none) }}"
  221.           verschil: >-
  222.             {% set b = states('sensor.pace_bms_bms1_soc') | float(none) %}
  223.             {% set c = states('sensor.coulomb_bms1_soc') | float(none) %}
  224.             {{ (c - b) | round(1) if b is not none and c is not none else none }}
  225.           capaciteit_ah: >-
  226.             {{ [states('sensor.pace_bms_bms1_full_capacity') | float(0), 330] | min }}
  227.           ah_resterend: >-
  228.             {{ (states('sensor.coulomb_bms1_ah') | float(0)
  229.                 - states('input_number.coulomb_bms1_ah0') | float(0)) | round(1) }}
  230.       - name: Coulomb BMS2 SOC
  231.         unique_id: coulomb_bms2_soc
  232.         unit_of_measurement: "%"
  233.         state_class: measurement
  234.         icon: mdi:battery-sync
  235.         availability: >-
  236.           {{ is_number(states('sensor.coulomb_bms2_ah'))
  237.              and states('input_number.coulomb_bms2_ah0') | float(-1000000) > -999999
  238.              and states('sensor.pace_bms_bms2_full_capacity') | float(0) > 0 }}
  239.         state: >-
  240.           {% set cap = [states('sensor.pace_bms_bms2_full_capacity') | float(0), 330] | min %}
  241.           {% set ruw = 100 * (states('sensor.coulomb_bms2_ah') | float(0)
  242.                               - states('input_number.coulomb_bms2_ah0') | float(0)) / cap %}
  243.           {{ [0, [100, ruw] | min] | max | round(1) }}
  244.         attributes:
  245.           ongeklemd: >-
  246.             {% set cap = [states('sensor.pace_bms_bms2_full_capacity') | float(0), 330] | min %}
  247.             {{ (100 * (states('sensor.coulomb_bms2_ah') | float(0)
  248.                        - states('input_number.coulomb_bms2_ah0') | float(0)) / cap) | round(2) }}
  249.           bms_soc: "{{ states('sensor.pace_bms_bms2_soc') | float(none) }}"
  250.           verschil: >-
  251.             {% set b = states('sensor.pace_bms_bms2_soc') | float(none) %}
  252.             {% set c = states('sensor.coulomb_bms2_soc') | float(none) %}
  253.             {{ (c - b) | round(1) if b is not none and c is not none else none }}
  254.           capaciteit_ah: >-
  255.             {{ [states('sensor.pace_bms_bms2_full_capacity') | float(0), 330] | min }}
  256.           ah_resterend: >-
  257.             {{ (states('sensor.coulomb_bms2_ah') | float(0)
  258.                 - states('input_number.coulomb_bms2_ah0') | float(0)) | round(1) }}
  259.       - name: Coulomb BMS3 SOC
  260.         unique_id: coulomb_bms3_soc
  261.         unit_of_measurement: "%"
  262.         state_class: measurement
  263.         icon: mdi:battery-sync
  264.         availability: >-
  265.           {{ is_number(states('sensor.coulomb_bms3_ah'))
  266.              and states('input_number.coulomb_bms3_ah0') | float(-1000000) > -999999
  267.              and states('sensor.pace_bms_bms3_full_capacity') | float(0) > 0 }}
  268.         state: >-
  269.           {% set cap = [states('sensor.pace_bms_bms3_full_capacity') | float(0), 330] | min %}
  270.           {% set ruw = 100 * (states('sensor.coulomb_bms3_ah') | float(0)
  271.                               - states('input_number.coulomb_bms3_ah0') | float(0)) / cap %}
  272.           {{ [0, [100, ruw] | min] | max | round(1) }}
  273.         attributes:
  274.           ongeklemd: >-
  275.             {% set cap = [states('sensor.pace_bms_bms3_full_capacity') | float(0), 330] | min %}
  276.             {{ (100 * (states('sensor.coulomb_bms3_ah') | float(0)
  277.                        - states('input_number.coulomb_bms3_ah0') | float(0)) / cap) | round(2) }}
  278.           bms_soc: "{{ states('sensor.pace_bms_bms3_soc') | float(none) }}"
  279.           verschil: >-
  280.             {% set b = states('sensor.pace_bms_bms3_soc') | float(none) %}
  281.             {% set c = states('sensor.coulomb_bms3_soc') | float(none) %}
  282.             {{ (c - b) | round(1) if b is not none and c is not none else none }}
  283.           capaciteit_ah: >-
  284.             {{ [states('sensor.pace_bms_bms3_full_capacity') | float(0), 330] | min }}
  285.           ah_resterend: >-
  286.             {{ (states('sensor.coulomb_bms3_ah') | float(0)
  287.                 - states('input_number.coulomb_bms3_ah0') | float(0)) | round(1) }}
  288.       - name: Coulomb BMS4 SOC
  289.         unique_id: coulomb_bms4_soc
  290.         unit_of_measurement: "%"
  291.         state_class: measurement
  292.         icon: mdi:battery-sync
  293.         availability: >-
  294.           {{ is_number(states('sensor.coulomb_bms4_ah'))
  295.              and states('input_number.coulomb_bms4_ah0') | float(-1000000) > -999999
  296.              and states('sensor.pace_bms_bms4_full_capacity') | float(0) > 0 }}
  297.         state: >-
  298.           {% set cap = [states('sensor.pace_bms_bms4_full_capacity') | float(0), 330] | min %}
  299.           {% set ruw = 100 * (states('sensor.coulomb_bms4_ah') | float(0)
  300.                               - states('input_number.coulomb_bms4_ah0') | float(0)) / cap %}
  301.           {{ [0, [100, ruw] | min] | max | round(1) }}
  302.         attributes:
  303.           ongeklemd: >-
  304.             {% set cap = [states('sensor.pace_bms_bms4_full_capacity') | float(0), 330] | min %}
  305.             {{ (100 * (states('sensor.coulomb_bms4_ah') | float(0)
  306.                        - states('input_number.coulomb_bms4_ah0') | float(0)) / cap) | round(2) }}
  307.           bms_soc: "{{ states('sensor.pace_bms_bms4_soc') | float(none) }}"
  308.           verschil: >-
  309.             {% set b = states('sensor.pace_bms_bms4_soc') | float(none) %}
  310.             {% set c = states('sensor.coulomb_bms4_soc') | float(none) %}
  311.             {{ (c - b) | round(1) if b is not none and c is not none else none }}
  312.           capaciteit_ah: >-
  313.             {{ [states('sensor.pace_bms_bms4_full_capacity') | float(0), 330] | min }}
  314.           ah_resterend: >-
  315.             {{ (states('sensor.coulomb_bms4_ah') | float(0)
  316.                 - states('input_number.coulomb_bms4_ah0') | float(0)) | round(1) }}
  317.       - name: Coulomb BMS5 SOC
  318.         unique_id: coulomb_bms5_soc
  319.         unit_of_measurement: "%"
  320.         state_class: measurement
  321.         icon: mdi:battery-sync
  322.         availability: >-
  323.           {{ is_number(states('sensor.coulomb_bms5_ah'))
  324.              and states('input_number.coulomb_bms5_ah0') | float(-1000000) > -999999
  325.              and states('sensor.pace_bms_bms5_full_capacity') | float(0) > 0 }}
  326.         state: >-
  327.           {% set cap = [states('sensor.pace_bms_bms5_full_capacity') | float(0), 330] | min %}
  328.           {% set ruw = 100 * (states('sensor.coulomb_bms5_ah') | float(0)
  329.                               - states('input_number.coulomb_bms5_ah0') | float(0)) / cap %}
  330.           {{ [0, [100, ruw] | min] | max | round(1) }}
  331.         attributes:
  332.           ongeklemd: >-
  333.             {% set cap = [states('sensor.pace_bms_bms5_full_capacity') | float(0), 330] | min %}
  334.             {{ (100 * (states('sensor.coulomb_bms5_ah') | float(0)
  335.                        - states('input_number.coulomb_bms5_ah0') | float(0)) / cap) | round(2) }}
  336.           bms_soc: "{{ states('sensor.pace_bms_bms5_soc') | float(none) }}"
  337.           verschil: >-
  338.             {% set b = states('sensor.pace_bms_bms5_soc') | float(none) %}
  339.             {% set c = states('sensor.coulomb_bms5_soc') | float(none) %}
  340.             {{ (c - b) | round(1) if b is not none and c is not none else none }}
  341.           capaciteit_ah: >-
  342.             {{ [states('sensor.pace_bms_bms5_full_capacity') | float(0), 330] | min }}
  343.           ah_resterend: >-
  344.             {{ (states('sensor.coulomb_bms5_ah') | float(0)
  345.                 - states('input_number.coulomb_bms5_ah0') | float(0)) | round(1) }}
  346.       - name: Coulomb BMS6 SOC
  347.         unique_id: coulomb_bms6_soc
  348.         unit_of_measurement: "%"
  349.         state_class: measurement
  350.         icon: mdi:battery-sync
  351.         availability: >-
  352.           {{ is_number(states('sensor.coulomb_bms6_ah'))
  353.              and states('input_number.coulomb_bms6_ah0') | float(-1000000) > -999999
  354.              and states('sensor.pace_bms_bms6_full_capacity') | float(0) > 0 }}
  355.         state: >-
  356.           {% set cap = [states('sensor.pace_bms_bms6_full_capacity') | float(0), 330] | min %}
  357.           {% set ruw = 100 * (states('sensor.coulomb_bms6_ah') | float(0)
  358.                               - states('input_number.coulomb_bms6_ah0') | float(0)) / cap %}
  359.           {{ [0, [100, ruw] | min] | max | round(1) }}
  360.         attributes:
  361.           ongeklemd: >-
  362.             {% set cap = [states('sensor.pace_bms_bms6_full_capacity') | float(0), 330] | min %}
  363.             {{ (100 * (states('sensor.coulomb_bms6_ah') | float(0)
  364.                        - states('input_number.coulomb_bms6_ah0') | float(0)) / cap) | round(2) }}
  365.           bms_soc: "{{ states('sensor.pace_bms_bms6_soc') | float(none) }}"
  366.           verschil: >-
  367.             {% set b = states('sensor.pace_bms_bms6_soc') | float(none) %}
  368.             {% set c = states('sensor.coulomb_bms6_soc') | float(none) %}
  369.             {{ (c - b) | round(1) if b is not none and c is not none else none }}
  370.           capaciteit_ah: >-
  371.             {{ [states('sensor.pace_bms_bms6_full_capacity') | float(0), 330] | min }}
  372.           ah_resterend: >-
  373.             {{ (states('sensor.coulomb_bms6_ah') | float(0)
  374.                 - states('input_number.coulomb_bms6_ah0') | float(0)) | round(1) }}
  375.       - name: Coulomb SOC totaal
  376.         unique_id: coulomb_soc_totaal
  377.         unit_of_measurement: "%"
  378.         state_class: measurement
  379.         icon: mdi:battery-sync
  380.         state: >-
  381.           {% set ns = namespace(ah=0, cap=0, n=0) %}
  382.           {% for i in range(1, 7) %}
  383.             {% set s = states('sensor.coulomb_bms' ~ i ~ '_soc') %}
  384.             {% set cap = [states('sensor.pace_bms_bms' ~ i ~ '_full_capacity') | float(0), 330] | min %}
  385.             {% if is_number(s) and cap > 0 %}
  386.               {% set ns.ah = ns.ah + (s | float) / 100 * cap %}
  387.               {% set ns.cap = ns.cap + cap %}
  388.               {% set ns.n = ns.n + 1 %}
  389.             {% endif %}
  390.           {% endfor %}
  391.           {{ (100 * ns.ah / ns.cap) | round(1) if ns.cap > 0 else none }}
  392.         attributes:
  393.           modules_online: >-
  394.             {% set ns = namespace(n=0) %}
  395.             {% for i in range(1, 7) %}
  396.               {% if is_number(states('sensor.coulomb_bms' ~ i ~ '_soc')) %}{% set ns.n = ns.n + 1 %}{% endif %}
  397.             {% endfor %}
  398.             {{ ns.n }}
  399.           ah_resterend: >-
  400.             {% set ns = namespace(ah=0) %}
  401.             {% for i in range(1, 7) %}
  402.               {% set a = state_attr('sensor.coulomb_bms' ~ i ~ '_soc', 'ah_resterend') %}
  403.               {% if is_number(a) %}{% set ns.ah = ns.ah + (a | float) %}{% endif %}
  404.             {% endfor %}
  405.             {{ ns.ah | round(1) }}
  406.  
  407. automation:
  408.   - id: coulomb_ijking
  409.     alias: Coulomb ijking (initialisatie en randen 10 % / 95 %)
  410.     description: >-
  411.       Zet de Ah-stand bij 0 % zodat de Coulomb-SOC gelijk is aan de BMS-SOC
  412.       (1) bij eerste gebruik, (2) bij laden boven 95 % en (3) bij ontladen
  413.       onder 10 %. Daartussen telt de Coulombtelling zelfstandig verder.
  414.       Bij een wijziging van de BMS-SOC wordt alleen die module bekeken; bij
  415.       HA-start en elke 5 minuten alle zes.
  416.     mode: queued
  417.     max: 20
  418.     triggers:
  419.       - trigger: state
  420.         entity_id:
  421.          - sensor.pace_bms_bms1_soc
  422.           - sensor.pace_bms_bms2_soc
  423.           - sensor.pace_bms_bms3_soc
  424.           - sensor.pace_bms_bms4_soc
  425.           - sensor.pace_bms_bms5_soc
  426.           - sensor.pace_bms_bms6_soc
  427.       - trigger: homeassistant
  428.         event: start
  429.       # vangnet: initialisatie lukt pas als de integratiesensor een waarde heeft
  430.       - trigger: time_pattern
  431.         minutes: "/5"
  432.     actions:
  433.       - repeat:
  434.           for_each: >-
  435.             {{ [trigger.entity_id | replace('sensor.pace_bms_bms', '') | replace('_soc', '') | int]
  436.                if trigger.entity_id is defined else [1, 2, 3, 4, 5, 6] }}
  437.           sequence:
  438.             - variables:
  439.                 raw: "{{ states('sensor.pace_bms_bms' ~ repeat.item ~ '_soc') }}"
  440.                 ah: "{{ states('sensor.coulomb_bms' ~ repeat.item ~ '_ah') }}"
  441.                 cur: "{{ states('sensor.coulomb_bms' ~ repeat.item ~ '_stroom') }}"
  442.                 fcc: "{{ states('sensor.pace_bms_bms' ~ repeat.item ~ '_full_capacity') }}"
  443.                 ah0: "{{ states('input_number.coulomb_bms' ~ repeat.item ~ '_ah0') | float(-1000000) }}"
  444.                 drempel: "{{ states('input_number.coulomb_drempel_stroom') | float(0.3) }}"
  445.                 inputs_ok: "{{ is_number(raw) and is_number(ah) and is_number(cur) and is_number(fcc) and (fcc | float) > 0 }}"
  446.                 cap: "{{ [fcc | float(0), 330] | min }}"
  447.                 ongeinitialiseerd: "{{ ah0 <= -999999 }}"
  448.                 rand_hoog: "{{ inputs_ok and (raw | float) >= 95 and (cur | float) >= -drempel }}"
  449.                 rand_laag: "{{ inputs_ok and (raw | float) <= 10 and (cur | float) <= drempel }}"
  450.             - if:
  451.                 - condition: template
  452.                   value_template: "{{ inputs_ok and (ongeinitialiseerd or rand_hoog or rand_laag) }}"
  453.               then:
  454.                 - action: input_number.set_value
  455.                   target:
  456.                     entity_id: "input_number.coulomb_bms{{ repeat.item }}_ah0"
  457.                   data:
  458.                     value: "{{ ((ah | float) - (raw | float) / 100 * cap) | round(3) }}"
  459.  
  460. script:
  461.   coulomb_herijk:
  462.     alias: Coulomb herijken
  463.     description: >-
  464.       Zet de Coulomb-SOC van een module (of alle modules) gelijk aan een
  465.       opgegeven SOC. Laat SOC leeg om de SOC van de BMS over te nemen.
  466.     icon: mdi:battery-sync
  467.     mode: queued
  468.     fields:
  469.       module:
  470.         name: Module
  471.         description: 0 = alle modules, 1 t/m 6 = een enkele module
  472.         default: 0
  473.         selector:
  474.           number:
  475.             min: 0
  476.             max: 6
  477.             mode: box
  478.       soc:
  479.         name: SOC (%)
  480.         description: Leeg laten = SOC van de BMS gebruiken
  481.         required: false
  482.         selector:
  483.           number:
  484.             min: 0
  485.             max: 100
  486.             step: 0.1
  487.             mode: box
  488.     sequence:
  489.       - repeat:
  490.           for_each: >-
  491.             {{ [module | int(0)] if (module | int(0)) > 0 else [1, 2, 3, 4, 5, 6] }}
  492.           sequence:
  493.             - variables:
  494.                 ah: "{{ states('sensor.coulomb_bms' ~ repeat.item ~ '_ah') }}"
  495.                 fcc: "{{ states('sensor.pace_bms_bms' ~ repeat.item ~ '_full_capacity') }}"
  496.                 doel: >-
  497.                   {{ soc if soc is defined and is_number(soc)
  498.                      else states('sensor.pace_bms_bms' ~ repeat.item ~ '_soc') }}
  499.             - if:
  500.                 - condition: template
  501.                   value_template: "{{ is_number(ah) and is_number(fcc) and is_number(doel) and (fcc | float) > 0 }}"
  502.               then:
  503.                 - action: input_number.set_value
  504.                   target:
  505.                     entity_id: "input_number.coulomb_bms{{ repeat.item }}_ah0"
  506.                   data:
  507.                     value: "{{ ((ah | float) - (doel | float) / 100 * ([fcc | float, 330] | min)) | round(3) }}"
Advertisement
Add Comment
Please, Sign In to add comment