Neem bvb dit: Shelly EM (of 3EM mocht je meer fases hebben)
Deze toestelletjes tonen, buiten het huidige verbruik ook de hoeveelheid kW verbruikt sinds je het toestel bent beginnen gebruiken. maw, die hebben een teller die alleen maar omhoog gaat.
Zo ben je 100% zeker dat je elk kwartier (xx:14:59:99, ...) de juiste waarde hebt. Daar hoef je niets voor te doen. Zoals hoger al aangegeven gebruik je hiervoor de utility_meter: van HA.
Voor de volledigheid, ik haal deze kwh gegevens uit mijn flukso, niet via de Shelly. Maar het principe is hetzelfde. Elke entity die een kWh meter is (strictly increasing), kan je gebruiken.
Code: Selecteer alles
sensor:
  - platform: template
    sensors:
      fluvius_verbruik_energy_kwartier_piek:
        value_template: "{{ states('sensor.fluvius_verbruik_energy_kwartier') | float(default=0) * 4 }}"
        unit_of_measurement: "kWh"
        device_class: energy
        icon_template: mdi:calculator
        friendly_name: "Huidige kwartier piek"
Code: Selecteer alles
utility_meter:
  fluvius_verbruik_energy_kwartier:
    source: sensor.fluvius_meterstand_gebruikt
    cycle: quarter-hourly
Ik heb dan nog het volgende toegevoegd om telkens de maandpiek te bewaren:
Code: Selecteer alles
input_number:
  piek_afname:
    name: Piek Fluvius afname
    min: 0
    max: 10.0
    step: 0.001
    mode: box
    unit_of_measurement: "kWh"
  piek_afname_01:
    name: Piek afname januari
    min: 0
    max: 10.0
    step: 0.001
    mode: box
    unit_of_measurement: "kWh"
  piek_afname_02:
    name: Piek afname februari
    min: 0
    max: 10.0
    step: 0.001
    mode: box
    unit_of_measurement: "kWh"
# herhaal tot 12
  piek_afname_12:
    name: Piek afname december
    min: 0
    max: 10.0
    step: 0.001
    mode: box
    unit_of_measurement: "kWh"
En de volgende automations om die input_numbers te vullen (rolling, dus na 1 jaar overschrijf je de oudste)
Code: Selecteer alles
automation:
  - alias: Piek15m hoogste van deze maand
    mode: parallel
    variables:
      maand: '{{ now().strftime("%m") }}'
      piek: '{{ states("sensor.fluvius_verbruik_energy_kwartier_piek") | float(0)}}'
    trigger:
      - platform: state
        entity_id: sensor.fluvius_verbruik_energy_kwartier_piek
    condition:
      - condition: template
        value_template: >
          {{  piek > states("input_number.piek_afname_"~maand) | float(0) }}
    action:
      - service: input_number.set_value
        target:
          entity_id: input_number.piek_afname_{{ maand }}
        data:
          value: '{{ piek }}'
  - alias: Maximum piek nieuwe maand op 0
    variables:
      maand: '{{ now().strftime("%m") }}'
    trigger:
      - platform: template
        value_template: '{{ (as_timestamp(now()))|timestamp_custom(''%d'', true) | int(0) == 1 }}'
    action:
      - service: input_number.set_value
        target:
          entity_id: input_number.piek_afname_{{ maand }}
        data:
          value: 0.1
en nog een stukje om het te visualiseren (very basic) (er staan ook enkele sensoren in die ik hierboven niet beschrijf, en niet relevant zijn voor dit voorbeeld)
Code: Selecteer alles
cards:
  - type: entities
    title: Verbruik
    show_header_toggle: false
    entities:
      - entity: sensor.fluvius_verbruik_energy_kwartier_piek
        type: custom:multiple-entity-row
        name: Piek 15m
        format: precision1 
        entities:
          - entity: sensor.fluvius_netto
            name: Netto
            format: precision0
          - entity: sensor.home_verbruik
            name: Verbruik
            format: precision0
          - entity: sensor.flukso_pv_vermogen
            name: PV
            format: precision0
            hide_if: 0
      - entity: sensor.fluvius_verbruik
      - entity: sensor.fluvius_levering
      - type: divider
      - entity: sensor.gemiddelde_piek_afname
        type: custom:multiple-entity-row
        format: precision1
      - type: divider
      - entity: input_number.piek_afname_01
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_02
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_03
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_04
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_05
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_06
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_07
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_08
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_09
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_10
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_11
        type: custom:multiple-entity-row
        format: precision1 
      - entity: input_number.piek_afname_12
        type: custom:multiple-entity-row
        format: precision1 
En uiteindelijk gebruik ik de huidige kwartierpiek om beslissingen te nemen. Mag de wasmachine starten, mag de warmtepomp ingeschakeld worden, ...
I'm a bilingual. I'm a bilingual illiterate. I can't read in two languages.