HomeAssistant-服务调用原理
智能家居是未来的一个朝阳方向,欢迎感兴趣的小伙伴联系我一起燥起来,兵不再多,贵在精。人数够的话想弄一个小工作室。欢迎一些python大牛,懂嵌入式开发或者对对软硬件都非常懂的小伙伴联系我。
从软件到硬件了解一个系统,再从硬件到软件改良一个系统,为了方便了解HomeAssistant是如何添加一个服务模块或者一个实体进入自己的控制系统,我们今天从ESPHome说起。
ESPHome 是一套工具,由 ESPHomelib 和 ESPHomeyaml 组成。前者安装在 ESP8266 或 ESP32 上,后者为其编译固件。ESPHomelib 主要通过MQTT 与 Home Assistant 通讯,可以说专为 Home Assistant 而设计。简单易用且支持硬件多,可以通过简单而强大的配置控制ESP8266/ESP32,还可以通过接入家庭自动化系统实现远程被控。
ESP8266是一个开发版(屏蔽了我们对电路知识的了解)
下面通过一个简单的流程让大家了解一下ESPhome如何搭配mqtt和homeAssistant来使用(不涉及具体实现,具体实现可以从参考的文章里面去看,本文仅做一个介绍)
ESPhome项目页面
前面的8266里面配置了一个mqtt的服务地址(可以使用docker自己起一个mqtt服务),订阅node2这个设备可以看到网络连接的情况,信号强度,和传感器详细信息。
在homeAssistant里面也配置好同一个mqtt服务器,它会自动发现设备,就可以把上面的信息可视化了。
通过上面的流程大家肯定发现了,homeAssistant在某些方面和prometheus有点类似,定时收集数据然后用图表的形式展示出来(一段固定时间长度的数据折线图等),并不会去做耦合,自身还是一个集成系统。那么如何接入一些其他的外部服务呢?比如SMTP(Simple Mail Transfer Protocol)
添加SMTP服务,实现homeAssistant可以向目标邮箱发送邮件提醒,只需要在homeAssistant的 configuration.yaml 中添加以下配置即可
具体是利用163邮箱提供的smtp服务作为中转站将邮件转发出去(这个服务需要自己在163邮箱开启,免费),能够直接添加进去的原因是smtp服务的模块已经被添加到homeAssistant的支持服务中了。对于一些还没有被支持,想自己接入的服务是怎么封装给homeAssistant来调用的呢?
这里我们以一个外部模块 和风天气 来举例子,具体操作过程可见 源码
这里我再对源码进行一些分析,方便大家了解整个调用的脉络
如图上面是和风天气插件,接入到homeAssistant中重点只需要manifest.json和sensor.py这两个文件,manifest.json是一个描述文件、一个清单列表,记录了插件的名称、域、文档地址等,sensor.py文件是一个具体的实现,做的事情就是适配homeAssistant的集成系统,把自己收集的数据以homeAssistant的规范传给它。
我们来看一下是如何适配的:
首先从参数开始,和风天气插件(下称插件)扩展了原来的基本参数,扩展的参数是如下几个
可以看到对于options是有限制的,限定在了OPTIONS里面,这个是 和风天气 能够收集到的所有关于天气的参数,OPTIONS里面的内容可以在插件源码里面看到
对应配置里面的如下:
platform这个参数是原来基础参数
然后我们来看重点的一个函数和两个对象,分别是setup_platform,HeWeatherSensor(Entity),WeatherData(object),第一个函数是homeAssistant每当需要获取天气相关展示数据的时候就会调用一次,而setup_platform里面创建了第二个和第三个类的实例,第二个实例继承了homeAssistant的原生Entity这个类,这个是homeassistant中的实体对象,包含了一个实体里面所有的参数,这个类主要是对Entity获取参数的填充(扩展的参数里面的参数无法直接获取,需要通过类似于key,value的形式传过去,使用的字段是_type和_state),最后一个类是插件能够获取到的全量数据的一个实体类,里面包含了一个定时函数,每隔30分钟自动更新全量数据,保证第二个类里面获取到的数据的实时性。
如果我们自己需要把自己的插件接入到homeAssistant,可以按照和风天气这样的方式封装成一个模块接入到homeAssistant。
最后给一个简单插件应用的画面(公司5Gwifi无法接入设备)
参考:
1.https://zhuanlan.zhihu.com/p/122208151
2.https://esphome.io/index.html
和风天气源码:https://github.com/morestart/HeWeather
homeAssistant源码:https://github.com/home-assistant/core
本文来自博客园,作者:orangeScc,转载请注明原文链接:https://www.cnblogs.com/ashScc/p/15394584.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了