使用天猫精灵实现计算机WOL网络唤醒

简介: 解决笔记本连显示器不想掀盖子开机和远程办公时给公司电脑开机不方便的痛点。

使用天猫精灵实现计算机WOL网络唤醒

      天猫精灵是好评如潮的一款智能家庭终端设备,使用天猫精灵定闹钟、影音娱乐、互动问答是否已经成为你生活中的习惯了呢?其实我们自己也可以创建技能,本文通过内测中的天猫精灵个人技能来实现基于WOL魔术包来远程唤醒个人电脑。

项目目标

      通过天猫精灵个人语音技能远程触发内网设备发送魔术包使计算机以WOL网络唤醒方式开机。

项目原理

1.    什么是WOL

a)     WOL全称Wake-on-LAN,是一种以太网或令牌环网的计算机网络标准。它可以实现通过网络远程消息来打开计算机,该消息通常由连接到同一局域网的设备上执行的程序发送到目标计算机。如果被唤醒的计算机通过WiFi进行通信,则需要采用WoWLAN标准。(通常802.11无线网络在低功耗状态下并不接受链路数据包,所以在无线网条件下实现远程唤醒支持条件较为苛刻)

b)     以太网连接基于计算机之间发送的帧,而WOL是使用魔术包实现的,该包在数据链路层(OSI模型中的第2层)上广播发送到网络中的所有计算机【而不是使用 IP 地址(OSI 模型中的第 3 层)】,其中包括要唤醒的计算机。魔术包通过MAC地址在网络上唯一地识别和寻址到目标计算机。

c)     当我们在电脑上配置完开启WOL功能后,我们的网卡能够在系统关机时以低功耗模式侦听传入数据包的网络设备。如果收到定向到设备 MAC 地址的魔术包,则网卡会向计算机的电源或主板发出信号以使电脑开机,就像你按下电源键一样。

d)     由于 WOL是建立在广播技术之上的,因此它通常只能在局域网中使用。

2.    什么是魔术包?

a)     魔术包是作为广播发送的帧,在其255字节有效负载内的任意位置包含6 FF(十六进制为 FF FF FF FF FF FF),然后是目标计算机的 48 MAC 地址的 16 次重复,总共102个字节。

b)     由于魔术包不被完整的协议栈实际解析,因此它可以作为任何网络和传输层协议的有效载荷发送。由于TCP需要建立连接,所以它通常作为UDP数据报发送到端口0(保留端口号),7Echo协议)或9(丢弃协议,Discard Protocol)。

c)     由于 WOLIP 协议层下运行,因此 IP 地址和域名毫无意义,我们只需要MAC 地址。

d)     PHP构造一个魔术包,这是一个示例:

<?php$ip='255.255.255.255';//全局广播地址$port='9';//端口置为0(保留端口号)、7(Echo协议)或9(丢弃协议,Discard Protocol)均可。//MAC地址需要转换为16进制,以MAC地址1A:2B:3C:4F:00:66为例。$str_hex="\xFF\xFF\xFF\xFF\xFF\xFF\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66\x1A\x2B\x3C\x4F\x00\x66";
$handle=stream_socket_client('udp://'.$ip.':'.$port,$errno,$errstr);
if (!$handle) {
die('ERROR:'.$errno. '- '.$errstr.'\n');
        }
fwrite($handle,$str_hex.'\n');
fclose($handle);
?>

e)    一个真实的魔法包(Wireshark视图):

image.png


3.    需要怎样的硬件支持?

a)     较旧的主板必须具有通过特殊的3针电缆连接到网卡的WAKEUP-LINK接口;但是,支持 PCI 2.2 标准且具有符合 PCI 2.2 标准的网络适配器卡的系统通常不需要 WOL电缆,因为所需的待机电源是通过 PCI 总线中继的。

主板上的 3 WoL 接口由针脚 1 +5V DC(红色)、针脚 2 接地(黑色)、针脚 3 唤醒信号(绿色或黄色)组成。如果 BIOS/UEFI 配置中启用了 WoL,通过为引脚 3提供 +5V DC,电脑就会开机。

image.png

b)     WOL通常需要在 PC 主板的 BIOS/UEFI程序的电源管理部分中启用,在某些系统(如 Apple 电脑)上,默认情况下会启用该功能。在较旧的系统上,BIOS/UEFI 设置可能称为WoL;在支持 PCI 版本2.2 的较新系统上,它可能称为 PME(电源管理事件,包括 WoL)。可能还需要将计算机配置为在系统关闭时为网卡保留待机电源。

c)     此外,为了让 WOL正常工作,有时需要在网卡驱动设置或板载芯片上启用此功能。在Windows系统可以直接在操作系统设备管理器中找到网卡属性来进行设置。image.png

image.png

d)     部分笔记本电脑允许使用无线WOL WoWLAN) 唤醒机器。

e)     根据微软官方文档,Windows系统的电脑在睡眠和快速启动模式下无法进行WOL唤醒。事实上WoL网络唤醒主要是依赖主板和网卡的硬件支持来运作的,因此,操作系统必须完全关闭才能使用WoL网络唤醒。

https://docs.microsoft.com/en-us/windows/win32/power/system-power-states?

 

项目方案

image.png

 

具体步骤

1.    在目标计算机上开启WoL功能:

a)     设备管理器-网络适配器-找到对应网卡-电源管理-勾选只允许幻数据包唤醒计算机。

b)     在电脑主板BIOS中电源管理开启网络唤醒功能

c)     Tips:不同设备在上述步骤上会有细微差异,因为不是本文重点所以略去细节。

2.    在目标主机所属局域网内部署已进行内网穿透的服务器:

a)     因为魔法包基于数据链路层并需要在局域网广播,无法被路由。因此目标主机所属局域网内需要有能够响应天猫精灵请求并在局域网内发送魔法包的服务器(可在NASOpenWRT路由器等设备上搭建)。

b)     在本地服务器上搭建网站服务(egPHP+Nginx)。在路由器上配置内网穿透(如果你有公网IP&桥接&端口映射那么我们可以做DDNS,性能更优)、虚拟服务器和IP&MAC绑定。

c)     Tips:如果你有云服务器的话可以做个跳板机来替代内网穿透服务。

在无公网IP的本地路由器上执行ssh -NT -R :端口>:127.0.0.1:80 root@

这样访问公网IP时会直接跳转到本地服务器。

 

3.    创建技能

登录天猫精灵开放平台-完成开发者实名认证-创建技能。

image.png

天猫精灵技能开发平台的语音技能分为自定义技能、音频内容技能、智能家居技能。

个人技能优势:私域技能,可以只在自有音响或朋友圈之内分享使用。开发流程和普通自定义技能相同。

在该项目我们使用Webhook能力,当用户向天猫精灵发出“开机”命令时,位于本地的服务器程序就会被调用从而生成魔法包来开机。具体的技能创建流程如下:

1.     创建技能

a)     填写技能名称、选择有调用词——与自定义技能不同,个人技能的调用词和技能名称不受唯一性限制——和自建Web服务器(位于受控端局域网用来发送魔法包的设备),然后我们点选【下一步】。image.png

b)     同意用户协议、创建成功后我们会自动跳转到应用界面。

2.     配置语音交互服务

a)     image.png

b)     创建意图,可以 如图所示输入意图名称和标识,需要勾选默认意图。image.png

c)     下载后端服务所需认证文件,将其放在已内网穿透的受控端服务器Web目录下的aligenie文件夹下(初次使用需要创建一个)

根据官方文档进行如下测试:

获取您配置的 Webhook URL,取出URL中域名和端口号(如果有),然后拼接上"aligenie/认证文件名.txt "访问这个路径,以返回的结果(认证文件的内容)作为依据,判断认证是否成功。

image.png

d)     在后端服务的服务器部署地址部分需要输入受控端内网服务器中构造的用于发送魔术包的脚本文件。

4.    在服务器端配置脚本文件

示例代码如下图所示image.png

其它语言也能够类似效果,关键是构筑一个魔术数据包并把它发送给需要唤醒的目标计算机,同时需要对天猫精灵的请求做出响应。

5.    测试能否正常执行

image.png

6.    发布并在设备上执行

与【自定义技能】不同的是,【个人技能】的发布提审信息非常简介,我们仅需提交版本号、图标和简介既可以保存提交。这使得发布过程更加流畅。

image.png

技能分享:

应用上线后,开发者可在个人音箱上使用技能,也可将技能分享给他人使用。目前最多支持分享给20个用户使用,超过20个人需要另外申请开放权限。

image.png

 

小结

通过本次实践,我们成功的创建天猫精灵技能,并使用天猫精灵技能语音远程实现电脑的开关机。本次实践成功的解决了虽然不是远程但是笔记本正连着显示器不想掀笔记本盖子按开机按钮的痛点和疫情期间远程办公时没法远程把公司电脑打开的痛点。对我来说,这是一次非常有价值的实践——我不用费劲在笔记本主板上焊接开机线了:),天猫精灵万岁~

本次实践搭配上远程控制软件(例如Windows自带的RDP软件-远程桌面连接),我们可以实现在家远程操作自己家别的房间或者远在公司工位上的电脑,实现开关机和远程桌面连接-就像在使用自己手边的电脑一样。

天猫精灵能做到的事情还有很多,比如我们可以在本次实践的基础上通过开发一个红外线二极管来实现语音开空调、开灯、拉窗帘等操作。这些应用场景都很实用,可以大幅提升生活幸福感。

这就是本次测评的全部内容了,感谢你的耐心阅读。

目录
相关文章
|
3月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
116 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
129 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
78 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
115 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
2月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
40 0
|
3月前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
70 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
4月前
|
机器学习/深度学习 人工智能 算法
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障', '糖尿病性视网膜病变', '青光眼', '正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网页端可视化操作界面,实现用户上传一张眼疾图片识别其名称。
102 9
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
|
5月前
|
网络协议 网络安全
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
321 0
|
7月前
|
存储 人工智能 应用服务中间件
Web应用是一种通过互联网浏览器和网络技术在互联网上执行任务的计算机程序
【5月更文挑战第30天】Web应用是一种通过互联网浏览器和网络技术在互联网上执行任务的计算机程序
114 2
|
6月前
计算机网络——物理层相关习题(计算机专业考研全国统考历年真题)
计算机网络——物理层相关习题(计算机专业考研全国统考历年真题)
55 0

热门文章

最新文章