Trong thí dụ này, chúng ta kích hoạt automation bằng Webhook.
Với các ứng dụng khác (eg. Telegram), webhook là cơ chế ứng dụng gọi đến một trang web đã được thiết kế trước để lấy data trả về từ trang web, khi một sự kiện nào đó xảy ra.
Với Hass, địa chỉ trang web đó là
https://xxxx.duckdns.org:8123/api/webhook/webhook_id
Trong đó, xxxx.duckdns.org là domain trang Hass cá nhân và webhook_id là giá trị tự đặt ra khi khai báo webhook trong Hass
Điểm khác biệt là chúng ta không thể thiết kế trang webhook mà chỉ có thể khai báo trong configuration.yaml
Thí dụ sau đây phát nhạc trên loa Google Home khi trang webhook được mở (trong khoảng 23h đến 4h):
alias: Music Alert trigger: platform: webhook webhook_id: music_alert condition: condition: time after: '23:00' before: '4:00' action: service: media_player.play_media data: entity_id: media_player.office_speaker media_content_id: url_music.mp3 media_content_type: music
- media_content_id là địa chi file nhạc, địa chỉ download trực tiếp. Nếu tử Dropbox thì lấy địa chỉ chia sẻ file, thay đối dl=0 thành dl=1. Nếu từ Google Drive thì phải sửa đường link chia sẻ, từ
https://drive.google.com/file/d/FILE_ID/edit?usp=sharing
thành
https://drive.google.com/uc?export=download&id=FILE_ID
Ngoài ra, có thể lưu file trên Hass và truy cập theo đường dẫn
https://xxxx.duckdns.org:8123/local/tên_file
bằng cách lưu file trong thư mục /config/www và trong phần homeassistant: thêm dòng
whitelist_external_dirs: "/config/www"
Một cách khác đơn giản hơn để phát âm thanh là dùng tts.google_say
action: service: tts.google_say data: message: Hi Every body! Motion delected
Vì trang webhook được mở theo phương thức POST nên không thể gõ trực tiếp trên thanh địa chỉ trình duyệt (phương thức GET) mà phải test trên https://apitester.com/ hay dùng curl
curl -d "" https://xxxx.duckdns.org:8123/api/webhook/music_alert
Dòng lệnh sau đây chạy trong mạng nội bộ:
curl -k -d "" https://hass.local:8123/api/webhook/music_alert
Một ứng dụng của webhook như trên là khi camera phát hiện chuyển động thì mở trang webhook để phát báo động. Tất nhiên khi đó phải mở trang webhook theo phương thức POST.
Có thể bọc trang webhook vào trang web khác để nhờ mở theo phương thức POST
<html> <body onload="document.forms[0].submit();"> <form method="POST" action="https://xxxx.duckdns.org:8123/api/webhook/music_alert"></form> </body> </html>