为了能让我更方便的在床上推旮旯game,我购入了一个向日葵智能插座,但官方APP的体验用起来有点鸡肋,于是就想着把插座接入HomeAssistant(下文简称HA),再配合上HA的一系列自动化脚本,实现了非常舒服的开关机流程,水篇文章记录一下吧
安装&配置HA
先把镜像拉下来一把唆(需要2GB左右存储空间)
1
| docker pull homeassistant/home-assistant:stable
|
用docker compose方便些
1 2 3 4 5 6 7 8 9 10 11 12 13
| services: homeassistant: container_name: homeassistant image: homeassistant/home-assistant:stable volumes: - ./config:/config - /run/dbus:/run/dbus:ro restart: unless-stopped privileged: true network_mode: host environment: TZ: Asia/Shanghai
|
走8123端口进HA后台,进行一些简单的配置,这里不赘述了
进入容器根目录
1 2
| docker exec -it homeassistant bash cd ..
|
执行以下命令安装HACS应用市场
1
| wget -O - https://get.hacs.xyz | bash
|
执行完毕后重启HA 就能在侧边栏看到HACS了
在HACS内搜索sunlogin,添加向日葵自定义集成
安装完成后,进入HA 设置 > 设备与服务 > 添加集成,并搜索 sunlogin,登录你的向日葵账号,添加你在向日葵APP内绑定的插座即可
配置自动化
开关插座电源
我的思路是:当电脑的IP地址ping不通,且如果插座开关为开启状态时,就认为电脑已关机,并关闭插座开关。反之则认为已开机,开插座(如果你的插座具备功率统计功能,可以依据接入的功率判断)
添加一个ping的集成,地址设为你电脑的IP地址
到HA设置->自动化与场景->自动化这么配(开插座大同小异,依葫芦画瓢即可)
远程开关机
开机可以走AC Recovery来电自启,插座通电时电脑也一起开
远程关机实现有点麻烦,如果想完全脱离向日葵APP,需要在电脑上配置一个Python脚本来监测HA发送的字符串,若匹配则执行shutdown关机,这里放个示例代码(来自Gemini3),大家可根据需要修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| import socket import os import sys
HOST = '0.0.0.0' PORT = 8888 SECRET_CMD = "SHUTDOWN_NOW"
def start_server(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: try: s.bind((HOST, PORT)) s.listen(1) print(f"✅ 服务已启动,正在监听端口 {PORT}...") print(f"⏳ 等待 Home Assistant 发送指令: {SECRET_CMD}")
while True: conn, addr = s.accept() with conn: print(f"🔗 收到连接请求,来自: {addr}") data = conn.recv(1024) if not data: continue received_cmd = data.decode('utf-8').strip() print(f"📩 收到内容: {received_cmd}")
if received_cmd == SECRET_CMD: print("⚠️ 验证通过!正在执行关机指令...") conn.sendall(b"OK, Shutting down...") os.system('shutdown /s /t 5 /c "Home Assistant 请求关机"') else: print("❌ 指令错误,忽略。") conn.sendall(b"Error: Wrong Command")
except OSError as e: print(f"❌ 端口绑定失败 (可能端口被占用): {e}")
if __name__ == "__main__": start_server()
|
在HA的configuration.yaml文件内增加这么几行(注意替换IP地址)
1 2
| shell_command: trigger_pc_shutdown: 'python3 -c "import socket; s=socket.socket(); s.settimeout(2); s.connect((\"192.168.1.5\", 8888)); s.send(b\"SHUTDOWN_NOW\"); s.close()"'
|
到Windows防火墙把Python设为允许入站
在HA设置->自动化与场景->脚本内添加一个脚本
执行动作没问题即可
然后把Python脚本设为开机自启(可以把拓展名改为.pyw无界面运行)
在HA的APP内配置一下磁贴,走通知栏远程开关机
感谢将向日葵插座接入HA的开发者大佬
https://github.com/cx3Y/sunlogin