Home Assistant

Home Assistant: dự báo và thông báo thời tiết sử dụng Darksky

Darksky Cover

Thông báo thông tin thời tiết hay thông báo khi trời mưa, sử dụng darksky weather

Photo: konnected.vn
19 phút để đọc hết nội dung

Đây là hướng dẫn thêm các cảm biến thông tin thời tiết, sử dụng platform darksky (darksky.net) cho Home Assistant. Darksky là một trang thông tin dự báo thời tiết trên toàn thế giới, tương tự như Yahoo! Weather hay AccuWeather. Darksky có thông tin thời tiết của nhiều tỉnh thành và tương đối chính xác tại Việt Nam. Bài viết này cũng bao gồm một số cấu hình automation mẫu để thông báo trước tình hình thời tiết cho các thành viên trong gia đình khi cần thiết. Bài viết gồm 3 phần:
(xem thêm: các khái niệm trong Hass như Platform hay Integration)

! Cập nhật về Darksky sau ngày 01/04/2020

Hiện tại Darksky đã không còn cho đăng ký tài khoản Nhà phát triển miễn phí nữa. Các tài khoản hiện tại vẫn hoạt động bình thường cho đến hết năm 2021.
Bạn có thể xem xét chuyển sang các platform weather khác bao gồm: mặc định của Home Assistant, Yahoo! Weather, OpenWeatherMap hay AccuWeather.

  1. Thêm các cảm biến thời tiết Darksky vào Hass.
  2. Cấu hình automation tự động thông báo thông tin thời tiết và thông báo khi trời mưa.
  3. Về Darksky weather integration.
! Bạn lưu ý

Sử dụng Platform Darksky yêu cầu máy chủ Hass phải được kết nối vào internet. Điều này không ảnh hưởng đến tính năng điều khiển nội bộ của Hass nhưng có thể cảm biến sẽ hiển thị trạng thái unavailable khi kết nối internet hoặc dịch vụ của Darksky bị gián đoạn.
Darksky là dịch vụ miễn phí. Thông tin thời tiết cung cấp bởi Darksky chỉ mang tính chất tham khảo, không nên sử dụng thông tin này là cơ sở tham chiếu duy nhất cho các tác vụ quan trọng như thông báo thời tiết cực đoan hay tự động đóng hệ thống thông khí (HAVC) khi trời mưa.

Không như platform Weather mặc định của Hass chỉ cung cấp thông tin hiện tại, Darksky cung cấp khả năng lấy thông tin dự báo thời tiết của các giờ kế tiếp hay ngày hôm sau.

B1. Thêm các cảm biến thời tiết Darksky vào Hass

Bước này sẽ cần bạn tạo một tài khoản dev miễn phí tại Darksky. Truy cập https://darksky.net/dev/register để tạo tài khoản. Hiện Darksky không cung cấp ngôn ngữ tiếng Việt, tuy nhiên quá trình đăng ký khá đơn giản, như ảnh sau:

Darksky Dev Account Register

Đăng ký tài khoản với địa chỉ email của bạn. Nhập mật khẩu với ít nhất 8 ký tự và lặp lại mật khẩu lần nữa.

Bấm REGISTER – ĐĂNG KÝ để đăng ký tài khoản

Sau khi đăng ký thành công, bạn sẽ nhận được một email với liên kết xác thực tài khoản. Bấm vào liên kết này để xác nhận tài khoản lần nữa tại trang web Darksky. Sau khi xác nhận thành công, bấm Login và nhập địa chỉ email, mật khẩu đã đăng ký ở trên để Đăng nhập. Sau khi đăng nhập thành công, bạn sẽ được chuyển tới trang cung cấp Secret Key – khoá bí mật (địa chỉ: darksky.net/dev/account), lưu lại Secret key này cho bước sau.

Copy lại Secret Key này để dùng cho bước sau.

Kế tiếp, ta sẽ cấu hình cảm biến – sensor sử dụng platform Darsky nào trong Hass bằng cách thêm nó bên dưới integration sensor như bên dưới. Bạn copy đoạn cấu hình bên dưới, paste nó vào file /config/configuration.yaml bên dưới các sensor khác rồi thay thế các thông số cần thiết theo nhu cầu như giải thích phía dưới.
Ít nhất bạn sẽ cần thay đổi thông tin latitude, longitudeapi_key.

sensor:
  - platform: darksky
    name: Darksky Saigon
    latitude: 10.7794
    longitude: 106.7518
    api_key: '12aa513c52b642e721de8d8306a'
    monitored_conditions:
      - summary
      - icon
      - temperature
      - humidity
      - pressure
      - uv_index
      - wind_speed
      - alerts
    forecast:
      - 0
      - 1
    hourly_forecast:
      - 0
      - 1
      - 2
    units: si
    scan_interval:
      minutes: 5

Giải thích cấu hình ở trên:
+ name: tên cảm biến bạn muốn, như ở đây mình dùng tên Darksky Saigon.
+ latitudelongitude: là vĩ độ và kinh độ tương đối của nơi (thành phố) bạn muốn lấy thông tin dự báo thời tiết. Như ở đây là vĩ độ (10.7794) và kinh độ (106.7518) của Quận 2, TP. Hồ Chí Minh, Việt Nam. Nếu bạn không sử dụng hai dòng này (bằng cách xoá bỏ trong cấu hình ở trên), vị trí mặc định sẽ là vị trí trong cấu hình ban đầu của Hass.
Bạn có thể xem hướng dẫn lấy vị trí của một nơi bằng Google Maps theo chú ý ! phía dưới. Vĩ độ và kinh độ của thành phố Hà Nội là 21.0227 và 105.8019.
+ api_key: copy và paste Darksky Secret key bạn lấy được ở phía trên.
+ monitored_conditions: danh sách các thông tin thời tiết bạn muốn lấy. Bao gồm summary – thông tin dự báo chung, icon – biểu tượng của summary (bạn cần ít nhất 2 thông tin này cho bước sau), temperature – nhiệt độ, humidity – độ ẩm, pressure – áp suất không khí, uv_index – mức độ tia cực tím, wind_speed – tốc độ gió, alerts – báo động nếu có hiện tượng thời tiết cực đoan như bão mạnh, lốc xoáy và một số thông tin khác. (xem thêm)
+ forecast: những ngày nào bạn muốn lấy thông tin, có thể bao gồm nhiều ngày, từ 0 đến 7. Ví dụ, ngày hôm nay sẽ là ngày 0 và ngày mai sẽ là ngày 1. Ở đây chúng ta sẽ lấy thông tin thời tiết hôm nay (0) và dự báo của ngày mai (1).
+ hourly_forecast: lấy thông tin dự báo thời tiết theo giờ. Tương tự như forecast, 0 sẽ là giờ hiện tại và 1 là giờ tiếp theo.
+ unit: đơn vị đo lường, bạn chọn si nếu dùng đơn vị hệ mét (Việt Nam) hay us nếu dùng đơn vị hệ mile.
+ scan_interval: khoảng thời gian giữa hai lần cập nhật cảm biến, tính bằng phút như trong cấu hình trên hoặc dạng scan_interval: ‘HH:HM:SS’. Ở đây ta sẽ lấy thông tin mỗi 5 phút (mặc định là 2 phút).

! Lưu ý về Giới hạn của Darksky và Cách lấy thông tin vị trí

1. Tài khoản Darksky miễn phí giới hạn tối đa 1,000 lần lấy thông tin – api call mỗi ngày. Với mỗi cấu hình như trên sẽ tính là một api call, như vậy nếu bạn lấy thông tin của 2 nơi, với scan_interval mỗi 5 phút, bạn sẽ gọi tổng cộng 2x(24x60/5) = 576 api calls mỗi ngày.

2. Lấy thông tin vị trí từ Google Masp. Truy cập Google Maps bằng trình duyệt web, tìm tên của nơi bạn muốn lấy vị trí, ví dụ Quận 2, Hồ Chí Minh. Sau khi Google chuyển tới đúng vị trí bạn cần, tìm trên thanh địa chỉ trình duyệt đoạn như trên ảnh. Sau kí tự @ là thông tin vĩ độ,kinh độ.

Bây giờ, sau khi đã thêm cấu hình trên và chỉnh sửa theo nhu cầu của bạn. Kiểm tra cấu hình và khởi động lại Hass để kích hoạt platform Darksky trên. Nếu thành công, sau khi khởi động lại sẽ có thêm 8×5=40 cảm biến mới thể hiện mỗi thông tin thời tiết lấy được (tuy nhiên con số có thể thấp hơn do một số thông tin chỉ có ở thời điểm hiện tại như alert). Tất cả sensor entity này đều bắt đầu bằng darksky và tiếp theo là tên thông tin và thời điểm dự báo. Ví dụ sensor có tên sensor.darksky_saigon_summary_0d là thông tin dự báo thời tiết chung cho ngày hiện tại.

Các cảm biến Darksky trong Hass
sensor.darksky_saigon-summary chứa thông tin thời tiết chung ngay tại thời điểm hiện tại

Bạn có thể sử dụng các cảm biến này để hiển thị lên giao diện Hass hoặc sử dụng cho automation.

B2. Tạo automation thông báo dự báo thông tin thời tiết

Thông báo thông tin thời tiết
! Lưu ý về Thông báo giọng nói qua Googe Cast (Google Home)

Để thông báo bằng giọng nói qua integration TTS trên các thiết bị Google Cast như Google Home/Google Home Mini, máy chủ Hass của bạn phải truy cập được từ xa – remote access qua giao thức https với chứng chỉ TLS hợp lệ. Thông thường có nghĩa là bạn có thể truy cập máy chủ Hass từ bên ngoài nhà trên trình duyệt với địa chỉ dạng https://abc.xyz:port. Đây là yêu cầu bắt buộc từ bản thân thiết bị Google Cast.

Ta sẽ sử dụng thông tin từ các cảm biến ở trên để tạo automation thông báo ra loa Google Home (media_player.google_home) thông tin dự báo thời tiết hôm nay vào lúc 07 giờ sáng mỗi ngày. Cấu hình automation mẫu như sau, bạn thay đổi thông tin tuỳ theo nhu cầu của mình.

* 28/04/2020: chuyển entity_id ra khỏi data_template do một số người dùng gặp lỗi. Thay thế các dấu ‘.’ trong chỉ số bằng từ ‘ phẩy ‘ cho ngôn ngữ tự nhiên hơn.

- id: '15829692271221387'
  alias: 'Thong bao thong tin thoi tiet vao 7g sang'
  trigger:
  - platform: time
    at: '07:00:00'
    #lúc 07 giờ sáng
  condition: []
  action:
  #<Bắt đầu thông báo qua loa Google Home
  - service: tts.google_say
    entity_id: media_player.google_home
    #entity đại diện loa Google Home
    data_template:
      message: >-
        {% set icon = {'clear-day':'ngày nắng', 'clear-night':'đêm trong', 'rain':'có mưa', 'wind':'có gió mạnh', 'fog':'có sương mù', 'cloudy':'nhiều mây', 'partly-cloudy-day':'tương đối nhiều mây', 'partly-cloudy-night':'đêm nhiều mây' } %}
        {% set today_condition = icon[states('sensor.darksky_saigon_icon_0d')] %}
        Chào bạn buổi sáng! Sau đây là thông tin dự báo thời tiết: hôm nay {{today_condition}}, độ ẩm tương đối khoảng {{states('sensor.darksky_saigon_humidity_0d')|replace('.',' phẩy ')}} phần trăm và tốc độ gió ở mức {{states('sensor.darksky_saigon_wind_speed_0d')|replace('.',' phẩy ')}} kilomet mỗi giờ. Mức độ tia cực tím hiện tại là {{states('sensor.darksky_saigon_uv_index')}} và dự báo sau 2 giờ tới, nhiệt độ ngoài trời sẽ đạt {{states('sensor.darksky_saigon_temperature_2h')|replace('.',' phẩy ')}} độ C. Chúc bạn một ngày tốt lành!
      language: 'vi'

Giải thích automation trên:

  1. Automation này kích hoạt vào lúc 07:00:00 mỗi sáng.
  2. Ở phần action, ta gọi dịch vụ tts.google_say để thông báo ra loa media_player.google_home, với nội dung thông báo tiếng Việt là thông tin thời tiết trong ngày hôm đó.
    Ở đây ta sử dụng sensor.darksky_saigon_icon_0d để nhận biết tình hình thời tiết dự báo cho ngày hôm đó vì sensor này trả về kết quả ổn định trong khi sensor.darksky_saigon_summary_0d là sensor thể hiện thông tin dự báo thời tiết ở dạng dài (ví dụ: Humid throughout the day.) và hay thay đổi bởi darksky nên sẽ không ổn định khi cố gắng chuyển sang tiếng Việt theo phương pháp mapping sử dụng ở đây. Nếu bạn sử dụng thông báo tiếng Anh, sử dụng sensor.darksky_saigon_summary_0d thay cho sensor.darksky_saigon_icon_0d sẽ cho kết quả tốt hơn.
    Ví dụ, câu tiếng Việt tạo bởi automation trên:
    Chào bạn buổi sáng! Sau đây là thông tin dự báo thời tiết: hôm nay ngày nắng, độ ẩm tương đối khoảng 73.0 phần trăm và tốc độ gió ở mức 14.82 kilomet mỗi giờ. Mức độ tia cực tím hiện tại là 8 và dự báo sau 2 giờ tới, nhiệt độ ngoài trời sẽ đạt 33.5 độ C. Chúc bạn một ngày tốt lành!

    so sánh với câu tiếng Anh:

    Good morning! It’s gonna be Humid throughout the day.. The ambient humidity will be about 73.0 percent while wind blows at 14.82 kilomet per hour. Current UV index is 8. The outdoor temperature will be 33.5 C degree in 2 next hours. Have a nice day!
    tạo bởi cấu hình sau:
- id: '15829692271221388'
  alias: 'Notify weather forecast at every morning'
  trigger:
  - platform: time
    at: '07:00:00'
    #lúc 07 giờ sáng
  condition: []
  action:
  #<Bắt đầu thông báo qua loa Google Home
  - service: tts.google_say
    entity_id: media_player.google_home
    #entity đại diện loa Google Home
    data_template:  
      message: >-
        Good morning! It's gonna be Humid throughout the day.. The ambient humidity will be about {{states('sensor.darksky_saigon_humidity_0d')|replace('.',' point ')}} percent while wind blows at {{states('sensor.darksky_saigon_wind_speed_0d')|replace('.',' point ')}} kilomet per hour. Current UV index is {{states('sensor.darksky_saigon_uv_index')}}. The outdoor temperature will be {{states('sensor.darksky_saigon_temperature_2h')|replace('.',' point ')}} C degree in 2 hours. Have a nice day!
      language: 'en'

Nếu bạn muốn thông báo thời tiết ngày hôm sau vào 20g hôm trước, hãy thay at: '07:00:00'thành at: '20:00:00', các sensor.darksky_saigon_xxx_0d thành sensor.darksky_saigon_xxx_1d và chỉnh sửa thông điệp cho phù hợp.

Thông báo trời mưa

Cấu hình mẫu thông báo trời chuyển sang mưa, chỉ thông báo nếu trong khoảng từ 6 giờ sáng đến 9 giờ tối. Trước khi thông báo, ta sẽ thiết lập mức âm lượng – volume của loa lên mức 0.9 (90%) để thu hút chú ý. Cấu hình mẫu:

- id: '9871231293712937'
  alias: 'Thong bao troi chuyen mua'
  trigger:
    platform: state
    entity_id: sensor.darksky_saigon_icon
    to: 'rain'
  condition:
  - after: '05:59:00'
    before: '21:01:00'
    condition: time
  - condition: template
    value_template: '{{ not is_state(''media_player.google_home'',''playing'') }}'
  action:
  - service: media_player.volume_set
    data:
      entity_id: media_player.google_home
      volume_level: 0.7
  - service: tts.google_say
    data:
      entity_id: media_player.google_home
      message: 'Thông báo: trời bên ngoài đã chuyển sang mưa.'
      language: 'vi'

B3. Về integration Weather Darksky

Home Assistant cũng có một platform cùng tên Darksky dưới integration weather, gọi là weather.darksky. Platform weather.darksky này tương đối thích hợp khi bạn chỉ muốn thêm thông tin dự báo thời tiết vào giao diện. Cấu hình mẫu của platform này như ở dưới, bạn có thể sử dụng cùng thông số như với platform darksky ở bước B1. Nếu sử dụng cả hai platform đồng thời, bạn lưu ý giới hạn api call mỗi ngày. Nếu cần thiết, có thể tạo 2 tài khoản Darksky dev để sử dụng 2 Secret key khác nhau.

weather:
  - platform: darksky
    name: Darksky Saigon
    latitude: 10.7794
    longitude: 106.7518
    api_key: '12aa513c52b642e721de8d8306a'
    units: si
    mode: hourly

Sau khi thêm weather.darksky vào Hass, bạn có thể dùng weather-card để hiện thị thông tin từ platform này lên giao diện lovelace, như bên dưới.

weather card thể hiện thông tin thời tiết từ weather.darksky trên Lovelace

- type: weather-forecast
  entity: weather.darksky_saigon
  name: Dự báo thời tiết Sài Gòn

Hoặc sử dụng custom-weather card ở liên kết sau: custom: weather-card (có sẵn tại HACS)

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