Home Assistant

Home Assistant: ghi và gửi video từ camera

Ghi và gửi video từ camera khi có chuyển động ban đêm

Gửi ngay một clip ngắn đến điện thoại của bạn khi phát hiện thấy chuyển động trong khu vực chỉ định

7 phút để đọc hết nội dung

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

  1. 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..
  2. 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.
  3. 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

  1. 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)
  2. Tạo thư mục snapshots 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)
  3. script ghi và gửi video qua Telegram
  4. shell_command để xóa video đã ghi
  5. automation để ghi và gửi video khi có chuyển động (như một ví dụ)
  6. 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ái on 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.

Lên Đầu
  • Đăng ký
Bạn quên mất mật khẩu? Vui lòng nhập tên đăng nhập và địa chỉ email đã đăng ký. Bạn sẽ nhận được liên kết tạo mật khẩu mới qua email (bạn nhớ kiểm tra hộp spam trong trường hợp email đi lạc).