Timer in Homeassistant auf LCD Display anzeigen lassen

Achim2902

Member
Hallo, ich möchte gerne einen Timer über einen Taster starten der dann zum Beispiel 1 Stunde rückwärts läuft. Und diese Zeit sollte auf einem LCD Display, über pcf8574 angeschlossen, angezeigt werden. Habe schon Texte und Sensoren hinbekommen nur da komme ich einfach nicht weiter. Kann jemand bitte helfen?
 
Schau mal hier
Da habe ich fast genau sowas beschrieben, mit Code. Wie man das bei Dir anzeigt, kann ich nicht sagen, da ich so ein Gerät nicht habe.
Aber Timer und auf tastendruck starten ist da vorhanden.
 
Hi,

ist das Display an einen ESP angeschlossen und wie hast du den Timer in Home-Assistant realisiert? Wenn du einen Helfer definiert hast, kannst du dir den doch einfach auf dem Display anzeigen lassen. Das ist ja nicht viel anders als einen Sensors darzustellen ;)
 
Danke mal für die Antwort. Ja das Display ist am esp direkt über Bus angeschlossen. Ja den Gedanken mit dem Helfer hatte ich auch schon funktioniert leider nicht oder besser gesagt ich bekomme es nicht hin.
 
Er Zeigt mir da nur "idle" oder "active" an. Ich hätte gerne die Zeit die runter läuft.
YAML:
text_sensor:
  - platform: homeassistant
    name: "Endzeitx"
    id: endzeitx 
    entity_id: timer.timertestx
    
display:
  - platform: lcd_pcf8574
    dimensions: 20x4
    address: 0x27
    lambda: |-
      
       it.printf(0, 3, "Timer: %s", id(endzeitx).state.c_str());
 
YAML:
  xyz_timer:
      friendly_name: "XYZ Timer"
      value_template: >-
        {{ state_attr('timer.timertestx', 'duration') }}
Das wäre in meiner sensors.Yaml drin. Mir wird der Wert 1 Minute angeziegt wie eingestellt. Aber läuft nicht runter
 
Nach meinem Dafürhalten arbeitet HomeAssistant Ereignisorientiert. Sprich, Änderungen werden nur durchgeführt, wenn ein Ereignis eintritt. Ein Timer ist nur ein Ereignis, wenn er auf den definierten Wert läuft, also z.B. auf 0 geht.
Ich fürchte, um das zu erreichen, was Du willst, mußt Du eine Automatisierung schreiben, die jede Sekunde auslöst und in der dann eine Berechnung "Startwert - abgelaufene Zeit = Anzeige im Display"
 
Würdest Du uns bitte auch mitteilen, wie nun genau ? Gibt vielleicht den ein oder anderen, der das auch mal machen möchte.
 
So ich stelle mal den Code rein. Der Timer ist in den Helfern (timer.timertest123)

YAML:
time:
  - platform: homeassistant
    id: ha_time 

text_sensor:
  - platform: homeassistant
    id: timer_status 
    entity_id: timer.timertest123

  - platform: homeassistant
    id: timer_finish
    entity_id: timer.timertest123
    attribute: finishes_at

display:
  - platform: lcd_pcf8574
    dimensions: 20x4
    address: 0x27
    lambda: |-

      it.printf(0, 0, "Timer: %s", id(timer_status).state.c_str());

      if (id(timer_status).state == "active") {
        struct tm tm_finish{}, tm_ha_time{};
        time_t t_helper;
        double remain;
        int remain_h, remain_m, remain_s;
        
        strptime(id(timer_finish).state.c_str(), "%Y-%m-%dT%T", &tm_finish); // Convert string to time struct
        t_helper = mktime(&tm_finish) + 3600;  // Convert to time_t and add 1 hour (correct for your timezone)

        tm_ha_time = id(ha_time).now().to_c_tm(); // Get current time in a tm struct
        
        remain = difftime(t_helper, mktime(&tm_ha_time)); // Calculate difference in seconds
        
        remain_h = (int) remain/3600;
        remain_m = (int) (remain - 3600*remain_h)/60;
        remain_s = (int) remain - 3600*remain_h - 60*remain_m;


        it.printf(0, 2, "%02d:%02d:%02d", remain_h, remain_m, remain_s);       
        it.printf(0, 3, "End: %02d:%02d", tm_finish.tm_hour, tm_finish.tm_min);   
      } else {
        it.printf(0, 3, " "); // clear second line
      }
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.115
Beiträge
59.425
Mitglieder
6.162
Neuestes Mitglied
jurik
Zurück
Oben