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

 找回密码
 立即注册
楼主: relliky

[修仙教程] 【设备多怎么办】以房间为单位写易维护的配置代码

  [复制链接]

0

主题

28

帖子

135

积分

注册会员

Rank: 2

积分
135
金钱
107
HASS币
0
发表于 2023-7-4 23:29:06 | 显示全部楼层
先看看,感觉自己搞不懂
回复

使用道具 举报

0

主题

39

帖子

174

积分

注册会员

Rank: 2

积分
174
金钱
135
HASS币
0
发表于 2023-7-12 17:33:28 | 显示全部楼层
楼主厉害!
回复

使用道具 举报

29

主题

922

帖子

4166

积分

论坛元老

Rank: 8Rank: 8

积分
4166
金钱
3234
HASS币
70
 楼主| 发表于 2023-7-13 00:02:57 | 显示全部楼层
菜鸟-LC 发表于 2023-5-6 11:53
学习了,慢慢研究下大佬写的东西

哈哈,有哪个地方不懂的可以问我
我家全屋智能的HA设置 https://github.com/relliky/Tais_Home_Assistant_Config
回复

使用道具 举报

29

主题

922

帖子

4166

积分

论坛元老

Rank: 8Rank: 8

积分
4166
金钱
3234
HASS币
70
 楼主| 发表于 2023-7-13 00:05:39 | 显示全部楼层
yinhan 发表于 2023-6-27 09:31
nbnb,用python来控制才是写代码的最终归宿

哈哈哈,其实啥语言都可以。如果官方哪天能出个官方蓝图的功能就更好了
我家全屋智能的HA设置 https://github.com/relliky/Tais_Home_Assistant_Config
回复

使用道具 举报

0

主题

30

帖子

134

积分

注册会员

Rank: 2

积分
134
金钱
104
HASS币
0
QQ
发表于 2023-9-14 08:57:57 | 显示全部楼层
感谢大佬分享。
回复

使用道具 举报

0

主题

16

帖子

310

积分

中级会员

Rank: 3Rank: 3

积分
310
金钱
294
HASS币
0
发表于 2023-9-21 16:52:53 | 显示全部楼层
大佬学习下,我也想像大佬一样秀。
另外昨天在帖子里看见大佬推荐使用pyscript来编写自动化,所以我也开始琢磨这个东西。
有个问题,大佬些的状态机代码room_occupancy_state_machine生成service,我该怎么去调用呢。
回复

使用道具 举报

29

主题

922

帖子

4166

积分

论坛元老

Rank: 8Rank: 8

积分
4166
金钱
3234
HASS币
70
 楼主| 发表于 2023-9-21 21:44:09 | 显示全部楼层
本帖最后由 relliky 于 2023-9-21 21:55 编辑
叫我刘哥就好了 发表于 2023-9-21 16:52
大佬学习下,我也想像大佬一样秀。
另外昨天在帖子里看见大佬推荐使用pyscript来编写自动化,所以我也开始 ...

这是我几个调用的例子

  - service: pyscript.room_occupancy_state_machine
    data:
      occupancy_entity_str: input_select.guest_room_occupancy
      motion_str: group.guest_room_motion_group
      motion_on_ratio_for_x_min_str: sensor.guest_room_motion_on_ratio_for_last_4_minutes
      motion_on_ratio_for_2x_min_str: sensor.guest_room_motion_on_ratio_for_last_8_minutes
      room_type: bedroom


        - service: pyscript.turn_rgb_light
          data:
            light_list:
            - light.guest_room_lamp
            - light.guest_room_ceiling_light


我个人只推荐很复杂的自动化用pyscript (主要是用来替代jinja而不是yaml),毕竟HA自带的图形化的trace记录对yaml查错非常友好,比pyscript查错还是要好很多倍的。但是复杂的自动化难以用yaml来完成,像这个room_occupancy_state_machine写yaml就很累的,还需要很多jinja。



然后我这个1楼的帖子是另外一个意思,用一个模板语言生成yaml,我这里拿python当一个模板语言,写起yaml来尽量好维护一点,主要是想在多个房间内尽量去复用代码。




我家全屋智能的HA设置 https://github.com/relliky/Tais_Home_Assistant_Config
回复

使用道具 举报

0

主题

16

帖子

310

积分

中级会员

Rank: 3Rank: 3

积分
310
金钱
294
HASS币
0
发表于 2023-9-21 23:03:31 | 显示全部楼层
本帖最后由 叫我刘哥就好了 于 2023-9-21 23:06 编辑
relliky 发表于 2023-9-21 21:44
这是我几个调用的例子

大佬说的很对,确实自动化就是应该用来简便操作的。所有自动化都走pyscript的话确实有些南辕北辙了。这是写在哪些个配置文件里的,看格式应该是yaml。

我是这样使用的

@time_trigger("period(0:00, 5 sec)")
@state_active("pyscript.ok1 == '1'")
def every_5_seconds():
    pyscript.room_occupancy_state_machine(occupancy_entity_str = "input_select.occupy",
                                          motion_str = "binary_sensor.f4b3b19d3b8f_motion",
                                          motion_on_ratio_for_x_min_str = "input_number.number1",
                                          motion_on_ratio_for_2x_min_str = "input_number.number2",
                                          room_type = "study room")

这是我在jupyter里面的代码,然后再监听这个变量的变化
from homeassistant.const import EVENT_STATE_CHANGED

@event_trigger(EVENT_STATE_CHANGED, "entity_id == 'input_select.occupy'") 
def monitor_state_change(entity_id=None, new_state=None, old_state=None):
    old_value = old_state.state if old_state else None
    log.info(f"entity {entity_id} changed from {old_value} to {new_state.state} and attributes are now {new_state.attributes}")
    if old_state.state == "Outside" and new_state.state == "Just Entered":
        switch.studyroom_switch_2.turn_on()
    elif old_state.state == "Just Entered" and new_state.state == "Outside":
        switch.studyroom_switch_2.turn_off()
        


另外请问那两个数字参数代表着什么?
此外我对大佬的 无线开关递归控制灯的代码很有兴趣,请问哪里可以看的到呢?
回复

使用道具 举报

29

主题

922

帖子

4166

积分

论坛元老

Rank: 8Rank: 8

积分
4166
金钱
3234
HASS币
70
 楼主| 发表于 2023-9-22 02:33:28 | 显示全部楼层
本帖最后由 relliky 于 2023-9-22 02:56 编辑
叫我刘哥就好了 发表于 2023-9-21 23:03
大佬说的很对,确实自动化就是应该用来简便操作的。所有自动化都走pyscript的话确实有些南辕北辙了。这是 ...

我个人觉得像你这样用pyscript写自动化也挺灵活的。可能唯一能挑点刺的地方就是日志查找起来比较麻烦了。如果你用ha自带的自动化,图形界面有很多关于那一次自动化执行的数据,很容易查错,像这样:

Screenshot 2023-09-21 at 19.32.02.png

但pyscript的自动化的话,只能自己写log.info 然后放自己想要的数据进去,而且全部都会被集中在系统日志中,自己必须从日志中grep出你想要的信息。

如果你只用pyscript作为一个service,至少它的输入和输出都能在ha的图形自动化里面看到。这样把输入复制到jupiter里就可以很方便查错了。
-------------------------------------------
关于motion_on_ratio_for_x_min_str, motion_on_ratio_for_2x_min_str是我用的两个统计传感器,帮助了解在4分钟和8分钟以内,多长时间人在动。传感器代码在这里
https://github.com/relliky/Tais_ ... ter_room.yaml#L2858
我调用pyscript的自动化在这里https://github.com/relliky/Tais_ ... ter_room.yaml#L2726

关于无线开关的python模板代码在这里:这个是无线开关去set一个input_select (状态机的切换)
https://github.com/relliky/Tais_ ... onfig_yaml.py#L2034
这个是根据input_select去跑不同的场景 (状态机的执行)
https://github.com/relliky/Tais_ ... onfig_yaml.py#L2071


具体生成的yaml代码有点繁琐,在这里:
https://github.com/relliky/Tais_ ... ter_room.yaml#L1068
https://github.com/relliky/Tais_Home_Assistant_Config/blob/239b703b13e7c9658b7a9e9f244d0b8fcb00dba1/packages/_auto_generated_packages/auto_gen_master_room.yaml#L1140

我家全屋智能的HA设置 https://github.com/relliky/Tais_Home_Assistant_Config
回复

使用道具 举报

0

主题

16

帖子

310

积分

中级会员

Rank: 3Rank: 3

积分
310
金钱
294
HASS币
0
发表于 2023-9-22 09:05:41 | 显示全部楼层
本帖最后由 叫我刘哥就好了 于 2023-9-22 09:34 编辑
relliky 发表于 2023-9-22 02:33
我个人觉得像你这样用pyscript写自动化也挺灵活的。可能唯一能挑点刺的地方就是日志查找起来比较麻烦了。 ...

懂了 现在看懂大佬的配置结构了
确实用pyscript调试起来比较麻烦
这个传感器group( master_room_motion_group) 是指整个主卧里的传感器吗我在配置文件里找不到对应的定义代码

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-29 02:00 , Processed in 0.059456 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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