Hallo
ich habe angefangen mein gas und strom mit home assistant mitzuloggen
strom mit ein Shelly 3EM und gas mit ein ESP32 das funktioniert auch
und leuft auch soweit
könnt ihr da mal drüberschauen
ob da fehler drin sind
was man verbässern kann
und ob das so richtig ist ?
Gruß und Danke Olaf
Code: Alles auswählen
captive_portal:
globals:
- id: total_pulses
type: int
restore_value: false
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: '0' # hier kann der Gaszählerstand initialisiert werden (Faktor 1000 um einen genaueren Wert zu erzeugen)
- id: gas_price
type: float
restore_value: false
initial_value: '0.0992' # Gaspreis von 9,92 Cent/kWh
- id: initial_energy_consumption
type: float
restore_value: false
initial_value: '0' # hier wird die Variable korrekt initialisiert
binary_sensor:
- platform: gpio
id: internal_pulse_counter
pin:
number: GPIO21 # 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;
- output.turn_off: led # optional: für eine LED, die den Gaszählerpuls visualisiert
on_release:
then:
- output.turn_on: led # 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: GPIO23
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))) * id(gas_price);
- platform: template
name: 'Pulse Counter total'
update_interval: 10s
icon: "mdi:counter"
accuracy_decimals: 0
unit_of_measurement: "pulses"
lambda: return id(total_pulses);
- platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
name: "WiFi Signal dB"
id: wifi_signal_db
update_interval: 60s
entity_category: "diagnostic"
- platform: copy # Reports the WiFi signal strength in %
source_id: wifi_signal_db
name: "WiFi Signal Percent"
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "Signal %"
entity_category: "diagnostic"
device_class: ""
- platform: template
name: "Gasverbrauch Täglich"
device_class: gas
update_interval: 1d # täglich aktualisieren
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 Täglich'
device_class: energy
state_class: total_increasing
update_interval: 1d # täglich aktualisieren
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))) * id(gas_price);
- platform: template
name: "Gasverbrauch Wöchentlich"
device_class: gas
update_interval: 7d # wöchentlich aktualisieren
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 Wöchentlich'
device_class: energy
state_class: total_increasing
update_interval: 7d # wöchentlich aktualisieren
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))) * id(gas_price);
- platform: template
name: "Gasverbrauch Monatlich"
device_class: gas
update_interval: 30d # monatlich aktualisieren
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 Monatlich'
device_class: energy
state_class: total_increasing
update_interval: 30d # monatlich aktualisieren
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))) * id(gas_price);
- platform: template
name: "Gaspreis"
unit_of_measurement: "€/kWh"
accuracy_decimals: 4
lambda: return id(gas_price);
- platform: template
name: "Gaskosten"
unit_of_measurement: "€"
accuracy_decimals: 2
lambda: return (id(total_pulses) * id(imp_ratio) * id(Brennwert) * id(Zustandszahl) * id(gas_price)) / 100.0;
- platform: template
name: "Gaskosten Täglich"
unit_of_measurement: "€"
accuracy_decimals: 2
update_interval: 1d # Täglich aktualisieren
lambda: return (id(total_pulses) * id(imp_ratio) * id(Brennwert) * id(Zustandszahl) * id(gas_price)) / 100.0;
- platform: template
name: "Gaskosten Wöchentlich"
unit_of_measurement: "€"
accuracy_decimals: 2
update_interval: 7d # Wöchentlich aktualisieren
lambda: return (id(total_pulses) * id(imp_ratio) * id(Brennwert) * id(Zustandszahl) * id(gas_price)) / 100.0;
- platform: template
name: "Gaskosten Monatlich"
unit_of_measurement: "€"
accuracy_decimals: 2
update_interval: 30d # Monatlich aktualisieren
lambda: return (id(total_pulses) * id(imp_ratio) * id(Brennwert) * id(Zustandszahl) * id(gas_price)) / 100.0;