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

这篇具有很好参考价值的文章主要介绍了天猫精灵/小爱同学+巴法云+Openwrt控制局域网电脑/群晖开关机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事情的起因

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

实战环境

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

开始发车

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

1.巴法云 https://cloud.bemfa.com/
2.添加主题
巴法如何添加小米设备,天猫精灵,小爱同学,电脑,dubbo
添加完成到 天猫精灵/小爱同学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
巴法如何添加小米设备,天猫精灵,小爱同学,电脑,dubbo
其他的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登陆后上传的地方
巴法如何添加小米设备,天猫精灵,小爱同学,电脑,dubbo
巴法如何添加小米设备,天猫精灵,小爱同学,电脑,dubbo
上传 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登陆,不然没有权限关机,windows的是你平时登陆本地账号的名字,一定要有权限
# 华硕电脑
shutdown1 = 'sshpass -p 密码 ssh 用户名@设备的ip "shutdown -s -t 0"'
# 联想电脑
shutdown2 = 'sshpass -p 密码 ssh 用户名@设备的ip "shutdown -s -t 0"'
# 群晖或者linux
shutdown3 = 'sshpass -p 密码 ssh 用户名@设备的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 echo 输入控制台先看看是不是把pid给弄出来了,如果不是吧$后面的数字改成1,2,3…一个一个实验,不然程序没干掉就无法重启

查看定时任务
service cron status
由于容器的原因定时任务未能开机启动,模仿ssh和wolup.py的方式加入开机启动
vim .bashrc ./root/wolSetup.sh后面加上
service cron start文章来源地址https://www.toymoban.com/news/detail-781340.html

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

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

到了这里,关于天猫精灵/小爱同学+巴法云+Openwrt控制局域网电脑/群晖开关机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用小爱同学语音控制电脑关机 - Winform C#

    小爱同学应该已经是家喻户晓的了,现在一直用来控制家里的家电。于是乎突发奇想想用来操作电脑上的软件会怎么样,比如打开某个程序不用再去寻找,直接喊小爱同学打开,真的很方便,现在先来实现一个最简单的,用小爱同学来控制电脑关机。当然只是关机,开机还需

    2024年02月11日
    浏览(45)
  • 小爱同学接入chatGPT

    最近入手了一款小爱音响,想着把小爱音响接入 GPT, 在 github 上找了一个非常优秀的开源项目,整个过程还是比较简单的,一次就完成了。 其中最难的技术点是 如何获取与小爱的对话记录?如何让小爱播放文本? 让我自己想的话,估计就是想着各种办法去破解小爱同学,但

    2024年02月04日
    浏览(44)
  • 小爱同学语音API(不需要小米账号)

    先看下运行效果 1找一个免费的API接口 输入你好,返回参数如下 参数分析: txt为返回文字 tts为返回文字的语音网址 2返回文字部分 3语音部分处理 (1)语音爬取 (2)语音播放 4找个纸片人让他动起来 附:下面来几个GIF 如果上面的你都不满意,看看这张雷军的 3Q! 完整代码

    2024年02月12日
    浏览(76)
  • ESP32接入米家-小爱同学-IDF环境-巴法平台

    冬天床边没有开关,睡觉懒得关灯,想通过小爱同学控制灯的开关,但是不想换开关。 所以 想用ESP32接入米家,控制一个舵机实现开关控制。 Message Queuing Telemetry Transport,消息队列传输探测 ISO 标准下的一种基于发布-订阅模式的消息协议,基于 TCP/IP 协议簇,用于 IoT 即物联

    2024年01月20日
    浏览(53)
  • 电脑入米家,让小爱同学随意操控电脑开关机(需主机或软路由)

    我的笔电在家里就是台台式电脑了(半年没有挪过屁股),在公司使用Frp做了内网穿透用于远程控制,但是晚上关机了第二天早上常常忘记开机…好麻烦~ 最近买了个小爱音箱,控制家居方便得很,就心想能不能直接让勤劳的小爱同学帮我开关电脑呢?上网搜搜还真有挺多人

    2024年02月07日
    浏览(74)
  • 天猫精灵家居对接第三方设备(详细版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档· 文章目录 前言 补充准备阶段(内网映射到外网) 一、天猫精灵官网配置准备 二、天猫精灵部分实现代码 三、天猫精灵配置技能广场 四、天猫精灵语音调试测试 总结 随着物联网的发展,众多的硬件

    2024年02月06日
    浏览(43)
  • AI测试|天猫精灵智能音箱测试策略与方法

    2014年11月,亚马逊推出了一款全新概念的智能音箱:Echo,这款产品最大的亮点是将智能语音交互技术植入到传统音箱中,从而赋予了音箱人工智能的属性。这个被称为“Alexa”的语音助手可以像你的朋友一样与你交流,同时还能为你播放音乐、新闻、网购下单、Uber叫车、订外

    2024年02月06日
    浏览(44)
  • ChatGPT聊天机器人搭建全攻略精心整理汇总:微信 Discord 小爱同学 VSCode QQ 飞书 Siri OpenAI Translato翻译插件

    一、ChatGPT接入微信: ChatGPT接入微信 ChatGPT近期以强大的对话和信息整合能力风靡全网,可以写代码、改论文、讲故事,几乎无所不能,这让人不禁有个大胆的想法,能否用他的对话模型把我们的微信打造成一个智能机器人,可以在与好友对话中给出意想不到的回应,而且再

    2024年02月04日
    浏览(71)
  • [路由][问题]OpenWrt解决局域网设备无法通过域名访问主机的问题

    1. 问题描述 测试发现使用OpenWrt进行端口端口转发或者Upnp之后,本地局域网设备使用域名访问主机但是却无法访问。 2. 问题分析 此问题经过查询属于\\\"NAT环回问题\\\",但是OpenWrt在做端口转发时自动设置了NAT环回,,而且已经将WAN口入站数据和转发设置为“接受”但是无效。。

    2024年02月16日
    浏览(73)
  • ESP8266、ESP32实现小爱语音控制灯

    项目说明: 通过ESP8266、ESP32实现小爱语音控制灯,通过巴法云实现米家-小爱控制ESP32模块。通过网络搜索资料随多但没找到完整项目说明,为了节约大家学习时间,特此整理,跟着步骤可以实现以上功能。 技术无止境,项目由于是C、C++库实现,需要学习的知识还有很多,能

    2024年02月14日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包