寫在前面,本文如果有漏掉感謝的智友or文章or公司,懇請回文提醒,過程中google了很多資料,很有可能使用到了您的智慧與心血,望請見諒。
**如果您的自動化只是想要LINE通知,不用特別花時間把地牛整合進HA,直接從這邊:
https://wakeup.sgod.me/ 將您的LINE帳號跟地牛系統作連動就可以了。
近來地震頻仍,每次都喚起20幾年前921的恐怖經驗,恰巧最近發現一套非常棒的軟體:“地牛Wake Up!”,在消化"惟家"與"HomeKit"兩智能群群友的集思廣益之後,小弟在此簡單分享一下自己接入HA做自動化的方式。
在群裡看到的分享,都是透過UBUNTU+NodeRed做的,恰巧我不熟Linux也不會NR,所以我用的是Window10+HA內建的自動化,敬此說明。
步驟:
一. 安裝python(官網請點我),我安裝的版本是3.10,現在已經到3.11了,稍後會有批次檔,大家各自安裝的路徑要記錄一下(我的安裝路徑是C:\Python\Python310)
二. 安裝地牛Wake Up!(官網請點我),我安裝的版本是x64,如果您的Windows是32位元,請下載相應的安裝包。
三. 打開"地牛Wake Up!"並設定之,大家看圖照樣設定為自家地區&等下要放置批次檔的路徑檔案即可。
四. 進HA裡面建立一個token (左下角你的名字上面點一下,然後拉到最下面,新增權杖),等下批次檔會用到。
五. 在HA裡面建立兩個sensor,要讓"地牛Wake Up!"用的
(註1: HA的API非常透明完整,可以藉之做很多運用,真的要給辛苦的HA開發團隊無數個大大大的讚,他們真的是太了不起了。)
(註2: 建立sensor可以有更加多元的應用,但也可以不建,直接從批次擋去call HA裡面的自動化,範例由洋蔥大提供,將寫於步驟六)
(舊格式,個人習慣拆分configuration.yaml )
sensor: !include_dir_merge_list /config/entities/sensor/
- platform: template
sensors:
earthquake_level:
value_template: 0
earthquake_level2:
friendly_name: "預估地震規模"
value_template: >-
{{ (states.sensor.earthquake_level.state)[0]|int }}
earthquake_sec:
value_template: 0
earthquake_sec2:
friendly_name: "預估幾秒後地震"
value_template: >-
{{ (states.sensor.earthquake_sec.state)|int - 2 }}
(新格式,個人習慣拆分configuration.yaml )
template: !include_dir_merge_list /config/entities/templates/
- sensor:
- name: earthquake_level
state: 0
- name: earthquake_level2
#friendly_name: "預估地震規模"
state: >
{{ (states.sensor.earthquake_level.state)[0]|int }}
- name: earthquake_sec
state: 0
- name: earthquake_sec2
#friendly_name: "預估幾秒後地震"
state: >-
{{ (states.sensor.earthquake_sec.state)|int - 2 }}
(補充: 最後一個 -2,是我修正了好幾次,地牛發布警報跟我實際聽到TTS語音的時間差,非必須,請依需求自行修改之。)(上一版甚至是-7,後來發現是執行服務的順序所致,已修正。)
六. 批次檔eew.bat的內容
1.步驟五有建sensor的版本:
@echo off
set DST={你在內網連HA的IP:PORT} #致敬二樓洋蔥大神的寫法,更簡潔也更適合分享
set TOKEN={步驟4所記錄下來的token} #致敬二樓洋蔥大神的寫法,更簡潔也更適合分享
cd C:\Python\Python310\
start /MIN python earthquake.py %1 %2
curl.exe -X POST -H "Authorization: Bearer %TOKEN%" -H "Content-Type: application/json" %DST%/api/states/sensor.earthquake_level -d "{\"state\": \"%1\"}"
curl.exe -X POST -H "Authorization: Bearer %TOKEN%" -H "Content-Type: application/json" %DST%/api/states/sensor.earthquake_sec -d "{\"state\": \"%2\"}"
註: {步驟4所記錄下來的token}跟{你HA內網的IP}這兩個變數,打的時候不用加引號"{“與”}"
2.步驟五沒有建sensor的版本: 請看二樓回文,洋蔥大師親自蒞臨指導分享完整代碼,感謝。
(註: 分享者"洋蔥",是一個非常厲害的高手,尤其米家相關設備,以下出賣他的GitHub,歡迎利用XD
七. 自動化參考, 請按照貴府實際有的設備&裝置去改動ˇ,我的想法很單純: 強震常常是深夜發生,就寢時間大家就算聽到LINE提醒也不見得會起床開手機,更何況大多數人應該會設定"深夜勿擾"吧,所以我的警報大部分是用聽的,直接從手機&音箱裝置念出告警的內容,並開啟預設躲避路線的所有照明,只要不是熟睡到沒聽見,至少還能有幾秒鐘的時間緊急應變。
alias: APP強震TTS警報
description: ""
trigger:
- platform: numeric_state
entity_id: sensor.earthquake_level2
above: 4.9
condition: []
action:
- parallel:
- service: notify.mobile_app_baba_x3
data:
message: TTS
data:
tts_text: 強震來襲,強震來襲,迅速躲避。
media_stream: alarm_stream_max
- service: notify.mobile_app_dima_oppo
data:
message: TTS
data:
tts_text: 強震來襲,強震來襲,迅速躲避。
media_stream: alarm_stream_max
- data_template:
language: zh-CN-XiaoxiaoNeural
message: >-
強震來襲,{{ (states.sensor.earthquake_level2.state) }}級地震{{
(states.sensor.earthquake_sec2.state) }}秒後抵達。
entity_id: media_player.indoor_speakers
service: tts.edge_tts_say
- service: switch.turn_on
data: {}
target:
entity_id:
- switch.ks811_master_3
- switch.ks811_second_2
- switch.ks811_livingroom_2
- switch.ks811_3f_2
- switch.ks811_stair3_3
- service: media_player.turn_on
data: {}
target:
entity_id: media_player.denon_avr_x3700h
- service: media_player.clear_playlist
data: {}
target:
entity_id: media_player.denon_avr_x3700h
- service: media_player.volume_set
data:
volume_level: 0.8
target:
entity_id: media_player.indoor_speakers
- data_template:
language: zh-CN-XiaoxiaoNeural
message: >-
強震來襲,{{ (states.sensor.earthquake_level2.state) }}級地震{{
(states.sensor.earthquake_sec2.state) }}秒後抵達。
entity_id: media_player.denon_avr_x3700h_2
service: tts.edge_tts_say
mode: single
以上簡單分享,若有錯漏之處,亦請反饋以便修正,謝謝。