天猫精灵/小爱同学+巴法云+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
    # 创建socket
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # IP 和端口
    server_ip = 'bemfa.com'
    server_port = 8344
    try:
        # 连接服务器
        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_time


connTCP()
Ping()

while True:
    # 接收服务器发送过来的数据
    recvData = tcp_client_socket.recv(1024)
    if len(recvData) != 0:
        try:
            # 返回的参数 cmd=2&uid=xxx&topic=PC001&msg=on
            res = 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 是日志可以观察一下哪个环节有问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

任正非说:公司要逐步实行分灶吃饭,我们在管理上不能过于整齐划一,否则缺少战斗力。

你好!这是华研荟【任正非说】系列的第42篇文章,让我们聆听任正非先生的真知灼见,学习华为的管理思想和管理理念。 一、我们必须在混沌中寻找战略方向。规划就是要抓住机会点,委员会是火花荟萃的地方,它预研的方向是可做…

ESP32 MicroPython LCD显示实验⑤

ESP32 MicroPython LCD显示实验⑤ 1、实验目的2、实验平台3、实验内容4、参考代码5、实验结果 1、实验目的 LCD显示屏显示中英文字符、显示图片 2、实验平台 智能小车(配备显示屏) 3、实验内容 小车配有2.0寸的TFT彩屏,内置有中文GBK字库,可以显示中…

值得你一生收藏的BMW宝马汽车底盘代号各个版本说明,方便今后查阅使用!

很少有汽车品牌像宝马一样,本属于内部交流使用的底盘代号(Development Code),最终延伸为粉丝群体用以精准定位某一年代某一款车型的通用语。随着宝马加速推出新产品,每一年的底盘代号都在更新。你挚爱的强哥现将宝马所…

echarts 三角锥形柱状图 + 带阴影的折线图示例

该示例有如下几个特点: ①三角锥形折线图 ②折线图自带阴影 ③三角锥形鼠标放置时颜色改变 ④数据随着鼠标移动而展示 ⑤鼠标放置时tooltip样式自定义(echarts 实现tooltip提示框样式自定义-CSDN博客) 代码如下: this.options …

鸿蒙ToastDialog内嵌一个xml页面会弹跳到一个新页面《解决》

ToastDialog 土司组件 1.问题展示2.代码展示3.问题分析 1.问题展示 0.理想效果 错误效果: 1.首页展示页面 (未点击按钮前) 2.点击按钮之后&#xff0c;弹窗不在同一个位置 2.代码展示 1.点击按钮的 <?xml version"1.0" encoding"utf-8"?> <…

HTTP1.0协议详解

前言主要特点存在的不足与HTTP1.1的区别在Java中应用HTTP1.0协议知识拓展 前言 HTTP是由蒂姆伯纳斯李&#xff08;Tim Berners-Lee&#xff09;爵士创造的。他在1989年提出了一个构想&#xff0c;借助多文档之间相互关联形成的超文本&#xff08;HyperText&#xff09;&#x…

[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案

原文&#xff1a;[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案 一飞开源&#xff0c;介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术&#xff0c;一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区&#xff0…

keepalived离线安装

上传离线安装包 将离线安装包拖动到服务器上 进入到离线安装包路径&#xff0c;执行下面脚本进行安装 rpm -Uvh --force --nodeps *.rpm

C++初级项目-webserver(1)

1.引言 Web服务器是一个基于Linux的简单的服务器程序&#xff0c;其主要功能是接收HTTP请求并发送HTTP响应&#xff0c;从而使客户端能够访问网站上的内容。本项目旨在使用C语言&#xff0c;基于epoll模型实现一个简单的Web服务器。选择epoll模型是为了高效地处理大量并发连接…

CF1899A Game with Integers(思维题)

题目链接 题目 题目大意 t 组测试样例 每组给一个正整数 n&#xff0c; 有两种操作&#xff1a; 1-1 A 和 B 轮流操作&#xff0c; 如果这个整数变成了一个能被3整除的数&#xff0c;A赢&#xff0c;输出First 如果在10次操作以内&#xff0c;n不能被3整数&#xff0c;B赢&…

TCP与UDP协议

TCP与UDP协议 1、TCP协议&#xff1a; 1、TCP特性&#xff1a; TCP 提供一种面向连接的、可靠的字节流服务。在一个 TCP 连接中&#xff0c;仅有两方进行彼此通信。广播和多播不能用于 TCP。TCP 使用校验和&#xff0c;确认和重传机制来保证可靠传输。TCP 给数据分节进行排序…

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个&#xff1f;不考虑多物体提交。障碍物&#xff0c;尽可能选择状态发生变化的物体。如果没有明显变化的&#xff0c;则考虑周边的物体。车的状态最后趋于减速、停止&#xff0c;时序…

OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍

1 Distil-Whisper诞生 Whisper 是 OpenAI 研发并开源的一个自动语音识别&#xff08;ASR&#xff0c;Automatic Speech Recognition&#xff09;模型&#xff0c;他们通过从网络上收集了 68 万小时的多语言&#xff08;98 种语言&#xff09;和多任务&#xff08;multitask&am…

Windows11怎样投屏到电视上?

电视屏幕通常比电脑显示器更大&#xff0c;能够提供更逼真的图像和更震撼的音效&#xff0c;因此不少人也喜欢将电脑屏幕投屏到电视上&#xff0c;缓解一下低头看电脑屏幕的烦恼。 Windows11如何将屏幕投射到安卓电视&#xff1f; 你需要在电脑和电视分贝安装AirDroid Cast的电…

Python | 机器学习之SVM支持向量机

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《人工智能奇遇记》&#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 目录结构 1. 机器学习之SVM支持向量机概念 1.1 机器学习 1.2 SVM支持向量机 2. SVM支持向量机…

hahahaha发到这里吧

一大早上笑死我 恭喜在座的各位&#xff0c;一直以为这次比赛public和private排名会相差不大&#xff0c;结果前6有4个人都是从银牌歘一下上来的&#xff0c;想象地到他们看到结果时的喜悦

python引入自己不同目录的模块

1.目录结构 from manual_data.utils import delete_and_insert_center

ceph学习笔记

ceph ceph osd lspoolsrbd ls -p testpool#查看 ceph 集群中有多少个 pool,并且每个 pool 容量及利 用情况 rados dfceph -sceph osd tree ceph dfceph versionsceph osd pool lsceph osd crush rule dumpceph auth print-key client.adminceph orch host lsceph crash lsceph…

搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用

目录 专题一 OpenAI开发者大会最新技术发展及最新功能应用 专题二 AIGC技术解析 专题三 提示词工程高级技巧 专题四 ChatGPT/GPT4的实用案例 专题五 让ChatGPT/GPT4成为你的论文助手 专题六 让ChatGPT/GPT4成为你的编程助手 专题七 让ChatGPT/GPT4进行数据处理 专题八 …

这就是不创业的最大的原因,机器视觉兄弟们创业要谨慎,为什么99.99%机器视觉公司老板是销售人员?

机器视觉公司&#xff0c;99%公司实行销售优先原则&#xff0c;企业老板99%从销售人员中产生。所以机器视觉兄弟们创业要谨慎。 企业的本质就是通过销售获得利润的组织&#xff0c;销售是立足之本&#xff0c;没有销售&#xff0c;创业就是耍流氓。因此&#xff0c;企业的一切…