导语:

刚在做智能硬件桥接时候,想把wol加进来,也就是语音控制电脑开机,顺便就写这篇文章。
wol 全称应该是wakeup on lan,是通过网线唤醒,向同一网段的局域网广播发送幻数据包唤醒电脑。一般除了笔记本的台式电脑都有这个功能,好像部分笔记本也有。
顺路在百度上看到很多人改装开机线去实现这个功能的,而且是有大量的文章,都用的esp8266。我觉得稍微有点画蛇添足,因为纯软件即可实现,而且一般geek都有个openwrt或者nas的linux系统,我这个也提供了docker版本,直接build一下即可。

正题:

1、首先配置巴法云,它免费提供了mqtt服务,并且可以接入米家。

https://cloud.bemfa.com/

具体步骤参考:https://www.bilibili.com/read/cv11229463
第一章照着做完即可,第二章及以下不需要看。

2、配置docker

代码参考自:https://www.cnblogs.com/bemfa/p/15435616.html
感兴趣的可以看看,主要加了个wol的命令,别的没什么变化。

修改client_id 为个人巴法云的id,修改client.subscribe为你的编号!!
修改11:11:11:11:11:11为你的电脑mac地址(不会的请百度:如何获取电脑mac地址)!!

以下为代码:

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
#!/usr/bin/env python
#encoding: utf-8
# -*- coding: utf-8 -*-

#pip3 install paho-mqtt wakeonlan
import paho.mqtt.client as mqtt
from wakeonlan import send_magic_packet

HOST = "bemfa.com"
PORT = 9501
client_id = "你的id"

#连接并订阅
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("1002") # 订阅消息

#消息接收
def on_message(client, userdata, msg):
print("theme:"+msg.topic+"message:"+str(msg.payload.decode('utf-8')))
sw = str(msg.payload.decode('utf-8'))
if sw == "on":
send_magic_packet('11:11:11:11:11:11')

#订阅成功
def on_subscribe(client, userdata, mid, granted_qos):
print("On Subscribed: qos = %d" % granted_qos)

# 失去连接
def on_disconnect(client, userdata, rc):
if rc != 0:
print("Unexpected disconnection %s" % rc)


client = mqtt.Client(client_id)
client.username_pw_set("userName", "passwd")
client.on_connect = on_connect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.on_disconnect = on_disconnect
client.connect(HOST, PORT, 60)
client.loop_forever()

3、部署docker

新建一个Dockerfile,内容如下:

1
2
3
4
5
6
7
8
FROM centos:7

COPY a.py /

RUN yum -y install python3-pip python3 && \
pip3 install paho-mqtt wakeonlan

CMD python3 /a.py

如果使用了docker-compose

1
2
3
4
5
6
7
8
version: '3'
services:

wol:
container_name: wol
build: ./wol
restart: always
network_mode: host

当然,不想用docker,加到rc.local自启动+nohup,或者写个systemd服务也可以。

4、开启你电脑的wol

5、对手机的小爱同学、小爱音箱测试

开+你的设备名称(巴法云的设备可以自己命名)

然后就可以省下手动开机的麻烦了,你可以通过米家设置自动化任务做到定时开机,甚至通过实体开关定义做到开机。
本文主要为了记录和开源,如果能帮到你非常开心,不会的步骤可以发邮箱联系我。