MadBlinds v2 - Como Controlares os estores eléctricos e "estimares" a sua posição


(Helder Lima) #143

Sim, estão todas ligadas, perguntei porque como tem o slider podia não ter esta opção.
Mas nos vossos está a funcionar?


(Tiago Marques) #144

O madblinds é um código extenso com um conjunto de automações. Sem ver é difícil perceber o que está a falhar.

Se queres simplificar, opta pelo fork do tasmota do stefanbode. Já tem toda a parte de posicionamento e controlo incluída no firmware


(Helder Lima) #145

Boas, já tenho o tasmota do Stefanbode num sonoff que tenho de reserva e não vi nenhuma diferença em relação ao original.
Que programação tens no HA?


(Tiago Marques) #146

ao usar o código do MAdBlinds, todo o calculo e automação é feito do lado do HA. Com o do stefanbode basta enviar um tópico mqtt com a posição que queres e ele vai para lá (depois de configurares os timers de acordo com o que está no git dele)

Config no HA:

cover:
  - platform: mqtt
    name: "Living Room Blinds"
    availability_topic: "tele/living_blinds/LWT"
    payload_available: "Online"
    payload_not_available: "Offline"
    position_topic: stat/living_blinds/SHUTTER1
    position_open: 100
    position_closed: 0
    set_position_topic: "cmnd/living_blinds/shutterposition"
    command_topic: "cmnd/living_blinds/backlog"
    payload_open: "SHUTTEROPEN"
    payload_close: "SHUTTERCLOSE"
    payload_stop: "SHUTTERSTOP"
    retain: false
    optimistic: false
    qos: 1

De resto o slider vem incluído, portanto logo aí tens menos umas automações.


(Daniel Pereira) #147

Onde devo colocar o ficheiros estores.yaml? Numa pasta chamada “packages”?

Como adiciono os vários estores? Crio um ficheio para cada estore/sonoff?

Estou a receber a mensagem de erro quando faço check config:

Configuração inválida
VERIFICAR A CONFIGURAÇÃO

Integration not found: packages


(Nuno Neves) #148

Por favor usa a função de procura, como indicado nas regras do fórum… Tens resposta a todas as tuas perguntas em tópicos prévios e tutoriais…


(Daniel Pereira) #149

Já conclui o que tinha errado. Não tinha o include packages dentro do homeassistant:

Agora não consigo adicionar o botão no frontend do HA. Falta alguma coisa?


(Jorge Assunção) #150

Agora usas o Lovelace UI para adicionares o que quiseres.


(Daniel Pereira) #151

E qual é a opção correta para colocar o botão de estore com cima baixo e stop e a barra como mostra no tópico inicial?

A opção setoption14 deixou de existir e agora chama-se interlock, se quiserem actualizar o tutorial.


(Nuno Neves) #152

o botão do estore, basta colocares a entity cover.oquefor
a barra, basta colocares a entity input_number.aberturapersiana_oquefor


(Daniel Pereira) #153

Obrigado pela resposta. Quando coloco assim da forma que disseste realmente o card fica direitinho mas não funciona.

Se butões como switches funciona impecável. Não sei o que me está a escapar.


(Nuno Neves) #154

Tens de explicar melhor… que config tens no Lovelace? Coloca aqui o conteúdo do package…


(Daniel Pereira) #155

O texto do package está justamente como está descrito no tutorial, pelo menos eu penso que sim.

Os estores funcionam como switches onde posso activar e desligar o relé 1 e 2 individualmente.

Mas quando coloco como entities ou com o slider nada acontece.

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.
  tempodeabertura_estore_wc:
    name: tempo de maximo de abertura estore_wc
    initial: 30
  tempodefecho_estore_wc:
    name: tempo de maximo de fecho estore_wc
    initial: 30
  iniciofecho_estore_wc:
    name: iniciofecho estore_wc
  inicioabertura_estore_wc:
    name: inicioabertura estore_wc

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

binary_sensor:
  - platform: mqtt
    name: rele_1_estore_wc
    state_topic: "stat/estore_wc/POWER1"
    payload_on: "ON"
    payload_off: "OFF"
  - platform: mqtt
    name: rele_2_estore_wc
    state_topic: "stat/estore_wc/POWER2"
    payload_on: "ON"
    payload_off: "OFF"

input_boolean:
  alterarslider_estore_wc:
    name: Alterar o slider estore_wc
    initial: on

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

automation:
  - id: iniciofecho_estore_wc
    alias: começou a fechar estore_wc
    initial_state: 'on'
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_2_estore_wc
      to: 'on'
    action:
      service: input_text.set_value
      data_template:
        entity_id: input_text.iniciofecho_estore_wc
        value: '{{ now() }}'

  - id: fimfecho_estore_wc
    alias: parou de fechar estore_wc
    initial_state: 'on'
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_2_estore_wc
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarslider_estore_wc'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_estore_wcold
        value: >-
          {% if (states.input_number.abertura_estore_wc.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho_estore_wc.state))|float|round(2))*100/(states.input_text.tempodefecho_estore_wc.state|int))|int < 4 %}
            0
          {% else %}
            {{ (states.input_number.abertura_estore_wc.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho_estore_wc.state))|float|round(2))*100/(states.input_text.tempodefecho_estore_wc.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_estore_wc
        value: '{{ states.input_number.abertura_estore_wcold.state }}'

  - id: inicioabertura_estore_wc
    alias: começou a abrir estore_wc
    initial_state: 'on'
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_1_estore_wc
      to: 'on'
    action:
      service: input_text.set_value
      data_template:
        entity_id: input_text.inicioabertura_estore_wc
        value: '{{ now() }}'

  - id: fimabertura_estore_wc
    alias: parou de abrir estore_wc
    initial_state: 'on'
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_1_estore_wc
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarslider_estore_wc'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_estore_wcold
        value: >-
          {% if (states.input_number.abertura_estore_wc.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura_estore_wc.state))|float|round(2))*100/(states.input_text.tempodeabertura_estore_wc.state|int))|int > 96 %}
            100
          {% else %}
            {{ (states.input_number.abertura_estore_wc.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura_estore_wc.state))|float|round(2))*100/(states.input_text.tempodeabertura_estore_wc.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_estore_wc
        value: '{{ states.input_number.abertura_estore_wcold.state }}'

  - id: aberturapeloslider_estore_wc
    alias: Abertura pelo slider estore_wc
    initial_state: 'on'
    trigger:
      platform: state
      entity_id: input_number.abertura_estore_wc
    condition:
    - condition: template
      value_template: '{{ states.input_number.abertura_estore_wc.state|int > states.input_number.abertura_estore_wcold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider_estore_wc
    - service: mqtt.publish
      data:
        topic: 'cmnd/estore_wc/Backlog'
        payload_template: "POWER1 ON; delay {% if is_state('input_number.abertura_estore_wc', '100.0') %} {{ (((states.input_number.abertura_estore_wc.state|int - states.input_number.abertura_estore_wcold.state|int)*(states.input_text.tempodeabertura_estore_wc.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.abertura_estore_wc.state|int - states.input_number.abertura_estore_wcold.state|int)*(states.input_text.tempodeabertura_estore_wc.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER1 OFF"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_1_estore_wc', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarslider_estore_wc
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_estore_wcold
        value: '{{ states.input_number.abertura_estore_wc.state }}'

  - id: fechopeloslider_estore_wc
    alias: Fecho pelo slider estore_wc
    initial_state: 'on'
    trigger:
      platform: state
      entity_id: input_number.abertura_estore_wc
    condition:
    - condition: template
      value_template: '{{ states.input_number.abertura_estore_wc.state|int < states.input_number.abertura_estore_wcold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider_estore_wc
    - service: mqtt.publish
      data:
        topic: 'cmnd/estore_wc/Backlog'
        payload_template: "POWER2 ON; delay {% if is_state('input_number.abertura_estore_wc', '0.0') %} {{ (((states.input_number.abertura_estore_wcold.state|int - states.input_number.abertura_estore_wc.state|int)*(states.input_text.tempodefecho_estore_wc.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.abertura_estore_wcold.state|int - states.input_number.abertura_estore_wc.state|int)*(states.input_text.tempodefecho_estore_wc.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER2 OFF"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_2_estore_wc', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarslider_estore_wc
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_estore_wcold
        value: '{{ states.input_number.abertura_estore_wc.state }}'

(Nuno Neves) #156

Colocaste no lovelace as seguintes entities?
cover.estore_wc e input_number.abertura_estore_wc?


(Daniel Pereira) #157
- entities:
          - entity: cover.estore_wc
          - entity: input_number.abertura_estore_sala
        title: WC
        type: entities
        show_header_toggle: false
        theme: default

(Daniel Pereira) #158

Já descobri o problema:

no teu código o tópico de mqtt é cmnd/oquefor/POWER1 mas por alguma razão nos meus sonoff o que eles publicam é oquefor/cmnd/POWER1


(Nuno Neves) #159

estore sala?!?! isso não devia ser WC?

Se os teus sonoff publicam assim foi porque mudaste…


(Daniel Pereira) #160

Sim, no codigo em cima está errado o botão. Realmente não tenho noção de ter mudado a forma como os sonoff publicam, mas pode ter acontecido. O que interessa é que agora já funciona e posso configurar os restantes.

Obrigado pela ajuda.

PS. Está descrito como issue a troca do tópico e do prefix desde a versa 5 penso eu.


(Nuno Neves) #161

Não… A partir dessa versão passou a ser possível mudar e, provavelmente, foi o que fizeste, porque “de base” continua a vir igual…


(Daniel Pereira) #162

Ok. Obrigado pela ajuda.

E do interlock ou do setoption14 ja verificaste qual a opção correta?