本帖最后由 zmg 于 2021-3-30 14:18 编辑
每年到了春暖花开,万物复苏的大好时节,对于花粉症患者(包括我本人)来说,意味着一年一度难受的日子又到来了。
花粉过敏没有特效药可治,唯有出门前做好个人防护最重要。于是我给家里的HA增加了过敏指数显示,随时了解当前的过敏指数,如果指数较高,还可通过TTS在出门前主动提醒。
过敏指数
又叫过敏风险指数,英文Allergy Risk Index,缩写ARI,是考虑气象因素并结合环境要素对人体的影响,从天气角度出发为广大公众提供是否易发生过敏的服务提示。
该指数等级划分为五级,级数越高,表示的气象条件,引发过敏的可能性越大。
- 1级 极不易发
- 2级 不易发
- 3级 较易发
- 4级 易发
- 5级 极易发
数据来源
数据源来自和风天气,需要注册一个免费用户并获取个人api key。过敏指数属于天气生活指数之一,接口文档在这里:https://dev.qweather.com/docs/api/indices/
调用格式:https://devapi.qweather.com/v7/indices/1d?location=经度,纬度&key=api_key&type=7
举例,获取北京市当前的全部生活指数,可以用浏览器访问如下地址:
https://devapi.qweather.com/v7/indices/1d?location=116.41,39.92&key=xxxxxxxxxxxxxx&type=0
如果只想读取过敏风险指数,把链接中的type=0改成type=7即可。
返回的数据是这样的:
{"code":"200","updateTime":"2021-03-30T10:36+08:00","fxLink":"http://hfx.link/1tjo2","daily":[{"date":"2021-03-30","type":"7","name":"过敏指数","level":"4","category":"易发","text":"天气条件易诱发过敏,易过敏人群应减少外出,外出宜穿长衣长裤并佩戴好眼镜和口罩,外出归来时及时清洁手和口鼻。"}],"refer":{"sources":["Weather China"],"license":["no commercial use"]}}
格式化一下,看起来就清晰了。
HA获取当前过敏指数
下面要做的,就是用HA中的rest组件,每隔一段时间去访问一次上述链接,获得返回数据并解析后,把需要的数值赋给自定义sensor即可。
sensor:
- platform: rest
name: ari # Allergy Risk Index
resource: https://devapi.qweather.com/v7/indices/1d?location=116.41,39.92&key=xxxxxxxxxxxxxxxx&type=7
value_template: '{{ value_json["daily"][0]["level"].title() }}'
scan_interval: 3600 #一小时更新一次
json_attributes:
- daily
可以顺便再定义几个template sensor,TTS用起来方便。
- platform: template
sensors:
ari_index:
icon_template: 'mdi:face-mask'
friendly_name: 过敏指数
value_template: '{{ states.sensor.ari.attributes.daily[0]["level"] }}'
ari_category:
friendly_name: 过敏风险
value_template: '{{ states.sensor.ari.attributes.daily[0]["category"] }}'
ari_text:
friendly_name: 过敏风险详情
value_template: '{{ states.sensor.ari.attributes.daily[0]["text"] }}'
前端显示
为了节省显示空间,我把过敏指数ari和空气质量指数aqi在一张卡片中显示,反正都是和空气质量相关的数据。这要用到HACS里面的Dual gauge card,在HACS的Frontend标签中搜索安装即可。然后定义卡片(外圈是aqi,内圈是ari):
type: 'custom:dual-gauge-card'
title: air
min: 1
max: 300
shadeInner: true
outer:
entity: sensor.aqi
label: AQI
colors:
- color: var(--label-badge-green)
value: 1
- color: var(--label-badge-yellow)
value: 100
- color: var(--label-badge-red)
value: 200
- color: var(--label-badge-black)
value: 300
inner:
entity: sensor.ari
label: ARI
min: 1
max: 5
colors:
- color: var(--label-badge-green)
value: 1
- color: var(--label-badge-yellow)
value: 3
- color: var(--label-badge-red)
value: 5
显示效果:
点击卡片中的ARI,会显示出详情:
今天天气还算不错,前两天沙尘暴的时候,看上去特别吓人。
TTS就简单了,ari_category、ari_text两个sensor内容都是文字信息,TTS可直接使用,此处略过。
|