完成下面这个有趣的实验,你所需要的东西有:

1.路由器(能够形成局域网,且电脑已用网线连接)

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

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

4.一个树莓派

原理流程图如下:

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

1.在树莓派上安装Fauxmo

Fauxmo的安装方法见下方的操作或网址,注意这里的Python需要3.6以上:

1.git clonehttps://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”,

或同一局域网下,在网页端(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 查询:

def wake_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 loginproc = 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"+'rn')# 重启是 shutdown.exe -r -t 00time.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实用宝典、
的 Python实战教程

Python 利用智能音箱语音控制电脑开关机相关推荐

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

    完成下面这个有趣的实验,你所需要的东西有:1.路由器(能够形成局域网,且电脑已用网线连接) 2.一个智能音箱(本教程使用的是亚马逊 Echo Dot 2) 3.主板支持wake on lan (大部分 ...

  2. python语音控制智能家电_Python 树莓派智能音箱语音控制电脑开关机-Python 实用宝典...

    完成下面这个有趣的实验,你所需要的东西有: 1.路由器(能够形成局域网,且电脑已用网线连接) 2.一个智能音箱(本教程使用的是亚马逊 Echo Dot 2) 3.主板支持wake on lan (大部 ...

  3. 使用ESP8266/ESP32 实现智能语音控制电脑开关机

    最近买了个台机放客厅里接电视玩游戏,另外还有跑程序计算的需求所以通过笔记本电脑使用RDP或Parsec来远程控制,当然瘾犯了也能云游戏.路由器在另一个房间所以是无线网卡链接,用的最好的AX210+10 ...

  4. SimFAS中控iPad控制电脑开关机实现方法

    ​​​​​功能实现: ipad 控制电脑开机和关机(正常关闭系统+关闭电源) 下面先介绍使用 ipad 中控 正常关闭系统功能的实现: 注意:切勿直接切断电脑电源,这样会导致系统损害或者硬盘损坏, 正 ...

  5. 手机控制NodeMCU实现远程电脑开关机

    NodeMCU实现远程电脑开关机 1.确认PC主板支持WOL(Wake on Lan) 2.阿里云物联网平台设置 3.NodeMCU(开机棒)部分程序编写 4.编译手机App(仅支持Android) ...

  6. 使用ESP8266接入阿里云物联网平台(阿里 云智能APP)可远程控制电脑开关机,灯光等设备 CP2102, CH340

    首先,不是问题太复杂,是网上的教程不对! 在这里将详细,简单易懂的描述如何做到标题上的功能 本次目的是手机远程控制设备  文末会附上编译器,源码,第三方库 你需要准备这些东西 1.ESP8266(CH ...

  7. 使用小爱同学语音控制电脑关机 - Winform C#

    使用小爱同学语音控制电脑变关机 前言 实现原理 准备 注册巴法云账号 接入巴法云 接入米家 编写程序 连接TCP 接收信息并运行关机指令 发送指令订阅主题 添加心跳机制 后台运行 阻止默认关闭窗口事件 ...

  8. 8266 + 巴法云 小爱远程控制电脑开关机 arduino

    暂时保存下 还在继续改进准备用小封装的芯片晒笔记本里面去 需求 可能需要在外面远程家里的电脑???没有需求创造需求 然后小爱可以控制电脑开关机 物联网基于 巴法云搭建 (白嫖且没有设备数量的限制)兼容 ...

  9. Windows操作系统查看电脑开关机记录

    2019独角兽企业重金招聘Python工程师标准>>> Windows操作系统查看电脑开关机记录 一.系统环境 操作系统:Windows 10 二.具体步骤 计算机/我的电脑 - 右 ...

最新文章

  1. 主键需要键索引吗_MySQL 索引的知识点都在这里了,建议收藏!
  2. 听听阿里老哥对算法工程师技术学习路线的建议
  3. 图案研究2--斜线续
  4. linear regression
  5. 移动端的1px边框问题
  6. config database.php,CodeIgniter配置之database.php用法实例分析
  7. 三丰三坐标编程基本步骤_三丰三坐标CRYSTA APEX S776
  8. java 检查打印机状态_爱普生打印机常见故障有哪些 爱普生打印机故障解决方法【详解】...
  9. 什么是中台业务架构?
  10. 行云管家堡垒机的使用方法之二——新增登录凭证
  11. JAVA只要掌握内部类,多继承和单继承都不是问题
  12. 拯救万千学子于水深火热之中!Facebook开源无梯度优化工具
  13. mysql执行计划缓存在哪_怎么去看懂mysql的执行计划
  14. js使用xlsx读取excel文件
  15. [数据压缩作业2]TIFF文件格式分析
  16. 台式计算机提示内存不足怎么办,一招解决电脑提示内存不足-电脑内存不足怎么办...
  17. 中山大学羽毛球场馆自动订场(Python+selenium+百度aip)
  18. UNIX操作系统学习(一)
  19. Vue报错:VueCompilerError: Attribute name cannot contain U+0022 (“), U+0027 (‘), and U+003C (<).
  20. 使用virt-install创建虚拟机

热门文章

  1. Makefile中的make命令使用(一)
  2. 微信站街的要素和弊端
  3. ICLOUD储存空间要升级吗_iCloud关闭好还是不好?免费储存空间用完了怎么备份手机?...
  4. UE4中使用自动驾驶模拟——Carla
  5. 工作以来的第二次年假
  6. c语言return;返回什么
  7. html5+css3适配问题(手机、平板、PC)
  8. 插入数据mysql索引失效_MySQL索引失效问题
  9. php 动画效果,首页自适应的分类图标的动画渐入效果
  10. 路由器无线桥接——提供无线网络+交换机功能