Automações para feriados e dias uteis em Portugal

Viva.
aqui vai uma contribuição muito útil para automações que só queremos que sejam despelotadas em dias uteis, ou seja vamos imaginar sabados domingos e feriados devem ser excluidos. particularmente util para estores. no exemplo coloquei ação para levantar um estore shelly por mqtt

config:

binary_sensor:
  - platform: workday
    name: dias uteis
    country: PT
    #workdays: [mon, wed, fri] --> define-se quais os dias uteis
    excludes: [sat, sun, holiday] --> Exclusoes, ou seja o sensor nao passa a on nestes dias
    #add_holidays:  --> adicionar feriados locais por exemplo ou outros dias à escolha
    #  - '2018-12-26'
    #  - '2018-12-31'

automation:

- id: teste11
  alias: teste11
  trigger:
    platform: time
    at: '07:50:00'
  condition:
    condition: state
    entity_id: 'binary_sensor.dias_uteis'
    state: 'on'
  action:
  - data_template:
      payload: '50'
      topic: shellies/shellyswitch25-xxxxx/roller/0/command/pos
    service: mqtt.publish

depois é so testar

5 Likes

Por acaso a uns dias a trás fiz essa mesma configuração mas ainda não tenho automações. Ainda ando a estudar o que vou fazer com este componente. Em princípio irei usei para as luzes.

Pois… Foi esse mesmo que foi usado no OP!

Peço desculpa, li a parte do comemtário de adicionar feriados locais e assumi que era para colocar a lista de feriados. Vou apagar o comentário pois não faz sentido.

O que me levou a procurar este compunente foi gerar automações para feriados. Já tinha as automações de iluminação configuradas para semana e fim de semana. Mas faltava os feriados e férias que com este componente já se pode adicionar. Ora acabei de ter ideias para as minhas automações o que leva a refazer todas as automações de iluminação. Mas acho que vai valer a pena. Alguém já descobriu onde se pode ver os feriados que já estão configurados no componente?

Realmente também me faltavam os feriados para o automatismo do despertador e abertura dos estores :slight_smile: obrigado pela partilha!

Os feriados estão hard-coded aqui:
https://github.com/dr-prodigy/python-holidays/blob/master/holidays.py

Também é possivel adicionar manualmente (e.g dias especiais ou feriados regionais) com a chave no momento da definição do sensor.

add_holidays: 
      - '2018-12-26'
      - '2018-12-31'
3 Likes

Estou a tentar fazer uma automação para abrir s estores a horas diferentes (trigger) consoante seja semana ou fim de semana (condition) mas sem sucesso. Penso que é possível usar vários triggers mas parece que não dá (ou eu não sei) conjugar a condição.

Alguma ideia? Obrigado

que queres dizer com conjugar a condição?

Se percebi bem, gostarias de conjugar o dia da semana com a hora para fazer abertura?
Se a pergunta é como conjuntar condições (AND ou OR), fica aqui um exemplo de um “AND”:
(mas se quiseres mostrar a tua base, depois poderemos ajudar melhor)

- alias: Levar o Lixo
  trigger:
    platform: state
    entity_id: group.TodosSensoresMovimento
    to: 'on'
  condition:
      condition: and
      conditions:
        - condition: state
          entity_id: input_boolean.levar_lixo
          state: 'on'
        - condition: state
          entity_id: 'device_tracker.tmp'
          state: 'home'
  action:
      - service: notify.dev
        data:
          message: "Nao esquecer de levar o LIXO"
      - service: homeassistant.turn_off
        entity_id: input_boolean.levar_lixo

a minha abordagem foi esta :

- alias: open_shutters
  initial_state: true
  hide_entity: true 
  trigger:
    - platform: time
      at: "07:00:00"

      condition:
      condition: state
      entity_id: 'binary_sensor.workday_sensor'
      state: 'on'  

    - platform: time
      at: "09:00:00"

      condition:
        condition: state
        entity_id: 'binary_sensor.workday_sensor'
        state: 'off'    

  action:
    - service: cover.set_cover_position
      data:
        entity_id: cover.shutter_kidsroom
        position: 100

mas parece que só posso colocar uma condição, independetemente do nº de triggers.

não podes ter conditions dentro dos triggers…
Tens de fazer 2 automaçãoes separadas… Ou antes, é a forma mais simples para o que queres…

É possível remover feriados manualmente?

Pois, era o que eu começava a suspeitar. Estava a tentar diminuir o nº de automações, as pelos vistos não dá.

Podes fazer isto apenas numa automação.

Seria pela via do “and” que te mostrei acima. Ias ganhar umas linhas de código, mas acho que na prática ia ficar menos legível e menos leve, pelo que também recomendo automação distinta.

Seria uma combinação do or e and, similar ao código de exemplo no HA, mas invertido, porque irias dizer que querias:

(dia_de_semana AND 07h00 ) OR ( fim_de_semana AND 10h00)

condition:
  condition: and
  conditions:
    - condition: state
      entity_id: 'device_tracker.paulus'
      state: 'home'
    - condition: or
      conditions:
        - condition: state
          entity_id: sensor.weather_precip
          state: 'rain'
        - condition: numeric_state
          entity_id: 'sensor.temperature'
          below: 20
1 Like

@mfrodrigues da forma que dizes não daria… só com templates, o que complica muito mais… Vê melhor o que o OP pretende…

Li bem a pergunta colocada e em termos práticos era saber se dava para ter tudo na mesma automação.

Mantenho a afirmação que é melhor separar tendo em conta legibilidade e eficiência, mas queria partilhar também que há sempre alternativas que não ajudando aqui, podem ajudar noutras automações. :slight_smile:

Seria algo parecido com isto:

- alias: open_shutters
  trigger:
    platform: time_pattern
    minutes: '/1'
    seconds: '0'
  condition:
    condition: or
    conditions:
      - condition: and
        conditions:
          - condition: state
            entity_id: 'binary_sensor.workday_sensor'
            state: 'on'
          - condition: time
            before: '07:02:00'
            after: '07:00:00'
	    conditions:
          - condition: state
            entity_id: 'binary_sensor.workday_sensor'
            state: 'off'
          - condition: time
            before: '10:02:00'
            after: '10:00:00'
  action:
    - service: cover.set_cover_position
      data:
        entity_id: cover.shutter_kidsroom
        position: 100

Não acho que seja a mais eficiente, nem mais legível, conforme mencionei antes.

1 Like

Lamento, mas infelizmente não encontrei nenhuma opção para retirar feriados já definidos.

é possível como puseste, mas essa corre às 10:01 e não às 10:00… :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