Existe alguma maneira de forçar o update de certos sensores depois do trigger da automação para que as condições (conditions:) sejam validadas com o estado actualizado?
O problema que tenho é que por vezes a automação não é accionada porque o sensor que uso nas condições não estava actualizado.
Não queria estar a por scan interval de poucos segundos nos sensores que uso na nas condições da automação porque só numa % muito reduzida do tempo (é que preciso deles actualizados, i.e. quando a automação é despoletada).
Já tentei fazer uma automação auxiliar com o mesmo trigger so para forçar o update mas não funcionou porque não consigo dizer há automação principal para correr depois da auxiliar
Até acho que o próprio HA devia forçar o update de cada state que é usado nas condições da automação… estou a dizer isto e se calhar até faz e eu estou a fazer algo de errado.
Esta a tentar melhorar a automação da box vodafone apagar ou ligar a TV que já tinha publicado no outro topico, mas para que fique mesmo bullet proof
Como sabemos as box’s passam por vezes para standby e depois playing quando fazemos algumas operações nos menus ou zapping, por isso a ideia seria melhorar o scripts para cobrir todos os cenários.
No meu caso a minha TV tem ligação Net mas não tem qualquer integração oficial com o HA por isso estou só a usar o device_tracker.ping para saber se está ligada (home) ou desligada (not_home) e a ideia passava por exemplo por dizer que se a TV já está ligada então não é preciso correr a action (evitando um power Off errado… visto que o on e off é o mesmo comando).
O código em baixo em teoria resultaria mas em operações rápidas o device_tracker.tv_livingroom pode não estar actualizado e como disse acima não me parece nada eficiente mudar o scan_interval para 1seg só para que isto funcione como esperado. O que queria saber é se é possível forçar o update do device_tracker.tv_livingroom imediatamente antes da automação para que ela despolete a acção de modo mais fidedigno.
#Automacao para ligar a tv quando a box e ligada.
- alias: Automacao box on tv on
initial_state: true
trigger:
- platform: state
entity_id: media_player.mediaroom_1921681152
to: 'playing'
condition:
- condition: template
value_template: '{{ states.sensor.TVBox_standby_rate_last_min.state | float > 10 }}'
- condition: state
entity_id: device_tracker.tv_livingroom
state: 'not_home'
action:
- service: switch.broadlink_send_packet_192_168_1_164
data:
packet:
- 'JgBIAAABKJQVEBMSEzcTEhMSExETEhQREzcTNxMSEzYUNhQ2EzcTNhQRFBETEhM3ExISExMRFBEUNhM3EzcTERQ2FDYTNxM2FAANBQ=='
@dpjrodrigues porque nao ligas um wemos, na tua tv com o firmware tasmota e usas o comando LWT para saber se ela esta ou não ligada? é como eu uso e funciona muito bem.
Obrigado @RodolfoVieira. Essa é uma area muito nova para mim ainda mas lá chegarei…
Para me iniciar encomendei uns sonoffs (que já chegaram) mas os CTT fizeram o favor de perder o USB to TTL … e depois ainda o marcaram como entregue só para ver se pegava.
De qualquer modo (e independentemente deste caso) acho que faz mais sentido que qualquer que seja a entidade usada dentro de uma automação, (i.e. depois to trigger) seja actualizada antes de ser trabalhada (seja dentro do conditions: ou action:'s).
Qual a utilidade de usar como base para fazer algo, uma entidade que pode não estar actualizada?
@dpjrodrigues confesso que estou com alguma dificuldade em entender a tua dificuldade.
Não estou a conseguir compreender onde queres chegar.
Podes ser mais específico?
Ok @RodolfoVieira. Pegando no exemplo dummy em baixo vou descrever os passos que achava que deveriam acontecer:
1. Quando sensor.trigger_exemplo muda o estado para “on” a automação é chamada 2.Antes de validar as condições que estão por baixo de condition: faz update ao estado das entidades que lá são usadas, neste caso apenas o sensor.condition_exemplo para garantir que está a usar informação actual. 3. Valida as condições em condition: i.e. se o sensor.condition_exemplo tem o estado “on” 3a. se sim corre a action: 3b. se não, não faz nada.
O que não me parece que está a acontecer é o passo 2… ou seja a condição pode estar a ser validada tendo com base um estado antigo e não actual.
- alias: exemplo
initial_state: true
trigger:
- platform: state
entity_id: sensor.trigger_exemplo
to: 'on'
condition:
- condition: state
entity_id: sensor.condition_exemplo
state: 'on'
action:
.......
Em um modo geral, os estados são actualizados automaticamente de forma até rápida, claro que depende sempre de vários factores associados.
E nem sempre é obrigatório usares um condition, em alguns casos um template no trigger poderá resolver.
Olhando bem para o teu primeiro post, eu próprio tive alguma dificuldade em fazer o que tencionas, funcionava e não funciona… acabei por desistir abandonando esse “projecto”, hoje não me ralo se a box está ou não ligada ou em standby, fica sempre ligada e jogo apenas com o estado da tv do modo que te falei acima usando o lwt.