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

 找回密码
 立即注册
查看: 2942|回复: 15

[技术探讨] ESPHOME怎样用WIFI信号强度来执行ESPHOME内的自动化?

[复制链接]

32

主题

145

帖子

545

积分

高级会员

Rank: 4

积分
545
金钱
400
HASS币
0
发表于 2022-10-11 20:21:44 | 显示全部楼层 |阅读模式
ESPHOME怎样用WIFI信号强度来执行ESPHOME的自动化?

当WIFI信号大于-70  执行打开继电器


当WIFI信号小于-70  执行关闭继电器



sensor:

  - platform: wifi_signal   
    name: "wifi强度"  
    update_interval: 10s   

这里加什么代码执行自动化?

switch:

  - platform: gpio
    name: "继电器"
    id: "wifi2"
    pin: GPIO2
    inverted: true


2.jpeg
1.jpeg






回复

使用道具 举报

17

主题

800

帖子

5744

积分

论坛元老

Rank: 8Rank: 8

积分
5744
金钱
4939
HASS币
0
发表于 2022-10-11 20:48:29 | 显示全部楼层
加上on_value
然后具体的强度可以在lambda里用 x 来获取。

类似下面这种感觉
          - if:
              condition:
                lambda: 'return x <= 2;'
              then:
                - uart.write:

实际我用的时候,由于还需要考虑wifi是否已经连接来执行不同的操作,所以不是用的on_value,而是在interval弄了个1秒来判断
回复

使用道具 举报

32

主题

145

帖子

545

积分

高级会员

Rank: 4

积分
545
金钱
400
HASS币
0
 楼主| 发表于 2022-10-11 21:03:03 | 显示全部楼层
sirakawa 发表于 2022-10-11 20:48
加上on_value
然后具体的强度可以在lambda里用 x 来获取。

可否分享下你的代码给我参考下吗。我不懂怎样修改。谢谢
回复

使用道具 举报

17

主题

800

帖子

5744

积分

论坛元老

Rank: 8Rank: 8

积分
5744
金钱
4939
HASS币
0
发表于 2022-10-11 21:35:14 | 显示全部楼层
我是这么干的

interval:
  - interval: 5s
    then:
      if:
        condition:
          - wifi.connected:
        then:
          - globals.set:
              id: global_is_wifi_connected
              value: '1'
          - script.execute: writeWifiSignal
        else:
          - globals.set:
              id: global_is_wifi_connected
              value: '0'
          - script.execute: writeWifiSignal

script:
  - id: writeWifiSignal
    mode: restart
    then:
        # ICON
        - uart.write:
            id: uart_screen
            data: !lambda |-
              int intState = 4;
              // WIFI ICON
              if(id(global_is_wifi_connected) == 1){
                if(id(wifi_signal_level).state >= -50){
                  intState = 1;
                }else if(id(wifi_signal_level).state >= -65){
                  intState = 2;
                }else{
                  intState = 3;
                }
              }
              intState += 4;
              std::string s = to_string(intState);
              return std::vector<unsigned char>( s.begin(), s.end() );

不过我的c++是个渣,参考下就好。

评分

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

查看全部评分

回复

使用道具 举报

23

主题

660

帖子

3110

积分

论坛元老

Rank: 8Rank: 8

积分
3110
金钱
2450
HASS币
10
发表于 2022-10-11 23:53:32 | 显示全部楼层

官方例子
sensor:
  - platform: dallas
    # ...
    on_value_range:
      - below: 5.0
        then:
          - switch.turn_on: relay_1
      - above: 5.0
        below: 10.0
        then:
          - switch.turn_on: relay_2
      - above: 10.0
        then:
          - switch.turn_on: relay_3
回复

使用道具 举报

32

主题

145

帖子

545

积分

高级会员

Rank: 4

积分
545
金钱
400
HASS币
0
 楼主| 发表于 2022-10-12 10:54:15 | 显示全部楼层
sirakawa 发表于 2022-10-11 21:35
我是这么干的

interval:

感谢,很有帮助。
回复

使用道具 举报

45

主题

452

帖子

1643

积分

金牌会员

Rank: 6Rank: 6

积分
1643
金钱
1191
HASS币
0
发表于 2022-10-12 11:14:15 | 显示全部楼层
能说一下这个的应用场景吗?我想了解一下
回复

使用道具 举报

32

主题

145

帖子

545

积分

高级会员

Rank: 4

积分
545
金钱
400
HASS币
0
 楼主| 发表于 2022-10-12 11:55:14 | 显示全部楼层
wshc1216 发表于 2022-10-11 23:53
官方例子
sensor:
  - platform: dallas

谢谢,可以用
回复

使用道具 举报

32

主题

145

帖子

545

积分

高级会员

Rank: 4

积分
545
金钱
400
HASS币
0
 楼主| 发表于 2022-10-12 11:58:00 | 显示全部楼层
shayulei 发表于 2022-10-12 11:14
能说一下这个的应用场景吗?我想了解一下

用在电单车,手机开热点,WIFI信号强 开锁,弱 锁上。
回复

使用道具 举报

38

主题

405

帖子

4324

积分

元老级技术达人

积分
4324
金钱
3864
HASS币
250
发表于 2022-10-12 14:10:36 | 显示全部楼层
X大 发表于 2022-10-12 11:58
用在电单车,手机开热点,WIFI信号强 开锁,弱 锁上。

这要是手机因为其他什么原因关了直接就锁车了,多不方便啊。为啥不弄指纹?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-28 23:51 , Processed in 0.446164 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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