Alguns de vocês talvez já tenham pensado nisto mas não sabiam como o fazer. Mostrar as últimas notificações no frontend do HA pode ser útil para saber se uma determinada automação funcionou ou não e a que horas.
O segredo está nos componente file
e command_line
, e também no comando tail
.
Cria um ficheiro de texto na raiz da configuração (na mesma pasta que o ficheiro configuration.yaml
) com o nome notifications.txt
. De seguida adiciona o seguinte na entrada notify:
notify:
- name: Save to File
platform: file
filename: notifications.txt
Depois é necessário criar as entradas que vão ler as notificações quando elas foram gravadas. Na entrada sensor:
adiciona o seguinte:
sensor:
#### 10
- platform: command_line
name: "notificação 10"
command: "tail -n 10 /config/notifications.txt | sed '2,10d' $1"
#### 09
- platform: command_line
name: "notificação 09"
command: "tail -n 9 /config/notifications.txt | sed '2,9d' $1"
#### 08
- platform: command_line
name: "notificação 08"
command: "tail -n 8 /config/notifications.txt | sed '2,8d' $1"
#### 07
- platform: command_line
name: "notificação 7"
command: "tail -n 07 /config/notifications.txt | sed '2,7d' $1"
#### 06
- platform: command_line
name: "notificação 06"
command: "tail -n 6 /config/notifications.txt | sed '2,6d' $1"
#### 05
- platform: command_line
name: "notificação 05"
command: "tail -n 5 /config/notifications.txt | sed '2,5d' $1"
#### 04
- platform: command_line
name: "notificação 04"
command: "tail -n 4 /config/notifications.txt | sed '2,4d' $1"
#### 03
- platform: command_line
name: "notificação 03"
command: "tail -n 3 /config/notifications.txt | sed '2,3d' $1"
#### 02
- platform: command_line
name: "notificação 02"
command: "tail -n 2 /config/notifications.txt | sed '2,2d' $1"
#### 01
- platform: command_line
name: "notificação 01"
command: "tail -n 1 /config/notifications.txt | sed '2,1d' $1"
Cria um grupo para juntar todas as entradas num só cartão.
group:
#### NOTIFICATION LIST
grp_last_notifications:
name: Últimas Notificações
control: hidden
entities:
- sensor.notificacao_01
- sensor.notificacao_02
- sensor.notificacao_03
- sensor.notificacao_04
- sensor.notificacao_05
- sensor.notificacao_06
- sensor.notificacao_07
- sensor.notificacao_08
- sensor.notificacao_09
- sensor.notificacao_10
E depois adiciona este grupo a uma página nova (ou a outra que queiras):
#### NOTIFICAÇÕES
tab_notificacoes:
name: Notificações
view: yes
icon: mdi:bell-ring
entities:
- group.grp_last_notifications
Para que fique tudo mais bonito, adiciona estas entradas ao ficheiro customize.yaml
customize:
#### LISTA DE NOTIFICAÇÕES
sensor.notificacao_01:
icon: mdi:bell-ring
friendly_name: '01'
sensor.notificacao_02:
icon: mdi:bell
friendly_name: '02'
sensor.notificacao_03:
icon: mdi:bell
friendly_name: '03'
sensor.notificacao_04:
icon: mdi:bell
friendly_name: '04'
sensor.notificacao_05:
icon: mdi:bell
friendly_name: '05'
sensor.notificacao_06:
icon: mdi:bell
friendly_name: '06'
sensor.notificacao_07:
icon: mdi:bell
friendly_name: '07'
sensor.notificacao_08:
icon: mdi:bell
friendly_name: '08'
sensor.notificacao_09:
icon: mdi:bell
friendly_name: '09'
sensor.notificacao_10:
icon: mdi:bell
friendly_name: '10'
Por último, e muito importante, temos que dizer ao sistema o que queremos gravar no ficheiro. Para isso deverás adicionar este script:
#### NOTIFY SAVE TO FILE
notify_save_to_file:
sequence:
- service: notify.save_to_file
data_template:
message: '{{ message }}'
E adicionar uma nova acção às automações que queres que fiquem registadas no ficheiro. Por exemplo:
...
action:
- service: mqtt.publish
data_template:
topic: 'home/indoor/sensor/MAID-EM-01/kwh_at_1st_day_month'
retain: true
payload_template: '{{ states.sensor.consumo_acumulado_kwh.state }}'
- service: mqtt.publish
data_template:
topic: 'home/indoor/sensor/MAID-EM-01/kwh_at_1st_day_month_time'
retain: true
payload_template: '{{ now() }}'
- service: script.notify_save_to_file
data:
message: '{{ as_timestamp (now()) | timestamp_custom("%d/%b/%Y %T") }} - kWh Mensais - GRAVADO'
Eu utilizo a função {{ as_timestamp (now()) | timestamp_custom("%d/%b/%Y %T") }} para que fique registada a data e a hora da ocorrência.
O resultado final é este: