-
-
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); |
Hallo, vielen Dank für den Code. Ich habe manchmal negative Werte, hast du eine Idee woran das liegen kann? Viele Grüße
Nein, das Problem hatte ich noch nie.
Wie in den Kommentaren im Blogpost diskutiert gibt es bei dir evtl. eine Nachtabschaltung des WLANs?
Alternativ: kann es sein, dass dein ESP (aus welchem Grund auch immer) regelmäßig crasht und dabei der letzte Stand nicht sauber gespeichert wird? So oder so wäre es wohl sinnvoll, wenn du auf einer Maschine mal die Logs des ESPs verfolgst / wegspeicherst, bis das Problem wieder auftritt.
Hi,
Kannst du mit dem Code (den ich übrigens auch nutze) den Flash resetten?
ich pack es nicht. Entweder ich deaktiviere den Flash und habe den aktuellen Wert oder er nutzt immer den letzten WErt. ich würde gerne erstmal den richtigen WErt haben :-)
DAnke
Hi @CoolyMcCool ,
das habe ich tatsächlich noch nie probiert. (Bei mir lief das Ganze von Beginn an problemlos und mit 100% Uptime, so dass ich es nie wieder anfassen musste.)
Meinst du tatsächlich einen kompletten Flash-Reset oder nur das Ändern der initial_consumption
?
Hi
Sorry hatte keine Benachrichtigung bekommen dass du mir geantwortet hattest...
Ich zumindest der Verbrauch der auf der Anzeige steht wäre nett wenn ich ihn zurücksetzen könnte.
Hab bspw. Letztens einen neuen Zähler eingebaut bekommen...
Eventuell reicht es, wenn du einmal die Firmware neu deployst mit restore_value: false
bei total_pulses
. (Also Zeile 4 im obigen Code.) Und direkt danach wieder mit restore_value: true
. Habe das aber noch nicht ausprobiert.
Hi,
Danke. Da es derzeit aber läuft fass ich es grade nicht an. Beim letzten mal hab ich ne ganze weile per Magneten Pulse hinzuaddiert :-D bzw. des ganze eine bestimmte Weile abgesteckt gelassen. Aber vielleicht brauche ich es nochmal dann versuche ich es bestimmt. ich hatte schon mit den Werten rumgespielt, aber nichts sinnvolles erreicht.
Danke auf jeden Fall.
Hallo,
ich habe mir den Gaszähler nachgebaut. Funktioniert soweit einwandfrei. Vielen Dank für den Code!
Einen Schönheitsfehler habe ich jedoch entdeckt. Beim übertragen zu HomeAssistant werden immer 5 Nachkommastellen im Log angezeigt, jedoch nicht wie erwartet 15494,86000 m3 sondern 15494,86035m3. Ich kann mir nicht erklären wie das zu Stande kommt.
Wenn ich die Formel im Code mit dem Taschenrechner nachrechne komme ich auf die richtigen werte.
Hast du eine Idee was das Problem sein könnte?
Mhh, kann ich mir so direkt nicht erklären.
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.
Das ist nur der spezifische Ausschnitt für die Gastherme. Zusätzlich braucht es natürlich noch mindestens die Sektionen
esphome
,wifi
undmqtt
(oderapi
).