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

Queria preparar os 11sonoff dual com tasmota para colocar na minha nova moradia mas lá ainda não tenho Wi-Fi.

Posso flashar já com tasmota e fazer as ligações definitivas na moradia nova e depois apenas configurar com o Wi-Fi de lá?

Podes fazer isso sim, nada impede.

E achas que me podes dar uma ajuda?

Tens tudo aqui como fazer:

Pois, não tem o step by step para flashar… vou ter de ler melhor a ver se me safo… já tenho os jumpers wires femeas e macho e o CP2102…

Tem, tens é que pesquisar no forum

Antes de mais muito obrigado pelo tutorial.

Sou um iniciado nesta andanças mas já consegui por a funcionar ainda em fase de teste(sonoff dual ligado a duas lâmpadas mas assim que tiver testado tudo vou ligar ao motor dos estores) . Minha dúvida é se seria possível adicionar um segundo sonoff dual ligado a um motor de estores usando a mesma automation? se sim como posso fazer a nível código?

Explica lá isso melhor, a mesma automação a controlar dois Dual diferentes em estores diferentes?

Sim exacto, ter dois dual em estores diferentes e usar a mesma automação (como se fosse uma função em que passava o argumento estores1 ou estores2 dependendo de qual fosse activado)

Isso é um pouco mais complicado e não tenho como testar. Para já, é preferível teres duas automações, uma para cada estore.

Se quiseres posso tentar ver isso, mas como te digo não tenho como testar.

Obrigado pelo feedback vou tentar com uma automação para cada estore para já e tentar aprender mais um pouco. Caso @j_assuncao queira eu depois posso testar se encontrar alguma solução

Se te quiseres entreter e aprender ao mesmo tempo, vou dar-te alguns exemplos que podes alterar para o que queres fazer.

  1. Criar um input_select com a lista dos estores que queres controlar
input_select:
  lista_estores:
    name: 'Selecciona o Estore'
    options:
      - Estore 1
      - Estore 2
  1. cria uma automação que envie o comando em função do estore seleccionado
action:
    service: home assistant.turn_on
    data_template : 
      entity_id: >
        {%- if is_state("input_select.lista_estores", "Estore 1") -%}
        switch.motor_subida_estore_1
        {%- else -%}
         switch.motor_subida_estore_2
        {%- endif %}

Pode parecer complicado mas não é. A parte da automação podes utilizar a que já tens e alteras apenas a parte da action modificando o que está no exemplo acima para o nome dos teus switches.

O que essa action faz é que se estiver seleccionado o estore 1 executa a operação no estore 1, se for outra a selecção executa a operação no estore 2.

O código original é do @Maddoctor, talvez ele te possa guiar melhor que eu se lhe pedires com jeitinho :grin: mas depende do tempo que ele tenha disponível…

Como o @j_assuncao disse, é possível, mas não sei se é boa ideia, isto porque estores diferentes, em princípio, terão tempos de abertura e fecho diferentes…

1 Like

Obrigado @j_assuncao vou me entreter :smile: .
@Maddoctor sim possivelmente terei problemas mas mesmo assim acho que vou arriscar sempre aprendo qualquer coisa :wink:

Eu estou a usar o z-wave fibaro roller shutter 2, e não deu trabalho nenhum a implementar.

@tiagoroxo muito bom essa opção contudo não muito barata mas é sem dúvida fiável, pelo menos quem tem fala bem.

@Maddoctor
Não estou a conseguir que a barra de percentagem do estore funcione.

Podes dar uma olhada no codigo ?

group:

estores:
  view: yes
  icon: mdi:blinds
  entities:
    - group.estoresgrupo

estoresgrupo:
  control: hidden
  name: Estores
  entities:
    - input_number.aberturapersiana
    - cover.persiana

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 tempo de fecho.
tempodeabertura:
name: tempo de maximo de abertura
initial: 14
tempodefecho:
name: tempo de maximo de fecho
initial: 14
iniciofecho:
name: iniciofecho
inicioabertura:
name: inicioabertura

cover:
- platform: template
covers:
persiana:
friendly_name: “Persiana”
position_template: ‘{{ states.input_number.aberturapersiana.state }}’
open_cover:
- service: mqtt.publish
data:
topic: ‘cmnd/persianahall/POWER1’
payload: ‘ON’
close_cover:
- service: mqtt.publish
data:
topic: ‘cmnd/persianahall/POWER2’
payload: ‘ON’
stop_cover:
- service: mqtt.publish
data:
topic: ‘cmnd/persianahall/Backlog’
payload: ‘POWER1 OFF; POWER2 OFF’

binary_sensor:
- platform: mqtt
name: rele 1
state_topic: “stat/persianahall/POWER1”
payload_on: “ON”
payload_off: “OFF”
- platform: mqtt
name: rele 2
state_topic: “stat/persianahall/POWER2”
payload_on: “ON”
payload_off: “OFF”

input_boolean:
alterarslider:
name: Alterar o slider
initial: on

input_number:
aberturapersiana:
name: Abertura
min: 0
max: 100
step: 1
unit_of_measurement: ‘%’
icon: mdi:blinds
aberturapersianaold:
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.alterarslider’
state: ‘on’
action:
- service: input_number.set_value
data_template:
entity_id: input_number.aberturapersianaold
value: >-
{% if (states.input_number.aberturapersiana.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.aberturapersiana.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.aberturapersiana
value: ‘{{ states.input_number.aberturapersianaold.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.aberturapersianaold
value: >-
{% if (states.input_number.aberturapersiana.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.aberturapersiana.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.aberturapersiana
value: ‘{{ states.input_number.aberturapersianaold.state }}’

- id: aberturapeloslider
  alias: Abertura pelo slider
  trigger:
    platform: state
    entity_id: input_number.aberturapersiana
  condition:
  - condition: template
    value_template: '{{ states.input_number.aberturapersiana.state|int > states.input_number.aberturapersianaold.state|int }}'
  action:
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.alterarslider
  - service: mqtt.publish
    data:
      topic: 'cmnd/persianahall/Backlog'
      payload_template: "POWER1 ON; delay {% if is_state('input_number.aberturapersiana', '100.0') %} {{ (((states.input_number.aberturapersiana.state|int - states.input_number.aberturapersianaold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}

{{ (((states.input_number.aberturapersiana.state|int - states.input_number.aberturapersianaold.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.aberturapersianaold
value: ‘{{ states.input_number.aberturapersiana.state }}’
- id: fechopeloslider
alias: Fecho pelo slider
trigger:
platform: state
entity_id: input_number.aberturapersiana
condition:
- condition: template
value_template: ‘{{ states.input_number.aberturapersiana.state|int < states.input_number.aberturapersianaold.state|int }}’
action:
- service: input_boolean.turn_off
data:
entity_id: input_boolean.alterarslider
- service: mqtt.publish
data:
topic: ‘cmnd/persianahall/Backlog’
payload_template: "POWER2 ON; delay {% if is_state(‘input_number.aberturapersiana’, ‘0.0’) %} {{ (((states.input_number.aberturapersianaold.state|int - states.input_number.aberturapersiana.state|int)
(states.input_text.tempodefecho.state|float)/100)|round(1)10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.aberturapersianaold.state|int - states.input_number.aberturapersiana.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.aberturapersianaold
value: ‘{{ states.input_number.aberturapersiana.state }}’

assim não dá para perceber… formata o código usando </>

  group:
  
    estores:
      view: yes
      icon: mdi:blinds
      entities:
        - group.estoresgrupo

    estoresgrupo:
      control: hidden
      name: Estores
      entities:
        - input_number.aberturapersiana
        - cover.persiana

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:
    name: tempo de maximo de abertura
    initial: 14
  tempodefecho:
    name: tempo de maximo de fecho
    initial: 14
  iniciofecho:
    name: iniciofecho
  inicioabertura:
    name: inicioabertura

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

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

input_boolean:
  alterarslider:
    name: Alterar o slider
    initial: on

input_number:
  aberturapersiana:
    name: Abertura
    min: 0
    max: 100
    step: 1
    unit_of_measurement: '%'
    icon: mdi:blinds
  aberturapersianaold:
    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.alterarslider'
      state: 'on'
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.aberturapersianaold
        value: >-
          {% if (states.input_number.aberturapersiana.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.aberturapersiana.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.aberturapersiana
        value: '{{ states.input_number.aberturapersianaold.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.aberturapersianaold
        value: >-
          {% if (states.input_number.aberturapersiana.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.aberturapersiana.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.aberturapersiana
        value: '{{ states.input_number.aberturapersianaold.state }}'

  - id: aberturapeloslider
    alias: Abertura pelo slider
    trigger:
      platform: state
      entity_id: input_number.aberturapersiana
    condition:
    - condition: template
      value_template: '{{ states.input_number.aberturapersiana.state|int > states.input_number.aberturapersianaold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider
    - service: mqtt.publish
      data:
        topic: 'cmnd/wemosd1mini/Backlog'
        payload_template: "POWER1 ON; delay {% if is_state('input_number.aberturapersiana', '100.0') %} {{ (((states.input_number.aberturapersiana.state|int - states.input_number.aberturapersianaold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.aberturapersiana.state|int - states.input_number.aberturapersianaold.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.aberturapersianaold
        value: '{{ states.input_number.aberturapersiana.state }}'
  - id: fechopeloslider
    alias: Fecho pelo slider
    trigger:
      platform: state
      entity_id: input_number.aberturapersiana
    condition:
    - condition: template
      value_template: '{{ states.input_number.aberturapersiana.state|int < states.input_number.aberturapersianaold.state|int }}'
    action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider
    - service: mqtt.publish
      data:
        topic: 'cmnd/wemosd1mini/Backlog'
        payload_template: "POWER2 ON; delay {% if is_state('input_number.aberturapersiana', '0.0') %} {{ (((states.input_number.aberturapersianaold.state|int - states.input_number.aberturapersiana.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
{{ (((states.input_number.aberturapersianaold.state|int - states.input_number.aberturapersiana.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.aberturapersianaold
        value: '{{ states.input_number.aberturapersiana.state }}'

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


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