← 返回全部文章

MySensors:从一颗传感器开始,搭自己的智能家

MySensors 可以把自制温湿度、门磁、能耗和灌溉节点接入 Home Assistant。这里从一个 DHT22 节点和 USB 网关开始,讲清硬件、接线、固件、接入步骤与安全边界。

智能家居买到后来,手机里常常堆着几家 App 。一个品牌的传感器便宜,另一个品牌的开关好用,想让它们互相配合,还得看网关、云端和平台愿不愿意开放。

Home Assistant 能把很多设备收进同一个面板,但家里总有成品传感器照顾不到的位置:花盆土壤湿度、地下室渗水、老式水表脉冲、车库门状态,或者一个需要睡眠半年以上的电池节点。

MySensors 把这部分硬件交给自己设计。它是一套面向 Arduino 、 ESP32 、 ESP8266 、 nRF5 等平台的开源框架,负责节点通信、路由和与控制器对接。 RF24 、 RFM69 、 RFM95 和 RS485 用在传感器网络;MQTT 位于网关与控制器之间,不能把它当成一种无线电。

项目可以做温湿度、门磁、人体移动、照明、能耗监测、灌溉和车库门控制。入门的目标不该是“全屋一次改完”,而是跑通一个无关安全的传感器:读数稳定进入 Home Assistant,断电重启后还能恢复,连续观察几天没有频繁丢包。

项目网站:mysensors.org

一套专属智能家,分成四层

MySensors 的链路可以拆成四部分:

  1. 节点:Arduino Nano 加 DHT22 、门磁、继电器或其他传感器;
  2. 传输:nRF24L01 、 RFM69 、 RFM95 或 RS485;
  3. 网关:把无线/有线消息转成 USB 串口、 TCP 或 MQTT;
  4. 控制器:Home Assistant 负责设备面板、历史记录和自动化。

网关固定使用节点 ID 0,普通节点使用 1–254255 用于广播。第一次搭建时把传感器节点固定为 1,比自动分配 ID 更容易排错。

项目常被概括成“自愈 Mesh”。准确的说法是自组织树形网络:节点会寻找通往网关的父节点,常供电的中继器可以帮助转发;电池传感器通常会休眠,只做叶子节点。中继器需要一直醒着,不适合靠小电池长期供电。

这套方案适合谁

MySensors 适合愿意焊接、刷固件和检查串口日志的人。它的优势来自硬件选择自由:可以换传感器、换无线模块、调整上报周期,也能做市面上很难找到的形态。

下面几类场景比较合适:

  • 房间多、 Wi-Fi 覆盖差,希望用低功耗无线节点;
  • 需要定制门磁、漏水、土壤、脉冲计数或环境传感器;
  • 已有 Home Assistant,想把自制硬件稳定接进去;
  • 需要 RS485 等有线节点,或希望控制节点固件与数据流。

想买回来直接扫码配对,Zigbee 成品设备更省时间。家里主要使用 ESP32/ESP8266,ESPHome 与 Home Assistant 的配置过程更短。 MySensors 把无线、节点协议和网关都开放出来,代价是接线、供电、射频和固件维护也要自己负责。

第一个项目:温湿度节点进 Home Assistant

这次只搭一条最小链路:

DHT22 传感器节点
        ↓ nRF24L01
Arduino USB 串口网关
        ↓ USB
Home Assistant

串口网关比 TCP 和 MQTT 网关少一层网络配置,也缩小了攻击面。等它稳定以后,再考虑无线网关、 MQTT 、中继和电池优化。

准备硬件

  • Arduino Nano 兼容板 2 块,ATmega328P 、 5V 、 16MHz;
  • 普通 nRF24L01+ 模块 2 块,首轮不选 PA/LNA 大功率版;
  • 稳定的 3.3V 供电或 nRF24 转接板 2 块;
  • 每块无线模块附近放 4.7–47µF 电容,并联 100nF 去耦;
  • DHT22/AM2302 模块 1 块;
  • 面包板、杜邦线和两根能传数据的 USB 线。

nRF24 的 VCC 只能接稳定 3.3V,直接接 5V 可能损坏模块。无线节点时好时坏,最常见的问题就是供电不稳和电容离模块太远。

两块 Nano 都这样接 nRF24

Nano GND  → nRF24 GND
3.3V      → nRF24 VCC
Nano D9   → CE
Nano D10  → CSN
Nano D13  → SCK
Nano D11  → MOSI
Nano D12  → MISO
IRQ       → 不接

传感器节点再接 DHT22:

DHT22 GND  → Nano GND
DHT22 VCC  → 模块标注的供电端,常见成品模块接 5V
DHT22 DATA → Nano D3

第一步:烧录 USB 串口网关

在 Arduino IDE 的 Library Manager 搜索 MySensors,安装稳定版 2.3.2。打开:

File → Examples → MySensors → GatewaySerial

网关配置的主要部分如下:


#define MY_DEBUG

#define MY_RADIO_RF24

#define MY_RF24_PA_LEVEL RF24_PA_LOW

#define MY_GATEWAY_SERIAL

#include <MySensors.h>

选择 Arduino Nano 与对应串口后上传。 16MHz Nano 默认使用 115200 波特率;8MHz 板的官方示例会降到 38400

上传完成后可以短暂打开串口监视器查看启动日志,随后关闭。 Home Assistant 和 Arduino 串口监视器不能同时占用同一个设备。

第二步:烧录温湿度节点

官方 DHT 示例位于:

MySensorsArduinoExamples/
  examples/DhtTemperatureAndHumiditySensor/

它使用同仓库 libraries/DHT 中的修改版 DHT 库。下载 mysensors/MySensorsArduinoExamples 后,把该 DHT 库放入 Arduino libraries 目录,再打开示例。

为了让第一次接入更确定,在 #include <MySensors.h> 前加入固定节点 ID:


#define MY_DEBUG

#define MY_RADIO_RF24

#define MY_NODE_ID 1

#include <SPI.h>

#include <MySensors.h>

#include <DHT.h>

示例会向控制器声明两个子设备:

sendSketchInfo("TemperatureAndHumidity", "1.1");
present(0, S_HUM);
present(1, S_TEMP);

读取和上报部分使用预先声明的消息对象:

MyMessage msgHum(0, V_HUM);
MyMessage msgTemp(1, V_TEMP);

// 在 loop() 读取成功后发送
send(msgTemp.set(temperature, 1));
send(msgHum.set(humidity, 1));

官方完整示例默认每 60 秒测量一次,数值变化时上报,并定期强制刷新。 Home Assistant 要求节点先完成 presentation(),再从 loop() 发送初始值;只声明设备、不发送第一次温湿度,实体可能不会创建。

第三步:接入 Home Assistant

把网关 USB 连接到 Home Assistant 主机。 Linux 上先确认设备:

ls /dev/ttyACM*

常见结果是:

/dev/ttyACM0

进入 Home Assistant:

设置 → 设备与服务 → 添加集成 → MySensors

选择串口网关并填写:

Device: /dev/ttyACM0
Baud: 115200
Version: 2.3.2

Home Assistant 跑在 Docker 、虚拟机或 NAS 套件里时,还要把 USB 设备传给对应容器或虚拟机。这个步骤没完成,集成页面看得到,串口却打不开。

传感器节点通电后,应出现节点 1,湿度 child 0,温度 child 1。先在开发者工具的状态页面观察数值,再做一个低风险自动化,例如温度超过设定值时发通知。不要用第一版 DIY 节点直接控制门锁、燃气、电热器或其他高风险设备。

扩展全屋之前,先解决四个问题

射频和供电

先把节点放在网关旁边跑稳,再逐步拉远。记录失败发送、重连和电池电压。需要中继时,用常供电节点,别让休眠传感器承担转发。

节点身份和备份

固定节点 ID 能简化首轮测试。规模扩大后再启用自动分配,并备份 Home Assistant 的 MySensors 持久化文件和节点固件。换网关或重装系统前,先保留这些状态。

签名与加密

MySensors 的签名和无线加密默认关闭。签名用于验证来源和完整性,不隐藏传感器数值;无线加密也不会自动保护网关到 Home Assistant 的 USB 、 TCP 或 MQTT 链路。

RF24 驱动当前文档明确提示其加密 IV 固定为零,安全性偏弱。需要敏感控制时,应把本地网络隔离、 Home Assistant 账号、 MQTT 认证和物理访问一起考虑,不能只打开一个编译选项就结束。

版本与漏洞

最新稳定版 2.3.2 发布于 2019 年。开发分支已经进入 2.4.0-rc.1,2026 年仍有提交和论坛讨论,但稳定版更新节奏很慢。

截至 2026 年 7 月,项目还有一个公开的 C_STREAM 串口/MQTT 解析溢出问题(#1622),报告称当前版本都受影响。入门阶段使用直连 USB 网关,不开放 TCP 5003,不把 MQTT Broker 或网关输入主题暴露到公网,也暂时不启用 OTA/C_STREAM 。等修复进入正式版本后再调整。

能做什么,也要知道它管不了什么

MySensors 能把自制传感器和执行器接进家庭自动化平台,也能通过电池休眠、无线树形路由和有线 RS485 覆盖特殊位置。它不能直接兼容所有 Zigbee 、蓝牙或品牌私有设备,也无法绕过厂商云 API 的限制。

DIY 温湿度、植物灌溉和水表计数很适合练手。烟雾、燃气、医疗监测和防盗报警仍应使用符合当地标准的专业设备,MySensors 可以提供辅助状态,别让它成为唯一安全链路。

从一个 USB 网关和一个温湿度节点开始,连续跑一周。读数、断线恢复和日志都稳定,再加门磁、漏水或土壤节点。这样的扩展速度慢一点,却能清楚知道家里每一条自动化依赖了什么。

你最想自己做哪种传感器:漏水、门磁、土壤湿度,还是水电表计数?

来源链接:https://www.mysensors.org Home Assistant 集成:https://www.home-assistant.io/integrations/mysensors/

来源:https://www.mysensors.org