python控制电脑关机_Python利用智能音箱语音控制电脑开关机

完成下面这个有趣的实验,你所需要的东西有:1.路由器(能够形成局域网,且电脑已用网线连接)

2.一个智能音箱(本教程使用的是亚马逊 Echo Dot 2)

3.主板支持wake on lan (大部分都支持)

4.一个树莓派

原理流程图如下:

接下来将按照这个流程图进行讲解,首先是智能音箱和树莓派的连接,我们需要让树莓派发出信号,让智能音箱将其认作是智能家居并连接。由于我使用的是亚马逊的智能音箱,因此我选择了Fauxmo(https://github.com/n8henrie/fauxmo)非常好用的一个工具。

1.在树莓派上安装Fauxmo

Fauxmo的安装方法见下方的操作或网址,注意这里的Python需要3.6以上:1.git clone https://github.com/n8henrie/fauxmo.git

2.cd fauxmo

3.python3 -m venv .venv

4.source ./.venv/bin/activate

5.pip install -e .[dev]

6.cp config-sample.json config.json

7.根据需求编辑(第一次可先忽略) config.json

8.fauxmo [-v]

成功后,请让智能音箱重新搜索设备,如Echo dot是向他说

"find connected devices",

如果它成功发现了新的设备,则安装成功。

2.修改Fauxmo配置,让智能音箱能识别到新的“设备“

Fauxmo其实很简单,我们只需要关注两个地方,一个是源文件下的config.json. 这个文件是用来控制智能音箱能够识别到的设备的。其次是plugins文件夹下的文件,这是树莓派收到指令后将执行的文件。由于开关机我们只需要使用Python进行控制,因此我偷个懒使用了Fauxmo的commandlineplugin(下载地址:https://github.com/n8henrie/fauxmo-plugins/blob/master/commandlineplugin.py). 即树莓派得到指令后就开启命令行,输入相应的操作。

我的PC的config.json配置如下:

"PcControl": {

"path": "/home/pi/Documents/fauxmo/src/fauxmo/plugins/commandlineplugin.py",

"DEVICES": [

{

"name": "PC",

"port": 49915,

"on_cmd":"python2 /home/pi/Documents/Automatic/turnOnPC.py",

"off_cmd":"python /home/pi/Documents/Automatic/ShutdownAndRebootPC.py 192.168.199.236(该电脑局域网IP) 电脑账号 电脑密码 shutdown",

"state_cmd": ""

},

{

"name": "RebootPC",

"port": 49920,

"on_cmd": "python /home/pi/Documents/Automatic/ShutdownAndRebootPC.py 192.168.199.236 ckend ckend reboot",

"off_cmd": "python /home/pi/Documents/Automatic/ShutdownAndRebootPC.py 192.168.199.236 ckend ckend reboot",

"state_cmd": ""

}]

},

意思就是,如果我向echo说,turn on my PC , 它就通过49915端口访问了plugins文件夹下的commandlineplugin.py,然后on指令的操作是让CMD用python2访问/home/pi/Documents/Automatic/文件夹下的turnOnPC.py文件。

3.增加turnOnPC.py文件和ShutdownAndRebootPC.py文件

turnOnPC.py文件的用处就是通过wake on lan 唤醒电脑,需要提供电脑的Mac地址,不知道的话可以在CMD中输入 ARP -a 查询:

def wake_on_lan(macaddress):

""" Switches on remote computers using WOL. """

# Check macaddress format and try to compensate.

if len(macaddress) == 12:

pass

elif len(macaddress) == 12 + 5:

sep = macaddress[2]

macaddress = macaddress.replace(sep, '')

else:

raise ValueError('Incorrect MAC address format')

# Pad the synchronization stream.

data = ''.join(['FFFFFFFFFFFF', macaddress * 20])

send_data = ''

# Split up the hex values and pack.

for i in range(0, len(data), 2):

send_data = ''.join([send_data,struct.pack('B', int(data[i: i + 2], 16))])

# Broadcast it to the LAN.

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

sock.sendto(send_data, ('', 7))

如果你的主板还没有开启WOL,请进入BOOT中开启,非常简单,相关操作可自行查阅主板的说明书。

ShutdownAndRebootPC.py文件主要提供关机和重启的操作,其原理是:通过SSH连接Windows系统执行DOS关机/重启的命令。

def shutdown(ip=sys.argv[1], username=sys.argv[2], password=sys.argv[3]):

# ssh login

proc = pexpect.spawn("ssh %s@%s " % (str(username), str(ip)))

index = proc.expect([".*assword.*", ".*yes.*"])

if index > 0:

proc.sendline("yes")

proc.expect(".*assword.*")

proc.sendline(password)

proc.expect(".*你的用户名>.*")

proc.send("shutdown.exe -s -t 00"+'\r\n')

# 重启是 shutdown.exe -r -t 00

time.sleep(1)

上述turnOnPC.py文件和ShutdownAndRebootPC.py文件的源代码在https://github.com/Ckend/Pi-SmartHome 中可以下载,请根据自己的需要进行修改。

将上述文件放到前面指定的/home/pi/Documents/Automatic/下,重启fauxmo,并让智能音箱重新搜索,找到这几个新增的设备,分别是:PC和RebootPC.成功后只要说 "Turn off PC" 即可关闭计算机。

由于fauxmo仅仅适用于亚马逊音箱,所以使用其他音箱的同学可能需要寻找一个相应的模拟WeMo或其他智能设备的项目。接下来还会推送风扇和台灯的改造计划,让普通的它们变成可以语音控制的智能家居。希望各位折腾的开心。

​Python实用宝典 (pythondict.com)

不只是一个宝典

欢迎关注公众号:Python实用宝典、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值