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

 找回密码
 立即注册
查看: 1268|回复: 3

[经验分享] 给智能插座增加断网自动断电再通电功能

[复制链接]

43

主题

202

帖子

925

积分

高级会员

Rank: 4

积分
925
金钱
723
HASS币
0
发表于 2024-5-21 11:50:16 | 显示全部楼层 |阅读模式
本帖最后由 inevitab 于 2024-5-21 12:03 编辑

需求:
光猫不稳定,有时候会无法上网,只能重启光猫才能解决。所以希望用智能插座检测网络,断网了就自动重启光猫。

解决方案:

一、使用home assistant里的“自动化与场景”来实现。

1、配置 - 设备与服务 - 添加集成,添加ping集成
屏幕截图 2024-05-21 104951.png

2、添加ping主机
屏幕截图 2024-05-21 105019.png

3、配置 - 设备与集成 - 辅助,添加一个计时器辅助
屏幕截图 2024-05-21 112743.png

4、配置 - 自动化与场景 - 创建自动化
屏幕截图 2024-05-21 113020.png
屏幕截图 2024-05-21 113037.png
注意,“然后做”里面选择你自己的已接入home assistant的智能插座。

5、再创建另一个自动化
屏幕截图 2024-05-21 113241.png
屏幕截图 2024-05-21 113307.png

同样,“然后做”里面选择你自己的已接入home assistant的智能插座。

设置完成,如果HA检测到断网,自动关闭智能插座,隔几秒再打开,如果持续断网,不再作处理。


二,用esphome来实现,该方法适合可以刷固件的、硬件为esp8266/esp8285/esp32的智能插座。该方法可以脱离home assistant运行。
核心代码:

esphome:
  libraries:
     - ESP8266WiFi
     - https://github.com/akaJes/AsyncPing#95ac7e4

external_components:
  - source:
      type: local
      path: ./components

globals:
  - id: global_network_error_s
    type: int
    restore_value: False
    initial_value: '0'

sensor:
  - platform: ping
    # IP address of the target
    ip_address: 114.114.114.114
    # number of packets to send
    num_attempts: 10
    # the timeout. however, this is not what you usually expect from `ping`
    # implementation: the timeout is also the interval to send packets. if you
    # set this value to 10 sec, and the network is fine (no packet loss), then
    # the component sends a packet at 10 sec interval, and the total time to
    # finish would be 10 sec * num_attempts = 10 * 17 = 170 sec.
    timeout: 10sec
    loss:
      # the name to be shown.
      name: Packet loss
      id: packet_loss
      force_update: True
    latency:
      # the name to be shown.
      name: Latency
      id: latency
      # this should be 3 as the value is float, unit is sec, and the raw
      # values are in ms.
      accuracy_decimals: 3
      force_update: True
    # the interval for checking the sensors. defaults to 60s.
    update_interval: 130s

interval:
  - interval: 10s
    then:
      - if:
          condition:
            - and:
              - wifi.connected: 
              - lambda: "return id(global_restart_when_disconnected_index) == 1;"
              - lambda: "return id(packet_loss).state == 100;"
          then:
            - if:
                condition:
                  lambda: "return id(global_network_error_s) == 0;"
                then:
                  - logger.log: "network error, restart ..................."
                  - switch.turn_off: relay1
                  - delay: 10s
                  - switch.turn_on: relay1

            - globals.set:
                id: global_network_error_s
                value: !lambda return id(global_network_error_s) + 1;

            - if:
                condition:
                  lambda: "return id(global_network_error_s) >= 60;"
                then:
                  - globals.set:
                      id: global_network_error_s
                      value: !lambda return 0;
          else:
            - globals.set:
                id: global_network_error_s
                value: !lambda return 0;
代码实现每隔约2分钟检测一次网络,如果断网了,关闭继电器,10秒后再开启继电器,然后10分钟内(10s x 60次 = 10分钟)不再处理,10分钟后如果仍然断网,再关闭继电器然后再打开,如此重复。

完整代码见: 惠桔和家亲X1S智能插座拆机,改装esphome,接入HA

回复

使用道具 举报

4

主题

327

帖子

2460

积分

金牌会员

Rank: 6Rank: 6

积分
2460
金钱
2133
HASS币
0
发表于 2024-5-21 14:53:56 | 显示全部楼层
这个也仅适用于路由器吧,不过路由器可以断网重播。。。除非死机
回复

使用道具 举报

7

主题

323

帖子

2476

积分

金牌会员

Rank: 6Rank: 6

积分
2476
金钱
2153
HASS币
0
发表于 2024-5-21 16:41:55 | 显示全部楼层
直接换光猫~~~喊运营商来~
回复

使用道具 举报

11

主题

184

帖子

1583

积分

金牌会员

Rank: 6Rank: 6

积分
1583
金钱
1399
HASS币
0
发表于 2024-5-22 10:42:23 | 显示全部楼层
为啥不换个光猫
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 01:33 , Processed in 0.277056 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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