天猫精灵/小爱同学+巴法云+Openwrt控制局电脑/群晖开关机

天猫精灵/小爱同学+巴法云+Openwrt控制局电脑/群晖开关机

  • 事情的起因
  • 实战环境
  • 开始发车
    • 1.天猫精灵/小爱同学 连接 八法云
  • 2.openwrt
  • 3.docker环节
  • 注意:`sshpass 要先使用 ssh命令登陆一下你要唤醒或者远程关机的设备,不然可能因为一个登陆提示你是否登陆的yes/no导致程序没有反应,然后使用sshpass -p 密码 ssh root@openwrt的ip 登陆看看是否成功到目标设备,代码中这句话后面是要执行的命令,如果到不了目标设备就没有下一步了`
  • `注意: 把ps -aux | grep wolup.py | grep -v grep | awk '{print $2}' | xargs 输入控制台先看看是不是把pid给弄出来了,如果不是吧$后面的数字改成1,2,3...一个一个实验,不然程序没干掉就无法重启`
  • window也可以安装openssh的服务端和客户端 ,百度搜一下,关机需要使用
  • 另外 wolup.log 是日志可以观察一下哪个环节有问题

事情的起因

因为设备多,还怕费电,所以懒得手动开关机

实战环境

1.天猫精灵/小米音响 都可以
2.openwrt路由器,所有设备在同一个局域网(ping通,当然不在一个也可以,不过麻烦一点,但是必须能ping通,百度如何ping通,走网上说的组网通道,例如向日葵x1组的网也行)
3.设备需要支持 wol ,用openwrt里的网络唤醒试一下,能唤醒再接着看下文
4.注册 巴法云 ,能免费使用的都很牛x,感谢!!!

开始发车

1.天猫精灵/小爱同学 连接 八法云

1.巴法云 https://cloud.bemfa.com/
2.添加主题
在这里插入图片描述
添加完成到 天猫精灵/小爱同学app 添加巴法云,具体不再赘述,百度知道

2.openwrt

由于稳定需要害怕把openwrt给高挂,在路由器里只添加几个脚本,其他在docker里拉一个50多md的Ubuntu容器里面搞

  1. ssh 连接到openwrt 推荐NxShell,其他也可以
  2. vim pc_xxx.sh #xxx为你添加设备的名字,见名知意就行
  3. 输入i 进入插入模式 粘贴
#!/bin/bash
echo "xxx电脑,这里只是输出看一下,改成你的设备名字"                
echo "magic package is ready to sent"
# br-lan 你的的设备所在的接口
etherwake -D -i "br-lan" "MAC地址,这里要修改啊!!!!!!"
echo "magic package has been sent"

ESC键,输入 :wq 回车
4.给与执行操作权限 chmod +x pc_xxx.sh xxx是你自己起的名字
5.输入 ./pc_xxx.sh 试一下 注意: etherwake软件要有 没有的话 opkg install etherwake 或者百度知道… 不能唤醒的话就 game over 了
有几个电脑就见几个启动文件,实际上一个也行不过哪有复制粘贴来三个快,一个的话需要接受mac作为参数,具体百度一下…

3.docker环节

1.拉取镜像 xxx你的端口,不能用就换一个 -p xxx:22

docker run -e TZ=Asia/Shanghai -p 8022:22 -it --name ubuntuserver ubuntu:latest /bin/bash

进入终端,openwrt上的docker
在这里插入图片描述
其他的docker UI都有类似功能,或者刚刚拉镜像时别出去,直接就到控制台了

su root
passwd 123456 #密码自己设置
# 安装 ssh 方便以后链接
apt install openssh-server
# 启动ssh
service ssh restart
# 设置ssh开机启动
systemctl enable ssh

systemctl enable ssh 能用最好,可惜docker里不能用systemctl 着实恶心
解决方案
vim /root/startup_run.sh
startup_run.sh脚本内容:

#!/bin/bash
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$LOGTIME] startup run..." >>/root/startup_run.log
service ssh start >>/root/startup_run.log

给执行权限 chmod +x /root/startup_run.sh
将脚本加入到启动文件中
vim /root/.bashrc
在.bashrc末尾增加如下语句

# startup run
if [ -f /root/startup_run.sh ]; then./root/startup_run.sh
fi

修改ssh配置允许登陆
vim /etc/ssh/sshd_config
PermitRootLogin前的#好去掉,后面改成yes
PermitRootLogin yes
重启Ubuntu容器,用ssh工具链接,不成功尝试百度解决

Ubuntu安装需要的环境

apt update
apt upgrade
apt install python3 sshpass 
# 不成功尝试换源

脚本上传到 /root 下,就是NxShell登陆后上传的地方
在这里插入图片描述
在这里插入图片描述
上传 wolup.py文件 ,注意一定要按需,有几台设备修改几台
此处代码参考 https://www.bilibili.com/read/cv23088336/ 这个大神
还有https://cloud.bemfa.com/docs/#/
一定要改成自己的

注意:sshpass 要先使用 ssh命令登陆一下你要唤醒或者远程关机的设备,不然可能因为一个登陆提示你是否登陆的yes/no导致程序没有反应,然后使用sshpass -p 密码 ssh root@openwrt的ip 登陆看看是否成功到目标设备,代码中这句话后面是要执行的命令,如果到不了目标设备就没有下一步了

# -*- coding: utf-8
import socket
import threading
import time
import os
import datetime# 巴法云私钥
client_id = "巴法云私钥"
# 主题值
top_id = "PC1001,PC2001,PC3001"# 华硕电脑
wol1 = 'sshpass -p 密码 ssh  root@openwrt的ip ./pc_huashuo.sh'
# 联想电脑
wol2 = 'sshpass -p 密码 ssh  root@openwrt的ip ./pc_lianxiang.sh'
# pc3指的是黑群晖
wol3 = 'sshpass -p 密码 ssh  root@openwrt的ip ./pc_san.sh'# 局域网连接openssh服务器,进行关机操作
# 注意一定要是root登陆,不然没有权限关机
# 华硕电脑
shutdown1 = 'sshpass -p 密码 ssh cpc@设备的ip "shutdown -s -t 0"'
# 联想电脑
shutdown2 = 'sshpass -p 密码 ssh cpc@设备的ip "shutdown -s -t 0"'
# 群晖或者linux
shutdown3 = 'sshpass -p 密码 ssh root@设备的ip "sudo shutdown -h now"'def connTCP():global tcp_client_socket# 创建sockettcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# IP 和端口server_ip = 'bemfa.com'server_port = 8344try:# 连接服务器tcp_client_socket.connect((server_ip, server_port))# 发送订阅指令substr = 'cmd=1&uid=' + client_id + '&topic=' + top_id + '\r\n'tcp_client_socket.send(substr.encode("utf-8"))except():time.sleep(2)connTCP()# 心跳
def Ping():# 发送心跳try:keep_live = 'ping\r\n'tcp_client_socket.send(keep_live.encode("utf-8"))except():time.sleep(2)connTCP()# 开启定时,30秒发送一次心跳t = threading.Timer(30, Ping)t.start()# 获取当前时间
def nowTime():now = datetime.datetime.now()formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")return formatted_timeconnTCP()
Ping()while True:# 接收服务器发送过来的数据recvData = tcp_client_socket.recv(1024)if len(recvData) != 0:try:# 返回的参数 cmd=2&uid=xxx&topic=PC001&msg=onres = recvData.decode('utf-8')if res.endswith('\r\r\n'):res = res.replace('\r\r\n', '')print("时间:{}-->服务启动".format(nowTime()))print('时间:{}-->接收到数据:{}'.format(nowTime(),res))if 'topic=PC1001' in res:sw = str(res.split('&')[3].split('=')[1]).strip()if str(sw) == str("on"):try:print("时间:{}-->正在打开电脑1".format(nowTime()))os.system(wol1)except():time.sleep(2)print("打开电脑1失败")elif str(sw) == str("off"):try:print("时间:{}-->正在关闭电脑1".format(nowTime()))os.system(shutdown1)except():time.sleep(2)print("关闭电脑1失败")elif 'topic=PC2001' in res:sw = str(res.split('&')[3].split('=')[1]).strip()if str(sw) == str("on"):try:print("时间:{}-->正在打开电脑2".format(nowTime()))os.system(wol2)except():time.sleep(2)print("打开电脑2失败")elif str(sw) == str("off"):try:print("时间:{}-->正在关闭电脑2".format(nowTime()))os.system(shutdown2)except():time.sleep(2)print("关闭电脑2失败")if 'topic=PC3001' in res:sw = str(res.split('&')[3].split('=')[1]).strip()if str(sw) == str("on"):try:print("时间:{}-->正在打开电脑3".format(nowTime()))os.system(wol3)except():time.sleep(2)print("打开电脑3失败")elif str(sw) == str("off"):try:print("时间:{}-->正在关闭电脑3".format(nowTime()))os.system(shutdown3)except():time.sleep(2)print("关闭电脑3失败")except():time.sleep(2)else:print("conn err")connTCP()

启动脚本 vim wolSetup.sh

#!/bin/bash
nohup /usr/bin/python3 -u /root/wolup.py 1>/root/wolup.log 2>&1 &

给与执行权限chmod +x wolSetup.sh
加入开机启动
vim .bashrc 后面加上

# wol run
if [ -f /root/wolSetup.sh ]; then./root/wolSetup.sh
fi

以为链接可能会断加入定时任务
安装 cron
apt install cron
加入定时任务
crontab -e最后插入

# 每2小时启动一次
0 */2 * * * ps -aux | grep wolup.py | grep -v grep | awk '{print $2}' | xargs kill -15; nohup /usr/bin/python3 -u /root/wolup.py 1>/root/wolup.log 2>&1 &

注意: 把ps -aux | grep wolup.py | grep -v grep | awk '{print $2}' | xargs 输入控制台先看看是不是把pid给弄出来了,如果不是吧$后面的数字改成1,2,3...一个一个实验,不然程序没干掉就无法重启

查看定时任务
service cron status
由于容器的原因定时任务未能开机启动,模仿ssh和wolup.py的方式加入开机启动
vim .bashrc ./root/wolSetup.sh后面加上
service cron start

window也可以安装openssh的服务端和客户端 ,百度搜一下,关机需要使用

另外 wolup.log 是日志可以观察一下哪个环节有问题

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

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

相关文章

(论文阅读40-45)图像描述1

40.文献阅读笔记(m-RNN) 简介 题目 Explain Images with Multimodal Recurrent Neural Networks 作者 Junhua Mao, Wei Xu, Yi Yang, Jiang Wang, Alan L. Yuille, arXiv:1410.1090 原文链接 http://arxiv.org/pdf/1410.1090.pdf 关键词 m-RNN、…

【Linux】Linux进程间通信(三)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

Python:函数篇(每周练习)

编程题: Python第四章作业(初级) (educoder.net) 题一:无参无返回值函数 def print_hi_human(): # 函数名用小写字母print("人类,你好!")if __name__ __main__:print_hi_human() 题二&#…

在python中os.chdir()的含义以及用法

文章目录 一、os.chdir() 是什么?二、用法注意 一、os.chdir() 是什么? 在Python中,os.chdir() 是 “change directory” 的缩写,意思是改变当前工作目录。这个函数是Python的 os 模块的一部分,允许你更改程序的工作目…

2023.11.16 hivesql高阶函数之开窗函数

目录 1.开窗函数的定义 2.数据准备 3.开窗函数之排序 需求:用三种排序方法查询学生的语文成绩排名,并降序显示 4.开窗函数分组 需求:按照科目来分类,使用三种排序方式来排序学生的成绩 5.聚合函数与分组配合使用 6.聚合函数同时和分组以及排序关键字配合使用 --需求1&…

MAC电脑连接外接显示屏,颜色显示有问题,又粉、紫色蒙版,问题处理(1)

问题描述 买了一个显示器,想给mac做分屏使用,结果连上之后发现,整个屏幕像是被蒙上了一层紫色的蒙版。 就像下面展示的一样: 解决 将显示器颜色空间改为RGB颜色空间即可。 打开显示器菜单,找到颜色空间选项&#…

12.Oracle的索引

Oracle11g的索引 一、什么是索引二、索引的分类三、索引的语法四、分析索引四、索引的作用及使用场景 一、什么是索引 在Oracle数据库中,索引是一种特殊的数据结构,用于提高查询性能和加速数据检索。索引存储了表中某列的值和对应的行指针,这…

初学编程学习,计算机编程怎么自学,中文编程工具下载

初学编程学习,计算机编程怎么自学,中文编程工具下载 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,象如…

Uniapp连接iBeacon设备——实现无线定位与互动体验(理论篇)

目录 前言: 一、什么是iBeacon技术 二、Uniapp连接iBeacon设备的准备工作 硬件设备: 三、Uniapp连接iBeacon设备的实现步骤 创建Uniapp项目: 四、Uniapp连接iBeacon设备的应用场景 室内导航: 五、Uniapp连接iBeacon设备的未来…

Hangfire.Pro 3.0 Crack

Hangfire.Pro 有限的存储支持 Hangfire Pro 是一组扩展包,允许使用批处理创建复杂的后台作业工作流程,并提供对超快速Redis作为作业存储的支持 请注意,仅在使用Hangfire.SqlServer、Hangfire.Pro.Redis或Hangfire.InMemory包作为作业存储时才…

解决 vite 4 开发环境和生产环境打包后空白、配置axios跨域、nginx代理本地后端接口问题

1、解决打包本地无法访问空白 首先是pnpm build 打包后直接在dist访问,是访问不了的,需要开启服务 终端输入 npm install -g serve 然后再输入 serve -s dist 就可以访问了 但要保证 路由模式是:createWebHashHistory 和vite.conffig.j…

Java的XWPFTemplate word生成列表

Java的XWPFTemplate工具类导出word.docx的使用_xwpftemplate 语法_youmdt的博客-CSDN博客 如果是表格的列表参考上面这篇文章即可,比较复杂的列表遍历暂时还没找到方法,只能手动创建表格了 上面是模板,非常简单,以为我们是要自己创…

八大学习方法(金字塔模型、费曼学习法、布鲁姆学习模型)

在微博上看到博主发的,觉得总结很好,在此摘录:

如何在远程协同视频会议中确保安全性?

随着远程工作的普及,远程协同视频会议已成为企业和团队之间进行交流和协作的重要工具。与此同时,会议中的安全性问题也日益凸显。本文将介绍如何在远程协同视频会议中确保安全性,主要包括以下方面: 1、内网部署 将会议服务器部署…

CF1899C Yarik and Array(DP,贪心)

题目链接 题目 A subarray is a continuous part of array. Yarik recently found an array a of n elements and became very interested in finding the maximum sum of a non empty subarray. However, Yarik doesn’t like consecutive integers with the same parity, s…

MIB 6.1810实验Xv6 and Unix utilities(5)find

难度:moderate Write a simple version of the UNIX find program for xv6: find all the files in a directory tree with a specific name. Your solution should be in the file user/find.c. 题目要求:实现find ,即在某个路径中,找出某…

windows 安装 Oracle Database 19c

目录 什么是 Oracle 数据库 下载 Oracle 数据库 解压文件 运行安装程序 测试连接 什么是 Oracle 数据库 Oracle数据库是由美国Oracle Corporation(甲骨文公司)开发和提供的一种关系型数据库管理系统,它是一种强大的关系型数据库管理系统…

Excel 文件比较工具 xlCompare 11.01 Crack

比较两个 Excel 文件之间的差异 xlCompare. xlCompare.com 是性能最佳的 Excel diff 工具,用于比较两个 Excel 文件或工作表并在线突出显示差异。xlCompare 包括免费的在线 Excel 和 CSV 文件比较服务以及用于比较和合并 Excel 文件的强大桌面工具。如果您想在线了…

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

贝加莱MQTT功能

贝加莱实现MQTT Client端的功能库和例程 导入库和例程,AS Logical View中分别通过Add Object—Library,Add—Program插入MQTT库和例程。 将例程Sample放置于CPU循环周期中 定义证书存放路径,在AS Physical View 中,右击PLC—Con…