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
Nas automações, não alteraste input_boolean.alterarslider para input_boolean.alterarsliderquarto…
Assim de repente é esse o erro. Pode haver outros, mas para já testa assim…
Vou testar e depois comento.
Muito obrigado
Bem fiz o teste e ficou igual
agora está assim
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: 15
tempodefechoquarto:
name: tempo de maximo de fecho
initial: 15
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.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.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.alterarsliderquarto
- 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.alterarsliderquarto
- 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.alterarsliderquarto
- 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.alterarsliderquarto
- service: input_number.set_value
data_template:
entity_id: input_number.aberturapersianaquartoold
value: '{{ states.input_number.aberturapersianaquarto.state }}'
Reiniciaste o home assistant? Ou apenas escolheste reiniciar automações?
Os ficheiros package não são recarregado se não reiniciares o home assistant…
Verifica também que estas automações estejam todas activas…
reiniciei tudo .
qual são as automações que devem estar activas ??
As que fazem parte do package…