Wie kann ich ein eigenes "Gerät" (Rolladen) erstellen?

Hallo,

Ich arbeite mich langsam in HA und frage mich gerade, wie ich meine Rollläden anständig integrieren kann. Sie werden mittels Funk geöffnet und geschlossen.
Mittels Broadlink kann ich die Rolladen per Befehl öffnen und schließen und ich habe mir auch bereits Helfer geschrieben, die eine jeweilige current.position und target.position in % angeben. Wird target position geändert, fährt der Rolladen in die jeweilige Position. Soweit, so gut.
Aber wie “übersetze” ich jetzt das Ganze in ein entsprechendes “Gerät”, um es dann auch in HomeKit verfügbar zu machen?
In ioBroker war das alles kein Problem, nur wie mache ich es hier?
Danke!
Thomas

… scheint wohl nicht so häufig vor zu kommen…
Keiner eine Idee?

Das Template Cover schon entdeckt?

Gruß
Osorkon

Ich habe leider auch keine entsprechenden Geräte im Einsatz.

Basierend auf dem, was ich gerade auf die Schnelle gefunden habe, ist aber die Lösung in der Tat die Verwendung von Templates, in Verbindung mit den Codes der Fernbedienung:
HomeAssistant Broadlink Integration - daniel-strohbach.de
Broadlink RM Switch and Blinds - Configuration - Home Assistant Community (home-assistant.io)
Broadlink Blinds Cover since HA v115 - Configuration - Home Assistant Community (home-assistant.io)

Vielleicht gibt das mehr Aufschluss, wenn sich hier keiner findet, der das bereits selbst einsetzt…

Ich habe es mal mit Templates probiert. Der Tipp war schon mal gut.
Aber: Ich kriege es nicht zum laufen! Die Erstellte Entität wird als “nicht verfügbar” angezeigt und ich kann sie nicht steuern.
Hier der YAML part:

# Example configuration.yaml entry
cover:
  - platform: template
    covers:
      buero_l:
        unique_id: "shutter_buero_l"
        device_class: shutter
        friendly_name: "shutter_buero l"
        value_template: "{{ states('sensor.buero_l')|float > 0 }}"
        open_cover:
          service: script.open_buero_left
        close_cover:
          service: script.close_buero_left

Wenn du die Skripte jeweils manuell startest, geht aber der Rollo rauf bzw. runter oder?

Was genau steckt hinter sensor.buero_l? Ist das einer der selbst erstellten Helfer?

Was passiert wenn du unter Entwicklerwerkzeuge > Templates einmal states('sensor.buero_l')|float > 0 eingibst?
image

Bekommst du eine Fehlermeldung oder wird der Zustand einwandfrei zurückgegeben?
Wenn der Zustand ausgelesen werden kann, müsste als Ergebnis auf der rechte Seite ja ein true oder false ausgegeben werden.

Die Skripte starten manuell problemlos.

Ich glaube der Hase liegt im sensor.buero_l. Ich habe einfach das Beispieltemplate umbenannt, ohne einen entsprechenden Sensor zu erstellen.
Und im Moment weiß ich auch noch nicht, wie ich das mache und warum überhaupt :slight_smile:

Wenn ich das richtig überflogen habe, wird in dem verlinkten Beispiel ein Fenster-/Türkontakt benutzt um dann in dem value_template diesen zur Hilfe zu nehmen.
Über diesen Umweg wird es dann zusätzlich ermöglicht auch grafisch den Zustand “offen” oder “geschlossen” darzustellen.

Da etwas ähnliches derzeit fehlt, könnte man folgenden Versuch aus dem 2. Link starten:

# Example configuration.yaml entry
cover:
  - platform: template
    covers:
      buero_l:
        unique_id: "shutter_buero_l"
        device_class: shutter
        friendly_name: "shutter_buero l"
        open_cover:
          service: script.open_buero_left
        close_cover:
          service: script.close_buero_left

Ok, das funktioniert. Ich werde mal nen bissl knobeln, wie ich meine bisherige Automation, welche die Positionen berechnet, in die configuration.yaml integriert bekomme. Die Frage ist nur, ob man das so machen kann/sollte - Denn am Ende werden es bestimmt 15 Rolläden sein, die gesteuert werden wollen.,.
Dies hier ist im Moment in einer Automation für genau diesen einen Rolladen lauffähig:

alias: Rolladen_Büro_links_control
description: ""
trigger:
  - platform: numeric_state
    entity_id: input_number.rolladen_buro_l_target_position
    above: input_number.rolladen_buro_l_current_position
  - platform: numeric_state
    entity_id: input_number.rolladen_buro_l_target_position
    below: input_number.rolladen_buro_l_current_position
condition: []
action:
  - variables:
      target_position: "{{ trigger.to_state.state | float }}"
      current_position: "{{ trigger.from_state.state | float }}"
      blinds_open_service: script.open_buero_left
      blinds_close_service: script.close_buero_left
      difference: "{{ target_position - current_position }}"
      rolladen_size: "{{ states('input_number.rolladen_120') | float }}"
      duration: "{{ ((difference * 0.01 * rolladen_size) | round(0, 'ceil')) | abs }}"
      entity_id: input_number.rolladen_buro_l_current_position
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ target_position > current_position }}"
        sequence:
          - service: "{{ blinds_open_service }}"
      - conditions:
          - condition: template
            value_template: "{{ target_position < current_position }}"
        sequence:
          - service: "{{ blinds_close_service }}"
  - delay: "{{ duration }}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ target_position > current_position }}"
        sequence:
          - service: "{{ blinds_open_service }}"
      - conditions:
          - condition: template
            value_template: "{{ target_position < current_position }}"
        sequence:
          - service: "{{ blinds_close_service }}"
  - service: input_number.set_value
    data:
      entity_id: "{{ entity_id }}"
      value: "{{ target_position }}"
mode: single

Ich bekomme es irgendwie nicht hin, die Dinge zusammen zu basteln.
Ich habe Erfolgreich eine Entity erstellen können, die den Rolladen auf und zu machen kann. Dies erfolgt jeweils durch triggern der Skripte.
Was mir fehlt ist die Einbindung meiner Automation, welches das triggern der Skripte übernimmt und die Position des Rolladens berechnet. Die Automation läuft soweit auch solitär einwandfrei. D.h. wenn ich input_number.rolladen_buro_l_target_position verändere, dann bewegt sich der Rolladen entsprechend und setzt anschließend die current position auf denselben Wert.
Nur wie kriege ich das jetzt zusammen, sodass sich die Entität “shutter_buero_l” genauso verhält? - Sprich ich will ihr einen Zielwert geben und sie soll entsprechend reagieren.
Insgesamt scheint mir das alles sehr zerklüftet und unübersichtlich. Ich hätte das gerne alles zusammen in einem file und nicht ein Skript hier, eine Automation da und dann eine configuration.yaml etc.

Ich habe gerade ein ähnliches Problem.
Allerdings verlinke ich in der configuration.yaml auf eine template.yaml
Was ja kein Problem darstellen sollte.
Weiters möchte ich beim betätigen keinen Script aufrufen, sondern eine entität.
meine bisherige Template.yaml:

sensor:   
  - name: "Power Total"
    unique_id: power_total
    state: >-
     {{ (states('sensor.3_em_channel_a_power')|float(0) +
     states('sensor.3_em_channel_b_power')|float(0) +
     states('sensor.3_em_channel_c_power')|float(0)) }}
    unit_of_measurement: W
    device_class: power
    state_class: measurement

Nun würde ich diesen Teil ergänzen:

template:
  covers:
    lamellendach:
      device_class: shutter
      friendly_name: "Lamellendach"
      value_template: "{{ is_state('sensor.lamellendach', 'on') }}"
      open_cover:
        service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch2
      close_cover:
        service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch1
      stop_cover:
        service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391786_state_ch2

Aber das funktioiert überhaupt nicht.
Wie kann ich das in der Template lösen?
Danke

Ergänzt im gesamten würde dies so aussehen:

sensor:
  - name: "Power Total"
    unique_id: power_total
    state: >-
      {{ (states('sensor.3_em_channel_a_power')|float(0) +
      states('sensor.3_em_channel_b_power')|float(0) +
      states('sensor.3_em_channel_c_power')|float(0)) }}
    unit_of_measurement: W
    device_class: power
    state_class: measurement

cover:
  - name: "Lamellendach"
    device_class: shutter
    friendly_name: "Lamellendach"
    value_template: "{{ is_state('sensor.lamellendach', 'on') }}"
    open_cover:
      - service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch2
    close_cover:
      - service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch1
    stop_cover:
      - service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391786_state_ch2

Dies bringt aber leider diese Fehlermeldung:
2024-04-04 11:17:25.717 ERROR (MainThread) [homeassistant.config] Invalid config for ‘template’ at template.yaml, line 33: ‘cover’ is an invalid option for ‘template’, check: cover

:crayon:by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)

Es muss covers heißen und darunter ein name:.
So wie es in den Beiträgen davor schon steht

Dafür bin ich zu blöd!
Auch wenn ich covers nehme, funktioniert es nicht!
Nun mit der einfachen version:

covers:
  - name: lamellendach
    unique_id: "lamellendach"
    device_class: shutter
    friendly_name: "lamellendach"
    open_cover:
      service: script.heizungspumpe_auto
    close_cover:
      service: script.heizungspumpe_ein

auch dies gibt den Fehler:
2024-04-04 12:28:58.211 ERROR (MainThread) [homeassistant.config] Invalid config for ‘template’ at template.yaml, line 49: ‘covers’ is an invalid option for ‘template’, check: covers
aus!

Du musst so anfangen:

cover:
  - platform: template
    covers:
      lamellendach:

OK, Danke. auch wenn ich im template.yaml bin??
Nun Cover oder Covers?

Nein, das gehört da nicht hin.
Beides

Ich verweise in der configuration.yaml mit
template: !include template.yaml
auf die template.yaml.
Dort habe ich eben den Eintrag:
sensor: xxxxxxxxxx

Nun muss ich covers mit platform: template in die configuration.yaml packen?
Und dies dann für alle meine 12 Rollodinger ergänzen??

1 „Gefällt mir“

Du brings hier die Template Integration und die Platform Template durcheinander.

Für die Sensoren verewndest Du die Template Integration.
Configuration beginnt mit
template:
oder beginnt
- sensor: wenn Du die template.yaml verwendest

Das Cover Template, gehört aber zu der Platform Template
Konfiguration begint mit
cover:
oder mit
- platform: template
wenn Du die cover.yaml verwendest

Gruß
Osorkon

1 „Gefällt mir“

Danke @Osorkon
Das bringt ein wenig Licht ins Dunkel!!
Also muss ich in der confi.yaml
!include cover.yaml
einfügen.
Dann starte ich die cover.yaml mit

- platform: template
    covers:
    lamellendach:
      device_class: shutter
      friendly_name: "Lamellendach"
      value_template: "{{ is_state('sensor.lamellendach', 'on') }}"
      open_cover:
        service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch2
      close_cover:
        service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch1
      stop_cover:
        service: switch.turn_on
        target:
          entity_id: switch.hm_lc_sw4_pcb_req1391786_state_ch2

Würde das so passen??

du musst in die configuration.yaml

cover: !include cover.yaml

einfügen. Ansonsten passt es

Mühsam nährt sich das Eichhörnchen!

  - platform: template
    covers:
      lamellendach:
        device_class: shutter
        friendly_name: "lamellendach"
        #value_template: "{{ states('sensor.lamellendacch')|float > 0 }}"
        open_cover:
          service:  switch.turn_on
          target:
            entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch2
        close_cover:
          service:  switch.turn_on
          target:
              entity_id: switch.hm_lc_sw4_pcb_req1391260_state_ch1
        stop_cover:
          service:  switch.turn_on
          target:
              entity_id: switch.hm_lc_sw4_pcb_req1391786_state_ch2

Das funktioinert nun schon mal.
Entität wurde angelegt und ist zumindest verfügbar
Nur leider wird die entsprechende Entität nicht geschalten!
Deshalb hab ich hier ein kleines Work-a-round realisiert.
Da ich den betätigten Schalter sowieso zurücksetzen muss, hab ich das nun auch mit 3 scripts gelöst.
Hier die cover.yaml:

  - platform: template
    covers:
      lamellendach:
        device_class: shutter
        friendly_name: "lamellendach"
        #value_template: "{{ states('sensor.lamellendacch')|float > 0 }}"
        open_cover:
          service: script.lamellendach_oeffnen
        close_cover:
          service: script.lamellendach_close
        stop_cover:
          service: script.lamellendach_stop

Mal sehen ob ich es mit der Laufzeit noch hinbekomme, dass ich den Öffnungszustand auch irgendwie dazubekomme.