来完成下面这个有趣的实验。你需要的是:1.路由器一个(可以组成局域网,电脑用网线连接)2.智能音箱一个(本教程用的最多的是AmazonEchoDot2)3.主板支持局域网唤醒(大部分都支持)4.树莓派的原理流程图如下:接下来我们根据这张流程图进行说明,首先,智能音箱和树莓派要连接,我们需要让树莓派发送信号让智能音箱识别为智能家居并连接。由于我使用的是亚马逊的智能音箱,所以我选择了Fauxmo(https://github.com/n8henrie/fauxmo%E8%BF%9B%E8%A1%8C%E6%A8%A1%E6%8B%9F))一个非常有用的工具。1.在树莓派上安装FauxmoFauxmo的安装方法请参考下面的操作或网址。注意Python需要3.6以上:1.gitclonehttps://github.com/n8henrie/fauxmo.git2.cdfauxmo3.python3-mvenv.venv4.source./.venv/bin/activate5.pipinstall-e.[dev]6.cpconfig-sample.jsonconfig.json7。按要求编辑(第一次可以忽略)config.json8.fauxmo[-v]成功后请让智能音箱重新搜索设备,比如Echodot对他说“findconnecteddevices”,或者在同一个局域网下,在网页(alexa.amazon.com/spa/index.html)点击Discoverdevices。如果它成功发现新设备,则安装成功。2.修改Fauxmo的配置,让智能音箱可以识别新的“设备”。Fauxmo其实很简单,我们只需要注意两个地方,一个是源文件下的config.json。到设备。第二个是plugins文件夹下的文件,也就是树莓派收到命令后要执行的文件。由于我们只需要用Python来控制开关,所以我偷懒用了Fauxmo的commandlineplugin(下载地址:https://github.com/n8henrie/fauxmo-plugins/blob/master/commandlineplugin.py)。也就是tree的BerryPi得到命令后,打开命令行,进入相应的操作。我PC的config.json配置如下:"PcControl":{"path":"/home/pi/Documents/fauxmo/src/fauxmo/plugins/commandlineplugin.py","DEVICES":[{"name“:“PC”,“端口”:49915,“on_cmd”:“python2/home/pi/Documents/Automatic/turnOnPC.py”,“off_cmd”:“python/home/pi/Documents/Automatic/ShutdownAndRebootPC.py192.168.199.236(电脑的局域网IP)电脑账号电脑密码shutdown","state_cmd":""},{"name":"RebootPC","port":49920,"on_cmd":"python/home/pi/Documents/Automatic/ShutdownAndRebootPC.py192.168.199.236ckendckendreboot","off_cmd":"python/home/pi/Documents/Automatic/ShutdownAndRebootPC.py192.168.199.236ckendckendreboot","state_cmd":""}]},意思就是如果我说echo,打开我的PC,它通过49915端口访问plugins文件夹下的commandlineplugin.py,然后on命令的操作就是让CMD使用python2访问/home/pi/Documents/Automatic/文件夹下的turnOnPC.py文件。3.添加turnOnPC.py文件和ShutdownAndRebootPC.py文件。turnOnPC.py文件的作用是通过wakeonlan唤醒电脑。您需要提供计算机的Mac地址。如果不知道,可以在CMD中输入ARP-a查询:defwake_on_lan(macaddress):"""SwitchesonremotecomputersusingWOL."""#检查macaddress格式并尝试补偿。iflen(macaddress)==12:passeliflen(macaddress)==12+5:sep=macaddress[2]macaddress=macaddress.replace(sep,'')else:raiseValueError('IncorrectMACaddressformat')#填充同步流。data=''.join(['FFFFFFFFFFFF',macaddressdata*=20_send_])'??#拆分十六进制值并打包。foriinrange(0,len(data),2):send_data=''.join([send_data,struct.pack('B',int(data[i:i+2],16))])#广播到局域网。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关机/重启命令。defshutdown(ip=sys.argv[1],username=sys.argv[2],password=sys.argv[3]):#sshloginproc=pexpect.spawn("ssh%s@%s"%(str(username),str(ip)))index=proc.expect([".*assword.*",".*yes.*"])如果索引>0:proc.sendline("yes")proc.expect(".*assword.*")proc.sendline(密码)proc.expect(".*你的用户名>.*")proc.send("shutdown.exe-s-t00"+'rn')#重启就是shutdown.exe-r-t00time.sleep(1)上面的turnOnPC.py文件和ShutdownAndRebootPC.py文件的源码可以在https://github.com/Ckend/Pi-S找到。.下载后,请根据您的需要进行修改。把以上文件放到指定的/home/pi/Documents/Automatic/下,重启fauxmo,让智能音箱再次搜索,找到这几个新添加的设备,即:PC和RebootPC。成功后,只需说“TurnoffPC”即可关闭计算机。由于fauxmo只适用于亚马逊音箱,使用其他音箱的同学可能需要找一个对应的模拟WeMo或者其他智能设备的项目。接下来,我们将推进电风扇和台灯的改造计划,让普通的它们变成可以语音控制的智能家居。希望大家玩得开心。Python实战宝典(pythondict.com)不仅仅是一个集合。欢迎关注公众号:Python实战宝典,
