请选择 进入手机版 | 继续访问电脑版

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

 找回密码
 立即注册
查看: 3542|回复: 17

HASSMART智能窗帘电机的问题

[复制链接]

15

主题

125

帖子

963

积分

高级会员

Rank: 4

积分
963
金钱
838
HASS币
0
发表于 2021-2-14 13:21:58 | 显示全部楼层 |阅读模式
本帖最后由 roc634 于 2021-2-14 13:36 编辑

论坛定制版的HASSMART智能窗帘电机用了几年,以前在HA里只能看一个实体,后来窗帘的固件升级后就看到两个。这两个实体时不时会出现状态不一致的情况(见下图),但是我又需要同时用到这两个实体。 2020-10-21 21-50-7.png
之所以要同时用到两个实体,是因为cover.hassmart_192_168_2_76的状态有四个,分别是open, closed, opening, closing,而cover.hassmart_65cc2f就只有open和closed两个。而我为了将窗帘的状态条放到卡片中(见下图)
2021-2-14 13-9-26.jpg
,并实现手动拖动来开关,就需要用到上面的四个状态,在状态为open或者closed的时候开始拖动来触发,而在状态为opening或者closing的时候将行程反馈回状态条进度。代码如下:

- alias: living_win_curtain_manual #厅窗帘位置手动拉状态条
  hide_entity: false
  initial_state: on
  trigger: 
    platform: state
    entity_id: input_number.living_win_curtain_position
  condition:
    condition: template
    value_template: "{{ states('cover.hassmart_192_168_2_76') == 'open' or states('cover.hassmart_192_168_2_76') == 'closed' }}"
  action: 
    - service: cover.set_cover_position
      data_template:
        entity_id: cover.hassmart_65cc2f
        position: "{{ states('input_number.living_win_curtain_position')|int }}" 
- alias: living_win_curtain_update #厅窗帘位置反馈回状态条
  hide_entity: false
  initial_state: on
  trigger: 
    - platform: state
      entity_id: cover.hassmart_65cc2f
    - platform: homeassistant
      event: start
  action: 
    - service: input_number.set_value
      data_template:
        entity_id: input_number.living_win_curtain_position
        value: '{{ states.cover.hassmart_65cc2f.attributes.current_position|int }}'



但是当只有open或者closed的时候,我的这个拖动状态条开关窗的自动化就失效了,只能通过重启来解决,为此我又设置了一个自动化来检查两个实体的状态是不是一致,不一致的时候就重启,有时重启后两个实体显示的状态还不一致,要多次重启,最近在家我仔细看了日志,发现我的树莓派频繁因为窗帘而重启,相当麻烦,有时会影响到其它自动化实例的运行。我不知道这两个实体是不是一个是MQTT,另一个是API的,但是因为cover.hassmart_192_168_2_76这个经常出现连接问题(状态不对或者控制不了)的问题,我都是通过cover.hassmart_65cc2f这个来控制,如果cover.hassmart_65cc2f这个实体能显示四种状态,那么我就可以完美解决现在这个问题。希望能在下一个固件中更新,谢谢。
回复

使用道具 举报

8

主题

169

帖子

864

积分

论坛积极会员

积分
864
金钱
695
HASS币
0
发表于 2021-2-14 22:38:28 | 显示全部楼层
我想知道楼主电机的固件版本是多少,为啥我的不是这两个实体,固件版本是0.51
回复

使用道具 举报

116

主题

4477

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
14733
金钱
10171
HASS币
45
发表于 2021-2-14 22:43:22 | 显示全部楼层
你两个实体是因为用两种方法都接入了吧,直接用mqtt就行了,mqtt更稳定,别再用插件方式了。
回复

使用道具 举报

116

主题

4477

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
14733
金钱
10171
HASS币
45
发表于 2021-2-14 22:47:22 | 显示全部楼层
不过这个opening和closing可以研究下
回复

使用道具 举报

15

主题

125

帖子

963

积分

高级会员

Rank: 4

积分
963
金钱
838
HASS币
0
 楼主| 发表于 2021-2-15 09:10:16 | 显示全部楼层
fyanjin 发表于 2021-2-14 22:38
我想知道楼主电机的固件版本是多少,为啥我的不是这两个实体,固件版本是0.51 ...

我的就是0.51
回复

使用道具 举报

15

主题

125

帖子

963

积分

高级会员

Rank: 4

积分
963
金钱
838
HASS币
0
 楼主| 发表于 2021-2-15 09:12:48 | 显示全部楼层
囧 发表于 2021-2-14 22:43
你两个实体是因为用两种方法都接入了吧,直接用mqtt就行了,别再用插件方式了。 ...

cover.hassmart_192_168_2_76和cover.hassmart_65cc2f不知道哪个是MQTT,但是cover.hassmart_192_168_2_76这个经常出问题,有时控制不了。cover.hassmart_65cc2f倒是不怎么出问题,就是状态少,所以目前需要两个都用到
回复

使用道具 举报

15

主题

125

帖子

963

积分

高级会员

Rank: 4

积分
963
金钱
838
HASS币
0
 楼主| 发表于 2021-2-15 09:15:19 | 显示全部楼层
囧 发表于 2021-2-14 22:47
不过这个opening和closing可以研究下

确实是需要,打开,关闭,打开中,关闭中本来就是完全不同的状态,一开始就有这样的状态了,而且状态细化一下确实可以用到。希望在下一版固件中更新,谢谢
回复

使用道具 举报

116

主题

4477

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
14733
金钱
10171
HASS币
45
发表于 2021-2-15 09:46:48 | 显示全部楼层
roc634 发表于 2021-2-15 09:12
cover.hassmart_192_168_2_76和cover.hassmart_65cc2f不知道哪个是MQTT,但是cover.hassmart_192_168_2_7 ...

cover.hassmart_65cc2f
这个是mqtt。
另外初步研究了下,mqtt方式接入,由于官方不支持,暂时没法反馈state_closing和state_opening两个状态。
回复

使用道具 举报

116

主题

4477

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
14733
金钱
10171
HASS币
45
发表于 2021-2-15 09:56:07 | 显示全部楼层
roc634 发表于 2021-2-15 09:15
确实是需要,打开,关闭,打开中,关闭中本来就是完全不同的状态,一开始就有这样的状态了,而且状态细化 ...

实现你这功能不必要那两个状态,你那样弄反而麻烦了,直接同步窗帘电机的位置信息到这个slider上面就行了,再写个自动化实现拖动slider时,以百分比方式操作窗帘。
回复

使用道具 举报

116

主题

4477

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
14733
金钱
10171
HASS币
45
发表于 2021-2-15 10:48:43 | 显示全部楼层
给你一个可以用的配置:

先设一个input_number:
input_number:
  cover_slider:
    name: cover slider
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'



然后设置以下两个自动化:

自动化一 同步窗帘状态到slider
- alias: set input number state
  initial_state: true
  trigger:
    platform: template
    value_template: "{{ states.cover.hassmart_65c8e4.attributes.current_position }}"
  action:
    service: input_number.set_value
    data_template:
      entity_id: input_number.cover_slider
      value: "{{ (states.cover.hassmart_65c8e4.attributes.current_position) | int }}"


自动化二  拖动slider操作窗帘(这里面要判断一下只有当窗帘实际位置与slider值不同时,即拖动时才操作窗帘,从窗帘同步过来的状态,不再操作窗帘,防止进入死循环)
- alias: set cover position
  initial_state: true
  trigger:
    platform: state
    entity_id: input_number.cover_slider
  condition:
    - condition: template
      value_template: "{{ (states('input_number.cover_slider') | int) != (states.cover.hassmart_65c8e4.attributes.current_position | int) }}"
  action:
    service: cover.set_cover_position
    data_template:
      entity_id: cover.hassmart_65c8e4
      position: "{{ states('input_number.cover_slider') | int }}"


以上已测试,完美使用。

Happy automating with HASSMART~!
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2022-8-10 13:56 , Processed in 0.057082 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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