找回密码
 立即注册
img_loading
智能检测中

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 4029|回复: 23

0元实现小爱同学语音操作电脑开关机

[复制链接]
发表于 2024-1-4 18:02 | 显示全部楼层 |阅读模式
本帖最后由 咫尺望佳人 于 2025-3-30 20:38 编辑

使用python代码建立TCP连接对接巴法云平台,实现小爱同学开关机电脑。
软件实现,完全免费。不用智能插座,不用pci卡。
方案总体思路:在局域网运行一个米家支持的“代码运行的虚拟设备”,小爱同学的指令发送到虚拟设备,虚拟设备运行代码发送数据开关机电脑。
需要解决两个问题:
  • 寻找米家或其它智能家居支持的第三方平台。
  • 局域网里有一个设备一直待机,且能运行程序,对接第三方平台设备,发送网络唤醒数据包。
----------------------------------------------------
我这里选用的是openwrt路由器和巴法云平台。
openwrt路由要有足够的运行内存和磁盘空间安装python3运行环境,代码是用python写的。
电脑主板bios和系统好先设置好网络唤醒,固定电脑IP地址,静态dhcp或其它,测试ok再继续。
--------------------------
具体步骤:
  • 注册巴法云账号,(可选安装手机APP):https://bemfa.com
  • 在巴法云控制台,获得密钥和新建主题,
    请先查看一下设备类型说明:https://cloud.bemfa.com/docs/src/index_device.html
    推荐
    主题名开关设备的006结尾。
    并在主题的更多设置里修改一下昵称,这个昵称将用在小爱语音中。
  • 安装代码运行环境
    登录openwrt路由,opkg软件包安装python3和coreutils-nohup
  • 上传编辑好的代码到op路由器,并设置开机自启动,启动项-->本地启动脚本-->插入一行:
    sleep 180s & nohup python /root/bemfa/bemfa.py > /dev/null 2>&1 &
    说明:

    • sleep 180s是给断电后光猫启动和拨号预留足够的时间。
    • nohup是linux系统用来保持python后台运行的,需要先安装软件包coreutils-nohup
    • "/root/bemfa/bemfa.py" 是代码存放路径,需要与实际路径对应,
      root路径下可能会在系统sysupgrade后消失,请自行选择路径。
    • “/dev/null” 是输出日志的保存路径,/dev/null用来忽略不保存,py代码已有日志路径
    • 最后的 "2>&1 &" 符号不能删。
  • 保存后可以登录ssh手动运行py代码或直接重启路由器:
    nohup python /root/bemfa/bemfa.py > /dev/null 2>&1 &
    可在巴法云控制台或app查看设备状态,
    在线则表示代码正在运行,订阅主题的TCP已连接,
    离线则表示代码未能运行。
    具体问题可查看输出日志:cat /tmp/bemfa.log
  • 米家APP绑定设备
    • 打开米家App,>我的>添加其它平台>点击添加>巴法>绑定账号 ,绑定巴法账号
    • 绑定成功后,支持小爱控制的巴法设备会出现在 我的>其他平台设备>巴法 设备列表中,或者手动点击同步设备
    • 第三方的设备只有小爱同学语音能控制,米家里不会单独显示,不能在自动化里面操作,但可以在小爱训练里面操作。
  • 此时喊小爱同学开你的设备昵称,比如“打开电脑”。到这里就实现语音开机了。
    如果不能开机在op路由里安装luci-app-wol,手动唤醒试试。或者在巴法云控制台或app点击操作,或查看输出日志分析问题。
  • 剩下如何让小爱同学关电脑
    到了这一步,实现的方法有很多,我用的方法是:

    • 在op路由器的py代码中监听TCP的 ‘33333’端口,让电脑端主动连接,当运行关闭电脑时发送指令到电脑端。
    • 在电脑端也运行一个python代码,连接路由器的TCP ‘33333’端口,如果接收到指定的数据就运行关机命令。
    这样的好处是可以实时判断电脑是否开机,将向巴法云发送心跳包和更新状态的功能合二为一。还避免长期使用ping命令。
    这里不是非要用python,用java,nodejs,c/c++等语言实现都行。
-------------------------------------------------------------------------------------------------
----------------------------------------------------------
代码文件:
链接:https://pan.baidu.com/s/1C37ASQoqB9vVqcH0ykcSUQ?pwd=qxun
----------------------------------------------------------
python语言的代码缩进的是非常严格的,不要随意添加删除或加空格回车,
尽量使用代码编辑器编辑和格式化代码。

openwrt运行的python代码需自行修改两处:
  • UID 修改成自己的密钥
  • DEVICES 按照格式修改订阅主题和电脑的信息
    需要支持几台电脑就插入几个数组对象

openwrt路由的py代码运行时将使用约18M内存。

windows电脑端运行的关机代码bemfa_shutdown.py:
bemfa_shutdown.py修改说明:
  • gl_server_ip:修改为服务器的实际IP地址
  • gl_tcp_port:tcp连接端口,须和op路由器代码的一致:33333
  • gl_cmd:这一行可不用修改,shutdown.exe使用的是绝对路径,可避免环境变量问题。
    shutdown的参数-t时间可自己延长一些,避免说错话就把电脑关了,
    要是不想关了可立即打开cmd输入“shutdown -a”取消计划关机

再新建一个bat批处理,并设置开机自启:
添加计划任务,开机启动时运行bat文件:
bat里写上:start / b pythonw ./bemfa_shutdown.py
"./bemfa_shutdown.py"是代码的实际路径,必须对应上
开机后可在任务管理器中查看是否有python进程在运行
----------------------------------------
巴法云平台的文档:https://cloud.bemfa.com/docs/src/tcp.html
----------------------------------------
以下是python代码逻辑说明,AI总结的:
用于与巴法云服务器进行通信,并实现设备的远程唤醒和关机功能。以下是该系统的设计逻辑总结:
### 配置管理
- **AppConfig 类**:集中管理所有配置项,包括服务器IP地址、端口、重连延迟、心跳包发送间隔时间、日志文件路径及大小限制等。
### 日志管理
- **setup_logging 函数**:设置日志记录的方式,使用`RotatingFileHandler`来确保日志文件不会无限增长,并设定日志级别为DEBUG。
- **logger 函数**:自定义的日志记录函数,能够在每条日志信息前加上设备的`topic`信息,便于区分不同设备的日志输出。
### 网络通信
- **send_magic_packet 函数**:根据MAC地址发送魔术包(Magic Packet),用于远程唤醒设备。
- **connect_and_monitor 函数**:
  - 建立与巴法云服务器的TCP连接,并订阅指定主题。
  - 启动一个后台线程定期发送心跳包以保持连接。
  - 接收来自服务器的数据,将数据缓存并在每次接收后检查是否有完整的消息(以`\n`分隔)。若有,则处理消息并根据内容决定是否发送唤醒或关机命令。
- **handle_client 函数**:处理从设备端发起的TCP连接请求,当设备连接时更新其在线状态,断开时则标记为离线。
- **start_tcp_server 函数**:在指定接口上启动TCP服务器,监听来自设备的连接请求,并为每个连接启动一个新的线程调用`handle_client`处理。
### 心跳包管理
- **heartbeat_payloads 字典**:存储每个设备的心跳包内容,以便于发送心跳包时直接获取而无需判断设备状态。
- **update_heartbeat_payload 函数**:根据设备的状态(上线或下线)更新对应的心跳包内容。
### 主流程控制
- **main 函数**:
  - 初始化日志记录。
  - 根据设备列表中的信息,针对每个网络接口启动TCP服务器监听设备连接。
  - 对于每个设备,建立到巴法云服务器的连接并监控消息,同时初始化其心跳包内容为离线状态。
### 多线程支持
整个系统广泛使用了多线程技术,通过`threading.Thread`为每个需要独立运行的任务(如心跳检测、消息监听、客户端处理等)创建新的线程,保证系统的并发性和响应速度。
这种设计使得系统能够有效地管理多个设备的连接状态,及时响应来自巴法云服务器的指令,并对设备执行相应的操作(如唤醒或关机),同时也确保了良好的可扩展性和维护性。

----------------------------------------
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2024-1-4 18:14 | 显示全部楼层
我用的向日葵的插座,主板设置上电自启,从手机端向日葵的aa给插座通电就开机了,

点评

不管什么方案都有局限性,适合自己就好。  详情 回复 发表于 2024-1-4 18:40
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-4 18:21 | 显示全部楼层
拼夕夕20块买的pci内置卡接入米家,直接手环开机。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-4 18:40 | 显示全部楼层
蟑螂将军 发表于 2024-1-4 18:14
我用的向日葵的插座,主板设置上电自启,从手机端向日葵的aa给插座通电就开机了, ...

不管什么方案都有局限性,适合自己就好。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-4 19:51 来自手机 | 显示全部楼层
妙啊,OpenWrt跟MQTT协议一结合法力无边啊
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-4 20:00 | 显示全部楼层
挺好的办法,我之前是用的 esp32,也是点灯的库
后来换了 Home Assistant,就没折腾过了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-4 21:31 | 显示全部楼层
一只WiFi智能插座搞定远程开机(主板设置通电开机),至于远程关机,没折腾了。远程访问电脑桌面,完成操作后顺便关机再退出远程桌面

点评

有空的话可以试试这个方案,把智能插座解放出来。  详情 回复 发表于 2024-1-9 10:35
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-4 21:31 | 显示全部楼层
一只WiFi智能插座搞定远程开机(主板设置通电开机),至于远程关机,没折腾了。远程访问电脑桌面,完成操作后顺便关机再退出远程桌面
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-4 21:31 | 显示全部楼层
本帖最后由 aming.ou 于 2024-1-7 20:47 编辑

感谢分享,感谢分享
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 10:35 | 显示全部楼层
aming.ou 发表于 2024-1-4 21:31
一只WiFi智能插座搞定远程开机(主板设置通电开机),至于远程关机,没折腾了。远程访问电脑桌面,完成操作 ...

有空的话可以试试这个方案,把智能插座解放出来。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-15 11:18 | 显示全部楼层
感谢楼主的分享 等会试一下
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-18 21:35 来自手机 | 显示全部楼层
谢谢分享,先收藏慢慢研究
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-1-18 21:45 来自手机 | 显示全部楼层
点灯不是可以添加10个免费设备吗,现在注册的是不是只能免6个了?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

我是去年8月左右注册的,只能添加一个免费独立设备,后面在电脑网页端发现关联github可以送5个。差点就花5元买一个了。  详情 回复 发表于 2024-1-19 09:41
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-19 09:41 | 显示全部楼层
sadly2004 发表于 2024-1-18 21:45
点灯不是可以添加10个免费设备吗,现在注册的是不是只能免6个了?

我是去年8月左右注册的,只能添加一个免费独立设备,后面在电脑网页端发现关联github可以送5个。差点就花5元买一个了。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-2-18 10:23 | 显示全部楼层
类似的巴法云也可以,配合lucky可以开机关机
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛

只谈技术、莫论政事!切勿转播谣言!为了你也为了他人。
只谈技术、莫论政事!(点击见详情) 切记不要随意传播谣言,把自己的日子过安稳了就行,为了自己好也为了大家好。 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。

查看 »

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-6-3 08:20

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表