Übersicht über ausgelöste Automationen

Schön :slight_smile: gefällt mir

EDIT1:
Der Code hat mich wirklich inspiriert. Diese Summary/Details Befehle kannte ich bisher nicht. Ich habe mir diese Karte erstellt und etwas individualisierbarer gemacht.

  • Anzahl Stunden
  • Anzahl Haupteinträge
  • Möglichkeit Namenskosmetik (z.B. finde “xyz” und ersetze durch “xxx”)
  • Möglichkeit bestimmte Aut. nicht anzuzeigen
  • Anzeige langer Namen begrenzen (besser auf Handy zu lesen)

Auch die Möglichkeit direkt in den Editor Modus und damit Trace zu gehen, hat richtig Charm.

Danke noch einmal für Idee und Code.

Zusammenfassung

HowTo: Markdownbkarte erstellen und diesen Code in den Inhalt kopieren.

{#
Version 2.1

Listet ausgeführte Automatisationen 
- der letzten xxx Stunden
- verschiebt ab xxx unter "mehr als" Teil
- kann Namenskosmetik vornehmen (ersetze "xyz" durch "xxx")
- kann bestimmte Automatisationen ignorieren
- Kann auf bestimmte Namenslänge reduzieren (z.B. für bessere Lesbarkeit auf Handy)
#}

<!--+++ Individuelle Konfiguration+++ -->

<!-- Wieviel Stunden soll zurückgegangen werden -->
{%- set shown_last_hours = 8 -%}
<!-- Wieviel Haupteinträge (Rest über "mehr" Dialog) -->
{%- set show_always = 10 -%}
<!-- Ausschluß von Automatisationen mit diesen Namensteilen werden nicht angezeigt  -->
{%- set exceptions = ['ping_custom', 'xxxxx'] -%} 
<!-- Diese Namensteil werden ersetzt z.B. "om_aut" durch "" (case sensitive) -->
{%- set name_replacements = {
  'om_aut_': '',
  'tech_': '',
  'draussen_': 'drau_',
  'unten_': 'unt_',
  'oben_': 'ob_'
} -%}
<!-- max. Zeichen Namensdarstellung -->
{%- set name_max = 30 -%}

<!-- Andere zentrale Variablen -->
{%- set ns = namespace(entries=[]) -%}
{%- set now_ts = as_timestamp(now()) -%}

<!--+++ Auslesen/Bearbeiten der Automatisationen+++ -->

{%- for state in states.automation
  | selectattr('attributes.last_triggered', 'defined')
  | rejectattr('attributes.last_triggered', 'equalto', none)
  | sort(attribute='attributes.last_triggered', reverse=true) -%}
  {%- set ts = as_timestamp(state.attributes.last_triggered) -%}

  {# Zeitabgrenzung #}
  {%- if ts is number and (now_ts - ts < shown_last_hours * 60 * 60) -%}
    {%- set raw_name = state.name | string -%}
    {%- set name_ns = namespace(name=raw_name) -%}

    {# Ausschluß bestimmter Automatisationen #}
    {%- if (exceptions | select('in', raw_name) | list | count) == 0 -%}

      {# Ersetzen von Namensteilen #}
      {%- for old, new in name_replacements.items() -%}
        {%- set name_ns.name = name_ns.name | replace(old, new) -%}
      {%- endfor -%}
      {%- set cleaned_name = name_ns.name -%}
  
      {# Begrenzung Namenslänge #}
      {%- if cleaned_name | length > name_max -%}
        {%- set cleaned_name = cleaned_name[:name_max] ~ '…' -%}
      {%- endif -%}
      {%- set t = ts | timestamp_custom('%H:%M:%S', true) -%}
  
      {# nur mit der ID läßt sich in den Editor Modus springen #}
      {%- if 'id' in state.attributes -%}
        {%- set link = '/config/automation/edit/' ~ state.attributes.id -%}
      {%- else -%}
        {%- set link = '' -%}
      {%- endif -%}
      {%- set ns.entries = ns.entries + [(t, cleaned_name, link)] -%}

    {%- endif -%}
  {%- endif -%}
{%- endfor -%}

<!--+++ Ausgabe: Ab hier mit Vorsicht HTML Konstrukte in Markdown sind fragil ("-%} = wichtig")+++ -->


### In den letzten {{ shown_last_hours }} Stunden
<table border=0>
  <!-- Gehe die Liste aller Automatisationen für die Hauptanzeige durch und zerlege in Zeit/Namen -->
  {%- for row in ns.entries[:show_always] -%}
    <tr>
      <td>{{ row[0] }}</td>
      <td>
        {%- if row[2] -%}
          <a href="{{ row[2] }}">{{ row[1] }}</a>
        {%- else -%}
          {{ row[1] }} <font color=gray>(ID fehlt)</font>
        {%- endif -%}
      </td>
    </tr>
  {%- endfor -%}
</table>

<!-- +++Ausgabe mehr als Einträge+++ -->
{%- if ns.entries | length > show_always -%}
<br>
<details>
  <summary><b>mehr als {{show_always}} Einträge zeigen</b></summary>
  <table border=0>
    {%- for row in ns.entries[show_always:] -%}
      <tr>
        <td>{{ row[0] }}</td>
        <td>
          {%- if row[2] -%}
            <a href="{{ row[2] }}">{{ row[1] }}</a>
          {%- else -%}
            {{ row[1] }} <font color=gray>(ID fehlt)</font>
          {%- endif -%}
        </td>
      </tr>
    {%- endfor -%}
  </table>
</details>
{%- endif -%}

EDIT2:
Nach Mittagsruhe und Kaffee nochmal den Code optiomiert/dokumentiert als Version 2.0

EDIT3:
" Uhr " wieder rausgenommen, führte tlw zu blöden Verzerrungen in der Tabelle.
Sry für Hin&Her

5 „Gefällt mir“