Betriebsstundenzähler erstellen

Bereich rings rum zum Thema Yaml und seine Tücken.


Antworten
Benutzeravatar
Markus
Beiträge: 437
Registriert: Fr 23. Jul 2021, 09:03
2
Wohnort: Österreich
Has thanked: 21 times
Been thanked: 8 times

Betriebsstundenzähler erstellen

Beitrag 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?
Benutzeravatar
Markus
Beiträge: 437
Registriert: Fr 23. Jul 2021, 09:03
2
Wohnort: Österreich
Has thanked: 21 times
Been thanked: 8 times

Re: Betriebsstundenzähler erstellen

Beitrag von Markus »

manni
Beiträge: 52
Registriert: Do 16. Dez 2021, 13:00
2
Has thanked: 2 times
Been thanked: 3 times

Re: Betriebsstundenzähler erstellen

Beitrag 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
Benutzeravatar
Markus
Beiträge: 437
Registriert: Fr 23. Jul 2021, 09:03
2
Wohnort: Österreich
Has thanked: 21 times
Been thanked: 8 times

Re: Betriebsstundenzähler erstellen

Beitrag 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 | ..
manni
Beiträge: 52
Registriert: Do 16. Dez 2021, 13:00
2
Has thanked: 2 times
Been thanked: 3 times

Re: Betriebsstundenzähler erstellen

Beitrag 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
Benutzeravatar
Markus
Beiträge: 437
Registriert: Fr 23. Jul 2021, 09:03
2
Wohnort: Österreich
Has thanked: 21 times
Been thanked: 8 times

Re: Betriebsstundenzähler erstellen

Beitrag von Markus »

ja aber wie bekomme ich die Daten in Markup Card (Datum und dazugehöriger Betriebsstundenwert)
manni
Beiträge: 52
Registriert: Do 16. Dez 2021, 13:00
2
Has thanked: 2 times
Been thanked: 3 times

Re: Betriebsstundenzähler erstellen

Beitrag 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

Benutzeravatar
Markus
Beiträge: 437
Registriert: Fr 23. Jul 2021, 09:03
2
Wohnort: Österreich
Has thanked: 21 times
Been thanked: 8 times

Re: Betriebsstundenzähler erstellen

Beitrag 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...
manni
Beiträge: 52
Registriert: Do 16. Dez 2021, 13:00
2
Has thanked: 2 times
Been thanked: 3 times

Re: Betriebsstundenzähler erstellen

Beitrag 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.

Code: Alles auswählen

{{ now().strftime('%a   %d.%m.%Y   %H:%M  ') }}
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?
Benutzeravatar
Markus
Beiträge: 437
Registriert: Fr 23. Jul 2021, 09:03
2
Wohnort: Österreich
Has thanked: 21 times
Been thanked: 8 times

Re: Betriebsstundenzähler erstellen

Beitrag 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....
Benutzeravatar
Osorkon
Administrator
Beiträge: 1936
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 528 times
Kontaktdaten:

Re: Betriebsstundenzähler erstellen

Beitrag 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
apexcharts-card.jpg (17.12 KiB) 1180 mal betrachtet
Gruß
Osorkon
Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
Markus
Beiträge: 437
Registriert: Fr 23. Jul 2021, 09:03
2
Wohnort: Österreich
Has thanked: 21 times
Been thanked: 8 times

Re: Betriebsstundenzähler erstellen

Beitrag von Markus »

Mit apexcharts-card funktioniert es gut....aber ich würde gerade rausfinden/verstehen wie man das mit einer Tabelle lösen kann ;-)
Benutzeravatar
Osorkon
Administrator
Beiträge: 1936
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 528 times
Kontaktdaten:

Re: Betriebsstundenzähler erstellen

Beitrag 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
Einer muss ja für Ordnung sorgen. :D
manni
Beiträge: 52
Registriert: Do 16. Dez 2021, 13:00
2
Has thanked: 2 times
Been thanked: 3 times

Re: Betriebsstundenzähler erstellen

Beitrag 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.
Antworten