【语音控制】0成本实现小爱远程开关电脑

背景:之前使用HACS/网页版实现了电脑网络唤醒,但不能关机,不支持小爱

问题:不能语音关机,不支持小爱

环境:支持WOL的主板电脑,python 3.X环境(我这里用了群晖)

解法:1.使用小爱添加第三方设备

           2.第三方平台提供API,

          3.找台服务器运行Python脚本虚拟一个开关设备,定义开关触发bash脚本

  • 方案评估:在评估方案时,在网上查资料最终方案为点灯科技 Blinker

  • 系统架构:一番研究后最终系统架构和步骤如下:

  •  Python程序逻辑如下

流程、架构理清了,开始执行:

1.准备python3.X的环境,确保pip3 命令可用,群晖没有PIP3可以装,但是后面很多库、依赖安装出错,最终放弃,我直接使用docker python环境

已经搞好的(包含依赖环境)上传到了:https://hub.docker.com/r/realwang/blinker-wol

 2.在python环境中安装Blinker依赖环境,参考官方教程

  点灯科技-点灯物联网解决方案

3.手机端操作

1.下载个点灯科技APP,注册账户2. 添加设备-->独立设备-->WIFI接入-->阿里云-->复制key3. 右上角编辑-->添加按钮-->修改键名为"btn-pc1"类型勾选开关按键4. 右拉添加个调试组件,锁定退出

4.编写python脚本,确保服务器81端口闲置

#!/usr/bin/env python
# -*- coding: utf-8 -*-# 本代码引用arduino论坛 南岛孤云
# 直接拿去用需要改5处,1,密匙,2,局域网电脑的固定IP,3,电脑ssh用户名,4,电脑ssh密码 5,电脑的MAC地址from Blinker import Blinker, BlinkerButton, BlinkerNumber, BlinkerMIOT
from Blinker.BlinkerConfig import *
from Blinker.BlinkerDebug import *
from wakeonlan import send_magic_packet
import paramiko
import time
import subprocessauth = 'xxxxxxxxxx'  # 1,点灯app上获得的密匙BLINKER_DEBUG.debugAll()Blinker.mode("BLINKER_WIFI")
Blinker.miotType('BLINKER_MIOT_OUTLET')
Blinker.begin(auth)staticip = "192.168.1.200"  # 2,电脑局域网固定IP,用于检测电脑开关状态以及利用SSH关机,改为你的设置
pcusr = 'xxxxxx'  # 3,电脑ssh用户名
pcpw = 'xxxxxx'  # 4,电脑ssh密码pcmac = 'ff.ff.ff.ff.ff.ff'  # 5,MAC地址,改成你自己电脑网卡的button1 = BlinkerButton("btn-pc1")  # 数据键,在App里设置一个一样的开关,类型为 '开关按键',图标用滑动开关,其他随意,文本可为空
cmd1 = "timeout 0.1 ping -c 1 " + staticip  # 电脑开关检测就是一个局域网内的ping,超时我设置为100ms,貌似太短或太长小爱都容易出错
lockbutton1 = FalseoState = ''def miotPowerState(state):''' '''global oStateBLINKER_LOG('need set power state: ', state)oState = stateBlinkerMIOT.powerState(state)BlinkerMIOT.print()
# 小爱控制的实际部分放在上报状态之后,因为电脑开机实际时间很长,小爱等久了她会以为没开if state == 'true':button1_callback('on')elif state == 'false':button1_callback('off')def miotQuery(queryCode):''' '''global oState# 问小爱电脑开了吗,ping一次获得电脑实际状态if subprocess.call(cmd1, shell=True)==0:oState = 'true'else:oState = 'false'BLINKER_LOG('MIOT Query codes: ', queryCode)if queryCode == BLINKER_CMD_QUERY_ALL_NUMBER :BLINKER_LOG('MIOT Query All')BlinkerMIOT.powerState(oState)BlinkerMIOT.print()elif queryCode == BLINKER_CMD_QUERY_POWERSTATE_NUMBER :BLINKER_LOG('MIOT Query Power State')BlinkerMIOT.powerState(oState)BlinkerMIOT.print()else :BlinkerMIOT.powerState(oState)BlinkerMIOT.print()# 关机部分用paramiko的sshclient,不用密码的话可以改用密匙,具体查阅paramiko用法
def shutdownpc():global staticipglobal pcusrglobal pcpwclient = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(staticip, username=pcusr, password=pcpw)stdin, stdout, stderr = client.exec_command('shutdown -s -f -c "小爱将在10秒内关闭这个电脑" -t 10')  if client is not None:client.close()del client, stdin, stdout, stderr# 开关键,集成了开关功能,状态报告给小爱,开关过程中的运行保护,开关后状态的更新。
def button1_callback(state):""" """global lockbutton1global oStateglobal pcmacdtimeout = 60  # 开关机超时默认60秒if lockbutton1==False:BLINKER_LOG('get button state: ', state)if state=='on':if subprocess.call(cmd1, shell=True)==0:oState = 'true'Blinker.print("检测到电脑已开,按钮状态已更新")button1.text('已开机')button1.print(state)else:Blinker.print("发送开机指令...")oState = 'true'lockbutton1 = Truetic = time.perf_counter()toc = time.perf_counter()send_magic_packet(pcmac)  # 发魔术包开机while subprocess.call(cmd1, shell=True)!=0 and toc-tic<dtimeout+2:time.sleep(2)toc = time.perf_counter()if toc-tic >= dtimeout:Blinker.print("开机超时!")button1.text('已关机')button1.print('off')else:button1.text('已开机')button1.print(state)lockbutton1 = Falseelif state=='off':if subprocess.call(cmd1, shell=True)==0:Blinker.print("发送关机指令...")oState = 'false'lockbutton1 = Truetic = time.perf_counter()toc = time.perf_counter()shutdownpc()  # 关机while subprocess.call(cmd1, shell=True)==0 and toc-tic<dtimeout+2:time.sleep(2)toc = time.perf_counter()if toc-tic >= dtimeout:Blinker.print("关机超时!")button1.text('已开机')button1.print('on')else:button1.text('已关机')button1.print(state)lockbutton1 = Falseelse:oState = 'false'Blinker.print("检测到电脑已关闭,按钮状态已更新")button1.text('已关机')button1.print(state)else:Blinker.print("正在开机或关机中..")# 心跳加入了电脑状态检测,更新按钮
def heartbeat_callback():global oStateif subprocess.call(cmd1, shell=True)==0:oState = 'true'button1.text('已开机')button1.print("on")else:oState = 'false'button1.text('已关机')button1.print("off")button1.attach(button1_callback)
Blinker.attachHeartbeat(heartbeat_callback)BlinkerMIOT.attachPowerState(miotPowerState)
BlinkerMIOT.attachQuery(miotQuery)if __name__ == '__main__':while True:Blinker.run()

5.运行脚本,如果报错,缺什么补什么

6.电脑安装openssh,ssh测试一下到win10

6.跑起来手机上的设备会显示在线,手动操作开机后用小爱测试下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/50236.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小爱同学调用系统接口,语音下发任务

需求很简单,就是语音对话小爱,调用系统接口,达到下发任务的目的 1.立即开发 2.开始创建技能 3.点击自定义技能 4.技能名称随便定义,面向设备,这边的需求是小爱音响 5.设置调用名称,上传图标,必填项都填满就行了 6.添加意图,3个系统意图一定要添加,不然莫名其妙的错误,添加一个…

解读:【小爱同学】智能问答系统

重磅推荐专栏&#xff1a; 《Transformers自然语言处理系列教程》 手把手带你深入实践Transformers&#xff0c;轻松构建属于自己的NLP智能应用&#xff01; 1. 基于检索匹配的问答 1.1 FAQ问答框架 1.2 检索 检索召回分为以下三种方式&#xff1a; term检索实体检索语义检索…

ESP32接入小爱同学,实现语音控制

准备工作 安装手机app 米家app小米音箱或小爱同学app点灯科技app&#xff0c;app下载链接&#xff1a;https://diandeng.tech/dev 开发环境搭建 Arduino IDE需安装好esp32扩展Arduino IDE 1.8.7或更新版本务必使用 2.0.0 或以上release版本的 ESP32 Arduino package Arduin…

可惜我是水瓶座

这是我写的十二星座十二人的第七篇。我过去写过&#xff1a; 双子刘若英&#xff1a;《若》狮子陈奕迅&#xff1a;《狮子医生》天秤李安&#xff1a;《安》天蝎朴树&#xff1a;《蝎子朴树》摩羯周杰伦&#xff1a;《范特西》双鱼伊能静&#xff1a;《十二星座十二人之&#x…

机器人用上AI后,拥有了堪比人类皮肤的触觉:轻松引线穿针、夹取鸡蛋丨Science子刊...

萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 你见过能灵活夹取鸡蛋、可取可放的机器人吗&#xff1f; 不仅如此&#xff0c;甚至还能穿针引线&#xff1a; 就算是往它拿着的瓶子里倒水&#xff0c;也不会掉&#xff1a; 这是来自香港城市大学、香港大学、CMU和南方科技大学的…

谷歌年度AI技术总结来了!Jeff Dean执笔,附赠27个开源工具和数据大礼包

杨净 梦晨 发自 凹非寺量子位 报道 | 公众号 QbitAI Jeff Dean亲笔盘点谷歌AI研究成果&#xff0c;已经成了一年一度的保留节目。 今年也不例外&#xff0c;还是他抽出一部分假期时间完成的。 过去一年&#xff0c;谷歌研发投入依然是全球最高&#xff0c;在一整年的时间里产出…

高空抛物悲剧频出,AI 监控系统:让我来「罩」着你

来源&#xff5c;HyperAI超神经 文&#xff5c;神经小兮 近年来&#xff0c;因高空抛物、坠物造成的伤害事件屡上报端。水瓶、西瓜皮、易拉罐&#xff0c;甚至菜刀&#xff0c;都可能冷不丁地从天而降&#xff0c;砸向无辜的路人。轻则致伤&#xff0c;重则致命&#xff0c;让人…

OpenCV综合练习1——水瓶水位线合格检测

数字图像处理综合练习——水瓶水位线合格检测 马上就要转到学习深度学习的主干线了&#xff0c;这也是大势所趋&#xff0c;但不能忘本&#xff0c;传统图像处理的知识也是非常重要的&#xff0c;特此记录一下之前学习时做过的小练习。 整个项目的资源放在&#xff1a;水瓶水…

2022年中国便携水瓶市场现状研究分析报告

据我们的分析师调研显示&#xff0c;2021年中国便携水瓶市场销售收入达到了 万元&#xff0c;预计2028年可以达到 万元&#xff0c;2022-2028期间年复合增长率(CAGR)为 %。中国市场核心厂商包括Newell Brands、CamelBak、Tupperware Brands、Cascade Designs和BRITA等&#xff…

【实例篇】怎样测试一个矿泉水瓶

今天我们来分析关于实例的测试&#xff0c;测试一个矿泉水瓶。在测试的时候&#xff0c;需要从以下几个方面进行测试&#xff0c;比如说它的外观功能性能、安全性、易用性还有兼容性。 也可以不从这几个方面进行测试&#xff0c;这样的话能想起来的方面比较少&#xff0c;因为…

java为什么不能多继承_为什么Java不支持多继承

最近我的一个朋友进行了几次面试&#xff0c;碰到了一个很容易被问的问题&#xff1a;为什么Java不支持多重继承&#xff0c;尽管他回答Java可以通过实现多个interface的方式实现多重继承&#xff0c;但面试官却依然为什么不支持。也许我的朋友仅仅是阅读了一些相关的博客&…

我的世界服务器物品不堆叠,我的世界不可堆叠物品怎么堆叠

来源&#xff1a;游戏园日期&#xff1a;2019-05-11 04:03:07 我的世界不可堆叠物品怎么堆叠。那在我的世界里面怎么制作堆叠的不可堆叠物品&#xff0c;怎么感觉这个问的这么绕口呢&#xff1f;那不管了&#xff0c;下面就一起来看看下面的这个教你怎么堆叠不可堆叠物品的方法…

【花雕动手做】有趣好玩的音乐可视化系列小项目(14)---水杯水瓶灯

偶然心血来潮&#xff0c;想要做一个声音可视化的系列专题。这个专题的难度有点高&#xff0c;涉及面也比较广泛&#xff0c;相关的FFT和FHT等算法也相当复杂&#xff0c;不过还是打算从最简单的开始&#xff0c;实际动手做做试验&#xff0c;耐心尝试一下各种方案&#xff0c;…

我的AI不可能这么傻:深度学习的致命弱点

转载自 Nature 点击上方“迈微AI研习社”&#xff0c;选择“星标★”公众号 原作者: Douglas Heaven 关注公众号阅读原文&#xff0c;这个排版太差。 人工智能专家正在想办法修复神经网络的缺陷。 一辆自动驾驶汽车正在靠近一个停车让行标志&#xff0c;它非但没有停下&…

水瓶效果制作

前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 本次分享主要为水瓶效果&#xff0c;思路借鉴于https://www.patreon.com/posts/quick-game-art-18245226 该链接&#xff0c;不过部分内容较难理解&#xff0c;所以打算使用自己的思路实现一下 提示&…

读书笔记:深度学习进阶-自然语言处理(俗称鱼书二)

文章目录 前言一、神经网络的复习二、自然语言和单词的分布式表示2.1什么是自然语言处理2.2同义词词典2.3基于计数的方法2.3.1基于python的语料库的预处理2.3.2单词的分布式表示2.3.3分布式假设2.3.4共现矩阵2.3.5向量间的相似度2.3.6相似单词的排序 2.4基于计数的方法的改进2.…

隐私计算将改变金融行业的游戏规则?

开放隐私计算 01 背景 2月底&#xff0c;相关部门印发《数字中国建设整体布局规划》提出&#xff0c;到2025年&#xff0c;基本形成横向打通、纵向贯通、协调有力的一体化推进格局&#xff0c;数字中国建设取得重要进展&#xff1b;到2035年&#xff0c;数字化发展水平进入世界…

【ChatGLM】使用ChatGLM-6B-INT4模型进行P-Tunning训练记录及参数讲解

文章目录 模型训练步骤参数含义名词解释欠拟合泛化能力收敛性梯度爆炸 初步结论 小结 模型训练 首先说明一下训练的目的&#xff1a;提供本地问答知识文件&#xff0c;训练之后可以按接近原文语义进行回答&#xff0c;类似一个问答机器人。 步骤 安装微调需要的依赖&#xf…

几个潜在的AI科研助手

最近看到一个新闻说ChatGPT被某科研文章列为作者之一。以自然语言处理和深度学习为基础的人工智能在语言修改润色和翻译方面表现优异&#xff0c;似乎还将改变一些传统的论文阅读和写作方式。本文记录几个最近了解到的几个工具。 Scispace 地址&#xff1a;https://typeset.io/…

客户体验词汇表:需要了解的最重要的术语

无论如何&#xff0c;当我们说客户体验时&#xff0c;是什么意思&#xff1f; 这是最终的客户体验词汇表&#xff0c;可帮助指导您。 客户体验&#xff0c;也称为 CX&#xff0c;会影响从客户参与度、保留率、忠诚度、终生价值到最终盈利的方方面面。 难怪获得正确的客户体验是…