Button-Card: show_last_changed wenn Lampe an ist

HI, als Newbi stecke ich gerade etwas fest mit dem folgenden Code:

type: custom:button-card
entity: light.buro_iris
show_last_changed: |
  [[[ return entity.state === 'on'; ]]]
state:
  - value: on
    show_last_changed: true
  - value: off
    show_last_changed: false

Show_last_changed soll nur bei eingeschalteter Lampe angezeigt werden.
Aktuell wird es immer angezeigt. Was mache ich falsch?

Ich glaube nicht das show_last_changed javascript templateable ist, zumindest steht davon nix in der Doku.

Weiter oben in der Doku steht dann ja noch das er im Falle von true den Labeltext mit der Info ersetzt.
Vielleicht kann man damit arbeiten.

15-12-2024_19-10-21
Funktioniert aber, blöderweise nicht so wie ich will.
Die Zeit wird auch bei ‘off’ angezeigt.

neue Idee:

type: custom:button-card
entity: light.buro_iris
show_state: true
show_last_changed: false
show_label: true
label: |
  [[[
    var d = new Date(states['light.buro_iris'].last_changed);
    var ds = "zuletzt um " + d.getHours() + ":" + d.getMinutes() + " Uhr"; 
    if (entity.state == 'On')
      return ds;
    return ' ';
  ]]]

du kannst mit “now” natürlich auch wieder so einen Text in der Art "vor xxxx " erzeugen, ich war jetzt nur zu faul.

Das zeigt aber nur den Zustand der Lampe (an/aus).

Ach ja … man sollte auch nicht der code aus dem Editor benutzen sondern den Code den man auch in die Karte im HA kopiert und dann noch verändert hat.
Mein Fehler.

type: custom:button-card
entity: light.athom_segment_1
show_state: true
label: "der Label Text"
show_last_changed: false
show_label: true
styles:
  custom_fields:
    sls:
      - position: absolute
      - bottom: "5px"
      - justify-self: center
custom_fields:
  sls: |
    [[[
      var d = new Date(states['light.athom_segment_1'].last_changed);
      var ds = "seit " + d.getHours() + ":" + d.getMinutes() + " Uhr"; 
      if (entity.state == 'on')
        return ds;
      return ' ';
    ]]]

nochmal erklärt.
Das “show_last_changed” ersetzt den original Labeltext durch den Zeitpunkt wann sich der state geändert hat.
Das merkt du wenn du in den Code mal ein

label: "der Labeltext"

einfügst. Den bekommst du nämlich nur solange angezeigt wie “show_last_changed: false” definierit ist, denn bei True wird er überschrieben.
Deshalb kann man label: nicht benutzen und baut sich ein custom_field.

Im Abschnitt “styles:” definierit man wie und wo es auf der Karte ist.
Im Abschnitt “custom_fields:” was da angezeigt werden soll.

Jetzt klappt es :slight_smile:
16-12-2024_12-09-10
Nur die Uhrzeit sieht etwas merkwürdig aus.
Aber es wird nur im On-Zustand angezeigt.
Danke dir!

In meinem Beispiel steht seit 18:37 Uhr, sprich du darfst das Licht halt nur ab der 10 Minute jeder Stunde anschalten :slight_smile:

oder du änderst

d.getMinutes()

durch

("0" + d.getMinutes()).slice(-2)

kannste bei den Stunden natürlich auch machen damit er dir dann auch 00:00 anzeigt.

PS: achja die 2 zeilen show_label: xxxx und show_last_changed: xxxx kannst du natürlich entfernen die brauchst du ja nicht mehr.

1 „Gefällt mir“