Gas und Strompreise anzeigen lassen

olaf008

New member
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 alles
sehr gut
aber es wäre natürlich auch schön wenn ich noch gas und strompreise anzeigen lassen könnte
z. B. tag woche und monatlich
und das bekomme ich einfach nicht hin

hir ist der code von mein ESP32

YAML:
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: 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: 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));

  - 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: ""

ich bedanke mich schon mal im Voraus
Gruß olaf
 
Hi,

das kannst du doch über das Energy Dashboard realiseren. Da kannst du dir dann auch verschiedene Zeiträume anzeigen lassen.
 
so habe mal ein wenig herumgespielt mit dem code
und leuft auch soweit
könnt ihr da mal drüberschauen
ob da fehler drin sind
und ob das so richtig ist :unsure:

Gruß und Danke Olaf :)



YAML:
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) * 7;

  - 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) * 30;
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.134
Beiträge
59.636
Mitglieder
6.197
Neuestes Mitglied
mkutzke
Zurück
Oben