Variablen anstelle von Zahl in % anzeigen

alexamend

Active member
Guten Morgen zusammen,

vorab -DANKE- , bekam immer SUPER Unterstützung von euch.

Ich möchte anstelle der Zahl im Regler diesen als Wert in % darstellen. die Werte gehen von 1 Rollo offen bis 26 Rollo zu, der Wert wird als Variable in die Automation in Sekunden übergeben
Automatisierung schaut dann so aus.

YAML:
alias: Dachfenster auf Positon
description: ''
trigger:
  - platform: device
    type: turned_on
    device_id: 67c51a14c8bf6370e9ecd7eee8264872
    entity_id: switch.sonoff_10015bce45_4
    domain: switch
condition: []
action:
  - type: turn_on
    device_id: 67c51a14c8bf6370e9ecd7eee8264872
    entity_id: switch.sonoff_10015bce45_1
    domain: switch
  - delay:
      hours: 0
      minutes: 0
      seconds: 30
      milliseconds: 0
  - type: turn_on
    device_id: 67c51a14c8bf6370e9ecd7eee8264872
    entity_id: switch.sonoff_10015bce45_3
    domain: switch
  - delay:
      hours: 0
      minutes: 0
      seconds: '{{ states(''input_number.roto_rollo_auf_position'') | int }}'     ## hier übergebe ich den Wert 1 bis 26 in Secunden
      milliseconds: 0
  - type: turn_on
    device_id: 67c51a14c8bf6370e9ecd7eee8264872
    entity_id: switch.sonoff_10015bce45_2
    domain: switch
mode: single

Da der Rollo auch mittels Funksender Bedient werden kann und er kein Feedback hat weiß ich nicht wo er gerade steht, daher wird er bei jeder Automatischen Aktion zuerst geöffnet hierfür stehen die 30 Sekunden um einen definierten offenen zustand zu erreichen danach wird der Wert der Variable übergeben 1-26 Sekunden um diesen auf einen bestimmten Wert zu zufahren.


gibt er hierfür eine Art overlay

Screenshot 2022-07-29 104402.jpg

hier der code dazu

YAML:
type: entities
entities:
  - entity: switch.sonoff_10015bce45_1
  - entity: switch.sonoff_10015bce45_2
  - entity: switch.sonoff_10015bce45_3
  - entity: switch.sonoff_10015bce45_4
    name: Rollo auf Position
  - entity: input_number.roto_rollo_auf_position
    type: custom:slider-entity-row
    name: Position
title: Dachfenster Rollo
state_color: false
show_header_toggle: false

Der Helper hierzu schaut so dazu aus.

Screenshot 2022-07-29 104836.jpg

Der code von input_number

Code:
{
  "version": 1,
  "minor_version": 1,
  "key": "input_number",
  "data": {
    "items": [
      {
        "min": 1.0,
        "max": 26.0,
        "name": "Roto Rollo auf Position",
        "step": 1.0,
        "mode": "slider",
        "id": "roto_rollo_auf_position"
      }
    ]
  }
}
 
Ich möchte anstelle der Zahl im Regler diesen als Wert in % darstellen.
Ist dann doch eigentlich nur eine Umwandlung der Zahlen in % oder seh ich das falsch? 1% = "0,26", 100% = "26". Auch wenn ich keine Ahnung habe, ob das nun hinhaut, aber ich "vermute", dass der gangbare Weg in folgende Richtung geht:

Code:
unit_of_measurement: '%'
value_template: "{{ (value | float / 26)*100 }}"

Vielleicht.... vielleicht aber auch nicht... Da gibt es aber garantiert Leute hier, die es wesentlich besser wissen als ich 😅

Erste Zeile legt die Einheit (%) fest, zweite Zeile nimmt einfach die Umrechnung in % vor. Eventuell noch ein "|round(0)" vor die schliessenden geschweiften Klammern (zum abrunden der Zahlen)... Ansonsten kannst Du auch nochmal hier nachschauen: https://www.home-assistant.io/docs/configuration/templating/

Zum ausprobieren kann man das sicherlich erstmal testen, ansonsten besser auf die "anderen" warten 😁
 
blurrrr,
ändert leider nichts an der Anzeige 🤔

auch wenn ich das so eingebe tut sich nichts...

YAML:
type: entities
entities:
  - entity: switch.sonoff_10015bce45_1
  - entity: switch.sonoff_10015bce45_2
  - entity: switch.sonoff_10015bce45_3
  - entity: switch.sonoff_10015bce45_4
    name: Rollo auf Position
    secondary_info: none
  - entity: input_number.roto_rollo_auf_position
    type: custom:slider-entity-row
    state: "{{ states('input_number.roto_rollo_auf_position') | float / 26)*100  | round(0) }} %"
    name: Position
title: Dachfenster Rollo
state_color: false
show_header_toggle: false
 
Hm ok, war einen Versuch wert, dann warten wir mal lieber, bis eine Person sich dazu äusser, die auch wirklich Ahnung davon hat 😁 Könntest halt mal mit den Entwickler-Tools schauen, ob das überhaupt etwas bewirkt bzw. wie die Resultate dann aussehen würden.
 
Entwicklertools gibt erstmal keinen Fehler aus

nur das es nicht automatisch aktualisiert und überwacht wird...
somit müsste der Ansatz an sich passen... hmmm...
warten wir mal was die Profis sagen.

Screenshot 2022-07-29 153142.jpg
 
Wenn ich das richtig sehe hast du @alexamend im dritten Post den Inhalt der UI Karte gepostet. Soweit ich weiß funktionieren da keine Templates. Du musst dir erst einen neuen Template Sensor mit dem Code den @blurrrr gepostet hat erstellen und diesen dann in der UI anzeigen ;)
 
Du musst dir erst einen neuen Template Sensor mit dem Code den @blurrrr gepostet hat erstellen und diesen dann in der UI anzeigen ;)
Das war auch mein Ansatz, funktioniert auch problemlos, nur... bei der Anzeige ist es dann erstmal geblieben, dabei sollte es sich, so wie ich das verstehe, ja auch darüber steuern lassen. Da bin ich dann doch zu sehr Laie um das mal eben aus dem Ärmel zu schütteln.
 
Guten Morgen zusammen,
Über das Template, funktioniert dass ganze nicht wie gewünscht, das Tamplate konvertiert mir den Wert der übergeben wird in % nicht aber den Wert in der Anzeige.... somit wird jetzt anstelle von 1-26, 1%-26% an den Timer übergeben,
Ich nehme jetzt erstmal die Anzeige der Zahl dahinter raus, jetzt muss man sich anhand der Position des Schiebe Regler orientieren, zwar nicht schön, erstmal OK
 
Ich dachte da eher in diese Richtung:

Slider (Anzeige) -> % -> Dezimal -> Automatisierung
Automatisierung -> Dezimal -> % -> Slider (Anzeige)

Also schon mit Zwischenschritten, keine Ahnung wie sowas in HA heisst... Helper? Oder doch einfach nur Variablen?

App auf, Schieberegler wird geladen, Angabe in % wo dieser Wert von einem aktuell vorhandenen Dezimalwert abgeleitet wird, in ein zweites Objekt gepackt wird, welches dann für die Anzeige ausgelesen wird. Bewegt man den Schalter, wird der neue %-Wert in das zusätzliche Objekt geschrieben, kann konvertiert werden in den Dezimalwert und entsprechend in einer Automatisierung verwendet werden.

Aber mal andersrum - die reine "Anzeige" müsste dann ja auch sowieso anders behandelt werden, denn sie hat erstmal so rein "garnichts" mit den 26 Sekunden zu tun. Die 26 Sekunden entsprechen ja theoretisch nur den 100%. Also braucht es eigentlich auch nur eine mathematische Formel zur Umrechnung (das Ding zwischen % und Dezimal), Dezimalwert zum "arbeiten", % zwecks Anzeige. Du würdest dann auch nur hingehen und das %-Ding für den Slider nutzen (glaub ich).

Ich weiss halt nicht, wie in HA der eigentliche Weg zu gestalten wäre... normalerweise wäre es ja etwas in diese Richtung:

Slider -> Automatisierung

Was eben einer "direkten" Beziehung entspricht. Bei dem Konstrukt mir der Konvertierung sieht das halt schon wieder alles etwas anders aus. Ich weiss leider nicht, was für Möglichkeiten HA bietet, so ein Konstrukt zu bauen... Vielleicht geht das auch mit so einem Hilfsdings in dazwischen, was zur einen Seite % und zur anderen Seite Dezimalzahlen rauswirft, keine Ahnung.

Aber wie gesagt: Nicht kirre machen lassen, ich hab sowieso keine Ahnung und versuche das auch nur "für mich logisch" zu erklären (was natürlich auch völliger Blödsinn sein kann 😅). Wäre halt erstmal so mein Ansatz, muss nicht richtig sein, kann auch sehr weit entfernt von "richtig" sein... 🙃
 
Damit ich den (nennen wir ihn mal Slider) überhaupt in das UI bekomme, muss dieser über einen Helper erstellt werden, auch hier muss man schon trixen damit man intger als Wert bekommt, default ist hier (n,0) da es in Sekunden aber kein ( , oder . ) gibt muss ich den Wert bereits behandeln,

(wir reden immer noch von ganz normalen Schaltern ob jetzt als sonoff 4CH oder als eingebaute oder was auch immer, es bleiben Schalter für HA, auch wenn ich diese in der Anzeige umbiege)

Der Helper übergibt dann diese Int Wert als Variable an die Automation, was auch funktioniert.

Erstelle ich ein zugehörige Tamplet, biege ich den bereits Verbogenen Wert < n,0 -> 00 -> 00% > was mich nicht ans Ziel bringt 🙃

Wenn ich mir den RAW YAML Code anschaue ist das eh alles eine lange Spagetti 😂🤣, somit müsste es (denke ich) möglich sein rein nur die Anzeige zu manipulieren... bin nur noch nicht fündig geworden.
 
Naja, die Anzeige bzw. den Slider würde ich vermutlich einfach mit 0-100 angeben (halt %), wenn man da was einstellt, wird dieser Wert halt an irgendwas zwischenmässiges übergeben (einfache Rechnung von Wert x 0,26), was wiederum an die Aktion übergeben wird. Anderherum wird der "aktuelle Stand" ausgelesen (Wert / 0,26), womit man die % hat, welche dann als aktueller initialer Wert/Grundwert für den Slider dient. Hab nur keine Ahnung a) ob und b) wie das in HomeAssistant möglich ist/wäre 😁 Vielleicht braucht man so ein Zwischendings auch garnicht, sondern kann das direkt irgendwo hinterlegen (Slider und Aktion), aber wie gesagt... keine Ahnung, weder hab ich groß was mit HomeAssistant zu tun, noch bin ich Programmierer 😇
 
Was ich mir noch als Alternative vorstellen könnte bzw. was im Versuch hier grade soweit funktioniert hat wäre, den Helper auf einen Wert von 1 - 100 zu setzen mit Maßeinheit %:
1659181004054.png
und dann das hier seconds: '{{ states(''input_number.roto_rollo_auf_position'') | int }}' in der Berechnung umzuschreiben, bei mir wäre das {{ ((states('input_number.xyz') | float) / 3.84615384615385) | round(0) }} in den Entwicklerwerkzeugen, was einen Wert von 19 im Slider korrekt auf 5 Sekunden reduziert.
 
Habe mir das ganze jetzt nochmals als STRING angeschaut und ich bin immer noch davon überzeugt das, dass ohne Tamplet funktioniert muss, habe den Fehler nur noch nicht gefunden, denn als String funktioniert es,

Was mich auch Wunder ist das round nicht greift ???? egal ob als float oder int

YAML:
{{ states('input_number.roto_rollo_auf_position') | int/ 26*100 | round(0) }} %

{{ states('input_number.roto_rollo_auf_position') | float/ 26*100 | round(0) }} %


Screenshot 2022-07-30 205140.jpg
 
Ok hab ich wohl den Wald vor Bäumen nicht gesehen...
Jetzt rundet es richtig
YAML:
{{ (states('input_number.roto_rollo_auf_position') | int/ 26*100) | round(0) }} %

So da ein string das abhanden kann sollte das auch einsetzbar sein.
 
Das sieht doch schonmal gut aus, allerdings reden wir scheinbar ein wenig aneinander vorbei, wenn ich mir Deine Rechnung so ansehe.

Wie azrael783 schon sagte, in der UI - also dort, wo Dein Slider angezeigt wird - funktionieren keine Templates, deshalb können wir dort keine Rechnungen veranstalten und keine Anzeigen manipulieren (ausser über einen ausgelagerten Sensor eben, mit dem das steuern dann aber noch nicht implementiert wäre).

Wo wir sowas aber tun können und wo Du das ja auch schon getan hast mittels "Status abrufen, in int konvertieren" ist die Automatisierung, und genau darauf zielte mein Ansatz jetzt ab.

Wir setzen den Helper also auf den Wert "1 bis 100", haben damit in der UI im Slider die Anzeige "1 bis 100" wie von Dir gewünscht, da das aber falsche Werte sind muss dieser Umstand dann in der Automatisierung korrigiert werden, und da eben durch die Rechnung "/ 3.84615384615385" um die 100 wieder auf 26 zu reduzieren.

Quasi genau das Gegenstück zu dem, was Du aktuell rechnest, weil es an einem anderen Ort stattfindet - dem einzigen, wo wir simpel manipulieren können in dieser Konstruktion.
 
Nival,
Vielen Dank für den Hinweis,

Um es kurz zusammengefasst zu sagen
Berechnung und template in der UI funktioniert nicht.
Somit muss das "Ganze" Invert stattfinden

- Man definiert den angezeigten Wert
- manipuliert und/oder berechnet dann an der benötigten Stelle. (In meinem Fall in der Automatisierung)

(Lassen wir es mal so stehen, nach gut 14 Tagen home assistant und absolut 'null' plan von YAML 🤣 haben die ersten Schritte einigermaßen geklappt)
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.379
Beiträge
45.223
Mitglieder
3.978
Neuestes Mitglied
HAbeginner
Zurück
Oben