KI Spielerei - Zitat des Tages

Hi zusammen,

habe gestern ein bisschen rumgespielt und lasse mir über Google Gemini ein Zitat des Tages (bzw. eher Zitat der Stunde) auf meinem Dashboard anzeigen. Wie habe ich das gemacht?

  • Google Generative AI unter Integrationen installiert, dann wie dort beschrieben einen API Key erstellt. Wollte es eigentlich erst mit ChatGPT machen, allerdings bietet Google kostenfreien Zugriff auf die API an.
  • Dann unter Sprachassistenten in den Einstellungen einen neuen Assistenten hinzugefügt.
  • Dann einen Input Helper erstellt, mit ausreichend Zeichen, hier 1000.
  • Automation erstellt. Sie wird immer um xx:05 ausgeführt, außer, der Nachtmodus ist an:
alias: KI Zitat des Tages
description: ""
triggers:
  - trigger: time_pattern
    minutes: "5"
conditions:
  - condition: state
    entity_id: input_boolean.nachtmodus
    state: "off"
actions:
  - action: conversation.process
    metadata: {}
    data:
      agent_id: conversation.google_generative_ai
      text: >-
        Erstelle ein Zitat von einer realen Person, auf deutsch oder englisch.
        Maximal 25 Worte, inkl angabe von wem es stammt. Ist die Muttersprache
        des Zitierten deutsch, dann stelle das Zitat auf deutsch dar, ist sie
        englisch, dann auf englisch. Alle anderen, als deutsch darstellen.
        Erfinde nichts und halluziniere nicht.
    response_variable: antwort
  - delay:
      hours: 0
      minutes: 0
      seconds: 10
      milliseconds: 0
  - action: input_text.set_value
    metadata: {}
    data:
      value: "{{ antwort.response.speech.plain.speech }}"
    target:
      entity_id: input_text.zitat_des_tages
mode: single
  • Dann wie unter “text” einen guten Prompt erstellen und schon gehts los.
  • Den Text aus input_text.zitat_des_tages stelle ich dann auf dem Dashboard in einer Template Card dar.

Ich weiß, Spielerei, aber sind wir nicht alles Spielkinder? :smiley: Ausserdem wollte ich mal ausprobieren, was so geht mit KI.

Viel Spaß beim Nachbauen - oder auch nicht. :smiley:

LG

Edit: Habe den Code nochmal angepasst und eine Verzögerung 10 s eingebaut. Hatte festgestellt, dass scheinbar von Gemini nichts zurückkam und dann der Wert nicht neu geschrieben wurde.

7 „Gefällt mir“

Danke das cool, habe ich auch schon probiert so änhlich habe aber Fakt zum Heutigem Datum gemacht. Da alles andere sich häufig wiederholte. Wie ist es bei dir ? :slight_smile:

1 „Gefällt mir“

Habe es erst seit gestern, daher kann ich noch nichts zur Wiederholrate sagen :slight_smile: Werde es mal beobachten. Gute Idee mit dem “Fakt des Tages”.

Hi Johannes, könntest du dein Teplate Crad yaml zur Verfügung stellen?
Danke dir schon mal vorab.

Ja sicher :slight_smile:

type: custom:mushroom-template-card
primary: |-
  {% set hour = now().hour %}
  {% if 4 <= hour < 11 %}
    Guten Morgen, Johannes!
  {% elif 11 <= hour < 12 %}
    Hey, Johannes!
  {% elif 12 <= hour < 14 %}
    Mahlzeit, Johannes!
  {% elif 14 <= hour < 17 %}
    Hey, Johannes!
  {% elif 17 <= hour < 22 %}
    Guten Abend, Johannes!
  {% else %}
    Gute Nacht, Johannes!
  {% endif %}
secondary: "{{ states('input_text.zitat_des_tages') }}"
icon: mdi:human-greeting
fill_container: true
layout: horizontal
icon_color: purple
tap_action:
  action: none
hold_action:
  action: none
double_tap_action:
  action: none
multiline_secondary: true
visibility:
  - condition: screen
    media_query: "(min-width: 768px)"
grid_options:
  columns: 12
  rows: 2
3 „Gefällt mir“

Vielen Dank, dass du das mit uns teilst.
Ich wollte das übernehmen und anpassen. Aber an einer Stelle weiß ich nicht weiter.

HA meckert, er kennt

response_variable: antwort

bzw. “antwort” selbst nicht. Wo muss ich “antwort” definieren?

Nachtrag: Er meckert ja wegen dem Parameter “antwort”

Fehler beim Parsen von YAML: can not read a block mapping entry; a multiline key may not be an implicit key (Zeile: 19, Spalte: 22)

@johannes1984 Das ist bei mir hinter “response_variable:” Ich hatte deinen Code 1:1 übernommen und nur die Frage an die KI geändert. Nun weiß ich nicht, was die Meldung mir mitteilen möchte.

Nachtrag2: Die Fehlermeldung aus dem ersten Nachtrag kommt, wenn ich die Automation speichern möchte.

Gerne :slight_smile:

In der Automation:

Darin wird praktisch das Ergebnis gespeichert und dann in der set_value Aktion weiterverarbeitet.

1 „Gefällt mir“

Top danke werde ich morgen direkt ausprobieren

Ich habe es herausgefunden.
Der Text selbst war zwei Tabs nach links verschoben, so wie auch in deinem Bild. Kaum habe ich ihn eingerückt, gehts auch. Manchmal ist yaml aber auch sowas von pingelig.

1 „Gefällt mir“

Super vielen Dank. :slight_smile:

Erstmal tolle Idee! Hab es direkt ausprobiert und immer ähnliche Antworten bekommen und immer was mit Schnecken :slight_smile: Abhilfe schafft wenn man eine Conversation ID angibt. So erinnert sich der Agent an seine Antworten und gibt immer eine andere. Das Problem ist nur: nach einem Neustart vergisst er sie wieder und fängt von vorne an. Keine Ahnung wie man das beheben soll…

1 „Gefällt mir“

Ja, sehe auch ein gewisses Muster. Bei mir mag er sehr Angela Merkel, Steve Jobs und Albert Einstein.

Edit: Habe mal noch die Konversations-ID angegeben und im Prompt ergänzt, dass er/sie/es sich nicht wiederholen soll.

Heute meint HA:

The message got blocked by your safety settings.

Ich habe aber nicht von gestern zu heute geändert. Bis gestern Abend hat es noch funktioniert.
Wo beginnt man mit der Fehlersuche?

PS: Ich bin mir jetzt nicht mehr sicher, ob ich das Update zu 2025.2.4 gestern oder heute eingespielt habe.

Hatte ich auch mal… vielleicht zu viele API Anfragen.

Zur Not ne Fehlerbehandlung einbauen, die die Meldung abfängt und das vorherige Zitat bestehen lässt. Oder nach 10 min nochmal abfragt.

Der Fehler ist jetzt auf wunderbare Weise verschwunden.

Nun wollte ich den Namen automatisch an den eingeloggten User anzeigen lassen.

In dem Beitrag hier wird gesagt, dass man den User mit
{{ trigger.to_state.context.user_id }} ermitteln kann. Aber wie baut man das ein?

Mein Ansatz ist scheinbar inkorrekt.

{% eingeloggt = {states.person|#selectattr("attributes.user_id", "==", trigger.to_state.context.user_id)|#map(attribute="attributes.friendly_name")|first }%}

Das ist bestimmt nur ein Klammerproblem, aber ich blicke es nicht.

Also wenn du den ganzen Namen willst, dann bekommst du den ja mit

{{ user }}

Wenn der Nachname immer gleich ist, dann würde ich das mal probieren:

{{ user | replace(" Müller", "") }}
1 „Gefällt mir“

Vielen Dank. Es funktioniert super.

Nach allen Anpassungen sieht die Konfiguration der Karte so aus:

type: custom:mushroom-template-card
primary: |-
  {% set hour = now().hour %}
  {% if 4 <= hour < 11 %}
    Guten Morgen, {{ user }}
  {% elif 11 <= hour < 12 %}
    Hey, {{ user }}!
  {% elif 12 <= hour < 14 %}
    Mahlzeit, {{ user }}!
  {% elif 14 <= hour < 17 %}
    Hey, {{ user }}!
  {% elif 17 <= hour < 22 %}
    Guten Abend, {{ user }}!
  {% else %}
    Gute Nacht, {{ user }}!
  {% endif %}
secondary: "{{ states('input_text.zitat_des_tages') }}"
icon: mdi:human-greeting
fill_container: true
icon_color: green
tap_action:
  action: none
hold_action:
  action: none
double_tap_action:
  action: none
multiline_secondary: true
grid_options:
  rows: 1.5
  columns: full
layout: horizontal

Nach mal vielen Dank für deine Unterstützung.

1 „Gefällt mir“

Diesbezüglich, habe ich folgende Einstellungen vorgenommen und seit dem läuft es einfach;

Den hacken rausgenommen und Settings auf Block none gesetzt.

2 „Gefällt mir“

Wie und an welcher Stelle kann ich eine Conversation ID eingeben?

Das macht man hier. Die ID ist frei wählbar. Erwarte aber nicht zu viel, bei mir wiederholt er sich schon noch manchmal. Aber mit der Conversation ID ist es etwas besser geworden.

1 „Gefällt mir“