Home Assistant

Home Assistant: thông báo tin tức mới từ nguồn RSS

RSS Cover

Tự động lấy tin tức hay cập nhật mới từ web thông qua RSS rồi gửi thông báo hoặc hiển thị lên Lovelace

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

Ta sẽ dùng Home Assistant để lấy tin tức từ các nguồn tin hỗ trợ chuẩn RSS. RSS – really simple syndication là một chuẩn định dạng dựa trên XML, thường được sử dụng trên các website nhằm mục đích cung cấp các bản cập nhật nhanh thông tin cho người dùng. RSS giúp người dùng nắm bắt các tin tức mới qua việc tóm tắt thông tin và loại bỏ hầu hết các nội dung đa phương tiện – media hay bố cục và các đoạn mã giúp hiển thị trang web.

Bạn có thể tìm thấy RSS trên hầu hết các trang web tin tức lớn. Bản thân konnected.vn cũng cung cấp nguồn RSS tại liên kết https://konnected.vn/feed cho toàn trang hoặc https://konnected.vn/home-assistant/feed cho riêng chuyên mục Home Assistant.

Một số dịch vụ tổng hợp tin lớn từ RSS bao gồm Google Feedburner, Feedly.

Để thêm tính năng đọc RSS cho Hass, bạn có thể thử mấy cách sau:

  1. Sử dụng integration Feedreader nếu muốn thông báo ngay khi có tin mới từ các nguồn rss khai báo trước. Nếu muốn hiển thị các tin này lên giao diện Lovelace, bạn sẽ phải thêm một số entity trung gian để hiển thị.
  2. Sử dụng custom_component Feed Parser, với cách này thì không tạo được automation thông báo khi có tin mới nhưng sẽ dễ dàng hiển thị lên giao diện Lovelace.
  3. Nhúng một trang web chuyên tổng hợp và đọc tin RSS vào giao diện Lovelace (iframe). Lúc này Hass chỉ làm nhiệm vụ nhúng trang này vào giao diện, xử lý và hiển thị đều do thiết bị (web browser/app trên đt, máy tính) của bạn thực hiện.

Cấu hình Feedreader và thông báo tin tức mới

Cấu hình Feedreader

Cấu hình mẫu của integration Feedreader như bên dưới. Bạn chỉ cần thêm vào file chứa cấu hình chung của Hass tại /config/configuration.yaml. Lưu ý, đây là một integration ngang hàng với các integration khác như automation hay sensor.

feedreader:
  urls:
  - 'https://konnected.vn/feed/rss'
  - 'https://vnexpress.net/rss/kinh-doanh.rss'
  scan_interval:
    minutes: 10
  max_entries: 5

Ở đây ta sẽ thêm vào 2 nguồn 2 RSS từ konnected.vn và vnexpress.net. Bạn thay đổi lại theo ý mình. Lưu ý là chỉ nên thêm các nguồn mà mình quan tâm theo dõi để tránh bị “lụt” notification tạo ở bước dưới. Giải thích:
scan_interval: khoảng thời gian giữa 2 lần Hass “quét” để tìm tin mới.
max_entries: số lượng tin mới tối đa mỗi lần “quét”, nếu số lượng vượt quá max_entries, chỉ các tin trên cùng được lấy.

Lưu ý là integration này không tạo ra các entity hay service. Feedreader chỉ quét định kỳ và tạo – fire các event có event_type là feed_reader. Ta sẽ tạo một automation để tự động thông báo tiêu đề và liên kết đến bài tương ứng mỗi khi có tin bài mới từ nguồn RSS từ event này. Thông báo này có tiêu đề là thời gian tìm thấy tin và nội dung dạng tiêu đề tin: liên kết.

Automation thông báo tin mới

Ở đây ta gửi thông báo đến Telegram, tuy nhiên bạn cũng có thể gọi các dịch vụ khác như thông báo qua loa Google Home hay gán giá trị cho một input_text hoặc sensor để hiển thị lên giao diện Lovelace.

! Lưu ý về thông báo bằng giọng nói

Để thông báo bằng giọng nói, bạn có thể cần giảm số lượng tin sẽ lấy ở mục max_entries xuống vì khi có nhiều hơn 1 tin mới, automation bên dưới sẽ gọi liên tục 2 dịch vụ thông báo ra loa, dẫn đến loa sẽ chỉ kịp phát thông báo sau cùng. Để thông báo giọng nói ổn định, bạn nên sử dụng cách 2.

- id: '131242142131'
  alias: 'RSS Notify to KonnectED Telegram'
  description: 'Gửi thông báo khi có tin mới từ RSS KonnectED và Vnexpress'
  trigger:
    platform: event
    event_type: feedreader
  action:
    service: notify.konnected_telegram
    data_template:
      title: "Tin mới - {{ now().strftime('%H:%M %d/%m') }}"
      message: "{{ trigger.event.data.title }}: {{ trigger.event.data.link }}"

Bên phải là cấu trúc của một RSS item, các thông tin trong thẻ – tag < > sẽ được đưa vào event bởi feed_reader. Bạn có thể trích xuất các thông tin bên trong bằng template dạng {{ trigger.event.data.<tag> }} như trong ví dụ trên.

Ta sẽ nhận được thông báo kiểu như bên trên Telegram. Bạn có thể thêm các điều kiện kiểm tra thời gian để giới hạn thời gian thông báo, như chỉ từ sau 06g sáng đến 21g đêm.

Sử dụng custom component Feed Parser để lấy tin và hiển thị lên Lovelace

Cài đặt Feed Parser

Bạn có thể cài đặt custom component FeedParser sử dụng HACS hoặc tải về và cài đặt thủ công từ github repository của tác giả iantrich.

Để hiển thị tin tức lấy từ FeedParser, bạn có thể sử dụng luôn custom card List card của cùng tác giả.

Cài đặt List card qua HACS bằng cách thêm github repo vào danh sách custom của HACS như trong ảnh rồi tìm và cài đặt từ mục PLUGINShoặc tải về và cài đặt thủ công tại địa chỉ: https://github.com/iantrich/list-card

Thêm Feed Parser vào Home Assistant

Sau khi cài đặt custom_component trên, bạn cần khởi động lại Home Assistant rồi thêm cấu hình sau vào file cấu hình chính của Home Assistant tại /config/configuration.yaml.

sensor:
  - platform: feedparser
    name: News from KonnectED RSS
    feed_url: 'https://konnected.vn/home-assistant/feed'
    show_topn: 5
    date_format: '%a, %b %d %I:%M %p'
    inclusions:
    - title
    - link
    - description
    - image
    - pubDate
    exclusions:
    - language

Bạn thay đổi các lựa chọn cho phù hợp:
name: tên cảm biến RSS, có thể đặt tương ứng với feed_url để dễ quản lý.
feed_url: địa chỉ RSS cần lấy tin, để thêm nhiều địa chỉ, bạn cần tạo các bộ cấu hình riêng.
show_topn: số lượng tin mới nhất sẽ lấy.
date_format: hình thức thể hiện ngày tháng, tương đương với hàm strftime() được mô tả tại đây.
inclusions: các thông tin sẽ được lấy vào cảm biến, bao gồm danh sách các thẻ của RSS item như trên cách 1.
exclusions: các thông tin sẽ bị loại bỏ khỏi cảm biến.

Khởi động lại Hass lần nữa để cảm biến được tạo.

Thêm mục tin tức vào giao diện Lovelace

Sau đó, bạn có thể vào giao diện Lovelace của Home Assistant, thêm một card Manual mới và thay thế nội dung của card bằng cấu hình sau để hiển thị các tin lấy bởi cảm biến RSS FeedParser. Bạn nhớ thay tên cảm biến cho phù hợp.

type: 'custom:list-card'
title: News from KonnectED.vn
entity: sensor.news_from_konnected_rss
row_limit: 5
feed_attribute: entries
columns:
  - title: ''
    type: image
    add_link: link
    field: image
  - field: title
    style:
      - white-space: nowrap
    title: Tiêu đề
  - field: title
    title: Nội dung

Giải thích một số tuỳ chọn của cấu hình trên:
row_limit: số dòng tối đa hiển thị. Mỗi dòng này sẽ gồm 3 ô như mục columns.
columns: danh sách các cột hiển thị nội dung. Nội dung bên trong mỗi cột là một thẻ – tag lấy từ thuộc tính attributes.entries của sensor.

Kết quả ta được một card như bên phải

Automation mẫu thông báo lần lượt từng tin qua Google Home và dịch vụ Google TTS

Automation dưới đây sẽ bắt đầu đọc qua tất cả các tin được lấy về bởi sensor trên vào lúc 07g sáng đến loa media_player.livroom_google_home.
Bạn chỉnh sửa lại cho phù hợp.
* lưu ý, thay đổi data_template tuỳ vào cấu hình service của bạn, ở ví dụ này, chúng tôi sử dụng service từ TTS platform Google Translate

- id: '1586359105454'
  alias: Doc Tin Tuc Buoi Sang
  description: Đọc 10 tin ngắn buổi sáng qua loa Google
  trigger:
  - at: 07:00:00
    platform: time
  condition: []
  action:
  - entity_id: media_player.livroom_google_home
    data_template:
      language: 'vi'
      message: >
        Sau đây là 10 tin nhanh buổi sáng:
        {%- for entry in states.sensor.news_from_konnected_rss.attributes.entries -%}
        Tin{%- if loop.first %} thứ nhất: {% elif loop.last %} cuối: {% else %} {{loop.index}}: {% endif -%}
        {{ state_attr('sensor.news_from_konnected_rss','entries')[loop.index0].title }}.
        
        {% endfor -%}
    service: tts.google_translate_say

Về Bài viết

Bài viết chưa đầy đủ hoặc bạn còn có ý kiến khác? Bạn có thắc mắc và cần thêm thông tin. Vui lòng đăng ý kiến vào mục bình luận để tác giả và Team có thêm thông tin cải thiện chất lượng bài viết. Chúng tôi sẽ giải đáp các thắc mắc ngay trong mục bình luận để giúp được nhiều đọc giả với cùng vấn đề hơn hoặc chúng tôi sẽ trả lời trong một bài viết riêng. Trân trọng cảm ơn bạn!

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).