Seite 1 von 1
Betriebsstundenzähler erstellen
Verfasst: Mi 11. Mai 2022, 06:47
von Markus
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?
Re: Betriebsstundenzähler erstellen
Verfasst: Mi 11. Mai 2022, 08:19
von Markus
Re: Betriebsstundenzähler erstellen
Verfasst: Mi 11. Mai 2022, 20:08
von manni
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
Verfasst: Mi 11. Mai 2022, 20:19
von Markus
Ja, läuft gut....das einzige wäre noch eine Ausgabe in Tabellenform
Tag | Betriebsstunden
1 | x
2 | y
3 | z
4 | ..
5 | ..
6 | ..
Re: Betriebsstundenzähler erstellen
Verfasst: Do 12. Mai 2022, 12:35
von manni
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
Verfasst: Do 12. Mai 2022, 18:40
von Markus
ja aber wie bekomme ich die Daten in Markup Card (Datum und dazugehöriger Betriebsstundenwert)
Re: Betriebsstundenzähler erstellen
Verfasst: Do 12. Mai 2022, 21:38
von manni
Ich hoffe ich verstehe dich richtig.
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
Re: Betriebsstundenzähler erstellen
Verfasst: Sa 14. Mai 2022, 08:38
von Markus
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...
Re: Betriebsstundenzähler erstellen
Verfasst: Sa 14. Mai 2022, 11:40
von manni
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?
Re: Betriebsstundenzähler erstellen
Verfasst: Di 17. Mai 2022, 14:21
von Markus
manni hat geschrieben: ↑Sa 14. Mai 2022, 11:40
Du willst also nur den daily-Wert und das wie lange zurück?
Ja, nur den Daily-Wert von den letzten n (zB 7) Tagen....
Re: Betriebsstundenzähler erstellen
Verfasst: Di 17. Mai 2022, 20:55
von Osorkon
Muss es unbedingt eine Tabelle sein?
Oder geht auch ein Balken-Diagramm?
wie sowas hier mit der custom:apexcharts-card

- apexcharts-card.jpg (17.12 KiB) 4141 mal betrachtet
Gruß
Osorkon
Re: Betriebsstundenzähler erstellen
Verfasst: Di 17. Mai 2022, 21:13
von Markus
Mit apexcharts-card funktioniert es gut....aber ich würde gerade rausfinden/verstehen wie man das mit einer Tabelle lösen kann

Re: Betriebsstundenzähler erstellen
Verfasst: Di 17. Mai 2022, 23:28
von Osorkon
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
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') }}
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
Re: Betriebsstundenzähler erstellen
Verfasst: Mi 18. Mai 2022, 11:37
von manni
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.
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
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.
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}}
Man muß jetzt halt nur die Differenz zwischen den einzelnen Tagen ermitteln.
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 ) }}
Dazu das Datum der 7 Tage und alles in ein Markdown:
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 ) }} |
|----------------------- | | |----------------------------- | | |
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.