Liebe SmartHome for Dummies Gemeinde.

Die phpBB Forum Software gehört nicht wirklich zu den modernsten seiner Art.
Ich habe mich an einer Migration zu Discourse versucht und bin leider kläglich gescheitert.

Möchte aber trotzdem einen Neuanfang auf einer modernen Plattform starten.
Gerne möchte ich Euch animieren das neue Discourse Forum zu benutzen.
Bestehenden Usern bleibt es leider nicht erspart, sich auf der neuen Platform neu anzumelden.

Das Forum hier, bleibt selbstverständlich Online. Ich würde versuchen einiges händisch zu migrieren.
Da fallen mir die Rubriken "Template Sammlungen" oder "Best Practice Automatisierungen" ein.

SmartHome for Dummies Discourse Platform.

Betriebsstundenzähler erstellen

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


Antworten
Benutzeravatar
Markus
Beiträge: 453
Registriert: Fr 23. Jul 2021, 09:03
3
Wohnort: Österreich
Has thanked: 24 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: 453
Registriert: Fr 23. Jul 2021, 09:03
3
Wohnort: Österreich
Has thanked: 24 times
Been thanked: 8 times

Re: Betriebsstundenzähler erstellen

Beitrag von Markus »

manni
Beiträge: 56
Registriert: Do 16. Dez 2021, 13:00
3
Has thanked: 3 times
Been thanked: 4 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: 453
Registriert: Fr 23. Jul 2021, 09:03
3
Wohnort: Österreich
Has thanked: 24 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: 56
Registriert: Do 16. Dez 2021, 13:00
3
Has thanked: 3 times
Been thanked: 4 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: 453
Registriert: Fr 23. Jul 2021, 09:03
3
Wohnort: Österreich
Has thanked: 24 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: 56
Registriert: Do 16. Dez 2021, 13:00
3
Has thanked: 3 times
Been thanked: 4 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: 453
Registriert: Fr 23. Jul 2021, 09:03
3
Wohnort: Österreich
Has thanked: 24 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: 56
Registriert: Do 16. Dez 2021, 13:00
3
Has thanked: 3 times
Been thanked: 4 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: 453
Registriert: Fr 23. Jul 2021, 09:03
3
Wohnort: Österreich
Has thanked: 24 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: 2105
Registriert: Sa 17. Jul 2021, 16:53
3
Wohnort: Langenargen
Has thanked: 63 times
Been thanked: 581 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) 4138 mal betrachtet
Gruß
Osorkon
Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
Markus
Beiträge: 453
Registriert: Fr 23. Jul 2021, 09:03
3
Wohnort: Österreich
Has thanked: 24 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: 2105
Registriert: Sa 17. Jul 2021, 16:53
3
Wohnort: Langenargen
Has thanked: 63 times
Been thanked: 581 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: 56
Registriert: Do 16. Dez 2021, 13:00
3
Has thanked: 3 times
Been thanked: 4 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