-
-
Save djmaze/852c27c37f4f223f346782635b93b1ae to your computer and use it in GitHub Desktop.
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: "m³" | |
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); |
Danke für den Code, funktioniert bei mir nun seit einiger Zeit sauber.
Allerdings hab ich irgendwie 2 Impulse zu viel gezählt.. vielleicht stand mal der Magnet ungünstig als ich durchgestartet hatte… oder wie auch immer..
jedenfalls frage ich mich nun wie ich den Counter am elegantesten korrigieren kann.
klar könnte ich den Reed mal für zwei Impulse abklemmen.. aber vielleicht hast du oder wer anders eine schönere Idee :)
Danke!
Ich habe mir nun noch zwei Buttons hinzugefügt um eventuell fehlerhafte Zählungen zu korrigieren:
button:
- platform: template
name: "Gas Zählerstand erhöhen"
id: internal_pulse_increment
on_press:
then:
- lambda: id(total_pulses) += 1;- platform: template
name: "Gas Zählerstand reduzieren"
id: internal_pulse_decrement
on_press:
then:
- lambda: id(total_pulses) -= 1;
jedenfalls frage ich mich nun wie ich den Counter am elegantesten korrigieren kann.
Tatsächlich hatte ich das noch nicht gemacht. (Es war mir auch relativ egal, eine 99,999%ige Zählung reicht mir vollkommen.)
Wenn man es auf einen bestimmten Wert setzen will, könnte man halt einen Code einfügen, der z.b. total_pulses
auf einen festen Wert setzt. Das Ganze dann einmalig flashen und damit booten, und dann diesen Code wieder rausnehmen und neu flashen. Ich weiß, sehr hässlich. (Oder irgendwie einen service einbauen, mit dem man den Wert setzen kann?)
Deine Methode ist aber vermutlich deutlich hilfreicher, wenn es nur um kleine Korrekturen geht.
Mhh, kann ich mir so direkt nicht erklären.