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

Parece estar bem configurado, no entanto o interruptor aparece como ON… Estranho… Se calhar as ligações estão erradas no interruptor… Os fios do interruptor estão entre gpio e gnd ou gpio e 3.3?

@Maddoctor, muito obrigado pelo código! já consegui meter a funcionar. Ainda tive mais 2 problemas, no cover o no facto de ter primeiro o topic e depois o prefix, e como não consegui alterar isso, alterei o código.
Está impecável! obrigado a todos pela ajuda! :wink:

1 Curtiu

@MadDoctor as ligações estão tal como no tutorial… Muito obrigado pelo teu apoio…

https://1drv.ms/u/s!AhhTRQMupRdtg5Uf9UDzv1D5-8AGgg

Experimenta antes switchmode 5… Deve funcionar…

@MadDoctor, obrigado pela dica, agora ficou a funcionar fixe. Muito obrigado pela tua paciência, atenção e compreensão… Forte abraço.

Boa noite,

Venho mais uma vez pedir ajuda de experts.
Depois de mais uns dias com este projeto parado, e depois de arranjar uns quantos shelly 2, estou a tentar utilizar o código fornecido pelo Rodolfo num shelly2 com a firmware original.
Já tentei várias vezes flashar o shelly2 com tasmota mas não consegui, então desisti e tentei outra abordagem.
Então, tudo funciona devidamente à exceção do pulsetime e do interlock que não sei como “ativar” e de não conseguir fazer com que o slider faça ativar os reles.
O slider mexe quando ativo cada um dos reles nos botões do HA, mas se mexer o slider, nada acontece; quando chega a 100% ou o 0% também não faz parar os reles (é suposto isso acontecer?)
Segue o código para se tiverem tempo para analisar e me dar algumas dicas…

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_sala:
    name: tempo de maximo de abertura sala
    initial: 35
  tempodefecho_sala:
    name: tempo de maximo de fecho sala
    initial: 35
  iniciofecho_sala:
    name: iniciofecho sala
  inicioabertura_sala:
    name: inicioabertura sala

cover:
  - platform: template
    covers:
      sala:
        friendly_name: "sala"
        position_template: '{{ states.input_number.abertura_sala.state }}'
        open_cover:
          - service: mqtt.publish
            data:
              topic: 'shellies/shellyswitch-13503C/relay/0/command'
              payload: 'on'
        close_cover:
          - service: mqtt.publish
            data:
              topic: 'shellies/shellyswitch-13503C/relay/1/command'
              payload: 'on'
        stop_cover:
          - service: mqtt.publish
            data:
              topic: 'shellies/shellyswitch-13503C/relay/0/command'
              payload: 'off'
         - service: mqtt.publish
            data:
              topic: 'shellies/shellyswitch-13503C/relay/1/command'
              payload: 'off'

binary_sensor:
  - platform: mqtt
    name: rele_1_sala
    state_topic: "shellies/shellyswitch-13503C/relay/0"
    payload_on: "on"
    payload_off: "off"
  - platform: mqtt
    name: rele_2_sala
    state_topic: "shellies/shellyswitch-13503C/relay/1"
    payload_on: "on"
    payload_off: "off"

input_boolean:
  alterarslider_sala:
    name: Alterar o slider sala
    initial: on

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

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

  - id: fimfecho_sala
    alias: parou de fechar sala
    initial_state: 'on'
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_2_sala
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarslider_sala'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_salaold
        value: >-
          {% if (states.input_number.abertura_sala.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho_sala.state))|float|round(2))*100/(states.input_text.tempodefecho_sala.state|int))|int < 4 %}
            0
          {% else %}
            {{ (states.input_number.abertura_sala.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho_sala.state))|float|round(2))*100/(states.input_text.tempodefecho_sala.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_sala
        value: '{{ states.input_number.abertura_salaold.state }}'

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

  - id: fimabertura_sala
    alias: parou de abrir sala
    initial_state: 'on'
    trigger:
    - platform: state
      entity_id: binary_sensor.rele_1_sala
      to: 'off'
    condition:
    - condition: state
      entity_id: 'input_boolean.alterarslider_sala'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_salaold
        value: >-
          {% if (states.input_number.abertura_sala.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura_sala.state))|float|round(2))*100/(states.input_text.tempodeabertura_sala.state|int))|int > 96 %}
            100
          {% else %}
            {{ (states.input_number.abertura_sala.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura_sala.state))|float|round(2))*100/(states.input_text.tempodeabertura_sala.state|int))|int }}
          {% endif %}
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_sala
        value: '{{ states.input_number.abertura_salaold.state }}'

  - id: aberturapeloslider_sala
    alias: Abertura pelo slider sala
    initial_state: 'on'
    trigger:
      platform: state
      entity_id: input_number.abertura_sala
    condition:
    - condition: template
      value_template: '{{ states.input_number.abertura_sala.state|int > states.input_number.abertura_salaold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider_sala
    - service: mqtt.publish
      data:
        topic: 'shellies/shellyswitch-13503C/relay/0'
        payload_template: "on; delay {% if is_state('input_number.abertura_sala', '100.0') %} {{ (((states.input_number.abertura_sala.state|int - states.input_number.abertura_salaold.state|int)*(states.input_text.tempodeabertura_sala.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.abertura_sala.state|int - states.input_number.abertura_salaold.state|int)*(states.input_text.tempodeabertura_sala.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; off"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_1_sala', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarslider_sala
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_salaold
        value: '{{ states.input_number.abertura_sala.state }}'

  - id: fechopeloslider_sala
    alias: Fecho pelo slider sala
    initial_state: 'on'
    trigger:
      platform: state
      entity_id: input_number.abertura_sala
    condition:
    - condition: template
      value_template: '{{ states.input_number.abertura_sala.state|int < states.input_number.abertura_salaold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider_sala
    - service: mqtt.publish
      data:
        topic: 'shellies/shellyswitch-13503C/relay/1'
        payload_template: "on; delay {% if is_state('input_number.abertura_sala', '0.0') %} {{ (((states.input_number.abertura_salaold.state|int - states.input_number.abertura_sala.state|int)*(states.input_text.tempodefecho_sala.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.abertura_salaold.state|int - states.input_number.abertura_sala.state|int)*(states.input_text.tempodefecho_sala.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; 'off'"
    - delay:
        milliseconds: 800
    - wait_template: "{{ is_state('binary_sensor.rele_2_sala', 'off') }}"
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarslider_sala
    - service: input_number.set_value
      data_template:
        entity_id: input_number.abertura_salaold
        value: '{{ states.input_number.abertura_sala.state }}'

Obrigado desde já pela ajuda, vou continuar a tentar e explorar. Se conseguir algum avanço logo aviso.

Quanto ao resto não sei, mas sem o pulsetime os relés não vão parar ao fim de X tempo.

Esse código foi feito para trabalhar com tasmota, se não estás a usar tasmota podes ter de adaptar alguma coisa.

Qual é o problema a flashar o shelly2?

Uma mensagem foi dividida em um novo tópico: Como ‘flashar’ o Shelly2

Viva, experimentei hoje o shelly2 nos meus estores e funcionou muito bem. A calibração (feita na aplicação deles) é essencial para o processo.

Para usares o firmware original (como eu), não te esqueças de atualizar para a última versão que tem melhorias significativas.

Tenho aqui o código que está a funcionar no meu caso:

Viva,

Antes de mais um muito obrigado pela vossa partilha de conhecimento.
Comprei 10 Sonoff Dual r2 para os meus estores e usei este código que partilharam e está a funcionar impecável.

No entanto tenho uma dúvida. O que é necessário alterar para o slider dar feedback em tempo real quando o estore abre e fecha? Gostaria de ver a barra a acompanhar mas ela só mexe quando está todo aberto, todo fechado, quando carrego no botão de stop, ou quando arrasto o slider para a posição que quero.

Era interessante por exemplo carregar no botão de subir e estar a ver a barra do slider a avançar.

Podem ajudar ou dar alguma dica do que fazer?

Obrigado.

Neste momento é impossível. Implicaria bastantes mudanças ao código sem vantagem evidente… Sinceramente não vejo vantagem… Se controlares pelo interface do HA, escolhes a percentagem de abertura… Se controlares pelos botões físicos, é porque estás a ver os estores e não o UI do HA… Assim sendo é só uma função “só porque sim” sem utilidade práctica, na minha opinião…

1 Curtiu

ok, obrigado.
Realmente não é algo que seja necessário.

Alguem usa esse esquema para aparecer no Homekit (Apple)??
Se sim ele aparece a % normal?

Boas, comecei a utilizar esta opção com o slider á pouco tempo, está a funcionar só que a versão anterior quando carregava para descer ou subir o botão inverso ficava logo activo era sinal que tinha recebido o comando neste caso não me está a acontecer isto é normal?
O problema é quando não estou em casa, carrego para descer ou subir fico na duvida se aceitou o comando ou não até receber a informação de fechado ou aberto por completo.

Tens as automações ligadas?

Dá uma olhadela no tasmota do stefanbode. Para estores é o melhor imo

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

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

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?

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.

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


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


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