前言
Line Notify宣佈停用之後大家開始轉進其他通訊軟體來做通知,HA自身的Companion App通知功能很強大,但沒辦法留存紀錄導致無法查詢舊通知,使用上有一些缺陷,依賴ChatGPT實現了在dashboard上顯示通知歷程,廢話不多說正文開始
工作原理
建立文字助手 利用Shell command建立一個文字檔將通知訊息做保存 建立自動化:當文字助手狀態變化,執行文字檔更新 建立一個腳本將.txt內容轉成JSON格式並暫存系統建立一個command sensor將文字檔訊息導出建立markdown card將command sensor訊息顯示出來
設定
-
建立文字助手
-
利用Shell command建立歷程文字檔
shell_command:
#event_input correspond to the input_text.event_input
prepend_event_log: /bin/bash -c "echo '{{ now().strftime("%Y-%m-%d %H:%M") }} - {{ event_input }}' | cat - /config/www/event_log.txt | head -n 50 > /config/www/event_log.tmp && mv /config/www/event_log.tmp /config/www/event_log.txt"
- 歷程格式為{{ now().strftime(“%Y-%m-%d %H:%M”) }} - {{ event_input }},其中變數event_input後面會對應到{{ states(“input_text.event_input”) }}
- /config/www/event_log.txt 為文字檔儲存路徑
- head -n 50 為要保存的最後50筆資料,可自行變更
- 建立自動化更新文字檔
alias: Prepend Event to Log and Notify
description: ""
trigger:
- platform: state
entity_id: input_text.event_input
action:
- action: shell_command.prepend_event_log
data:
# event_input對應shell command變數
event_input: |
{{ states("input_text.event_input") }}
- 建立腳本將txt文字轉成JSON
- 在config目錄下建立腳本“log_to_json.sh”
#!/bin/bash
# Get the current date and time
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# Read the file and convert each line to a JSON array
echo '{ "last_update": "'"$current_time"'", "lines": ['
awk '{printf "\"%s\",\n", $0}' /config/www/event_log.txt | sed '$ s/,$//'
echo ']}'
- 至Terminal更改.sh檔案權限(注意檔案路徑)
chmod +x /config/log_to_json.sh
- Command Line sensor 搭配 “log_to_json.sh”
command_line:
- sensor:
name: Event Log
command: "bash /config/log_to_json.sh" # Runs the script that outputs JSON
scan_interval: 60 # Update every 60 seconds
value_template: "{{ value_json.last_update }}" # Display the second-to-last line as the sensor state
json_attributes:
- lines
注意HA sensor的state有字元數的限制,attributes的字元限制較高,要將txt的內容導入到command line sensor才可以完整顯示50則歷程,生成Entity如下
- 建立markdown card
type: markdown
content: >
{% for line in state_attr('sensor.event_log', 'lines') %}
# 在{{ line }}前後添加markdown格式,這邊用HA alert
<ha-alert alert-type="info">{{ line }}</ha-alert>
{% endfor %}
title: Notification Log
-
成果
總結
HA本身的File可以利用notify.send_message來自動成稱歷程txt,但紀錄方式是最新的一筆在下方,而且是無限制的新增,應該也可以利用語法來更新這個txt,作法應該大同小異。
非軟體專業,code或許可以在做優化,另外可以搭配自動化或Node Red流程將歷程自動更新,也可附加圖檔等markdown可支持的操作,本歷程為HA本地記錄,不限於其他通訊軟體應用,可並存。