导语: 刚在做智能硬件桥接时候,想把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、对手机的小爱同学、小爱音箱测试 开+你的设备名称(巴法云的设备可以自己命名)
然后就可以省下手动开机的麻烦了,你可以通过米家设置自动化任务做到定时开机,甚至通过实体开关定义做到开机。 本文主要为了记录和开源,如果能帮到你非常开心,不会的步骤可以发邮箱联系我。