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

 找回密码
 立即注册
查看: 7732|回复: 9

[技术探讨] 【求助】esphome控制灯的色温的问题

[复制链接]

12

主题

114

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
金钱
1298
HASS币
0
发表于 2021-7-15 21:37:15 | 显示全部楼层 |阅读模式
我用esphome做了个可调色温的灯,用其中一个GPIO控制它。
想实现双击切换色温的功能

这就得判断当前的色温是高还是低,但是light的condition里面又没有色温,只有一个is_on一个is_off。

于是写lambda判断色温:
return id(mylight).color_temperature

但是编译时返回错误:
error: 'class esphome::light:ightState' has no member named 'color_temperature'

请问大佬,这个地方应该怎么写呢?谢谢了!
回复

使用道具 举报

33

主题

2196

帖子

5838

积分

论坛元老

Rank: 8Rank: 8

积分
5838
金钱
3642
HASS币
60
QQ
发表于 2021-7-15 23:29:51 | 显示全部楼层
我也在折腾这个,坐等大佬出现。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

8

主题

163

帖子

2124

积分

金牌会员

Rank: 6Rank: 6

积分
2124
金钱
1961
HASS币
0
发表于 2021-7-16 01:27:43 | 显示全部楼层
你可以试试这个:

id(mylight).remote_values.get_color_temperature()

评分

参与人数 1金钱 +20 收起 理由
neroxps + 20 正解

查看全部评分

回复

使用道具 举报

3

主题

55

帖子

840

积分

高级会员

Rank: 4

积分
840
金钱
785
HASS币
0
发表于 2021-7-16 19:18:43 | 显示全部楼层
globals:
 - id: my_global_int
   type: float
   restore_value: no
   initial_value: '0'
   
 - id: my_global_inta
   type: double
   restore_value: no
   initial_value: '150'    

 - id: my_global_intc
   type: float
   restore_value: no
   initial_value: '2'    
   


binary_sensor:
  - platform: gpio
    name: "MCP23017 Pin #1"
    pin: 
      number: 25
      inverted: True
      mode: INPUT_PULLUP
    internal: true       
    id: my_binary_sensor
    on_double_click:
      min_length: 50ms
      max_length: 500ms
      then:
       - while:
           condition:
            - binary_sensor.is_on: my_binary_sensor
           then:
           - while:
               condition:
                - binary_sensor.is_on: my_binary_sensor
                - lambda: |-
                            return (id(my_global_inta) >= 150) && (id(my_global_inta) < 400);
               then:
               - light.turn_on:
                  id: lights_1
                  transition_length: 0.1s
                  color_temperature: !lambda |-
                          id(my_global_inta) += 5;
                          return id(my_global_inta);
               - delay: 0.1s    
           - while:
               condition:
                - binary_sensor.is_on: my_binary_sensor
                - lambda: |-
                            return (id(my_global_inta) > 150) && (id(my_global_inta) <= 400);
               then:
               - light.turn_on:
                  id: lights_1
                  transition_length: 0.1s
                  color_temperature: !lambda |-
                          id(my_global_inta) -= 5;
                          return id(my_global_inta);
               - delay: 0.1s 


    on_press:
     - delay: 0.55s
     - if:
        condition:
         - binary_sensor.is_on: my_binary_sensor
        then:
         - while:
             condition:
              - binary_sensor.is_on: my_binary_sensor
             then:
             - while:
                 condition:
                  - binary_sensor.is_on: my_binary_sensor
                  - lambda: |-
                              return (id(my_global_int) >= 0) && (id(my_global_int) < 50);
                 then:
                 - light.dim_relative: 
                    id: lights_1
                    relative_brightness: !lambda |-
                          id(my_global_int) += 1;
                          return id(my_global_intc) / 100.0;
                    transition_length: 0.3s
                 - delay: 0.1s
             - while:
                 condition:
                  - binary_sensor.is_on: my_binary_sensor
                  - lambda: |-
                              return (id(my_global_int) > 0) && (id(my_global_int) <= 50);
                 then:
                 - light.dim_relative: 
                    id: lights_1
                    relative_brightness: !lambda |-
                          id(my_global_int) -= 1;
                          return id(my_global_intc) / -100.0;
                    transition_length: 0.2s
                 - delay: 0.1s
              
        else:
         - light.toggle: lights_1 
         

 
回复

使用道具 举报

3

主题

55

帖子

840

积分

高级会员

Rank: 4

积分
840
金钱
785
HASS币
0
发表于 2021-7-16 19:22:47 | 显示全部楼层
上面这段实现了长按无极调亮度,双击长按无极调色温。
回复

使用道具 举报

12

主题

114

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
金钱
1298
HASS币
0
 楼主| 发表于 2021-7-28 22:51:47 | 显示全部楼层
jackyzrk 发表于 2021-7-16 01:27
你可以试试这个:

谢谢大佬,果然好用
回复

使用道具 举报

12

主题

114

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
金钱
1298
HASS币
0
 楼主| 发表于 2021-7-28 22:52:51 | 显示全部楼层
tiuster 发表于 2021-7-16 19:22
上面这段实现了长按无极调亮度,双击长按无极调色温。

谢谢,试了下双击有时候亮度色温一起变哎
回复

使用道具 举报

3

主题

301

帖子

3247

积分

论坛元老

Rank: 8Rank: 8

积分
3247
金钱
2946
HASS币
0
发表于 2021-8-2 09:38:00 | 显示全部楼层
求色温灯的代码,有一个24V双色温的灯带,esp32s不知道怎么写
回复

使用道具 举报

12

主题

114

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
金钱
1298
HASS币
0
 楼主| 发表于 2021-8-2 15:06:35 | 显示全部楼层
iamhyde 发表于 2021-8-2 09:38
求色温灯的代码,有一个24V双色温的灯带,esp32s不知道怎么写

4楼的代码就很好啊
回复

使用道具 举报

3

主题

301

帖子

3247

积分

论坛元老

Rank: 8Rank: 8

积分
3247
金钱
2946
HASS币
0
发表于 2021-8-2 16:19:40 | 显示全部楼层
xiguaboy 发表于 2021-8-2 15:06
4楼的代码就很好啊

4楼是开关按钮的吧,想看看灯方面的,谢谢
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 10:24 , Processed in 0.160319 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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