Nếu bạn đã kết nối các thiết bị âm thanh như loa Google Home (qua Google cast), MPD player vào Hass, bạn có thể điều khiển các loa này phát một file nhạc/âm thanh được lưu trên máy chủ Hass hoặc từ internet. Thông thường, ta có thể sử dụng các file này để:
- Phát âm thanh với mục đích thông báo trong một tình huống hoặc sự kiện nào đó (cửa mở, phát hiện chuyển động, nút chuông cửa được bấm)
- Phát các bản nhạc, bài hát với chủ đề ưu thích, ví dụ nhạc nhẹ nhàng vào giờ đi ngủ hay nhạc chào buổi sáng
Về các media player/Yêu cầu tối thiểu
- Các thiết bị media đa phần được liên kết vào Home Assistant dưới domain media_player, có ngoại lệ nhưng không nhiều. Trong bài trước, khi ta liên kết Spotify vào Home Assistant, dịch vụ này được đại diện bởi entity – thực thể có entity_id là media_player.spotify_abc.
- Không phải mọi thiết bị hay dịch vụ đều hỗ trợ play – phát một bài hát qua giao thức HTTP/HTTPS (như Roku hay Yamaha Receiver). Bạn cần xem tài liệu về thiết bị/dịch vụ này.
- Các loa Google Home (mini) hoặc thiết bị Chromecast/AndroidTV tích hợp vào Hass qua Google Cast đều có khả năng phát file âm thanh qua giao thức HTTPS ở các định dạng mp3, wav, aac, opus, vorbis và flac.
Tương tự trong trường hợp dịch vụ TTS, nếu bạn chứa các file này trên máy chủ Hass (như ở dưới), bạn phải cấu hình để truy cập Hass từ bên ngoài qua một địa chỉ domain với giao thức HTTPS hợp lệ.
Nếu bạn sử dụng giao thức HTTP thì có thể phát các file này sử dụng địa chỉ IP nội bộ. - Router mạng của bạn phải hỗ trợ Hairpinning (NAT loopback) nếu bạn muốn phát các file này qua domain của Hass thay vì địa chỉ IP. Nếu bạn có thể truy cập giao diện Web của Hass từ một máy cùng mạng, qua domain thì gần như chắc chắn router của bạn có hỗ trợ.
Lưu trữ và phát các file âm thanh trên máy chủ Home Assistant
Lưu trữ file trên máy chủ Hass
Home Assistant (Hass) đi kèm một máy chủ web được cấu hình và kích hoạt bên trong http integration. Đây chính là web server phục vụ giao diện web (frontend & lovelace) của Hass. Ta cũng sẽ dùng chính web server này để phục vụ các file âm thanh dùng phát đến các media_player.
Để được phục vụ bởi web server của Hass, các file này cần được lưu trữ bên trong thư mục /config/www.
BẢO MẬT
Không như giao diện Home Assistant, tất cả các file và folder bên trong thư mục /config/www đều có thể bị truy cập mà không cần xác thực. Do vậy, bạn không nên chứa các file mang nội dung cá nhân hay nội dung nhạy cảm và không để lộ tên miền – domain (trong trường hợp truy cập Hass từ bên ngoài).
Bạn cũng không được chứa các file script như asp, js, php, sh bên trong thư mục này để tránh bị lạm dụng tấn công.
Ví dụ, nếu bạn lưu một file có tên example.mp3 bên trong thư mục music bên trong thư mục /config/www thì file này có thể được truy cập qua địa chỉ:
- [http hoặc https]://ip:port/local/music/example.mp3 (http://192.168.1.9:8123/local/music/example.mp3)
- [http hoặc https]://domain:port/local/music/example.mp3 (https://konnected.vn:38888/local/music/example.mp3)
Các chú ý:
- Không đặt tên file quá dài, không nên sử dụng dấu cách – space trong tên file
- Địa chỉ truy cập có phân biệt kí tự Hoa và Thường
- Có thể gom các file cùng loại, cùng mục đích vào các folder để dễ quản lý, tuy nhiên nên duy trì đường dẫn ngắn nhất có thể
- Phần /local trong đường dẫn là bắt buộc và tương ứng với thư mục www
- Nếu bạn đang lưu trữ máy chủ Hass trên thẻ nhớ, chú ý đến dung lượng trống của thẻ. Lưu các file này và đọc chúng không ảnh hưởng đáng kể đến tuổi thọ thẻ khi dung lượng trống của thẻ còn nhiều.
Phát các file này đến media player
Để phát file /config/www/music/example.mp3 trong ví dụ trên đến một media_player, ta sử dụng dịch vụ – service media_player.play_media như bên dưới:
service: media_player.play_media entity_id: media_player.google_player data: media_content_id: 'https://konnected.vn:38888/local/music/example.mp3' media_content_type: music
Trong đó:
entity_id:
là thiết bị media player nhận lệnh phátmedia_content_id:
địa chỉ truy cập file như ví dụ trong bước trên, lưu ý rằng nên có các dấu cách – space trong tên file/địa chỉ thì bạn nên đặt toàn bộ trong dấu ‘ hoặc “media_content_type:
music, video, image, tvshow, channel hay playlist tuỳ theo loại nội dung bạn muốn phát (music chỉ các file dạng mp3, aac, flac, wav như đã nói ở trên, không phải chỉ đến “âm nhạc”) và thiết bị có hỗ trợ
Dưới đây là một automation mẫu, sử dụng một công tắc Zigbee chạy pin làm nút chuông cửa và sẽ phát các tiếng chuông khác nhau đến loa media_player.google_living_room tuỳ vào thời điểm trong ngày. (bạn có thể tải 2 file này ở liên kết dưới)
- id: '158971631379369' alias: Door bell description: Nút chuông cửa trigger: - entity_id: switch.door_bell from: 'off' platform: state to: 'on' condition: [] action: - data_template: media_content_id: >- {% if now().hour > 5 and now().hour < 23 %} {% else %} {% endif %} media_content_type: music entity_id: media_player.google_living_room service: media_player.play_media
Phát ngẫu nhiên các file âm thanh lưu trữ trên Hass
Lưu các file này trên máy chủ Home Assistant
Trước tiên ta cần lưu các file này trên máy chủ Home Assistant trong cùng một thư mục bên trong thư mục /config/www.
Ví dụ ở đây ta sẽ lưu 5 file:
ocean_waves_30mins.mp3, bird_sound_30mins.mp3, wind_chime_28mins.mp3, relaxing yoga.mp3, mysterious_jungle_30mins.mp3
bên trong thư mục /config/www/chimes của Hass. Đây là các file chứa âm thanh nhạc cụ, đa phần có tiếng chuông gió (nên mới đặt trong thư mục chimes), có thể xếp vào thể loại relaxing sound hay meditation sound. Bạn có thể chép các file này vào thư mục trên bằng cách sử dụng addon Samba Share (yêu cầu Supervisor) hoặc qua WinScp hay bất cứ cách nào thuận tiện.
Lấy các file này ở đâu/Tải về từ Youtube
Các file này thường được chia sẻ trên các diễn đàn âm nhạc hoặc yoga và thiền. Bạn cũng có thể tìm và tải về từ youtube với các từ khoá như wind sound, morning sound, relaxing music, yoga music v.v.. Lưu ý vấn đề bản quyền và bạn chịu trách nhiệm với mọi file bạn tải về.
Có thể tìm thấy các file âm thanh thông báo của hệ điều hành Windows tại thư mục C:\Windows\Media. Bạn cũng có thể tải các file âm thanh đủ loại được chia sẻ miễn phí trên Internet, ví dụ như tại http://soundbible.com.
Để tải các file mp3 từ youtube, sau khi chọn được video có âm thanh, bạn lấy địa chỉ video này trên youtube và paste vào trang web y2mate, rồi chọn mp3 để tải về.
Tự động lập danh sách các file đã lưu
Sau khi đã lưu các file trên, ta sẽ tạo một danh sách bao gồm toàn bộ các file đang có trong thư mục /config/www/chimes này. Danh sách này được tạo tự động và cũng tự cập nhật khi bạn thêm, sửa, xoá các file trong thư mục trên.
Danh sách này được tạo sử dụng platform folder với cấu hình như bên dưới, bạn thêm vào file cấu hình chính của Hass tại /config/configuration.yaml bên dưới phần khai báo sensor.
sensor: - platform: folder folder: /config/www/chimes filter: '*.mp3'
Trong đó:
folder:
đường dẫn đến thư mục bạn muốn tạo danh sách file trong nó (lưu ý là thư mục con bên trong sẽ không được tính)filter:
chỉ tạo danh sách các file có tên (bao gồm cả phần mở rộng như .mp3) thoả mãn một “bộ lọc”, ví dụ:
‘*.mp3’: tất cả các file kết thúc bởi .mp3
‘[morning]*.mp3’: tất cả các file bắt đầu bởi morning và kết thúc bởi .mp3
Sau khi cấu hình, khởi động lại Hass để khởi tạo sensor này. Sensor sẽ được đặt tên tự động theo tên folder, state là tổng dung lượng của folder và các attributes như trong ảnh dưới.
Ta sẽ sử dụng attributes.file_list này ở bước sau.
Phát ngẫu nhiên một file trong danh sách đến Media Player
Bên dưới là cấu hình mẫu của một automation phát ngẫu nhiên một file trong các file trên đến loa Google Home vào lúc 06 giờ sáng mỗi ngày, trừ Chủ nhật. Bạn cần thay đổi entity_id của loa (media_player.google_home), địa chỉ web để truy cập Home Assistant của bạn (hass_url) và tên cảm biến chứa danh sách file (sensor.chimes) cho phù hợp.
- id: '156823816799' alias: morning chimes description: New day chimes trigger: - at: 06:00:00 platform: time condition: - condition: time weekday: - mon - tue - wed - thu - fri - sat action: - data: volume_level: 0.3 entity_id: media_player.google_home service: media_player.volume_set - service: media_player.play_media entity_id: media_player.google_home data_template: entity_id: media_player.google_home media_content_id: >- {% set hass_url = 'https://konnected.vn:38888' %} {%- set files = states.sensor.chimes.attributes.file_list-%} {%- set files = files|replace('/config/www/','')|replace('[','')|replace(']','')%} {%- set files = files.replace('\'','').replace(', ',',') %} {%- set files = files.split(',')-%} {{hass_url}}/local/{{files|random}} media_content_type: music
Trong đó:
- {%- set files = states.sensor.chimes.attributes.file_list-%} tạo biến files với giá trị là danh sách các file trong thư mục /config/www/chimes tạo bởi cảm biến sensor.chimes
- {{hass_url}}/local/{{files|random}} tạo đường dẫn đến file cho đúng với quy cách đã mô tả ở Bước 1.
Sửa lỗi: nếu loa của bạn không phát sau khi kích hoạt automation này (loa Google Home thường chỉ phát ra âm thanh báo kích hoạt loa), hãy kiểm tra xem file đã tạo có truy cập được bình thường hay không bằng cách truy cập đường dẫn file (ví dụ https://domain:port/local/chimes/ocean_waves_30mins.mp3) trên trình duyệt web hoặc phần mềm chơi nhạc/video như VLC Media Player.