米家通过HomeAssistant控制笔记本电脑开关机

news2024/11/26 12:37:10

米家通过HomeAssistant控制笔记本电脑开关机

  • 配置HomeAssistant
  • 配置EMQX mqtt
  • 自动化配置
  • 电脑关机实现
  • 电脑开机实现(网络唤醒WOL包)

环境准备:

  1. HomeAssistant:能配置接入米家的设备,我这里采用fnos安装
  2. MQTT服务器:可以使用免费的云服务器或则本地安装都可以,我这里采用本地搭建emqx
  3. 米家:有可以控制的设备
  4. 电脑(支持网络唤醒不支持的电脑)

配置HomeAssistant

首先是使用fnos安装配置HomeAssistant
在这里插入图片描述
安装好后直接进入后台配置相关账户,因为飞牛os商店里面安装的HomeAssistant无法接通米家的设备,这里还需要通过安装hacs来实现控制米家设备和获取米家设备状态,打开docker的HomeAssistant控制台输入以下指令并重启就可以安装成功了

// 下载并安装hacs
wget -O - https://get.hacs.xyz | bash -
// 重启
reboot 

在这里插入图片描述
然后通过hacs安装Xiaomi Miot Auto来添加米家设备
在这里插入图片描述
然后我们添加集成米家设备
在这里插入图片描述
在这里插入图片描述
然后选择模式接入即可获取设备信息,这里有三种接入模式:

  1. 自动模式:插件定期更新支持本地miot协议的设备,并自动将用户赛选的设备符合条件的型号使用本地链接(推荐)
  2. 本地模式:继承配置嗦赛选的设备都将使用本地链接,如勾选了不支持本地的miot协议的设备将不可用
  3. 云端模式:继承配置所筛选的设备都将使用云端链接,建议旧版miio、蓝牙、ZigBee设备使用

然后到这一步HomeAssistant就可以控制我们的米家设备了,还可以获取米家设备信息,这里推荐一篇博主的配置HomeAssistant,他的教程会详细很多而且文章附带B站UP主视频配置会更加容易操作【小米MIoT设备接入HomeAssistant通用插件教程】,下一步我们需要创建一个mqtt服务器

配置EMQX mqtt

下载镜像
在这里插入图片描述
在这里插入图片描述
设置端口,这里保持默认
在这里插入图片描述
移植下一步然后输入你的IP地址:18083进入后台默认账号密码admin public
在这里插入图片描述
然后我们的mqtt就安装好了,下一步配置HomeAssistant的MQTT服务,进入设置添加设备与集成选择mqtt

在这里插入图片描述
然后输入你的NAS的IP地址,端口填入1883
在这里插入图片描述
然后我们可以通过emqx的后台web调试来测试链接是否成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自动化配置

然后我们创建一条自动化来实现控制米家控制,这也是关键的一点,我的思路是米家通过控制设备的一个状态让HomeAssistant检测到设备状态,当状态为开就执行开机,当状态为管就执行关机,具体操作如下:
在这里插入图片描述
当人在传感器的指示灯被打开就发送mqtt指令on(记住这里的computer_contrl主题,这个对后面的控制关机会用到)
在这里插入图片描述
当存在感应传感器指示灯关发送off指令(这里应该是执行网络唤醒程序,看文章后:网络唤醒WOL包)
在这里插入图片描述
然后在米家中我们创建两条手动控制指令来控制人在传感器的指示灯的开关
请添加图片描述
请添加图片描述

在这里插入图片描述

然后我们在emqx中可以订阅computer_contrl这个主题,然后通过米家控制测试是否会被触发,这里实测触发正常,但是非常的缓慢(大概30s),如果您是主要使用HomeAssistant(苹果的homekit)那反应速度会比该种方式要快的过(不知道有没有设置可以调整设备状态的轮询时间),因为HomeAssistant获取米家设备的速度还是比较慢,我测试了直接在网页点击通信响应速度会非常快。

电脑关机实现

既然我们实现了HomeAssistant发送mqtt消息,那接下来我们只需要通过代码去接受mqtt消息然后执行关机指令即可实现控制关机,下面我是用python来实现mqtt通信测试;

1、安装paho-mqtt包
在这里插入图片描述
2、测试代码

import paho.mqtt.client as mqtt
import time
import os
 
# MQTT 配置
broker_address = "192.168.10.104"  # MQTT 服务器地址
port = 1883  # 端口号,默认为 1883
publish_topic = "computer_contrl"  # 发布给HomeAssistant消息的主题
subscribe_topic = "computer_contrl" # 订阅HomeAssistant发送消息的主题

 
# 当客户端收到来自服务器的CONNACK响应时调用
def on_connect(client, userdata, flags, rc, properties):
    if rc == 0:
        print("Connected with result code " + str(rc))
        client.subscribe(topic=subscribe_topic,qos=1)  # 订阅HomeAssistant发送消息的主题

# 订阅成功后调用
def on_subscribe(client, userdata, mid, granted_qos, properties):
    print("On Subscribed: Success" + str(granted_qos))

# 在收到消息的时候被调用
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

#这里需要解析发过来的数据,根据自己配置的主题包来定义,可以扩展json格式数据
    if str("off") in str(msg.payload):
        # os.system('shutdown /r /t 0') # 重启电脑
        # os.system('shutdown /s /t 0') # 关闭电脑
        os.system('notepad.exe') # 打开记事本
    else:
        print("off")
    

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)# 创建客户端实例
client.on_connect = on_connect  # 绑定连接回调函数
client.username_pw_set("admin", "password") # emqx可以不设置,如果是其他mqtt服务器需要设置
client.connect(host=broker_address, port=port, keepalive=60) # 连接到MQTT Broker
client.on_subscribe = on_subscribe # 订阅回调
client.on_message = on_message # 收到消息
time.sleep(2) # 等待链接服务器
client.loop_forever() # 开始监听消息

# 断开连接
# client.disconnect()

然后我们创建一个按钮手动触发执行mqtt下发
在这里插入图片描述

请添加图片描述

最终我们收到消息,然后我们通过python就可以做很多事情,这里我演示打开记事本,当然这里语言不重要,只要能链接mqtt什么语言都可以,选择你合适的语言去搞就好了,在这个基础上还可以做很多事,根据发送的消息不同可以打开软件,可以休眠电脑,可以关闭电脑重启电脑都是可以的,然后我们需要做的就是代码在开机自动运行就可以了,具体的操作步骤如下:

  1. 获取python安装路径:执行python -version(将python.exe替换为pythonw.exe这样开机就不会显示cmd窗口直接后台运行)
  2. 获取脚本存放路径:右击python脚本文件
  3. 在任务计划程序中添加执行任务:按win键输入任务计划程序打开即可

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我这里做测试没有替换python.exe是为了方便看到是否开机运行脚本状态,如果正常使用记得替换,脚本位置不推荐放在桌面可以根据情况更改位置
在这里插入图片描述
在这里插入图片描述
取消勾选
在这里插入图片描述

保存任务

电脑开机实现(网络唤醒WOL包)

首先我们需要保证电脑以太网卡通过网线链接到路由器(无线网卡不行,关机后无线网卡会掉电无法唤醒),保证和HomeAssistant在同一网关下的路由器,然后使用cmd命令行获取网卡的mac地址,然后打开HomeAssistant的安装的文件夹(不论是docker安装还是服务器安装还是其他闲置电脑安装都会有这个文件),在该文件中添加以下代码(根据IPconfig中获取的信息更改以下代码)

#yaml通过缩进判断变量从属关系,↓属于一级配置,需要顶格,不要留空格!
switch:
  - platform: wake_on_lan
    name: "Computer"                 # 定义HA中实体的名称,可任意命名
    mac: "9C-6C-80-05-DE-55"        # 主机(电脑)的MAC地址
    host: "192.168.10.245"            # 主机(电脑)地址,可省略
    broadcast_address: "192.168.10.255"      # 广播地址.不可省略.此处假设路由器地址为192.168.10.1,如为其他网段需要修改
    broadcast_port: 9               # 止定wol端口,可省略

在这里插入图片描述
然后回到HomeAssistant检查配置无误重启服务(完全重启)
在这里插入图片描述
然后我们在卡片中添加实体
在这里插入图片描述
然后保存设置,通过点击该按钮就会发送网络唤醒包给设置的mac地址的网卡,因为我的笔记本离路由器太远,网络唤醒实验我没法验证,这里推荐几篇博文自行尝试即可
网络唤醒Wake-on-LAN (WoL or WOL) 设置方法
通过Home Assistant实现远程唤醒WOL
然后在对应的自动化里控制该实体即可实现米家控制远程唤醒了;

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT信号和槽与自定义的信号和槽

QT信号和槽与自定义的信号和槽 1.概述 这篇文章介绍下QT信号和槽的入门知识,通过一个案例介绍如何创建信号和槽,并调用他们。 2.信号和槽使用 下面通过点击按钮关闭窗口的案例介绍如何使用信号和槽。 创建按钮 在widget.cpp文件中创建按钮代码如下 …

环境背景文本到语音转换

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月9日23点20分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id100000000027&uida9ecaa6323844415b87…

MySQL初学之旅(1)配置与基础操作

目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖,今天博主正式开始为大家分享数据库的学习&#xff…

【环境搭建】使用Dockerfile构建容器搭建Kylin特定版本

Kylin的有些版本官方已经下架了,Docker Hub上也没镜像了,所以需要自己搭建以下,为了以后更方便快捷地使用,就编写了一个更轻量级的Dockerfile。 准备工作 本次搭建使用的源码包来自华为云镜像站,里面有Kylin各个版本…

【图】图学习

0 回顾数据结构逻辑 1 图的定义和基本术语 必须有顶点,可以没有边。 Cn2和2*Cn2(数学上的,n个顶点取2个顶点) 概念有些多。。。。。。 2 图的定义 3 图的存储结构 无向图的邻接矩阵 有向图的邻接矩阵 网(有权图&#…

基于RMD算法模型的信号传输统计特性的matlab模拟仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于RMD算法模型的信号传输统计特性的matlab模拟仿真。参考的文献如下: 即通过RMD随机中点位置模型算法,实现上述文献的几个仿真图。 2.…

【React】React 生命周期完全指南

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 React 生命周期完全指南一、生命周期概述二、生命周期的三个阶段2.1 挂载阶段&a…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力,以对象为为驱动的模型,主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

C++20 概念与约束(2)—— 初识概念与约束

1、概念 C20 中引入新的编译期关键字 concept 用于创建概念。个人认为将其翻译为“构思”更为贴切。直接使用时,它更像一个只能用于模板的布尔类型关键字。 而如果用于模板中,他会将模板类型先带入自身,当自身条件为 true 才会实例化模板&…

Everything软件实现FTP功能

Windows的文件共享和ftp实在难用,这里介绍一种新的局域网内共享文件的方法 下载 Everything 选择想要共享的文件,选择包含到数据库,注意:要在对应的分卷设置,共享文件夹名称不要包含中文字符,因为Windows底…

系统管理与规划师

综合 工业化、信息化两化融合:战略、资源、经济、设备和技术的融合 诺兰6时期:(初普控,整数成)初始、普及、控制、整合、数据管理、成熟期;技术转型期介于控制和整合间 IT战略规划 IT战略制定:使…

初始MQ(安装使用RabbitMQ,了解交换机)

目录 初识MQ一:同步调用二:异步调用三:技术选型 RabbitMQ一:安装部署二:快速入门三:数据隔离 java客户端一:快速入门二:workqueues三:Fanout交换机四:Direct交…

[C++11] 类中新特性的添加

默认的移动构造和移动赋值 在 C11 之前,编译器会为每个类自动生成默认的构造函数、析构函数、拷贝构造函数、拷贝赋值运算符等函数,以实现对象的创建、销毁和拷贝操作。但拷贝操作会复制整个对象的数据,效率低,尤其是在处理大对象…

emr上使用sparkrunner运行beam数据流水线

参考资料 https://time.geekbang.org/column/intro/167?tabcatalog Apache Beam和其他开源项目不太一样,它并不是一个数据处理平台,本身也无法对数据进行处理。Beam所提供的是一个统一的编程模型思想,而我们可以通过这个统一出来的接口来编…

github高分项目 WGCLOUD - 运维实时管理工具

GitHub - tianshiyeben/wgcloud: Linux运维监控工具,支持系统硬件信息,内存,CPU,温度,磁盘空间及IO,硬盘smart,GPU,防火墙,网络流量速率等监控,服务接口监测&…

MyBatisPlus 用法详解

文章目录 一、快速入门1.1 引入依赖:1.2 定义 Mappper:1.3 使用演示:1.4 常见注解:1.4.1 TableName:1.4.2 TableId:1.4.3 TableField: 1.5 常见配置: 二、核心功能2.1 条件构造器:2.…

Python小游戏23——捕鱼达人

首先,你需要安装Pygame库。如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 运行效果展示 接下来是示例代码: 【python】 import pygame import random # 初始化Pygame pygame.init() # 屏幕尺寸 SCREEN…

库打包工具 rollup

库打包工具 rollup 摘要 **概念:**rollup是一个模块化的打包工具 注:实际应用中,rollup更多是一个库打包工具 与Webpack的区别: 文件处理: rollup 更多专注于 JS 代码,并针对 ES Module 进行打包webpa…

基于SSM+VUE小学生素质成长记录平台JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

【架构设计常见技术】

EJB EJB是服务器端的组件模型,使开发者能够构建可扩展、分布式的业务逻辑组件。这些组件运行在EJB容器中,EJB将各功能模块封装成独立的组件,能够被不同的客户端应用程序调用,简化开发过程,支持分布式应用开发。 IOC …