Anzeige in einer Karte Poolfilter AN / AUS anstatt der Watt-Zahl

Hallo,
ich hoffe es ist hier die richtige Kategorie.

Mein Anliegen:
Ich möchte in einer Karte des Dashboards anzeigen lassen, ob der Poolfilter eingeschaltet ist oder nicht.
Im Prinzip sehe ich es ja, weil die Watt-Zahl von 0 auf 180 W geht, aber es würde mir optisch besser gefallen, wenn anstatt der Watt-Zahl der Status ausgeschrieben stehen würde.

Nun habe ich versucht, den Code von SImon (Luftreiniger) zu übernehmen und abzuleiten, aber irgendwie haut es nicht hin.

Könnt Ihr mir sagen was ich falsch gemacht habe?

Hier mein /config/configuration.yaml:

template:
  - sensor:
      - name: "Poolfilter Status"
        unique_id: "poolfilter_status"
        state: >
          {% if state_attr( 'sensor.shelly_plus_1pm_test_power', 'W' ) < 10 %}
            Poolfilter AUS
          {% if state_attr( 'sensor.shelly_plus_1pm_test_power', 'W' ) > 1 %}
            Poolfilter EIN
          {% endif %}

Vielen Dank im Voraus für Eure Hilfe.

Gruß
Dominik

mal ins blaue geschossen … du bist dir sicher das der shelly ein “Attribut” hat welches auf den Namen “W” lautet?
state_attr bekommt 2 Parameter.

  1. den sensor.mit_namen/bezeichner wie immer du es nennen willst.
  2. den Namen des Attributes

Wenn du auf Entiwicklerwerkzeuge>Zustände gehst und dort mal beim Filer in der Spalte Entität “sun.sun” eintippst siehst du z.B. in der Spalte Attribute “next_dawn”, “next_dusk” und so weiter.
Also tippe mal beim filter “test_power” ein und schau ob es ein Attribut “W” gibt.

Hallo justone,
da zeigt er mir dies an:

Ich dachte das “W” würde sich auf die Maßeinheit beziehen. Wie mache ich das jetzt am besten?

Na nicht mit “state_attr”. => state attribute … sondern mit dem states selbst.

Zum selbst probieren geh mal zu Entwicklerwerkzeuge>Template

da steht per default schon einiges drin, kannst du löschen denn bekommst du mit dem button “zurücksetzen auf Demo-Template” ohnehin wieder wenn du es haben möchtest.

Wenn du dort also

{{ state_attr( 'sensor.shelly_plus_1pm_test_power', 'W' ) }}

eintippst bekommst du dummerweise keine Fehlermeldung sondern als Ergbnis ein “None”
das ist etwas unschön, denn das Attribut gibts nicht deshalb als Ergebnis “None”. Schöne wäre natürlich eine Fehlermeldung gewesen das es gar kein Attribut mit dem Namen “W” gibt, denn man kann ja auch Abfragen bauen bei denen das Ergebnis “None” ein gewünschtes plausibles wäre. Muss man einfach wissen das es so ist wie es ist.

tippst du dagegen

{{ state_attr( 'sensor.shelly_plus_1pm_test_power', 'unit_of_measurement' ) }}

ein bekommst du als Ergebnis W <== also die Einheit
Damit sollte klar sein was man mit state_attr machen kann und wie man es benutzt.

Du bist aber auf der Suche nach dem Wert also states (warum states und nicht state … frag mich nicht

{{ states('sensor.shelly_plus_1pm_test_power') }}

sollte dir dann einen Wert anzeigen. Also kommen wir der Lösung näher.
Fehler1 somit behoben :slight_smile:

Jetzt könnte man meinen folgendes müsste funktionieren:

{% if states('sensor.shelly_plus_1pm_test_power') < 10 %}
   Poolfilter AUS
{% else %}
  Poolfilter EIN
{% endif %}

tut es aber nicht denn du bekommst eine Fehlermeldung in der Form:
TypeError: ‘>’ not supported between instances of ‘str’ and ‘int’
Warum? Dein Code möchte den Statuswert numerisch prüfen ob dieser < 10 ist.
Aber keiner hat home assistant gesagt ob der statuswert nur ein INT, FLOAT oder ein STRING ist.
Da gibst du an mit einem “|” und dahinter den Typ. Also du definiert wie der Statuswert interpretiert werden soll.

{% if states('sensor.shelly_plus_1pm_test_power') | int < 10 %}
   Poolfilter AUS
{% else %}
  Poolfilter EIN
{% endif %}

Fehler2 somit auch behoben :slight_smile:

Und sobald das im Template Editor klappt und dir die Werte liefert von denen du geglaubt hast das dein jetziger Code es tut, dann hast du code gebastelt der dann auch im template sensor so funktioniert.

Vielen Dank das Du Dir so viel Zeit nimmst.

Da muss ich nochmal schauen, das ich das alle richtig verstehe.

Also ich habe jetzt folgenden Code:

template:
  - sensor:
      - name: "Poolfilter Status"
        unique_id: "poolfilter_status"
        unit_of_measurement: "W"
        device_class: "power"
        state_class: "measurement"
        state: >
          {% if states('sensor.shelly_plus_1pm_test_power') | int < 10 %}
             Poolfilter AUS
          {% else %}
             Poolfilter EIN
          {% endif %}

Und bekomme dieses Ergebnis:
Screenshot 2023-05-26 223545

Da muss ich noch mal ein wenig nachlesen, aber es taucht schonmal auf, das hatte ich vorher gar nicht :laughing:

Gruß
Dominik

Naja, Poolfilter An und Aus sind keine Watt-Angaben, darum ist der Sensor unbekannt.

Mach daraus einen binary_sensor, der je nach Wattlage an und aus ist.

template:
  - binary_sensor:
      - name: "Poolfilter Status"
        unique_id: "Poolfilter Status"
        state: >
          {% if states('sensor.shelly_plus_1pm_test_power') | int < 10 %}
             Off
          {% else %}
             On
          {% endif %}

Ungetestet und aus dem Blauen raus…

Also in Entwicklungswerkzeuge/Template funktionieren beide Varianten von Euch.

Screenshot 2023-05-26 225943

Aber wenn ich sie als Entität in eine Karte einfüge, funktioniert sie nicht. :sob:

Das kannst Du dort garnicht so testen.

Bitte mal den in den Template-Tester packen:

{% if states('sensor.shelly_plus_1pm_test_power') | int < 10 %}
   Off
{% else %}
   On
{% endif %}

getestet habe ich es ja unter Entwicklungswerkzeuge/Template

Da zeigt er es ja auch an. Aber wie bekomme ich das in eine Karte?
Ich dachte, ich wähle eine Karte aus und füge die Entität “sensor.poolfilter_status” aus und dann wird es in der Karte angezeigt, aber genau das funktioniert nicht.

Dann kommt nur dies als Anzeige:
Screenshot 2023-05-26 231928

Wie sieht der template sensor aus? Hast Du den binary_sensor von mir genommen, eingebaut und HA neugestartet?

Der heisst dann jetzt binary_sensor. und nicht mehr sensor.

Aaaaahhhhhh, der Fehler lag zwischen den Ohren :rofl:

Na klar, stand ja auch in Deinem template “binary_sensor”

Es läuft :+1: :+1: :+1: :+1: :+1:

1

2

Viiiiiiielen Dank :+1: :+1: :+1: :+1:

Sehr gut! :wink:

Topic dann auf gelöst setzen, falls andere nach einer Lösung in der Richtung suchen.

Auch wenns schon gelöst ist, und ja mit nem Binary Sensor kann man natürlich lösen aber da steht dann halt nicht in einem Text "Poolfilter AUS " sondern “Poolfilter status” mit einem Zustand AN oder AUS.

Ich möchts dir trotzdem noch erklären warum es nicht funktioniert hat (also im Template schon aber in deinem Sensor nicht) denn nur so lernt man ja draus wenn mal was nicht klappt. :slight_smile:

Wie @frittes schon geschrieben hatte:

  1. “unit_of_measurement” … 2 Textzustände eines Sensors kann man nicht mit einer Einheit, in diesem Fall “W” definieren, denn dazu müsste der Sensor ja Zahlenwerte liefern.

aber auch:
2. "device_class: power ein Text ist auch kein zulässiger Wert für power also einen Leistungs-Sensor

  1. die “state_class:” kann man auch weglassen

und dann klappt das auch. Das (also unit_of_measurement und device_class) kannst du allerdings Template Editor sehr schlecht nachbilden um schon dort zu merken warum du auf einen Fehler läufst.

1 „Gefällt mir“

Vielen Dank für Deine ausführlichen Erklärungen.
Das hilft, das alles viel besser zu verstehen.
Es ist ja eigentlich alles dokumentiert, aber manchmal versteht man es besser, wenn es jemand noch mal am eigenen Beispiel erklärt.

Werde ich auf jeden Fall heute Abend noch mal ausprobieren.