Como criar um cover para estores com indicação e controlo da percentagem de abertura aproximada [DESACTUALIZADO]

mais uma pequena correcção de bugs para ligar com possíveis delays de comunicação (a mudança foi apenas nas automações)…
Actualizem os códigos

Mais uma alteração. Agora deve ser a última… Actualizem!

Tenho umas perguntas de maçarico.

O FW que está instalado é o tasmota, certo ?
O Sonoff deve ser configurado como wemo
O nome que foi dado ao SONOFF DUAL foi “wemosd1mini” ?

@andrefilipecruz o tópico mais actualizado para este assunto está aqui:


Onde tens passo a passo como fazer. Alguma dúvida questiona .

Boa noite. Sou novo nestas andanças. Já tenho o sonoff r2 configurado noentanto tenho erros nesse código. Esse código coloca-se integralmente no configuration.yaml?

Obrigado

O código é para ser usado num ficheiro package. Podes ver como utilizar aqui:

Se não quiseres/puderes utilizar como package, podes dividir o código pelos vários ficheiros correspondentes (caso uses a configuração distribuída por vários ficheiros) ou colocar tudo no configuration.yaml.

Que erros dá? Transcreve essa parte do log…

Já consegui meter o código a correr e funciona bem. Vou testar agora com o package. Mais duas questões:
1ª Quando está a funcionar reparo que a seta para baixo fica cinzenta quando está a ser usada mas a seta para cima não muda de cor quando usada. É mesmo assim?
2ª Como posso agrupar a persiana com o slider na mesma janela?

Obrigado

Em princípio as setas ficam inactivas quando o estore está totalmente fechado ou totalmente aberto…
Para as agrupares na mesma janela deves pôr as entidades cover e slider no mesmo grupo…

Viva.
Não consigo por as setas a trabalhar direito. o tempo de abertura e fecho , tudo ok , de resto não consigo saber se a persiana está totalmente em cima ou em baixo

E como tens a configuração do estore e do grupo?

Boa noite
Vou então pedir uma ajudinha a alguem que há 2 semanas se meteu nisto e anda um bocado às aranhas a tentar por estores a trabalhar direitinho.
O problema tal como disse anteriormente é que faço subir ou descer as persianas e não consigo ter a percentagem na qual ficou. Se estiver no zero, consigo fazer subir com a seta que está a preto e a persiana sobe o tempo que lhe indiquei e desliga o relé, mas a percentagem mantem-se no zero. Se virar a barra para os 100%, aí as setas mudam de cor e consigo baixar, mas quando baixa totalmente desliga o relé mas a percentagem mantem-se nos 100%.
Acho que me expliquei direito.

Deixo aqui o código tal como ele está agora.
agradecia que alguem me disse-se o que está mal, até para eu corrigir a das outras persianas

group:
  
  quarto:
    view: yes
    name: quarto
    entities:
      - group.quartogrupo

  quartogrupo:
    control: hidden
    name: Quarto
    entities:
      - input_number.aberturapersianaquarto
      - cover.persianaquarto

input_text:
#Alterar "inicial" para o valor em segundos que o estore demora a abrir desde a posição fechada e vice-versa nos input_text tempodeabertura e tempodefecho.
  tempodeaberturaquarto:
    name: tempo de maximo de abertura
    initial: 22
  tempodefechoquarto:
    name: tempo de maximo de fecho
    initial: 22
  iniciofechoquarto:
    name: iniciofecho
  inicioaberturaquarto:
    name: inicioabertura

cover:
  - platform: template
    covers:
      persianaquarto:
        friendly_name: "Persiana Quarto"
        position_template: '{{ states.input_number.aberturapersianaquarto.state }}'
        open_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persianaq/POWER1'
              payload: 'ON'
        close_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persianaq/POWER2'
              payload: 'ON'
        stop_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persianaq/Backlog'
              payload: 'POWER1 OFF; POWER2 OFF'

binary_sensor:
  - platform: mqtt
    name: rele 1
    state_topic: "stat/persianaq/POWER1"
    payload_on: "ON"
    payload_off: "OFF"
  - platform: mqtt
    name: rele 2
    state_topic: "stat/persianaq/POWER2"
    payload_on: "ON"
    payload_off: "OFF"

input_boolean:
  alterarsliderquarto:
    name: Alterar o slider quarto
    initial: on

input_number:
  aberturapersianaquarto:
    name: Abertura
    min: 0
    max: 100
    step: 1
    unit_of_measurement: '%'
    icon: mdi:blinds
  aberturapersianaquartoold:
    name: valor antigo de abertura
    min: 0
    max: 100
    step: 1
    unit_of_measurement: '%'

automation:
  - id: iniciofecho
    alias: começou a fechar
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_2
      to: 'on'
    action:
      service: input_text.set_value
      data_template:
        entity_id: input_text.iniciofecho
        value: '{{ now() }}'
  - id: fimfecho
    alias: parou de fechar
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_2
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarsliderquarto'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: >-
          {% if (states.input_number.aberturapersianaquarto.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int < 4 %}
            0
          {% else %}
            {{ (states.input_number.aberturapersianaquarto.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquarto
        value: '{{ states.input_number.aberturapersianaquartoold.state }}'
  - id: inicioabertura
    alias: começou a abrir
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_1
      to: 'on'
    action:
      service: input_text.set_value
      data_template:
        entity_id: input_text.inicioabertura
        value: '{{ now() }}'
  - id: fimabertura
    alias: parou de abrir
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_1
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarslider'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: >-
          {% if (states.input_number.aberturapersianaquarto.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int > 96 %}
            100
          {% else %}
            {{ (states.input_number.aberturapersianaquarto.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquarto
        value: '{{ states.input_number.aberturapersianaquartoold.state }}'

  - id: aberturapeloslider
    alias: Abertura pelo slider
    trigger:
      platform: state
      entity_id: input_number.aberturapersianaquarto
    condition:
    - condition: template
      value_template: '{{ states.input_number.aberturapersianaquarto.state|int > states.input_number.aberturapersianaquartoold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider
    - service: mqtt.publish
      data:
        topic: 'cmnd/persianaq/Backlog'
        payload_template: "POWER1 ON; delay {% if is_state('input_number.aberturapersianaquarto', '100.0') %} {{ (((states.input_number.aberturapersianaquarto.state|int - states.input_number.aberturapersianaquartoold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.aberturapersianaquarto.state|int - states.input_number.aberturapersianaquartoold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER1 OFF"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_1', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarslider
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: '{{ states.input_number.aberturapersianaquarto.state }}'
  - id: fechopeloslider
    alias: Fecho pelo slider
    trigger:
      platform: state
      entity_id: input_number.aberturapersianaquarto
    condition:
    - condition: template
      value_template: '{{ states.input_number.aberturapersianaquarto.state|int < states.input_number.aberturapersianaquartoold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider
    - service: mqtt.publish
      data:
        topic: 'cmnd/persianaq/Backlog'
        payload_template: "POWER2 ON; delay {% if is_state('input_number.aberturapersianaquarto', '0.0') %} {{ (((states.input_number.aberturapersianaquartoold.state|int - states.input_number.aberturapersianaquarto.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.aberturapersianaquartoold.state|int - states.input_number.aberturapersianaquarto.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER2 OFF"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_2', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarslider
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: '{{ states.input_number.aberturapersianaquarto.state }}'

Obrigado por tudo

@Maddoctor é o homem mais certo para te ajudar neste tema. aguarda até ele ler.

Nas automações, não alteraste input_boolean.alterarslider para input_boolean.alterarsliderquarto…

Assim de repente é esse o erro. Pode haver outros, mas para já testa assim…

1 Curtiu

Vou testar e depois comento.
Muito obrigado

Bem fiz o teste e ficou igual
agora está assim

group:
  
  quarto:
    view: yes
    name: quarto
    entities:
      - group.quartogrupo

  quartogrupo:
    control: hidden
    name: Quarto
    entities:
      - input_number.aberturapersianaquarto
      - cover.persianaquarto

input_text:
#Alterar "inicial" para o valor em segundos que o estore demora a abrir desde a posição fechada e vice-versa nos input_text tempodeabertura e tempodefecho.
  tempodeaberturaquarto:
    name: tempo de maximo de abertura
    initial: 15
  tempodefechoquarto:
    name: tempo de maximo de fecho
    initial: 15
  iniciofechoquarto:
    name: iniciofecho
  inicioaberturaquarto:
    name: inicioabertura

cover:
  - platform: template
    covers:
      persianaquarto:
        friendly_name: "Persiana Quarto"
        position_template: '{{ states.input_number.aberturapersianaquarto.state }}'
        open_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persianaq/POWER1'
              payload: 'ON'
        close_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persianaq/POWER2'
              payload: 'ON'
        stop_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persianaq/Backlog'
              payload: 'POWER1 OFF; POWER2 OFF'

binary_sensor:
  - platform: mqtt
    name: rele 1
    state_topic: "stat/persianaq/POWER1"
    payload_on: "ON"
    payload_off: "OFF"
  - platform: mqtt
    name: rele 2
    state_topic: "stat/persianaq/POWER2"
    payload_on: "ON"
    payload_off: "OFF"

input_boolean:
  alterarsliderquarto:
    name: Alterar o slider quarto
    initial: on

input_number:
  aberturapersianaquarto:
    name: Abertura
    min: 0
    max: 100
    step: 1
    unit_of_measurement: '%'
    icon: mdi:blinds
  aberturapersianaquartoold:
    name: valor antigo de abertura
    min: 0
    max: 100
    step: 1
    unit_of_measurement: '%'

automation:
  - id: iniciofecho
    alias: começou a fechar
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_2
      to: 'on'
    action:
      service: input_text.set_value
      data_template:
        entity_id: input_text.iniciofecho
        value: '{{ now() }}'
  - id: fimfecho
    alias: parou de fechar
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_2
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarsliderquarto'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: >-
          {% if (states.input_number.aberturapersianaquarto.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int < 4 %}
            0
          {% else %}
            {{ (states.input_number.aberturapersianaquarto.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquarto
        value: '{{ states.input_number.aberturapersianaquartoold.state }}'
  - id: inicioabertura
    alias: começou a abrir
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_1
      to: 'on'
    action:
      service: input_text.set_value
      data_template:
        entity_id: input_text.inicioabertura
        value: '{{ now() }}'
  - id: fimabertura
    alias: parou de abrir
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_1
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarsliderquarto'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: >-
          {% if (states.input_number.aberturapersianaquarto.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int > 96 %}
            100
          {% else %}
            {{ (states.input_number.aberturapersianaquarto.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquarto
        value: '{{ states.input_number.aberturapersianaquartoold.state }}'

  - id: aberturapeloslider
    alias: Abertura pelo slider
    trigger:
      platform: state
      entity_id: input_number.aberturapersianaquarto
    condition:
    - condition: template
      value_template: '{{ states.input_number.aberturapersianaquarto.state|int > states.input_number.aberturapersianaquartoold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarsliderquarto
    - service: mqtt.publish
      data:
        topic: 'cmnd/persianaq/Backlog'
        payload_template: "POWER1 ON; delay {% if is_state('input_number.aberturapersianaquarto', '100.0') %} {{ (((states.input_number.aberturapersianaquarto.state|int - states.input_number.aberturapersianaquartoold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.aberturapersianaquarto.state|int - states.input_number.aberturapersianaquartoold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER1 OFF"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_1', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarsliderquarto
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: '{{ states.input_number.aberturapersianaquarto.state }}'
  - id: fechopeloslider
    alias: Fecho pelo slider
    trigger:
      platform: state
      entity_id: input_number.aberturapersianaquarto
    condition:
    - condition: template
      value_template: '{{ states.input_number.aberturapersianaquarto.state|int < states.input_number.aberturapersianaquartoold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarsliderquarto
    - service: mqtt.publish
      data:
        topic: 'cmnd/persianaq/Backlog'
        payload_template: "POWER2 ON; delay {% if is_state('input_number.aberturapersianaquarto', '0.0') %} {{ (((states.input_number.aberturapersianaquartoold.state|int - states.input_number.aberturapersianaquarto.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.aberturapersianaquartoold.state|int - states.input_number.aberturapersianaquarto.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER2 OFF"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_2', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarsliderquarto
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaquartoold
        value: '{{ states.input_number.aberturapersianaquarto.state }}'

Reiniciaste o home assistant? Ou apenas escolheste reiniciar automações?
Os ficheiros package não são recarregado se não reiniciares o home assistant…
Verifica também que estas automações estejam todas activas…

reiniciei tudo .
qual são as automações que devem estar activas ??

As que fazem parte do package…

eu quando clico em automação aparece

Escolha a automação a editar

Clicando em qualquer uma delas, nada aparece… é normal ??

Estando num package, não aparece…


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade