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

 找回密码
 立即注册
查看: 6212|回复: 25

[UI界面] 不来虚的,只上干货!!3D房间布局交叉空间灯光处理方法

[复制链接]

8

主题

73

帖子

697

积分

高级会员

Rank: 4

积分
697
金钱
624
HASS币
30
发表于 2021-10-28 09:50:07 | 显示全部楼层 |阅读模式
本帖最后由 jijngpengboo 于 2021-10-30 17:27 编辑

有图有真相!!首先给大家上图 home.png
大家可以看到,在这个图里客厅和餐厅还有阳台都有独立的灯光,这就导致了存在灯光的交叉空间。因为灯光同时打开时候的阴影问题导致如果单独堆叠的话当客厅打开,餐厅也打开就会出现只显示餐厅灯光或者客厅灯光的画面,即使制作图片时进行了优化分区域进行了截取,但是当灯光都打开时显示上仍然会有重叠区域显示效果差强人意的结果,甚至惨不忍睹!!那么下面的代码可以解决这个问题,废话不多,代码奉上!!!首先是两个重叠空间灯光效果的,在configuration.yaml里面增加下面的代码,如果你的配置里已经有sensor了,可以直接从 - platform开始复制,复制到你的sensor下面:

#设置虚拟的实体传感器#1为sonoff_1000d516bb开,#2为sonoff_1000e18023开,3为都开,0为都关
  - platform: template
    sensors:
      light_choose_1:
        friendly_name: '客厅餐厅灯光判断'
        value_template: >
            {% if is_state('light.sonoff_1000d516bb','on') %}
              {% if is_state('light.sonoff_1000e18023','off')or is_state('light.sonoff_1000e18023','unavailable') %}
                1
              {% else %}
                3
              {% endif %}
            {% elif is_state('light.sonoff_1000e18023','on') %}
              {% if is_state('light.sonoff_1000d516bb','off')or is_state('light.sonoff_1000d516bb','unavailable') %}
                2
              {% else %}
                3
              {% endif %}
            {% else %}
              0
            {% endif %}

这段代码是自定义了一个虚拟的sensor实体,它的作用是判断两个灯光实体的状态给出不同的数值,在我的hass里设置虚拟的实体传感器#1为sonoff_1000d516bb开,#2为sonoff_1000e18023开,3为都开,0为都关  你可以根据以上代码更改自己相应的开关实体,然后再UI设计时在picture-elements里添加如下的代码:
elements:
  - type: image
    name: 餐厅灯或客厅灯判断显示图片
    entity: sensor.light_choose_1
    tap_action: none
    hold_action: none
    state_image:
      '0': /local/home1/tremp.png
      '1': /local/home1/keting.png
      '2': /local/home1/canting.png
      '3': /local/home1/ketingcanting_allon.png
      #'4':  image path
      #'5':  image path
      #'6':  image path
      #'7':  image path      unavailable: /local/home1/tremp.png
    style:
      top: 50%
      left: 50%
      width: 100%
这个代码的作用时根据刚才虚拟的实体的状态判断使用哪张图片,你根据自己的实体定义对应相应的图片就可以了。

然后再添加相对应的实体开关即可,这里需要注意,实体开关定义必须放在最后面,不然会被图片覆盖!!
 - type: state-icon
    name: 餐厅
    entity: light.sonoff_1000e18023
    tap_action:
      action: toggle
    hold_action: none
    icon: mdi:lightbulb
    style:
      top: 40%
      left: 50%
到这里两个空间灯光重叠的问题就解决了,那么三个空间的灯光重叠也是类似的,只不过是多了一层判断,三个空间的灯光重叠会有8个状态:我们假设a,b,c三盏灯,那么就是 a开、b开、c开、ab开、ac开、bc开、abc全开、abc全关。直接上代码:
#0代表全关,1代表阳台: f1390804_c9b99f05开,2代表客厅: sonoff_1000d516bb开,3代表餐厅: sonoff_1000e18023开,4代表1和2开,5代表2和3开,6代表1和3开,7代表3路全开
      light_choose_3:
        friendly_name: '三个交叉空间的灯光判断'
        value_template: >
          {% if is_state('light.f1390804_c9b99f05','on') %}
            {% if is_state('light.sonoff_1000d516bb','on') %}
              {% if is_state('light.sonoff_1000e18023','on') %}
                7
              {% else %}
                4
              {%endif%}
            {% elif is_state('light.sonoff_1000e18023','on') %}
              6
            {%else%}
              1
            {%endif%}

          {% elif is_state('light.f1390804_c9b99f05','off') or is_state('light.f1390804_c9b99f05','unavailable')%}
            {% if is_state('light.sonoff_1000d516bb','on') %}
              {% if is_state('light.sonoff_1000e18023','on') %}
                5
              {% else %}
                2
              {%endif%}
            {% elif is_state('light.sonoff_1000e18023','on') %}
              3
            {%else%}
              0
            {%endif%}
          {%endif%}

至于UI里面的写法你们大概看到了我在UI代码里有注释掉4567,只需要把注释去掉再在相应的位置增加图片地址就可以了!!首先一定要自己提前定义好0-7究竟都是什么状态,然后对应相应的图片地址,这样才不会乱!!!
#0代表全关,1代表a: sonoff_1000e18021开,2代表b: sonoff_1000d516bb开,3代表c: sonoff_1000e18023开,4代表1和2开,5代表2和3开,6代表1和3开,7代表3路全开
下面给大家看下成品视频!





回复

使用道具 举报

20

主题

219

帖子

2178

积分

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
1944
HASS币
87
发表于 2021-10-28 10:22:48 | 显示全部楼层
真的是细节控啊
回复

使用道具 举报

32

主题

1993

帖子

5067

积分

论坛元老

Rank: 8Rank: 8

积分
5067
金钱
3074
HASS币
50
QQ
发表于 2021-10-28 11:32:19 | 显示全部楼层
谢谢分享,学习了。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

3

主题

295

帖子

2864

积分

金牌会员

Rank: 6Rank: 6

积分
2864
金钱
2569
HASS币
0
发表于 2021-10-28 11:43:37 | 显示全部楼层
感谢分享,有没有实际效果图看看?我是把相关区域会重叠的几个灯的各种组合效果全渲染了出来
回复

使用道具 举报

8

主题

73

帖子

697

积分

高级会员

Rank: 4

积分
697
金钱
624
HASS币
30
 楼主| 发表于 2021-10-28 12:07:43 来自手机 | 显示全部楼层
iamhyde 发表于 2021-10-28 11:43
感谢分享,有没有实际效果图看看?我是把相关区域会重叠的几个灯的各种组合效果全渲染了出来 ...

晚上回来整理下发出来,组合效果全部渲染出来但是单独的灯光来回切换的时候有的地方就会有明显的地图ps痕迹,你用我的代码直接改就可以的,第一个代码添加到comfig里,第二个添加到UI。测试效果没问题的,这个代码三个重叠区域不用每个增加image,用一个image 就可实现三个区域的7种状态显示
回复

使用道具 举报

3

主题

295

帖子

2864

积分

金牌会员

Rank: 6Rank: 6

积分
2864
金钱
2569
HASS币
0
发表于 2021-10-28 17:55:57 | 显示全部楼层
jijngpengboo 发表于 2021-10-28 12:07
晚上回来整理下发出来,组合效果全部渲染出来但是单独的灯光来回切换的时候有的地方就会有明显的地图ps痕 ...

所有全渲染确实很麻烦,还要看PS技术
请教第一段代码是放哪里?HA的configuration.yaml?
回复

使用道具 举报

8

主题

73

帖子

697

积分

高级会员

Rank: 4

积分
697
金钱
624
HASS币
30
 楼主| 发表于 2021-10-28 19:12:59 | 显示全部楼层
iamhyde 发表于 2021-10-28 17:55
所有全渲染确实很麻烦,还要看PS技术
请教第一段代码是放哪里?HA的configuration.yaml? ...

代码有点问题,我修复下,这个代码我是先用python写的,然后再加到config的,结果有一个字段漏掉了
,等会我重新发一下
回复

使用道具 举报

8

主题

73

帖子

697

积分

高级会员

Rank: 4

积分
697
金钱
624
HASS币
30
 楼主| 发表于 2021-10-28 20:30:09 | 显示全部楼层
iamhyde 发表于 2021-10-28 17:55
所有全渲染确实很麻烦,还要看PS技术
请教第一段代码是放哪里?HA的configuration.yaml? ...

可以看了,也有视频效果展示,有空了我再录制个具体的操作视频
回复

使用道具 举报

3

主题

295

帖子

2864

积分

金牌会员

Rank: 6Rank: 6

积分
2864
金钱
2569
HASS币
0
发表于 2021-10-28 21:54:11 | 显示全部楼层
jijngpengboo 发表于 2021-10-28 20:30
可以看了,也有视频效果展示,有空了我再录制个具体的操作视频

如果三个灯8个重叠状态也是需要渲染8张对应的图片吧?
我是在picture-elements里写了8种状态
回复

使用道具 举报

8

主题

73

帖子

697

积分

高级会员

Rank: 4

积分
697
金钱
624
HASS币
30
 楼主| 发表于 2021-10-28 22:13:50 来自手机 | 显示全部楼层
iamhyde 发表于 2021-10-28 21:54
如果三个灯8个重叠状态也是需要渲染8张对应的图片吧?
我是在picture-elements里写了8种状态 ...

对的,好处就是不需要每个灯给配置一个image,三个灯共用一个就可以了,3个灯排列组合下来8个状态对应8张图片
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-27 02:20 , Processed in 0.117142 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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