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?
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…
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
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…
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?
Agora usas o Lovelace UI para adicionares o que quiseres.