Với bài viết này, KonnectED hi vọng bạn sẽ:
- Tăng cường an ninh SmartHome của mình
- Làm quen với script trong Hass
- Phối hợp các thiết bị và thực thể trong Hass với nhau thành một chuỗi hành động có mục đích
- Ứng dụng vào nhiều mục đích hữu ích và thú vị hơn
Cập nhật (14/02/2021) – Thay đổi cách đặt tên file trong script để không phụ thuộc vào các cảm biến thời gian nữa.
Mục đích
Hướng dẫn trong bài viết này nhằm mục đích ghi lại một đoạn clip ngắn từ camera
trong Hass khi một sự kiện xảy ra, ví dụ như cảm biến chuyển động phát hiện chuyển động trong thời gian muộn buổi tối, gửi đoạn clip này đến một số người dùng nhất định qua dịch vụ nhắn tin Telegram.
Nó cũng bao gồm việc xóa định kỳ các đoạn video đã ghi lại (lúc này đã được gửi đi) để giải phóng bộ nhớ (thường là thẻ nhớ) cho Home Assistant.
Các thiết bị và dịch vụ cần thiết
- Camera (tất nhiên) đã được liên kết thành công vào Hass (thực thể:
camera.abc_
) qua các tích hợp hoặc onvif, ffmpeg v.v.. - Cảm biến chuyển động (không bắt buộc), nếu Camera của bạn có cảm biến này và liên kết được vào Hass, bạn có thể sử dụng luôn.
- Dịch vụ Telegram được cài đặt trên điện thoại người dùng và liên kết thành công vào Hass.
Các bước thực hiện
- Liên kết Camera và Telegram cũng như cảm biến chuyển động vào Home Assistant (không nằm trong nội dung bài viết này)
- Tạo thư mục
snapshot
s bên trong/config/www/
để lưu các video này (xem thêm cách sử dụng samba trong cài đặt cơ bản cho Home Assistant nếu bạn chưa biết cách tạo) script
ghi và gửi video qua Telegramshell_command
để xóa video đã ghiautomation
để ghi và gửi video khi có chuyển động (như một ví dụ)automation
xóa định kỳ các video đã ghi
script
dùng ghi video và gửi qua Telegram
Nội dung script như bên dưới, bạn copy/paste vào file configuration.yaml
hoặc file cấu hình khác tùy theo cách quản lý của mình.
script: record_camera_then_send: alias: Ghi lại video rồi gửi qua Telegram variables: camera: camera.garden_camera duration: 10 fields: camera: description: 'entity_id của camera sẽ được ghi' example: camera.garden_camera duration: description: 'độ dài video, mặc định 10s' example: 5 sequence: - alias: 'biến chứa tên file, file nằm trong thư mục /config/www/snapshots/' variables: filename: /config/www/snapshots/{{camera}}_{{now().strftime('%b%d_%H%M')}}_{{range(10,99)|random}}.mp4 - alias: 'ghi lại video' service: camera.record data: entity_id: '{{camera}}' filename: '{{filename}}' duration: '{{duration}}' - alias: 'chờ 30s sau khi kết thúc ghi để cho video ghi xong' delay: seconds: '{{duration|int + 30}}' - alias: 'gửi video đến tài khoản telegram mặc định' service: telegram_bot.send_video data: file: '{{filename}}' caption: '{{camera}} at {{states.sensor.time.state}}' parse_mode: html mode: parallel icon: mdi:motion
Bạn gần như không cần thay đổi gì ở script
trên ngoại trừ giá trị 30
ở phần '{{duration|int + 30}}'
. 30 là số giây chắc chắn ghi xong video, do cấu hình máy chủ Hass và camera của mỗi người, bạn gia giảm tùy nhu cầu của mình.
Nếu muốn thay đổi cấu hình trên, bạn đọc chú thích từng bước trong các mục alias
.
shell_command
để xóa toàn bộ video trong thư mục snapshots
Bên dưới là cấu hình shell_command
để xóa tất cả các file video (.mp4
) trong thư mục /config/www/snapshots
.
shell_command: remove_all_video_records: 'rm -f /config/www/snapshots/*.mp4'
automation
để ghi và gửi video khi có chuyển động
Bạn đọc ghi chú trong phần alias
: của mã yaml
bên dưới. Do tương đối phức tạp nên gần như không thể tạo automation này bằng giao diện đồ họa – UI.
automation: - id: '6670903672729' alias: Switch Garden Lamp On and send Video when motion detected description: Bật đèn sân và gửi video khi có chuyển động vào đêm khuya trigger: - platform: state entity_id: binary_sensor.garden_occupancy from: 'off' to: 'on' - platform: state entity_id: binary_sensor.garden_occupancy from: 'on' to: 'off' for: 00:03:00 condition: - condition: time after: '22:00:00' before: 05:00:00 action: - choose: - alias: 'cảm biến phát hiện chuyển động' conditions: - condition: template value_template: '{{ trigger.to_state.state == ''on'' }}' sequence: - alias: 'gọi script ghi video với entity_id của camera, ghi 5s' service: script.turn_on data: variables: camera: camera.garden_camera duration: 5 entity_id: script.record_camera_then_send - alias: 'bật đèn sân vườn' service: switch.turn_on data: {} entity_id: switch.garden_lamp - alias: 'chờ 10s' delay: 00:00:10 - alias: 'tiếp tục ghi và gửi video thứ 2 có độ dài 10s' service: script.turn_on data: variables: camera: camera.garden_camera duration: 10 entity_id: script.record_camera_then_send - alias: 'ngừng phát hiện chuyển động' conditions: - condition: template value_template: '{{ trigger.to_state.state == ''off'' }}' sequence: - alias: 'tắt đèn sân vườn' service: switch.turn_off data: {} entity_id: switch.garden_lamp default: []
Lưu ý:
binary_sensor.garden_occupancy
là cảm biến chuyển động có trạng tháion
khi phát hiện.automation
chỉ thực hiện khi phát hiện chuyển động trong khoảng thời gian từ'22:00:00'
đến'05:00:00'
.- Sẽ có 2 video với độ dài tương ứng 5s và 10s được gửi đi, một video trước khi bật đèn và một video sau khi đèn được bật.
- 3 phút sau khi ngừng phát hiện chuyển động, đèn sẽ được tắt.
automation
xóa định kỳ các video đã ghi
automation
mẫu bên dưới sẽ định kỳ xóa toàn bộ file video (.mp4
) trong thư mục /config/www/snapshots/
vào '20:04:00'
mỗi Chủ Nhật để tránh đầy bộ nhớ.
automation: - id: '1611462583693' alias: 'Hass Clear Video Snaphots' description: Dọn dẹp thư mục chứa camera snapshot mỗi tuần trigger: - platform: time at: '20:04:00' condition: - condition: time weekday: - sun action: - alias: 'gọi shell_command đã tạo' service: shell_command.remove_all_video_records data: {} mode: single
Kết
Với Home Assistant, bạn có thể làm rất nhiều việc. Hi vọng bạn sẽ cùng chúng tôi chia sẻ những ứng dụng tự mình làm – #diy hoặc tinh chỉnh đến cho mọi người.
Cảm ơn bạn đã theo dõi bài viết!
Cảm ơn bạn đã xem bài viết này!
konnectED Team.