nein hab ich in Powerpoint so hingemalt 
Das was du im GIF siehst ist natürlich kaum 100% kompatibel, aber ich versuch mal die wichtigen Schritte aufzuzeigen oder zu beschreiben.
Ich habe die shutter-card genommen wie sie nun mal ist. Die original Buttons mit dem card-mod sozusagen durch verschieben hinter das Rollo gelegt, denn die brauche ich ja nicht. Wie das geht findest du im englischsprachigen Forum, einfach nach shutter card suchen. Da haben andere Dinge hin und her geschoben, ich hab solange getrickst bis die Buttons weg waren.
Sprich in meiner Shutter-Card steht nur folgendes:
type: custom:shutter-card
title: Esszimmer
entities:
- entity: cover.ar_esszimmer
name: 'offen zu:'
buttons_position: none
title_position: bottom
# und danach halt die style iIformationen wie in card mod beschrieben um die buttons zu killen.
Einzig wichtige Info ... das cover entity um das es geht.
darunter die Buttons also open/stop/close sind custom:button-cards hier mal eine als Beispiel
type: custom:button-card
entity: cover.ar_esszimmer
tap_action:
action: call-service
service: script.virt_ar_unified
service_data:
select: select.e2m_virt_ar_esszimmer_action
what: AO
which: cover.ar_esszimmer
aspect_ratio: 1/0.5
color_type: card
color: rgb(65, 109, 150)
state:
- operator: template
value: |
[[[
if (entity.attributes.current_position > 99
)
return 'open';
]]]
icon: mdi:file-excel-box-outline
name: n/a
color: rgb(100,100,100)
- operator: template
value: |
[[[
if (entity.attributes.current_position > 0
&& entity.attributes.current_position < 100
&& entity.state == 'open'
)
return 'tilt';
]]]
icon: mdi:transfer-up
name: OPEN
color: rgb(65, 109, 150)
- value: closed
icon: mdi:transfer-up
name: OPEN
color: rgb(65, 109, 150)
- value: opening
icon: mdi:stop
name: STOP
color: rgb(65, 109, 150)
- value: closing
icon: mdi:stop
name: STOP
color: rgb(65, 109, 150)
da sind eigentlich alle relevanten Informationen im Abschnitt entity: bzw. tap_action: der Rest ist mehr oder weniger Kosmetik, also wann soll der button Open, Close oder n/a zeigen.
Das entity ist ein mein Rollo, also ein cover eintrag aus eine covers.yaml auf die ich in der configuration.yaml mittels ‘cover: !include covers.yaml’ referenziere.
da ich die covers_time_based benutze sieht ein cover als Beispiel dort bei mir wie folgt aus:
- platform: cover_time_based
devices:
ar_esszimmer:
name: "AR Esszimmer" # AR == Aussenrollo weil ich gerne alle entities der cover in Reihe wollte
travelling_time_up: 15
travelling_time_down: 11
open_switch_entity_id: script.dummy
close_switch_entity_id: script.dummy
Die Scripte hier habe ich absichtlich mit nem Dummyscript belegt das einfach nur ein delay 00:00:00 macht weil was soll ich mit 2 scripten für 2 Einzelfunktionen wenn ich ja jeder Funktion 2 Unterfunktionen zuweisen will. STOP falls sich das Rollo bewegt oder halt hoch oder runter falls es sich gerade nicht bewegt. Sprich die 2 sind mehr-als-flüssig. Denn ich arbeite ja mit der tap_action der buttons.
Also kurz zurück zur tap_action: in der custom:button.card
Ich rufe einen service auf und zwar soll ein script ausgeführt werden welches ich mal virt_ar_unified benamst habe weil es halt ein virtueller button ist, ein AR == aussenrollo bedient und unified weil es halt für egal wieviele meiner Rolläden gilt.
Interessanter Punkt hier alles was sich unter serivce_data: befindet.
Frei nach dem Motto was wie wo (ein-ge-englischt dann select what which)
Also mit select wähle ich den entsprechneden selector aus (das ist ein am ende das entity welches mir das enoceanmqtt addon liefert (ab version 0.1.24 glaube ich) sprich das ist ein virtueller EnOcean F6-02-02 button mit den 4 Einzelbuttons gemäß EnOcean Spezifikation AO, AI, BO und BI oder eben ‘None’ wenn man den jeweiligen Button loslässt. (wie bei einem physikalischen Button)
Bei what: trage ich dann ein welchen einzelbutton ich mit dem custom-button drücken möchte im Beispiel oben halt den AO button.
Und bei which: habe ich den Rollo eingetragen den der custom-button steuern soll. Mein Esszimmerrollo.
Wichtig, für das “unifed script” ich übergebe also an das script sowohl das virutellen EnOcean entity als auch den gewünschten Tastendruck sowie das zugehörige Rollo.
Ach so ja der andere custom-button unterscheidet sich primär durch ein AI anstelle AO beim what:
Und halt etwas Kosmetik im state: Bereich da bei Home Assistant Rollos ja nicht den Zustand “mittendrin” kennen sondern immer nur Opened oder Closed als Status zurückmelden. Sprich alles was nicht Closed ist, ist Opened, bedeutet 1% Opened ist identisch mit 100% Opened.
Im Script passiert nun folgendes:
Beim Auswählen einer select.select_option feuert das enoceanmqtt addon das entsprechende EEP telegram über den EnOcean stick raus. Und der Eltako FAM14/FSB14 macht das was er soll (so du den virtuellen Button dort eingelernt hast was äusserst praktisch wäre.) odr im Nodon oder wo auch immer. Sprich der Virtuelle Button ist nix andere wie ein weiterer Taster an der Wand nur halt im HA virtuell. Sprich ohne Shutter-Card wärst du jetzt fertig. das Rollo tut was es soll wenn du auf den button der custom:button-card drückst. Also fast zumindest. Was noch fehlt ist die STOP Funktion bei Bewegung.
Damit es aber auch gleich hübsch wird ist das script nun länger.
Es prüft nun zuerst ob der Rolladen in Bewegung war oder nicht. War er gerade in Bewegung bewirkt ein Tastendruck den STOP der shutter card, falls er schon stand dann halt Kommando auf falls AO oder BO oder eben runter falls AI oder BI
Und am Ende, egal was vorher war löst er nochmal den slector des Virtuellen Tasters aus mit dem Wert ‘None’ der sozusagen einem physikalischen Button-release eines EnOcean Tasters entspricht.
alias: virt_ar_unified
sequence:
- service: select.select_option
data:
option: "{{ what }}"
target:
entity_id: "{{ select }}"
- if:
- condition: template
value_template: "{{ is_state(which, \"opening\") or is_state(which, \"closing\") }}"
then:
- service: cover.stop_cover
data: {}
target:
entity_id: "{{ which }}"
else: # sonst
- choose:
- conditions:
- condition: template
value_template: "{{ (what == \"AO\") or (what == \"BO\") }}"
sequence:
- service: cover.open_cover
data: {}
target:
entity_id: "{{ which }}"
- conditions:
- condition: template
value_template: "{{ (what == \"AI\") or (what == \"BI\") }}"
sequence:
- service: cover.close_cover
data: {}
target:
entity_id: "{{ which }}"
- service: select.select_option
data:
option: None
target:
entity_id: "{{ select }}"
mode: single
icon: mdi:window-shutter-auto
Also die wirkliche Glanzleistung war eher die Frage wie bekomme ich es hin das ein Klick auf ein custom:button-card element a) ein EEP telegram über den EnOcean Stick rausschickt, was dank dem AddOn wirklich einfach ist, und dann halt diese konfuse Situation das HA meint das alles was nicht Closed ist bei einem Rolladen offen ist. Ein Glas Bier ist ja nun auch nicht halb leer oder halb voll wenn es nicht mehr komplett voll ist. Auf so ne Idee können wirklich nur die HA Jungs kommen.
Ich hoffe ich hab keinen Schritt vergessen, mal abgesehen wie das enoceanmqtt addon funktioniert und wie man es einrichtet.
Wenn du Fragen dazu hast oder sonst noch was fehlt oder unklar ist, gerne.
Ich hatte vorhin glatt schon überlegt ob ich das Beispiel nicht in der Thread mit den Automatisierungen packe zu denen @simon42 ein Video angekündigt hat. Denn bis ich das mit der Parameterübergabe kapiert hatte wie man die an ein Script übergibt und sie darin nutzt habe ich nicht nur Stunden verbraten.
Ich wollte aber unbedingt halt 1 Script für egal wie viele Rolläden und nicht 16 Scripte oder Automatisierungen, für jedes Rollo jeweils ein eigenes. Da steigt sonst hinterher keiner mehr durch.
Und am Ende fand ich die Script Variante sogar schöner als eine Automatisierung, wobei letztendlich beides nahezu identisch funktioniert.