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.
- 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
- 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 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…
Obrigado @j_assuncao vou me entreter .
@Maddoctor sim possivelmente terei problemas mas mesmo assim acho que vou arriscar sempre aprendo qualquer coisa
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 }}'