Betriebsstundenzähler erstellen
- Markus
- Beiträge: 440
- Registriert: Fr 23. Jul 2021, 09:03
- 2
- Wohnort: Österreich
- Has thanked: 22 times
- Been thanked: 8 times
Betriebsstundenzähler erstellen
Ich würde gerne erfassen wieviel Stunden/Minuten ein Shelly Switch pro Tag den Status "on" hat.
Das tägliche Rücksetzen wäre mit dem utility meter möglich, nur wie erfasse ich die Tagesstunden? Mit https://www.home-assistant.io/integrations/statistics/ bekomm ich das nicht raus?
Das tägliche Rücksetzen wäre mit dem utility meter möglich, nur wie erfasse ich die Tagesstunden? Mit https://www.home-assistant.io/integrations/statistics/ bekomm ich das nicht raus?
Re: Betriebsstundenzähler erstellen
Hatte dies im Einsatz:
Code: Alles auswählen
sensor:
- platform: history_stats
name: on_time_lg_tv
entity_id: media_player.lg_webos_smart_tv
state: 'on'
type: time
start: '{{ 0 }}'
end: '{{ now() }}'
utility_meter:
daily_on_lg_tv:
source: sensor.on_time_lg_tv
cycle: daily
weekly_on_lg_tv:
source: sensor.on_time_lg_tv
cycle: weekly
monthly_on_lg_tv:
source: sensor.on_time_lg_tv
cycle: monthly
quarterly_on_lg_tv:
source: sensor.on_time_lg_tv
cycle: quarterly
yearly_on_lg_tv:
source: sensor.on_time_lg_tv
cycle: yearly
Re: Betriebsstundenzähler erstellen
Markdown
Code: Alles auswählen
type: markdown
content: |-
| Spalte rechts | Spalte links | Nochmal rechts | Spalte mittig |
|--------------:|:-------------|----------------:|:-------------:|
|Zeile 1 |Zeile 1 |Zeile 1 |Zeile 1 |
|Zeile 2 |Zeile 2 |Zeile 2 |Zeile 2 |
|Zeile 3 |Zeile 3 |Zeile 3 |Zeile 3 |
title: Beispiel Formartierung als Tabelle links/rechts/mittig
Re: Betriebsstundenzähler erstellen
Ich hoffe ich verstehe dich richtig.
Ich habe es in einer normalen Entitäts-Karte.
Aber hier dann verschiedene Möglichkeiten in Markdown:
Ich habe es in einer normalen Entitäts-Karte.
Aber hier dann verschiedene Möglichkeiten in Markdown:
Code: Alles auswählen
type: markdown
content: >-
| Nr. | Wert
|:--------|:------------------------------------------|
|1. |{{ states.sensor.daily_on_lg_tv.state }}
|2. |{{ states.sensor.weekly_on_lg_tv.state }}
|3. |{{ states.sensor.monthly_on_lg_tv.state }}
|4. |{{ states.sensor.quarterly_on_lg_tv.state }}
|5. |{{ states.sensor.yearly_on_lg_tv.state }}
***
| Nr. | Wert
|:--------|------------------------------------------:|
|1) |{{ states.sensor.daily_on_lg_tv.state }} h
|2) |{{ states.sensor.weekly_on_lg_tv.state }} h
|3) |{{ states.sensor.monthly_on_lg_tv.state }} h
|4) |{{ states.sensor.quarterly_on_lg_tv.state }} h
|5) |{{ states.sensor.yearly_on_lg_tv.state }} h
***
| Zeitraum | Wert
|:----------|:------------------------------------------:|
|Tag |{{ states.sensor.daily_on_lg_tv.state }}
|Woche |{{ states.sensor.weekly_on_lg_tv.state }}
|Monat |{{ states.sensor.monthly_on_lg_tv.state }}
|Quartal |{{ states.sensor.quarterly_on_lg_tv.state }}
|Jahr |{{ states.sensor.yearly_on_lg_tv.state }}
***
|Tag
|Woche
|Monat
|Jahr |
|:---------------------------------------:|:---------------------------------------:|:-----------------------------------------|:---------------------------------------:|
|{{ states.sensor.daily_on_lg_tv.state }}|{{
states.sensor.weekly_on_lg_tv.state }}|{{ states.sensor.monthly_on_lg_tv.state
}}|{{ states.sensor.yearly_on_lg_tv.state }}|
title: Links, rechts, mittig oder als Zeile
- Markus
- Beiträge: 440
- Registriert: Fr 23. Jul 2021, 09:03
- 2
- Wohnort: Österreich
- Has thanked: 22 times
- Been thanked: 8 times
Re: Betriebsstundenzähler erstellen
Danke, mein Problem ist nicht unbedingt die Formatierung sondern wie ich den jeweiligen Vergangenheits-Tageswert mit Datum erhalte.
Datum-Gestern: xx h
Datum-Vorgestern: xx h
usw...
Datum-Gestern: xx h
Datum-Vorgestern: xx h
usw...
Re: Betriebsstundenzähler erstellen
Hm, ich habe hier nur eine Situation, wo ich Temperatur und Datum in eine Datei schreibe.
Da ermittele ich aber nur das aktuelle Datum und speichere das.
Vielleicht davon ausgehend das aktuelle Datum in Helfer schreiben oder obiges -24h...-48h usw.?
Damit habe ich mich aber auch noch nicht befasst.
Ich verstehe noch nicht, wie das Ganze zum Schluss aussehen soll.
Du willst also nur den daily-Wert und das wie lange zurück?
Da ermittele ich aber nur das aktuelle Datum und speichere das.
Code: Alles auswählen
{{ now().strftime('%a %d.%m.%Y %H:%M ') }}
Damit habe ich mich aber auch noch nicht befasst.
Ich verstehe noch nicht, wie das Ganze zum Schluss aussehen soll.
Du willst also nur den daily-Wert und das wie lange zurück?
- Markus
- Beiträge: 440
- Registriert: Fr 23. Jul 2021, 09:03
- 2
- Wohnort: Österreich
- Has thanked: 22 times
- Been thanked: 8 times
- Osorkon
- Administrator
- Beiträge: 1959
- Registriert: Sa 17. Jul 2021, 16:53
- 2
- Wohnort: Langenargen
- Has thanked: 61 times
- Been thanked: 532 times
- Kontaktdaten:
Re: Betriebsstundenzähler erstellen
Muss es unbedingt eine Tabelle sein?
Oder geht auch ein Balken-Diagramm?
wie sowas hier mit der custom:apexcharts-card
Gruß
Osorkon
Oder geht auch ein Balken-Diagramm?
wie sowas hier mit der custom:apexcharts-card
Gruß
Osorkon
Einer muss ja für Ordnung sorgen.
- Osorkon
- Administrator
- Beiträge: 1959
- Registriert: Sa 17. Jul 2021, 16:53
- 2
- Wohnort: Langenargen
- Has thanked: 61 times
- Been thanked: 532 times
- Kontaktdaten:
Re: Betriebsstundenzähler erstellen
Du willst ja auf die Werte zurück greifen, die in der Vergangenheit liegen.
Müsstest also auf die history bzw. die db zurückgreifen.
Da wäre einmal ein SQL Sensor dann 7 Stück davon mit der entsprechenden query. Voraussetzung Deine history erfasst die 7 Tage.
Eine andere Möglichkeit wäre ein Trigger-based template sensor für jeden Wochentag, der um 23:59 den Wert für eine Woche zwischen speichert. Als Attribut kannst Du z.B. das jeweilige Datum mitgeben.
Hier mal ein Bsp, Auszug aus der template.yaml
Die erste Zahl steht für den Wochentag 2=Dienstag und dann die Uhrzeit 23:59
Spricht der Sensor wird immer Dienstags um 23:59 aktualisiert.
Und dann eben noch die Sensoren für die anderen Wochentage.
Nach einer Woche hast Du alle 7 Sensoren mit Werten gefüllt.
Jetzt musst Du diese noch Sortieren nach "letzte Aktualisierung" und irgendwie in die Markdown Karte verpacken.
Das einfachste wäre aber immer noch eine custom:apexcharts-card in Tabellen Form, wenn es sowas gäbe.
Gruß
Osorkon
Müsstest also auf die history bzw. die db zurückgreifen.
Da wäre einmal ein SQL Sensor dann 7 Stück davon mit der entsprechenden query. Voraussetzung Deine history erfasst die 7 Tage.
Eine andere Möglichkeit wäre ein Trigger-based template sensor für jeden Wochentag, der um 23:59 den Wert für eine Woche zwischen speichert. Als Attribut kannst Du z.B. das jeweilige Datum mitgeben.
Hier mal ein Bsp, Auszug aus der template.yaml
Code: Alles auswählen
- trigger:
- platform: template
value_template: >
{{ now().strftime('%w,%H:%M') == "2,23:59" }}
sensor:
- name: "Wert Dienstag"
state: >
{{states('sensor.xyz')}}
attributes:
Datum: >
{{ now().strftime('Dienstag, den %d.%m') }}
Spricht der Sensor wird immer Dienstags um 23:59 aktualisiert.
Und dann eben noch die Sensoren für die anderen Wochentage.
Nach einer Woche hast Du alle 7 Sensoren mit Werten gefüllt.
Jetzt musst Du diese noch Sortieren nach "letzte Aktualisierung" und irgendwie in die Markdown Karte verpacken.
Das einfachste wäre aber immer noch eine custom:apexcharts-card in Tabellen Form, wenn es sowas gäbe.
Gruß
Osorkon
Einer muss ja für Ordnung sorgen.
Re: Betriebsstundenzähler erstellen
So, habe mal bißchen rumexperimentiert.
Gibt bestimmt elegantere Möglichkeiten, aber auf die Schnelle fiel mir bloß dies hier ein.
Habe 7 Sensoren erstellt, für 7 Tage.
Ich habe jetzt also 7 Werte, es wird also jedesmal die gesamte Zeit von 0 Uhr bis zu x Stunden zurück ermittelt.
Weiß nicht ob man die Zeit auch anders vorgeben kann, so daß immer nur ein Tag ermittelt wird.
Aber so gehts auch.
Man muß jetzt halt nur die Differenz zwischen den einzelnen Tagen ermitteln.
Dazu das Datum der 7 Tage und alles in ein Markdown:
Mit der letzten Zeile experimentieren wegen Abstand zwischen den Spalten zur besseren Lesbarkeit.
Die Tageswerte muß man dann umrechnen, 0,5 sind dann 30 Minuten.
Hoffentlich meintest du sowas.
Gibt bestimmt elegantere Möglichkeiten, aber auf die Schnelle fiel mir bloß dies hier ein.
Habe 7 Sensoren erstellt, für 7 Tage.
Code: Alles auswählen
- platform: history_stats
name: on_time_lg_tv
entity_id: media_player.lg_webos_smart_tv
state: 'on'
type: time
end: "{{ now().replace(hour=0, minute=0, second=0) }}"
duration:
hours: 0
- platform: history_stats
name: on_time_lg_tv_1
entity_id: media_player.lg_webos_smart_tv
state: 'on'
type: time
end: "{{ now().replace(hour=0, minute=0, second=0) }}"
duration:
hours: 24
usw. bis:
hours: 168
Weiß nicht ob man die Zeit auch anders vorgeben kann, so daß immer nur ein Tag ermittelt wird.
Aber so gehts auch.
Code: Alles auswählen
{{states.sensor.on_time_lg_tv.state}}
{{states.sensor.on_time_lg_tv_1.state}}
{{states.sensor.on_time_lg_tv_2.state}}
{{states.sensor.on_time_lg_tv_3.state}}
{{states.sensor.on_time_lg_tv_4.state}}
{{states.sensor.on_time_lg_tv_5.state}}
{{states.sensor.on_time_lg_tv_6.state}}
{{states.sensor.on_time_lg_tv_7.state}}
Code: Alles auswählen
{{ '%0.2f' | format(states('sensor.on_time_lg_tv_7') | float - states('sensor.on_time_lg_tv_6') | float ) }}
{{ '%0.2f' | format(states('sensor.on_time_lg_tv_6') | float - states('sensor.on_time_lg_tv_5') | float ) }}
{{ '%0.2f' | format(states('sensor.on_time_lg_tv_5') | float - states('sensor.on_time_lg_tv_4') | float ) }}
{{ '%0.2f' | format(states('sensor.on_time_lg_tv_4') | float - states('sensor.on_time_lg_tv_3') | float ) }}
{{ '%0.2f' | format(states('sensor.on_time_lg_tv_3') | float - states('sensor.on_time_lg_tv_2') | float ) }}
{{ '%0.2f' | format(states('sensor.on_time_lg_tv_2') | float - states('sensor.on_time_lg_tv_1') | float ) }}
{{ '%0.2f' | format(states('sensor.on_time_lg_tv_1') | float ) }}
Code: Alles auswählen
|Datum | | |Summe | |Tageswerte |
|:----------------------------------------------------------------------------------|:-|:-|:-----------------------------------------:|:-|:---------------------------------------------------------------------------------------------------------------------:|
|{{ now().strftime('%d.%m.%Y')}} | | |{{states.sensor.on_time_lg_tv.state}} | | |
|{{ (as_timestamp(now()) - (24*3600)) | timestamp_custom('%d.%m.%Y', True) }} | | |{{states.sensor.on_time_lg_tv_1.state}} | |{{ '%0.2f' | format(states('sensor.on_time_lg_tv_1') | float ) }} |
|{{ (as_timestamp(now()) - (48*3600)) | timestamp_custom('%d.%m.%Y', True) }} | | |{{states.sensor.on_time_lg_tv_2.state}} | |{{ '%0.2f' | format(states('sensor.on_time_lg_tv_2') | float - states('sensor.on_time_lg_tv_1') | float ) }} |
|{{ (as_timestamp(now()) - (72*3600)) | timestamp_custom('%d.%m.%Y', True) }} | | |{{states.sensor.on_time_lg_tv_3.state}} | |{{ '%0.2f' | format(states('sensor.on_time_lg_tv_3') | float - states('sensor.on_time_lg_tv_2') | float ) }} |
|{{ (as_timestamp(now()) - (96*3600)) | timestamp_custom('%d.%m.%Y', True) }} | | |{{states.sensor.on_time_lg_tv_4.state}} | |{{ '%0.2f' | format(states('sensor.on_time_lg_tv_4') | float - states('sensor.on_time_lg_tv_3') | float ) }} |
|{{ (as_timestamp(now()) - (120*3600)) | timestamp_custom('%d.%m.%Y', True) }} | | |{{states.sensor.on_time_lg_tv_5.state}} | |{{ '%0.2f' | format(states('sensor.on_time_lg_tv_5') | float - states('sensor.on_time_lg_tv_4') | float ) }} |
|{{ (as_timestamp(now()) - (144*3600)) | timestamp_custom('%d.%m.%Y', True) }} | | |{{states.sensor.on_time_lg_tv_6.state}} | |{{ '%0.2f' | format(states('sensor.on_time_lg_tv_6') | float - states('sensor.on_time_lg_tv_5') | float ) }} |
|{{ (as_timestamp(now()) - (168*3600)) | timestamp_custom('%d.%m.%Y', True) }} | | |{{states.sensor.on_time_lg_tv_7.state}} | |{{ '%0.2f' | format(states('sensor.on_time_lg_tv_7') | float - states('sensor.on_time_lg_tv_6') | float ) }} |
|----------------------- | | |----------------------------- | | |
Die Tageswerte muß man dann umrechnen, 0,5 sind dann 30 Minuten.
Hoffentlich meintest du sowas.