Lembrete de Desparasitação


(Ricardo Neiva) #1

Boa tarde.
Estou a tentar criar um lembrete para efectuar a desparasitação ao meu cão, porque me esqueço constantemente.

Pode não ser a melhor forma de o fazer, mas é a única forma que me lembrei.

input_boolean:

  internal_deworming_done:
  internal_deworming_alarm:


input_number:
  internal_deworming_day:
    name: Dia de Desparasitação
    min: 1
    max: 31
    step: 1
  internal_deworming_month:
    name: Mês de Desparasitação
    min: 1
    max: 12
    step: 1
  internal_deworming_year:
    name: Ano de Desparasitação
    min: 2018
    max: 2100
    step: 1


sensor:

  - platform: time_date
    display_options:
      - 'date'
  - platform: template
    sensors:
      internal_deworming_day:
        value_template: '{{ states.input_number.internal_deworming_day.state | int }}'
      internal_deworming_month:
        value_template: '{{ states.input_number.internal_deworming_month.state | int }}'
      internal_deworming_year:
        value_template: '{{ states.input_number.internal_deworming_year.state | int }}'
      internal_deworming_date_small:
        value_template: "{{ states.sensor.internal_deworming_year.state }}-{{ states.sensor.internal_deworming_month.state }}-{{ states.sensor.internal_deworming_day.state }}"
      internal_deworming_date:
        value_template: >-
          {{ states.sensor.internal_deworming_year.state }}-
          {%- if states.sensor.internal_deworming_month.state|length == 1 -%}
            0
          {%- endif -%}
          {{ states.sensor.internal_deworming_month.state }}-
          {%- if states.sensor.internal_deworming_day.state|length == 1 -%}
            0
          {%- endif -%}
          {{ states.sensor.internal_deworming_day.state }}





automation:

  - alias: 'Internal Deworming Day'
    initial_state: true
    hide_entity: False
    trigger:
      platform: template
      value_template: '{{ states.sensor.date.state == states.sensor.internal_deworming_date.state }}'
    action:
      - service: input_boolean.turn_off
        entity_id: input_boolean.internal_deworming_done
      - service: input_boolean.turn_on
        entity_id: input_boolean.internal_deworming_alarm

  - alias: Internal Deworming Warning
    initial_state: true
    hide_entity: true
    trigger:
      - platform: time
        at: '17:00:00'
      - platform: time
        at: '18:00:00'
      - platform: time
        at: '18:30:00'
      - platform: time
        at: '19:00:00'
      - platform: time
        at: '19:30:00'
      - platform: time
        at: '20:00:00'
      - platform: time
        at: '20:30:00'
    condition:
      condition: template
      value_template: '{{ states.input_boolean.internal_deworming_alarm.state == "on" }}'
    action:
      - service: telegram_bot.send_message
        data_template:
          target: !secret telegram_chatid1
          message: 'Dia de fazer desparasitação interna!'
          disable_notification: true
          inline_keyboard:
            - "Feito:/internal_deworm_done"
            - "Lembrar Amanhã:/internal_deworm_tomorrow"
  - alias: 'internal_deworm_done'
    hide_entity: true
    trigger:
      platform: event
      event_type: telegram_callback
      event_data:
        data: '/internal_deworm_done'
    action:
      - service: telegram_bot.answer_callback_query
        data_template:
          callback_query_id: '{{ trigger.event.data.id }}'
          message: 'Excelente, aviso daqui a três meses novamente!'
      - service: input_boolean.turn_on
        entity_id: input_boolean.internal_deworming_done
      - service: input_boolean.turn_off
        entity_id: input_boolean.internal_deworming_alarm
      - service: input_number.set_value
        data_template:
          entity_id: input_number.internal_deworming_month
          value: "{{ states.sensor.internal_deworming_month.state }}+3"

  - alias: 'internal_deworm_tomorrow'
    hide_entity: true
    trigger:
      platform: event
      event_type: telegram_callback
      event_data:
        data: '/internal_deworm_tomorrow'
    action:
      - service: telegram_bot.answer_callback_query
        data_template:
          callback_query_id: '{{ trigger.event.data.id }}'
          message: 'Ok, aviso novamente amanhã!'
      - service: input_boolean.turn_on
        entity_id: input_boolean.internal_deworming_done
      - service: input_boolean.turn_off
        entity_id: input_boolean.internal_deworming_alarm
      - service: input_number.set_value
        data_template:
          entity_id: input_number.internal_deworming_day
          value: "{{ states.sensor.internal_deworming_day.state }}+1"




group:

  dog_internal_deworming:
    name: Desparasitação Interna
    entities:
    - input_boolean.internal_deworming_done
    - input_boolean.internal_deworming_alarm
    - sensor.internal_deworming_date
    - sensor.internal_deworming_day
    - input_number.internal_deworming_day
    - sensor.internal_deworming_month
    - input_number.internal_deworming_month
    - sensor.internal_deworming_year
    - input_number.internal_deworming_year

Agora, tenho um problema,
Não sei como fazer com que me volte a lembra dentro de 3 meses quando respondo que a desparasitação foi efectuada no Telegram, ou como adicionar um dia à data ao responder lembrar amanha.


(Diogo Gomes) #2

E usar o calendario do seu smartphone :laughing: ?


(Jorge Assunção) #3

O @dgomes tem razão mas…

Se queres mesmo seguir pela via do HA, deves começar por substituir os input_numbers por input_datetime.
Com apenas um input_datetime substituis três input_numbers.


(Ricardo Neiva) #4

Obrigado :wink:

@dgomes é uma hipótese que já experimentei e acabei por abandonar porque não me conseguia controlar.
Queria mesmo passar este dado para o HA.

@j_assuncao não conhecia o Input Datetime, vou experimentar, no entanto continuo com o problema de não conseguir adiar 3 meses ou 1 dia.


(Jorge Assunção) #5

Quando tiveres a alteração feita, com a substituição fica muito mais compacta, publica aqui o resultado através do https://hastebin.com/ publicando o link resultante depois de gravares. Um de nós vai ajudar-te a obter o resultado que pretendes.

Se quiseres ir tentando, experimenta criar dois scripts que gerem o aviso, mas um com o delay de 1 dia e outro com 3 meses. Podes ver aqui:

Só não tenho a certeza que isso resista a um restart do HA. Outra hipótese a considerar é criar essas mesmas duas automações mas em vez de criares o delay alteras a data do internal_deworming_alarm.


(Ricardo Neiva) #6

@j_assuncao Desculpa a demora na resposta, estive ausente por motivos profissionais.

Alterar a data do internal_deworming_alarm é o que pretendo, mas não sei como adicionar 3 ao mês actual!


(Jorge Assunção) #7

Referes-te a adicionar três meses ao mês actual?


(Ricardo Neiva) #8

Sim, isso mesmo.

Não estou a ver como fazer isso.


(Jorge Assunção) #9

Através da automação podes alterar os valores do input_datetime com o seguinte código:

action:
  - service: input_datetime.set_datetime
    data:
      entity_id: input_datetime.only_time
      date: 2018-06-01
      time: 09:03:01

Se só quiseres mexer na data podes tirar o time e substituis o valor de date por uma string que some 3 ao mês.


(Jorge Assunção) #10

Esqueci de referir que o comando para adicionar três meses à data actual é:

{{ (as_timestamp (now()) | timestamp_custom("%m") | int ) + 3 }}