Python script - Enviar notificação dizendo o nome das luzes ligadas e desliga-las

Tenho este Python script que me notifica quais as luzes pertencentes a um grupo que estão ligadas e supostamente as apaga…
Contudo recebo sempre a notificação bem, com todos os nomes das luzes ligadas, mas a parte de as apagar não funciona bem… Ou não apaga nenhuma (o que me acontece mais vezes) ou apaga apenas algumas…

Este Python script é chamado através de uma automação que é executada quando saio de casa.

Python Script:

lights_group = 'group.luzes'

entities_on = []

for entity_id in hass.states.get(lights_group).attributes['entity_id']:
    if hass.states.get(entity_id).state is 'on':
        entities_on.append(hass.states.get(entity_id).attributes["friendly_name"])


if len(entities_on) > 0:
    
    notification_tilte = "Luzes Ligadas"
    notification_message = "As seguintes luzes ficaram ligadas:" '\n - ' + '\n - '.join(entities_on)
    hass.services.call('persistent_notification', 'create', {'title' : notification_tilte, 'message': notification_message})
    hass.services.call('notify', 'notify', {'title' : notification_tilte, 'message': notification_message})
    hass.services.call('homeassistant', 'turn_off', {"entity_id": 'group.luzes'})

Automação:

##############################################################################
#####                     APAGAR TODAS AS LUZES                          #####
##############################################################################
- id: Apagar Todas as Luzes
  alias: Apagar - Todas as Luzes
  trigger:
    - platform: zone
      entity_id: device_tracker.mi9, device_tracker.a70
      zone: zone.home
      event: leave
  condition: 
    - condition: template
      value_template: "{{ states('person.joel_silva') != 'home' }}"
    - condition: template
      value_template: "{{ states('person.liliana_zenha') != 'home' }}"
  action:
    - service: python_script.luz_on
#

A solução que arranjei foi passar a parte de apagar as luzes para a automação, e aí já tudo funciona bem. Mas fiquei intrigado do porque de não funcionar bem no Python Script…

Será que alguém consegue me dizer o porquê disto acontecer? Tem algum erro no código?
Desde já, Obrigado.

E por acaso tens algum group chamado luzes que dê origem à entidade group.luzes?

Sim o grupo está criado e com o nome correcto… Já verifiquei tudo imensas vezes…
E como referi em cima por vezes funciona e apaga algumas… executando o script pelas ferramentas de programação até já me chegou a fazer tudo bem algumas vezes…

Alterei o código do Python Script para ir apagando as luzes conforme vai detectado que estão on (uma de cada vez e só as ligadas) e assim já funciona as mil maravilhas…

Penso que o problema está em desligar o grupo todo ao mesmo tempo tendo muitas luzes ligadas…
O sistema não deveria “bloquear” mas é o que me acontece…
Pois liguei várias luzes desse grupo e mesmo directamente desligando o grupo no HA algumas luzes não apagam… O grupo fica off por uns segundos e volta a on pois ainda tem entidades ligadas… ( Não acontece sempre, algumas vezes apaga tudo)

Este e o novo Python Script:

lights_group = 'group.luzes'

entities_on = []

for entity_id in hass.states.get(lights_group).attributes['entity_id']:
    if hass.states.get(entity_id).state is 'on':
        entities_on.append(hass.states.get(entity_id).attributes["friendly_name"])
        luz = hass.states.get(lights_group).attributes['entity_id']
        hass.services.call('homeassistant', 'turn_off', {"entity_id": luz})



if len(entities_on) > 0:
    
    notification_tilte = "Luzes Ligadas"
    notification_message = "As seguintes luzes ficaram ligadas:" '\n - ' + '\n - '.join(entities_on)
#    hass.services.call('persistent_notification', 'create', {'title' : notification_tilte, 'message': notification_message})
    hass.services.call('notify', 'notify', {'title' : notification_tilte, 'message': notification_message})

E porque não passar essas automações, scripts,… para o Node-Red.

Fiz algumas automações no Node-red mas pessoalmente prefiro programar desta forma…

Isso é porque ainda não lhe apanhaste o jeito, quando apanhares vês que não queres outra…

O Node red e bastante simples de usar…
Mas já há uns bom anos atrás aprendi a programar em linha de código ( pascal, c++,…) e pessoalmente gosto desse ambiente… Já passei dos 30 anos e ainda sou novo mas já pareço um velho nestas coisas…

Penso que nesta ultima actualização, os grupos (all lights, all covers, …) foram banidos.

O grupo que tenho foi criado por mim… Não é nenhum desses automáticos criados pelo sistema…

Grupo:

  luzes:
    name: Luzes
    entities:
      - switch.sonoff_10003a9d11_2
      - switch.sonoff_100098a7c9
      - switch.sonoff_10003a9d11_1
      - switch.sonoff_10003a9924_1
      - switch.sonoff_10003a9924_2
      - switch.sonoff_100033843e_1
      - switch.sonoff_100033843e_2
      - switch.sonoff_1000335952_1
      - switch.sonoff_1000335952_2
      - switch.sonoff_10003ab842_2
      - switch.sonoff_10003a9175_1
      - switch.sonoff_10003a9175_2
      - switch.sonoff_10003aca64_1
      - switch.sonoff_10003aca64_2
      - switch.sonoff_10003a8efd_1
      - switch.sonoff_10003a8efd_2
      - switch.sonoff_10003ac1ba_2
      - switch.sonoff_10003a85b6_1

Já agora fica o desafio aos amantes do Node-red…
Que tal fazerem o que eu fiz mas no Node-red :smiley:

@byjaps…posso ter entendido mal…mas confirma se é isto:

Ao saires de casa tu e a outra pessoa, caso haja alguma luz ligada queres que as mesmas se apaguem, é isso? Segunda a tua automação em yaml deduzo que seja isso que pretendes.
Caso seja realmente isso…esse script não terá sido “imaginação” a mais?

É isso mas tambem quero me me diga o nome das luzes que foram apagadas numa notificação…
O script é por causa do nome na notificação…

Eis uma notificação recebida:

Ok… ainda assim porque optaste por um script em python em vez de uma automação? Por alguma razão em especial ? Acho curioso , já vi algo parecido no passado mas em relação a sensores de porta, podes caso queiras fazer as devidas alterações… falo disto. Em Node Red penso também não ser muito complicado o desafio para quem domina o “bicho” talvez o @Maddoctor o possa aceitar visto que ele gosta de desafios.

Nunca tinha usado o phyton e foi uma forma de o fazer…
E depois também não estava a ver como ia buscar o nome das luzes ligadas pela automação…
Só uso o HA a pouco mais de meio ano e ainda estou a descobrir… Depois gosto de investigar tudo ao mesmo tempo… Automações, scripts, python scripts, customização, node-red… Que até me perco…
Contudo o Python Script já funciona 5 estrelas apesar de me ter dado dores de cabeça…
Agora se alguém fizer o mesmo em Node red gostava de ver… Pois não me cativou muito o ambiente do Node red… Pode ser uma questão de perder mais algum tempo com ele…

2 Likes

@byjaps, quanto ao desafio em NR, não é grande desafio… Em NR é muito fácil…
Tenho isso para luzes, tomadas, portas…

1 Like

Se gostas de código… em NR podes bater muito no teclado também :wink:

1 Like

Copyright © 2017-2020. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade