Automações para feriados e dias uteis em Portugal


(Marcelo Cláudio) #1

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


(Bruno Melo) #2

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.


(Nuno Neves) #4

Pois… Foi esse mesmo que foi usado no OP!


(Luís Martins) #5

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.


(Bruno Melo) #6

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?


(MRodrigues) #7

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'

(Luís Martins) #8

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


(Nuno Neves) #9

que queres dizer com conjugar a condição?


(MRodrigues) #10

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

(Luís Martins) #11

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.


(Nuno Neves) #12

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…


(Xan) #13

É possível remover feriados manualmente?


(Luís Martins) #14

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


(MRodrigues) #15

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

(Nuno Neves) #16

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


(MRodrigues) #17

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.


(MRodrigues) #18

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


(Nuno Neves) #19

é possível como puseste, mas essa corre às 10:01 e não às 10:00… :wink: