智能家居ex电脑版(智能家居控制电脑开机)新鲜出炉
信息来源:互联网 发布时间:2023-12-08
智能家居DIY
大家好,欢迎来到 Crossin的编程教室 !智能家居是未来的一个趋势今天我们就来实现一个智能家居的雏形:利用智能音箱语音控制电脑开关机完成下面这个有趣的实验,你所需要的东西有:路由器(能够形成局域网,且电脑已用网线连接)。
一个智能音箱(本教程使用的是亚马逊 Echo Dot 2)主板支持wake on lan (大部分都支持)一个树莓派原理流程图如下:
接下里将按照这个流程图进行讲解,首先是智能音箱和树莓派的连接,我们需要让树莓派发出信号,让智能音箱将其认作是智能家居并连接由于我使用的是亚马逊的智能音箱,因此我选择了Fauxmo(https://github.com/n8henrie/fauxmo)。
进行模拟1. 在树莓派上安装FauxmoFauxmo的安装方法见下方的操作或网址,注意这里的Python需要3.6以上:Install for development from GitHubgit clone https://github.com/n8henrie/fauxmo.git。
cd fauxmopython3 -m venv .venvsource ./.venv/bin/activatepip install -e .[dev]cp config-sample.json config.json
根据需求编辑(第一次可先忽略) config.jsonfauxmo [-v]成功后,请让智能音箱重新搜索设备,如Echo dot是向他说 "find connected devices",或同一局域网下,在网页端(alexa.amazon.com/spa/index.html)上点击
Discover 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 查询:
defwake_on_lan(macaddress):""" Switches on remote computers using WOL. """# Check macaddress format and try to compensate.
if len(macaddress) == 12:passelif 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.*"])ifindex > 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或其他智能设备的项目。
接下来还会推送风扇和台灯的改造计划,让普通的它们变成可以语音控制的智能家居希望各位折腾的开心!如果文章对你有帮助,欢迎转发/点赞/收藏~作者:Ckend来源:Python实用宝典_往期文章推荐_解放双手!用Python控制你的鼠标和键盘
如需了解付费精品课程及教学答疑服务请在Crossin的编程教室内回复: 666
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186

