Skip to content

Instantly share code, notes, and snippets.

@Sub-7
Forked from djmaze/gastherme.yml
Created January 24, 2023 12:36

Revisions

  1. @djmaze djmaze created this gist Nov 28, 2022.
    78 changes: 78 additions & 0 deletions gastherme.yml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,78 @@
    globals:
    - id: total_pulses
    type: int
    restore_value: true
    initial_value: '0' # startet mit 0
    - id: imp_ratio
    type: float
    restore_value: false
    initial_value: '0.01' # vom Gaszaehler
    - id: Zustandszahl
    type: float
    restore_value: false
    initial_value: '0.9643' # aus der Gasrechnung
    - id: Brennwert
    type: float
    restore_value: false
    initial_value: '10.276' # aus der Gasrechnung
    - id: initial_consumption
    type: float
    restore_value: false
    initial_value: '19967086' # hier kann der Gaszählerstand initialisiert werden (Faktor 1000 um einen genaueren Wert zu erzeugen)
    - id: initial_energy_consumption
    type: float
    restore_value: false
    initial_value: id(initial_consumption) * id(Brennwert) * id(Zustandszahl) / 1000.0

    binary_sensor:
    - platform: gpio
    id: internal_pulse_counter
    pin:
    number: GPIO5 # Pin, an dem der Reed-Kontakt hängt
    mode: INPUT_PULLUP
    name: "Live-Impuls"
    filters:
    - delayed_on: 100ms
    on_press:
    then:
    - lambda: id(total_pulses) += 1;
    #- light.turn_on:
    # id: led # optional: für eine LED, die den Gaszählerpuls visualisiert
    #on_release:
    # then:
    # - light.turn_off: status # optional: für eine LED, die den Gaszählerpuls visualisiert

    ## Optional: Diese LED soll blinken, sobald ein Signal vom Gaszähler erkannt wird
    #output:
    #- platform: gpio
    #pin: GPIO0
    #id: 'led'

    sensor:
    - platform: template
    name: "Gasverbrauch"
    device_class: gas
    update_interval : 10s
    unit_of_measurement: ""
    state_class: total_increasing
    icon: "mdi:fire"
    accuracy_decimals: 2
    lambda: return (id(initial_consumption)/1000.0) + (id(total_pulses) * id(imp_ratio));

    - platform: template
    name: 'Gasverbrauch Energy'
    device_class: energy
    state_class: total_increasing
    update_interval : 10s
    icon: 'mdi:fire'
    accuracy_decimals: 1
    unit_of_measurement: "kWh"
    lambda: return id(initial_energy_consumption) + (id(total_pulses) * id(imp_ratio) * id(Brennwert) * id(Zustandszahl));

    - platform: template
    name: 'Pulse Counter total'
    update_interval : 10s
    icon: "mdi:counter"
    accuracy_decimals: 0
    unit_of_measurement: "pulses"
    lambda: return id(total_pulses);