『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 10218|回复: 47

[技术探讨] 怎么样实现HA每天6点后自动播报当天天气预报,请大佬给...

  [复制链接]

146

主题

2267

帖子

7006

积分

元老级技术达人

积分
7006
金钱
4734
HASS币
30
发表于 2023-1-14 16:12:37 | 显示全部楼层 |阅读模式
本帖最后由 bugensui 于 2023-1-15 16:12 编辑

目前我想实现这样的功能,在每天6点后,当家里任一成员,被人体传感器识别到(当天只触发一次,后面的成员不触发),就触发dlna音响,利于tts功能播报当天天气预报(ha装的是彩云天气),

3个难点,我不知道怎么弄,1,怎么样把每天6点后-24点前设为条件,2,怎么样只触发一次,用什么思路,3,怎么样在彩云天气里提取 当天天气成文字,赋值给 tts服务

请大佬指点



2023/1/15日更新,谢谢大佬(dscao)指点,已经完成了我想要的功能,相关代码思路如下,供新手参考!这个主要是给家里的父母用的,早上起来,就能听到当天的天气播报。

这个是自动化的逻辑代码,大家根据自己情况,修改,下面有代码解读
alias: 入户门检测并语音播报天气预报
description: 人体运动检测每天7点后tts播放天气预报(当天仅一次)
trigger:
  - type: motion
    platform: device
    device_id: 29ed2d4c12de88c9d69fd177cd6a00d1
    entity_id: binary_sensor.lumi_lumi_sensor_motion_aq2_iaszone
    domain: binary_sensor
condition: []
action:
  - if:
      - condition: and
        conditions:
          - condition: time
            after: "07:00:00"
          - condition: state
            entity_id: counter.ttstian_qi_yu_bao_can_shu
            state: "0"
    then:
      - service: script.1673699489033
        data: {}
      - delay:
          hours: 0
          minutes: 0
          seconds: 2
          milliseconds: 0
      - service: counter.increment
        data: {}
        target:
          entity_id: counter.ttstian_qi_yu_bao_can_shu
mode: single
代码解释:
当入户门玄关处人体传感器(我家里客厅灯的开关处放了个aqara绿米人体传感器,我家里早上开灯或者干什么,必须会经过这个区域,大家可以根据自己家里实际情况部署)检测到有人,下面的动作选择如果就,如果达到什么条件,就触发相关动作,如果的条件,我设置了2个,1是时间必须是当天7点后,大家根据自己情况设置,2,我设置了个tts参数,这个参数要等于0,实际上就是辅助元素里的计数器,初始值是0,歩长是1,最好选中当 Home Assistant 启动时,还原为最近一次的值,不然HA重启后,会变0会乱。

这2个条件and都符合,才执行我想要的动作,动作:主要2个,1,执行tts语音播报天气预报的脚本,代码在下面。2,之前的条件TTS触发参数(辅助元素里的计数器)+1或者增加(调用的是counter.increment这个服务,实体选择辅助元素里的那个自己新建的计数器即可),这样当天就不触发这个自动化动作了。


执行tts语音播报天气预报的脚本
alias: 语音播报天气预报
sequence:
  - service: media_player.volume_set
    data:
      volume_level: 0.6
    target:
      entity_id: media_player.can_716928
  - delay:
      hours: 0
      minutes: 0
      seconds: 2
      milliseconds: 0
  - service: tts.edge_tts
    data:
      entity_id: media_player.can_716928
      message: >-
        {{ states("sensor.zzwtime") }}好,现在是北京时间:{{ states("sensor.time")
        }},客厅温度为{{states("sensor.keting_temperature")|round
        }}度、客厅湿度为{{states("sensor.zhi_neng_yao_kong_humidity")|round
        }}%,今天天气{{state_attr("weather.wo_de_jia","forecast_hourly")
        }},{{state_attr("weather.wo_de_jia","forecast_minutely")
        }},室外温度{{states("sensor.wo_de_jia_wen_du")|round }}度。
mode: single
icon: mdi:weather-cloudy
代码简单讲解,这个脚本,就是先设置dlna音响的音量为60%,然后延迟2秒,调用edge的tts服务,用dlna音响播放指定的文字内容(message


message代码解读
 {{ states("sensor.zzwtime") }}好,现在是北京时间:{{ states("sensor.time")
        }},客厅温度为{{states("sensor.keting_temperature")|round
        }}度、客厅湿度为{{states("sensor.zhi_neng_yao_kong_humidity")|round
        }}%,今天天气{{state_attr("weather.wo_de_jia","forecast_hourly")
        }},{{state_attr("weather.wo_de_jia","forecast_minutely")
        }},室外温度{{states("sensor.wo_de_jia_wen_du")|round }}度。
sensor.zzwtime是我自定义的一个传感器函数,代码如下,主要是根据当天时间,转换成是早上中午下午晚上等等这些,sensor.time是系统里内置的一个时间传感器,可以显示当天的时间,不含日期。这2个,需要加在configuration.yaml,代码在下面,sensor.keting_temperature和sensor.zhi_neng_yao_kong_humidity是我自己买的一个温湿度传感器,后面的就是彩云天气的实体里的当天的天气预报,当前的室外温度,我加了round处理,就是让他始终是整数,不是小数
sensor.zzwtime和sensor.time代码
# 自定义Sensor.
  - platform: template
    sensors:
      zzwtime:
        friendly_name:  'zzwtime'
        icon_template: mdi:clock-time-three-outline
        value_template: "{% if now().hour >= 6 and now().hour < 9 %}早上{%- elif now().hour >= 9 and now().hour < 12 %}上午{%- elif now().hour >= 12 and now().hour < 13 %}中午{%- elif now().hour >= 13 and now().hour < 18 %}下午{%- elif now().hour >= 18 and now().hour < 24 %}晚上{% else %}凌晨{% endif %} "
sensor:
# 日期和时间传感器
  - platform: time_date
    display_options:
      - 'time'
      - 'date'
      - 'date_time'
      - 'date_time_utc'
      - 'date_time_iso'
      - 'time_date'
      - 'time_utc'
      - 'beat'


评分

参与人数 3金钱 +25 收起 理由
summ99111 + 5
ciasdmxhxjjpd@c + 10 感谢楼主分享!
firewater + 10 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24331
金钱
22900
HASS币
290
发表于 2023-1-14 16:42:26 | 显示全部楼层
本帖最后由 dscao 于 2023-1-14 16:52 编辑

给你一个参考,修改一下里面的实体ID,不需要的删除就可以了。
有点问题,不创建辅助元素需要两个自动化

第一个:执行后关闭自身自动化,这样只触发一次。
alias: 每天一次TTS天气预报
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.0x000d6ffffe670287_occupancy
    from: "off"
    to: "on"
condition:
  - condition: time
    after: "06:00:00"
action:
  - service: tts.say
    data:
      entity_id: media_player.192_168_8_18
      message: >-
        现在时间:{{ states("sensor.time") }},当前天气{{
        states("weather.gui_chi")}}室内餐厅PM2.5为{{
        states("sensor.zm1_b0f89328f611_pm25") }}、卧室PM2.5为{{
        states("sensor.zm1_b0f89324b2ac_pm25") }},餐厅温度为{{
        states("sensor.zm1_b0f89328f611_temperature") }}度、卧室温度为{{
        states("sensor.zm1_b0f89324b2ac_temperature") }}度。室外PM2.5为{{
        state_attr("weather.gui_chi","pm25") }},室外温度为{{
        states("sensor.fineoffset_wh24_125_t") }}度;室外湿度为百分之{{
        states("sensor.fineoffset_wh24_125_h") }};室外紫外线指数为{{
        states("sensor.fineoffset_wh24_125_uvi") }}级;{{
        state_attr("weather.gui_chi", "forecast_hourly") }}
      language: zh-CN
      cache: false
      options:
        voice: zh-CN-XiaoxiaoNeural
        style: newscast
        volume: +100%
  - service: automation.turn_off
    data: {}
    target:
      entity_id: automation.mei_tian_yi_ci_ttstian_qi_yu_bao
mode: single

第二个:每天0点恢复自动化

alias: 每天0点恢复TTS自动化
description: ""
trigger:
  - platform: time
    at: "00:00:00"
condition: []
action:
  - service: automation.turn_on
    data: {}
    target:
      entity_id: automation.mei_tian_yi_ci_ttstian_qi_yu_bao
mode: single





可以在自动化UI中先创建一个空白的,再以YAML编辑,代码粘贴进去。再改为以UI界面编辑,后面就容易修改了。
0.jpg

模板中 weather.gui_chi 就是彩云天气实体,改成自己的。其它按需修改就好了。

评分

参与人数 1金钱 +5 收起 理由
summ99111 + 5 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

146

主题

2267

帖子

7006

积分

元老级技术达人

积分
7006
金钱
4734
HASS币
30
 楼主| 发表于 2023-1-14 16:46:57 | 显示全部楼层
dscao 发表于 2023-1-14 16:42
给你一个参考,修改一下里面的实体ID,不需要的删除就可以了。

谢谢大佬,这样设置条件,当天是只会触发一次对吧,
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24331
金钱
22900
HASS币
290
发表于 2023-1-14 16:56:12 | 显示全部楼层
bugensui 发表于 2023-1-14 16:46
谢谢大佬,这样设置条件,当天是只会触发一次对吧,

修改了一下,不创建辅助元素的情况下需要两个自动化。合在一起不行,本想合在一起一个会清爽一些。
回复

使用道具 举报

146

主题

2267

帖子

7006

积分

元老级技术达人

积分
7006
金钱
4734
HASS币
30
 楼主| 发表于 2023-1-14 17:08:57 | 显示全部楼层
dscao 发表于 2023-1-14 16:56
修改了一下,不创建辅助元素的情况下需要两个自动化。合在一起不行,本想合在一起一个会清爽一些。 ...

谢谢大佬指点。按照你的代码,思路基本上,我都清楚了。当前天气{{states("weather.wo_de_jia")}},室外温度{{states("sensor.wo_de_jia_wen_du") }}度。但是前者并不能获取当天的天气预报,难道只能一个一个sensor.拼接文本?就是室外温度这个例子,不知道大佬有没有明白我的意思,我是想给家里的老人弄的,他们起来,就触发这个服务。
回复

使用道具 举报

9

主题

179

帖子

1405

积分

金牌会员

Rank: 6Rank: 6

积分
1405
金钱
1226
HASS币
0
发表于 2023-1-14 20:41:59 | 显示全部楼层
留言备用
回复

使用道具 举报

2

主题

132

帖子

951

积分

高级会员

Rank: 4

积分
951
金钱
819
HASS币
0
发表于 2023-1-14 22:20:30 | 显示全部楼层
留言备用啊,好东西
回复

使用道具 举报

17

主题

253

帖子

1829

积分

金牌会员

Rank: 6Rank: 6

积分
1829
金钱
1576
HASS币
0
发表于 2023-1-15 11:06:02 | 显示全部楼层
本帖最后由 lqf1206 于 2023-1-15 11:15 编辑

tts.png     xiaoai tts.png

NODE-RED控制 小爱同学 ,请参考:
tts1.png
回复

使用道具 举报

146

主题

2267

帖子

7006

积分

元老级技术达人

积分
7006
金钱
4734
HASS币
30
 楼主| 发表于 2023-1-15 11:25:12 | 显示全部楼层
好的,谢谢
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24331
金钱
22900
HASS币
290
发表于 2023-1-15 15:21:42 | 显示全部楼层
本帖最后由 dscao 于 2023-1-15 15:24 编辑
bugensui 发表于 2023-1-14 17:08
谢谢大佬指点。按照你的代码,思路基本上,我都清楚了。当前天气{{states("weather.wo_de_jia")}},室外 ...

state_attr("weather.gui_chi", "forecast_hourly") }}
最后就是天气预报中的小时预报信息。其它信息同样的格式就可以了。
比如上面那段tts,今天我实际播报的就是以下内容:

中雪转小雪,今天中午12点钟后转多云

Executed: 2023年1月15日 09:30:00
Result:
params:
  domain: tts
  service: say
  service_data:
    entity_id: media_player.192_168_8_18
    message: >-
      现在时间:09:30,室内餐厅PM2.5为39、卧室PM2.5为9,餐厅温度为12.6度、卧室温度为22.4度。室外PM2.5为7,室外温度为-1.5度;室外湿度为百分之87.0;室外紫外线指数为0级;中雪转小雪,今天中午12点钟后转多云
    language: zh-CN
    cache: false
    options:
      voice: zh-CN-XiaoxiaoNeural
      style: newscast
      volume: +100%
  target: {}
running_script: false
limit: 10


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 04:58 , Processed in 0.328511 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表