MQTT,智能家居,ESP-8266和即插即用

创建智能家居涉及许多监视房屋状况的传感器-运动,照明,温度和其他传感器。 如果“智能家居”很小,那么即使使用基于开放式解决方案(MQTT,OpenHAB等)的自制系统,一切也看起来很简单-他们连接了传感器,将其注册在OpenHAB或HomeAssistant程序中并开始工作。 但是,如果有很多传感器,则在控制系统中对每个传感器进行处方时,会出现很多例行且不愉快的工作。

建议的解决方案(“拐杖”)使您可以在此阶段进行最少的手动操作。 传感器控制器连接到MQTT代理,并在特殊主题中以特定格式讨论其传感器和设备,然后智能家居服务器上的一个小脚本创建与这些传感器相对应的配置文件,之后您只需要在特定于房屋的组中手动识别它们即可。开始创建管理脚本。

具体来说,该固件可在带有ESP-8266的模块(包括Sonoff基本开关和Sonoff触摸墙开关)上使用,并带有针对OpenHAB和HomeAssistant的P&P脚本,但即插即用信息输出方法本身可用于其他项目。

将设备连接到MQTT代理时,将创建以下主题(在这种情况下,用于序列号为0023CB541的ESP-8266上的FLASH按钮):

  • / myhome / PNP / ESPX-0023CB541 /按钮/名称/名称/说明(“ FLASH按钮”-将显示在网络界面中)
  • / myhome / PNP / ESPX-0023CB541 / BUTTON /类型-变量的类型和数据流的方向,“ O:开关”表示提供信息的传感器,例如“ I:调光器”-调光器的输入通道
  • / myhome / PNP / ESPX-0023CB541 / BUTTON /组-默认情况下将在其中显示此变量的组(“切换内置按钮”)
  • / myhome / PNP / ESPX-0023CB541 / BUTTON / min-最小值(对于数字变量,对于按钮,它将为空)
  • / myhome / PNP / ESPX-0023CB541 /按钮/最大值-最大值(相似)

在服务器上运行的脚本(连接设备后通过皇冠或手动运行)-从/ myhome / PNP下载主题列表,搜索不在OpenHAB中的设备并为其创建配置文件。 如果已经存在此类设备的配置文件,则P&P信息将被完全忽略,但是您可以删除此文件,如有必要,请使用一组已更改的传感器为该设备重新创建该文件。

以这种简单和透明的方式-如果您需要在我们的自制智能家居中连接大量网络控制的设备,我们将免去很多麻烦。

我会告诉您更多有关ESP-8266实际固件的信息。 它的源代码(以及OpenHAB和HomeAssistant的支持脚本)可以在Github上找到(具体来说,支持脚本在此处 )。

它适用于标准ESP-8266模块(以及Sonoff Basic Switch和Sonoff Touch Wallswitch),支持即时固件升级(ArduinoOTA),还具有简单的Web服务器,用于WiFi网络参数的初始配置和设置MQTT IP地址-经纪人。

固件结构是模块化的,您可以轻松添加传感器/设备。 当前列表包括:

  • 红外运动传感器和视差X波段运动检测器(每个模块最多3个单元)
  • 温湿度传感器DHT22或同等产品
  • 我的4通道Modbus / RS-485控制调光器
  • HC-SR04声纳和MaxBotix系列声纳
  • Sonoff基本开关和Sonoff Touch上的继电器(后者可以通过按钮同时只能通过OpenHAB / HomeAssistant切换到继电器控制模式)
  • 内置ADC,LED和Flash按钮(用于Sonoff Touch-这是一个触摸按钮)
  • 一个简单的恒温器,带有两个继电器,用于控制风扇(室内机)和压缩机(室外机)

应该注意的是,由于ESP-8266上没有引脚,模块可能会相互冲突(例如,如果您自己不重新分配引脚,则无法同时连接带有声纳的调光器)。

在esp-sensors.h中选择必要的设备后,进行编译和固件-模块切换到配置模式-它以其名称为“ espx-0023cb541”的名称建立其WiFi网络,您需要使用同一文件中的密码连接(可以使用任何智能手机) ,然后转到192.168.4.1并设置网络登录名和密码以及代理的IP地址。 这些参数将保存在闪存中,因此第二次您无需这样做。 如果在一分钟内无法连接到给定的网络,它将再次切换到配置模式三分钟,然后它将重复此循环,直到成功连接为止。

对于要编辑此固件的用户,我将提到每个传感器/设备模块分为六个功能:

  • 设置_ *()-配置引脚
  • 循环_ *()-在每个程序周期中轮询传感器
  • 刷新_ *(forceSend)-更新MQTT上的传感器状态信息(默认为200毫秒,每两秒钟-强制更新)
  • pnp _ *()-发送P&P信息
  • 订阅_ *()-订阅必要的传入主题
  • mqtt _ *()-处理传入的mqtt消息

这些功能必须在模块文件中定义,然后将其调用添加到esp-sensors.ino的适当位置。

Source: https://habr.com/ru/post/zh-CN432730/


All Articles