HomeAssistant / notify / Frage dazu

Moin zusammen :)

Ich lasse mir per notify einmal am Tag das aktuelle Sternzeichen in eine csv-Datei schreiben
Code in der configuration.yaml:
Code:
notify:
 - name: filenotify
   platform: file
   filename: /config/zodiacsign.csv
   timestamp: false

Code für die Automation:
Code:
alias: Test Sternzeichen
description: ""
trigger:
  - platform: time
    at: "00:01:00"
condition: []
action:
  - service: notify.filenotify
    data_template:
      message: "{{ states.sensor.zodiac.state }}"
mode: single

Das funktioniert soweit auch super. Allerdings hätte ich gerne NUR den Namen des Sternzeichens in der Datei.... aktuell sieht aus so aus:
Code:
Home Assistant notifications (Log started: 2023-05-10T11:23:00.063731+00:00)
--------------------------------------------------------------------------------
2023-05-10T11:23:00.063782+00:00 taurus
2023-05-10T22:01:00.298556+00:00 taurus
2023-05-11T22:01:00.286058+00:00 taurus

Wie krieg ich es jetzt hin, dass nur taurus in der Datei steht....?

Greetz
Günni
 
Hi,

eigentlich sollte das ja mit dem Eintrag timestamp: false nicht geschehen. Ich würde mal ein Issue auf Github dazu aufmachen. Wahrscheinlich wird das so selten genutzt, dass es bisher keinem aufgefallen ist :rolleyes:
 
Nein, das ist tatsächlich der Code bevor ich den Timestamp auf false gesetzt habe....

Den Header habe ich auch gelöscht, aber es ist jetzt so, dass die Automation immer eine neue Zeile einfügt mit dem Sternzeichen....
Also nach 3 Tagen sieht es so aus:
Code:
taurus
taurus
taurus

Ich möchte das taurus aber nur einmal drinstehen haben...

Also brauche ich wohl einen Befehl, der den aktuellen Inhalt der Datei löscht und dann das Sternzeichen neu einfügt

Gibt es sowas ?

Greetz
Günni
 
Jetzt mal davon abgesehen, dass die Tierkreiszeichen/Sternbilder wegen der Präzision der Erde an sich schon zeitlich nicht mehr stimmen - warum erstellt Du nicht einfach eine Datei, in der die 12 Stück (oder 13, je nachdem wem man zuhört) stehen?

Gruß
Michael
 
Danke für eure Tipps, aber ich benötige eine Datei, in der nur der Name des aktuellen Sternzeichens steht… so wie ich es oben beschrieben habe….

Greetz
Günni
 
Einmal kurz zur Erklärung, warum ich genau das brauche:

Hier (https://forum.heimnetz.de/threads/sternzeichen-grafik-fuer-display.2396/) habe ich schon um Hilfe gebeten, was quasi das gleiche Thema betrifft.... Ich lasse mir das aktuelle Sternzeichen auf einem Display anzeigen.
Da es nun aber 12 Sternzeichen gibt, müsste ich eine 12fache if-else Schleife einbauen, um je nach Sternzeichen die richtige Grafik anzuzeigen....
Code:
if (id(sternzeichen).state == "taurus") {
            it.image(37, 2, id(stier));
          }
          if (id(sternzeichen).state == "gemini") {
            it.image(37, 2, id(zwillinge));
          }
usw.usw.
Das ist mir aber zuviel Code.... und ich habe mir gedacht, wenn doch der Wert des Sensors (taurus) und die Grafik gleich heissen (taurus.png), muss es doch möglich sein, den Namen des Sternzeichens dynamisch in den Grafikpfad einzusetzen, so dass ich nur eine Schleife brauche statt 12....
Leider habe ich die Tipps aus dem anderen Beitrag nicht umsetzen können und weitere Hilfe gab es nicht, so dass ich mich auf die Suche nach einer anderen Lösung gemacht habe.
Gefunden habe ich die substitutions sowie die Variablenersetzung, die in Kombination genau das machen, was ich möchte....

Ich habe also eine Datei erstellt zodiacsign.yaml mit dem Inhalt taurus....
Diese rufe ich am Anfang der yaml-Datei ab
Code:
substitutions:
  zodiacsign: !include zodiacsign.yaml
und füge den Wert über die Variablenersetzung in den Grafikpfad für die Anzeige auf dem Display ein:
Code:
it.image(37, 2, id($zodiacsign));

Das funktioniert auch soweit, solange in der zodiacsign.yaml nur ein Wort/Wert steht....

Nun ist es aber so (wie oben beschrieben), dass pro Tag um 0:02 Uhr der Name des aktuellen Sternzeichens in die zodiacsign.yaml geschrieben wird... aber als neue Zeile, so dass nach x Tagen x Zeilen vorhanden sind.

Deswegen brauche ich eine Funktion/einen Befehl, der erst den aktuellen Inhalt der Datei löscht und dann das aktuelle Sternzeichen wieder reinschreibt.....

Ich hoffe, mit dieser ausführlichen Erklärung kann mir nun jemand weiterhelfen... :)

Greetz
Günni
 
Hast du schon mal versucht, das ganze per Material Design Icons zu lösen? Eine kurze Suche ergab folgende Symbole (siehe hier):

1684222941995.png
Ich hab keine Ahnung von Sternzeichen, aber wenn das die passenden Symbole sind, könntest du das Ganze darüber lösen. Ich stelle damit die Mondphasen dar. Sind dann so aus:

YAML:
...
display:
  - platform: waveshare_epaper
    id: epaper
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    model: 2.90in
    rotation: 90°
    full_update_every: 180
    pages:
      - id: page1
        lambda: |-
          if (id(moon).has_state()) {
            std::map<std::string, std::string> moon_icon_map
            {
              {"new_moon", "\U000F0F64"},
              {"full_moon", "\U000F0F62"},
              {"waxing_crescent", "\U000F0F67"},
              {"first_quarter", "\U000F0F61"},
              {"waxing_gibbous", "\U000F0F68"},
              {"waning_gibbous", "\U000F0F66"},
              {"lightning-rainy", "\U000F067E"},
              {"last_quarter", "\U000F0F63"},
              {"waning_crescent", "\U000F0F65"},
            };
              it.printf(155, 80, id(icon_font30), TextAlign::CENTER, moon_icon_map[id(moon).state.c_str()].c_str());

font:
  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font30
    size: 30
    glyphs:
      - "\U000F0F61" # moon-first-quarter
      - "\U000F0F62" # moon-full
      - "\U000F0F63" # moon-last-quarter
      - "\U000F0F64" # moon-new
      - "\U000F0F65" # moon-waning-crescent
      - "\U000F0F66" # moon-waning-gibbous
      - "\U000F0F67" # moon-waxing-cresent
      - "\U000F0F68" # moon-waxing-gibbous

text_sensor:
  - platform: homeassistant
    id: moon
    entity_id: sensor.moon
    internal: true

Damit würdest du einiges an Speicher sparen, da du von der Schriftart nur die relevanten Zeichen lädst und die Zeichen entsprechend der Zustände mappst. Den Code für jedes Symbol findest du, wenn du auf das entsprechende Symbol klickst:

1684223524375.png
Dem Code aus dem Bild oben stellst du dann einfach immer das "U000" davor.
 
Hy,
danke für deinen Tipp... aber das funktioniert leider nicht, da ich eigene (schöne) Grafiken auf meinem Display verwende.....
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.114
Beiträge
59.414
Mitglieder
6.156
Neuestes Mitglied
lanpatrol
Zurück
Oben