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

ah boa. eu ia cronometrar o tempo para ver a diferença, mas como estou fora ainda não consegui. Assim sendo está resolvido :slight_smile: Obrigado.
Assim que tiver isto a funcionar (falta o hardware) vou tentar por o “hey google, close 50%” :wink:

Pulsetime , já testas-te desligar a corrente do sonoff e ligar ver o que acontece?

Tinha essa opçao de pulsetime para abrir a garagem e basicamente quando o modulo reiniciava o HA de X em X tempo andava abrir a porta sozinha e tinha o Power Retain off mas era o MQTT do HA…

Provavelmente estavas a usar um cover mqtt com “retain: true”, não?
Neste caso a cover não é mqtt, é template com comandos mqtt…

Mais uma edição - vejam no cabeçalho as mudanças e actualizem o código… :wink:

Mais uma pequena correcção de bugs… x2…

1 Like

Sou novo nestas andanças, fiz esta config como descrito e esta a bombar no HA mas o problema é que não sei como colocar os botões físicos em funcionamento. Tentei como esta neste artigo: https://forum.cpha.pt/t/como-ligar-estores-electricos-a-um-sonoff-dual/94.
Tenho o sonoff dual r2 com tasmota.

Vê o post que acabei de fazer no tópico de comentários desse tutorial…

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.


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


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