No meu caso, acontece o mesmo, basta reiniciar o HA e já perco o status. Porém, no APP MQTT Buddy tudo permanece normal. Então, o problema está no HA.
@j_assuncao, como o @souzaathales disse, no mqtt fx ta tudo normal… E msmo alguma cena no ha. Acho q tem haver com aquelas configs q mandei. Mas ja tentei e n consigo
Ok, dá-me uma hora ou duas para ver isso.
Acho que isto vai resolver:
- alias: teste portao da rua
initial_state: true
trigger:
platform: event
event_type: homeassistant_start
action:
service: mqtt.publish
data:
topic: cmnd/sonoff11/OFF
payload: ON
testa so para o portão da rua.
Ó @joaocosme, estava agora aqui a ver o teu código que o Rodolfo pôs no publicação #6 e parece-me que o problema está mesmo à vista.
Embora tenhas o powerretain = 1
no Tasmota, na definição da cover
(tanto no insidegarage
como no outsidegarage
) tens configurado o retain: false
e assim o HA vai ignorar o tópico ao arrancar.
Além disso a opção optimistic: false
não faz falta, pois tens o state topic
definido.
Na página original pode ler-se:
If a state topic is not defined, the cover will work in optimistic mode. In this mode, the cover will immediately change state (open or closed) after every command sent by Home Assistant. If a state topic is defined, the cover will wait for a message on state_topic matching state_open or state_closed before changing state in Home Assistant.
Optimistic mode can be forced, even if a state_topic is defined. Try to enable it if experiencing incorrect cover operation.
The mqtt cover platform optionally supports an availability_topic to receive online and offline messages (birth and LWT messages) from the MQTT cover device. During normal operation, if the MQTT cover device goes offline (i.e. publishes payload_not_available to availability_topic), Home Assistant will display the cover as “unavailable”. If these messages are published with the retain flag set, the cover will receive an instant update after subscription and Home Assistant will display correct availability state of the cover when Home Assistant starts up. If the retain flag is not set, Home Assistant will display the cover as “unavailable” when Home Assistant starts up.
Altera então para o código corrigido abaixo e diz se funcionou.
cover:
- platform: mqtt
name: "insidegarage"
#POWER2 cooresponde ao switchX no ip do sonoff(neste caso, switch2 = POWER2)
state_topic: "cmnd/2/POWER2"
command_topic: "cmnd/sonoff8/POWER"
availability_topic: "tele/sonoff8/LWT"
payload_available: "Online"
payload_not_available: "Offline"
payload_open: "ON"
payload_close: "ON"
payload_stop: "ON"
state_open: "OFF"
state_closed: "ON"
retain: true
- platform: mqtt
name: "outsidegarage"
#POWER2 cooresponde ao switchX no ip do sonoff(neste caso, switch1 = POWER1)
state_topic: "cmnd/2/POWER1"
command_topic: "cmnd/sonoff11/OFF"
availability_topic: "tele/sonoff11/LWT"
payload_available: "Online"
payload_not_available: "Offline"
payload_open: "ON"
payload_close: "ON"
payload_stop: "ON"
state_open: "OFF"
state_closed: "ON"
retain: true
Mas o que estou a achar estranho no meio disto tudo é que as tuas configurações do payload (open, close e stop) são todas iguais ou seja os comandos para abrir, fechar e parar são os mesmos… Isso estava a funcionar bem?
Sim esta a funcionar bem eu testei com ele… e ele ja testou isso do Retain: True depois de eu ver que estava em False.
Mas o problema penso estar mesmo aqui:
Considerations
If you are using the state of a platform that takes extra time to load, the Template Cover may get an unknown state during startup. This results in error messages in your log file until that platform has completed loading. If you use is_state() function in your template, you can avoid this situation. For example, you would replace {{ states.switch.source.state == 'on' }} with this equivalent that returns true/false and never gives an unknown result: {{ is_state('switch.source', 'on') }
Só não sei como transformar esta explicação.
Boas eu para o meu portão estou a usar isto aqui https://github.com/marthoc/GarHAge
E a seguinte automação para manter informar sempre do estado do portão.
- id: xyz
alias: Update garage door state on startup
trigger:- platform: homeassistant
event: start
action: - service: mqtt.publish
data:
topic: “garage/door/1/action”
payload: “STATE” - service: mqtt.publish
data:
topic: “garage/door/2/action”
payload: “STATE”
- platform: homeassistant
Esta tudo explicado na pagina acima referida.
E é uma excelente opção!
Não pode ser isso… Se o tópico é publicado com retain e o HA vai ler o tópico quando reinicia não pode dar unknown…
Mas o facto é que retorna o valor unknown.
Contudo por vezes o topico fica la retido no servidor , e não se consegue mudar já me aconteceu a mim tenho coisas lá retidas e para as fazer funcionar tive que mudar o nome.
O retain ja mudei parq true ai tb… Na altura tava false masbja testei com true e n deu… Sim estava. Pq na verdade isso e para ativar o rele. Por isso tem q ser on acho eu
Não precisas de mudar o nome do tópico! Basta enviar um comando vazio para o tópico que tem mensagens retidas e que queres limpar…
@j_assuncao a mim tb ja aconteceu. Fica ca retido o topico e tive que mudar o nome do sonoff nas configs mqtt do tasmota… Como e q resolvo isso do topico retido ja agora?
Para limpar o tópico?
Por exemplo. Chegou me a acontecer ficar um topico la retido para power on. E sempre q a luz ia abaixo, qd voltava ele fazia power on. E eu tinha powerretain off, poweronstate 0… Ficava retido. E nao conseguia limpar. Tive q mudar o nome nas configuracoes mqtt… No hassbian ha uma maneira d linpar os topicos retidos. No hassio n sei como se faz… Tavas a dizer ao rodolfo q dava. Nao sei se te referias a isto ou nao
Era isso mesmo. Basta enviar uma mensagem vazia para o tópico que queres limpar!
@j_assuncao essa menssagem e enviada pela consola do tasmota certo? E na consola o que escrevo? Eu sou novo nestas coisas e não percebo bem isto. Ando a aprender
Também pode ser enviado pelo HA, no MQTT do Developer Tools (no menu do lado esquerdo em baixo, segundo ícone a contar da direita).
Depois basta escrever o tópico que queres limpar na linha de cima, deixar a linha de baixo em branco e carregar no botão Publish
/Publicar