Como configurar um cover template para persianas com estado

(este tópico foi actualizado - havia um problema com o state e os botões que ficavam desactivados, por isso tive que adoptar uma abordagem diferente - penso que agora sim, está bem!)

Esta é apenas uma sugestão… Uma ideia que tive e testei para resolver o problema de saber se a janela fechou completamente ou não.
Os pressupostos são os seguintes:

  • Sonoff dual ou equivalente com firmware tasmota
  • o estore demora ligeiramente menos de 10 segundos a fechar completamente (adaptar o código em conformidade se assim não for)
    (é aconselhavel configurar no tasmota o powerretain off)

Raciocínio - o estore demora 10 segundos a fechar, ou seja, se o relé estiver activo mais de 9 segundos, é porque ninguém o parou e, portanto, fechou completamente. Se estiver activo menos tempo foi porque alguém o parou antes de fechar totalmente e ele continua aberto. Além disso, se for activado o relé para abrir, o estore está aberto, obviamente…
Digam coisas no tópico de discussão…

Passos:

  • definir um pulsetime de 10s no tasmota digitando na consola dele (sem as aspas): “pulsetime1 100” e “pulsetime2 100” e definir “setoption14 on”, para activar interlocking!

  • criar um “package” no home assistant com o seguinte código ou “encaixar” na configuração os seguintes componentes:

    cover:
      - platform: template
        covers:
          persiana:
            friendly_name: "Persiana"
            position_template: >-
              {% if is_state('input_select.persiana','closed') %} 0 
              {% elif is_state('input_select.persiana','open') %} 100 
              {% elif is_state('input_select.persiana','parcial') %} 50
              {% endif %}
            open_cover:
              - service: mqtt.publish
                data:
                  topic: 'cmnd/wemosd1pro/POWER1'
                  payload: 'ON'
            close_cover:
              - service: mqtt.publish
                data:
                  topic: 'cmnd/wemosd1pro/POWER2'
                  payload: 'ON'
            stop_cover:
              - service: mqtt.publish
                data:
                  topic: 'cmnd/wemosd1pro/POWER1'
                  payload: 'OFF'
              - service: mqtt.publish
                data:
                  topic: 'cmnd/wemosd1pro/POWER2'
                  payload: 'OFF'
    
    binary_sensor:
      - platform: mqtt
        name: rele 1
        state_topic: "stat/wemosd1pro/POWER1"
        payload_on: "ON"
        payload_off: "OFF"
      - platform: mqtt
        name: rele 2
        state_topic: "stat/wemosd1pro/POWER2"
        payload_on: "ON"
        payload_off: "OFF"
    
    input_select:
      persiana:
        name: Estado da persiana
        options:
         - open
         - closed
         - parcial
    
    automation:
      - id: persiana_parcialmente_aberta
        alias: Persiana parcialmente aberta
        trigger:
        - platform: state
          entity_id: binary_sensor.rele_1
          to: 'on'
        - platform: state
          entity_id: binary_sensor.rele_2
          to: 'on'
        action:
          service: input_select.select_option
          data:
            entity_id: input_select.persiana
            option: parcial
      - id: persiana_aberta
        alias: Persiana aberta
        trigger:
          platform: state
          entity_id: binary_sensor.rele_1
          to: 'on'
          for:
            seconds: 9
        action:
          service: input_select.select_option
          data:
            entity_id: input_select.persiana
            option: open
      - id: persiana_fechada
        alias: Persiana fechada
        trigger:
          platform: state
          entity_id: binary_sensor.rele_2
          to: 'on'
          for:
            seconds: 9
        action:
          service: input_select.select_option
          data:
            entity_id: input_select.persiana
            option: closed
1 Curtiu

Secalhar podes trocar o input_select e as 2 automations por este template:

value_template: >
  {% if {{ (as_timestamp(now())-as_timestamp(states.binary_sensor.rele_2.last_updated)) > 9}} %}
    closed
  {% else %}
    open
  {% endif %}

E se funcionar sempre fica o package um pouco mais simples.

Infelizmente não dá… Também tinha ponderado essa hipótese, mas o last updated também se aplica quando passa a off e portanto 9 segundos depois de o relé se desligar ainda que seja com o botão de stop, passava a closed…

Boas @Maddoctor!

Ja fiz fix na template e agora apenas da state closed se X entity tiver off por mais de 9 segundos caso contrario da on.
Muda apenas light.table para a tua entity que queres fazer track.

value_template: >
  {% if (as_timestamp(now())-as_timestamp(states.light.table.last_updated)) > 9 | int and states.light.table.state == 'off' %}
    closed
  {% else %}
    open
  {% endif %}

Continua a não funcionar… Alias acho que é impossível com templates porque o relé vai acabar por estar sempre off mais de 9 segundos, independentemente da forma como parou… (por pulsetime ou manualmente…). Se tentares ver se está on mais de 9 segundos, essa condição só será válida durante 1 segundo e depois passa a falsa, portanto também não dá… Os templates, da forma como os usas, são “demasiado dinâmicos”…

1 Curtiu

Actualizei o código… Tive que adicionar um estado “parcialmente aberto” para que os botões apenas ficassem desactivados quando a abertura era total… Isso implicou uma abordagem diferente à forma como é determinado o estado…
Se tinham usado o código anterior, mudem… :wink:

Fico à espera de feedback

Já testei numa persiana e funcionou impec.
Excelente trabalho MadDoctor, agora vou ter de replicar para as outras ver se corre bem…

Vou implementar e testar, depois dou feedback :stuck_out_tongue:

Já tenho tudo programado e a funcionar, quando reinicio o HA arranca com os últimos estados só que não se alteram, tenho que recarregar automações para voltar a funcionar.
Tenho no final de cada automação “initial_state: true” mas o resultado é o mesmo.

Isso é estranho… Esse comportamento, em princípio, não deve ser problema da minha configuração uma vez que o reload automations resolve… Será que as automações que fazem parte de packages têm algum bug?
Tenta pôr as automações “fora” do package, no sítio habitual e depois dá feedback…

Tenho a configuração dos covers, binary_sensor e input_select no “configuration.yaml” e as automações no “automations.yaml”, não percebi o que queres dizer com package, deve haver uma forma mais simples de fazer porque eu tiver a fazer uma replica do código para cada uma.
Mas já resolvi não tinha colocado o “initial_state: true” em todas as automações.
Está a funcionar 5*

Bem, os packages são, como o nome indica, pacotes onde estão incluídos vários elementos usados para determinado objectivo. Cada package é um ficheiro yaml que inclui, por exemplo, tudo o que eu pus acima… Simplifica as coisas, em vez de andar a colocar cada elemento separado…
Têm uma ENORME desvantagem - quando fazes reload (automations, groups, etc), os elementos dos packages “desaparecem” e, portanto, tens de reiniciar o sistema tornando os reloads inúteis… (já houve imensos pedidos para mudar esse comportamento, mas em vão… :frowning: )

Mas contínuas a ter a indicação de quantos % está aberto?

Como assim, continuo?! No meu nunca mostrou… No teu mostra? Como é que ele poderia determinar?
Por acaso estou a trabalhar num código para isso… Devo fazer um tutorial muito em breve… :wink:

1 Curtiu

@Maddoctor nao sei se ele tava a falar disto:

Tenho esta configuração a funcionar mas não atualiza para o estado correto no input_select, coloca sempre “partial” quer abra ou feche completamente o estore.

Mas se alterar manualmente as opções no input_select, o cover atualiza o estado corretamente ou seja se escolher “close” ele bloqueia a seta para baixo.

Na linha “position” também só coloca a bola azul se o input_select estiver “close”, nas outra duas opção não aparece.

Podem dar uma ajuda? Obrigado

############### Cover.yaml #############################
- platform: template
  covers:
    estore_sala:
      friendly_name: "Estore Sala"
      position_template: >-
        {% if is_state('input_select.est_sala','closed') %} 0 
        {% elif is_state('input_select.est_sala','open') %} 100 
        {% elif is_state('input_select.est_sala','parcial') %} 50
        {% endif %}
      open_cover:
        - service: mqtt.publish
          data:
            topic: 'cmnd/sonoffdual01/POWER1'
            payload: 'ON'
      close_cover:
        - service: mqtt.publish
          data:
            topic: 'cmnd/sonoffdual01/POWER2'
            payload: 'ON'
      stop_cover:
        - service: mqtt.publish
          data:
            topic: 'cmnd/sonoffdual01/POWER1'
            payload: 'OFF'
        - service: mqtt.publish
          data:
            topic: 'cmnd/sonoffdual01/POWER2'
            payload: 'OFF'
			
			
############## binary_sensor.yaml #########################
- platform: mqtt
  name: rele_sala 1
  state_topic: "stat/sonoffdual01/POWER1"
  payload_on: "ON"
  payload_off: "OFF"
- platform: mqtt
  name: rele_sala 2
  state_topic: "stat/sonoffdual01/POWER2"
  payload_on: "ON"
  payload_off: "OFF"

############## input_select.yaml ############################
est_sala:
  name: Estado Estore Sala
  options:
    - open
    - closed
    - parcial

############## automation.yaml ##############################	
- id: '1528802738668'
  alias: Estore Sala parcialmente aberto
  trigger:
  - entity_id: binary_sensor.rele_sala_1
    platform: state
    to: 'on'
  - entity_id: binary_sensor.rele_sala_2
    platform: state
    to: 'on'
  condition: []
  action:
  - data:
      entity_id: input_select.est_sala
      option: parcial
    service: input_select.select_option
- id: '1528803507391'
  alias: Estore Sala aberto
  trigger:
    platform: state
    entity_id: binary_sensor.rele_sala_1
    to: 'on'
    for:
      seconds: 13
  action:
    service: input_select.select_option
    data:
      entity_id: input_select.est_sala
      option: open
    
- id: '1528803606196'
  alias: Estore Sala fechado
  trigger:
    platform: state
    entity_id: binary_sensor.rele_sala_2
    to: 'on'
    for:
      seconds: 13
  action:
    service: input_select.select_option
    data:
      entity_id: input_select.est_sala
      option: close

Qual foi o pulsetime que definiste?convém ser superior os 13 que puseste no código…
A linha “position” não funciona (deve ser um bug do HA)…
Sugiro-te que uses antes o outro tutorial que fiz mais recentemente porque tem mais opções…

Coloquei 13 no pulsetime também, o estore leva cerca de 12 segundos num fecho/abertura completa.

Após alteração do pulsetime 1 e 2, o comportamento é igual.

Então deves pôr 12 segundos no código… E manter os 13 no pulsetime… (no meu estava 10s pulsetime e 9 no código…)
Ou pôr 14 no pulsetime e manter 13 ou 12 no código…

@Maddoctor devemos manter este topico ou queres , bloquear e passarmos so a discutir no outro tutorial que fizeste?


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


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