Node-RED

打造可识别静态人体的人体传感器——使用效果


以下方法经本人验证通过,环境如下:

群晖 DS918+ DSM 6.2.4

mosquitto version 2.0.11

Home Assistant 0.91.4


前言:大部分人入门智能家居之处,最早接触的就是人体传感器,实现简单的如人来开灯,人走关灯的需求。我也不例外,家里各个房间布满了小米或绿米的人体传感器。

但市面上这类传感器因工作原理的原因,实际根本无法识别静态的人体。所以这类传感器只能叫人体移动传感器,算不上是真正意义上的人体存在传感器,导致在很多场景下具有天然的缺陷。

举例说明:人坐在书房看书,保持一段时间禁止后,就会被识别为无人状态,然后灯就关了!同理厕所蹲的时候也会有这种尴尬,人工智能变智障。

网上各种解决方案也有,但都治标不治本,不是我想要的完美方案。因此,我决定自己创造一个!

在之前的文章中,我描述了自己是如何构思设计,选择硬件并编码实现的,这篇文件简要介绍下实际是如何使用的

先上效果

第一步:连接本地网络和MQTT服务

首先,最终的人体传感器如下图所示,是一个小方盒子,尺寸是45mm * 47mm * 36mm 。盒子的正面(传感器一方)有状态指示灯的位置,我做了个小小的LOGO。一边的侧面是电源接口及重置按钮。

人体存在传感器外壳设计

打造可识别静态人体的人体传感器——硬件部分

前言:大部分人入门智能家居之处,最早接触的就是人体传感器,实现简单的如人来开灯,人走关灯的需求。我也不例外,家里各个房间布满了小米或绿米的人体传感器。

但市面上这类传感器因工作原理的原因,实际根本无法识别静态的人体。所以这类传感器只能叫人体移动传感器,算不上是真正意义上的人体存在传感器,导致在很多场景下具有天然的缺陷。

举例说明:人坐在书房看书,保持一段时间禁止后,就会被识别为无人状态,然后灯就关了!同理厕所蹲的时候也会有这种尴尬,人工智能变智障。

网上各种解决方案也有,但都治标不治本,不是我想要的完美方案。因此,我决定自己创造一个!

第一步: 硬件准备

在上一篇文章打造可识别静态人体的人体传感器——方案设计中,对所需硬件进行了分析,最终结合软件需求,选择了如下硬件模块:

  • 主传感器使用一块存在感应的微波雷达模块
  • MCU选择了满足需求下尺寸较小的ESP-01S
  • 供电模块使用 MICRO USB母座 转DIP2.54mm直插模块
  • 重置按钮选用一个6*6*5mm的微动开关

先来个合影:

打造可识别静态人体的人体传感器——方案设计

前言:大部分人入门智能家居之处,最早接触的就是人体传感器,实现简单的如人来开灯,人走关灯的需求。我也不例外,家里各个房间布满了小米或绿米的人体传感器。

但市面上这类传感器因工作原理的原因,实际根本无法识别静态的人体。所以这类传感器只能叫人体移动传感器,算不上是真正意义上的人体存在传感器,导致在很多场景下具有天然的缺陷。

举例说明:人坐在书房看书,保持一段时间禁止后,就会被识别为无人状态,然后灯就关了!同理厕所蹲的时候也会有这种尴尬,人工智能变智障。

网上各种解决方案也有,但都治标不治本,不是我想要的完美方案。因此,我决定自己创造一个!

一: 人体存在感应技术选型

要做这个存在传感器,最最核心的,自然就是如何判断人体存在(含静止状态),经过研究后,决定选择毫米波雷达传感技术的芯片

二:通讯协议的选择

获取到人体存在的信息后,如何通知家庭的智能中枢,以实现和其他设备的联动呢,蓝牙?还是Zigbee?显然都不如物联网通用的MQTT协议更优,配合WIFI,无论是Homeassistant、Node-red还是其他软件,都可轻松实现接入。

三:供电方案

考虑到芯片耗电量,采用电池供电会导致待机不足。加上传感器一般都是固定位置,没有太强的移动需求,因此最后决定使用电子设备通用的直流5V供电,接口采用比较常见的MICRO USB。这样随便一个常规的充电头加一根充电线即可给设备供电。

Node-Red使用MQTT协议接收及发送消息到ESP32单片机


以下方法经本人验证通过,环境如下:

Node-RED V0.20.5

ESP32-CAM + HC-SR04 + Arduino IDE

mosquitto version 2.0.11

MatrixDB


前言:Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,而MQTT则是当下使用广泛的物联网通信协议之一,为此我使用一块ESP-32单片机作为客户端,连接HC-SR04超声波测距模块做了两个简单的实验。

  • 实验一:获取物体距离数据,使用MQTT协议发送消息,并在Node-Red端进行接收,将数据保存在MatrixDB数据库中
  • 实验二:Node-Red使用MQTT协议发送消息,ESP32收到消息后对LED灯进行控制

实验中我使用了同一块ESP-32,实际应用中他们既可以是相同的物联网设备,当然也可以是不同的。实验目的是抛砖引玉,实际物联网中各类复杂场景都可以此为基础进行实现。

本实验的环境我在开篇已经列出,对于环境的准备,你可根据自己的情况参考下列文章做出调整:

第一步: 连接HC-SR04超声波测距模块

Node-Red 利用米家智能插座实现充满电自动关闭电源


以下方法经本人验证通过,环境如下:

Home Assistant 0.91.4

Node-RED V0.20.5

node-red-contrib-home-assistant-websocket 0.13.1

米家智能插座(Zigbee版),已接入Home Assistant

小度蓝牙音箱,已接入 Home Assistant

node-red-contrib-light-scheduler 0.0.15


前言:我经常在给相机充电的时候会搞忘记,往往会好几天才想起来去拔插头,正好有一个闲置的米家智能插座(Zigbee版),因此打算使用Node-Red来实现给设备充满电后自动关闭电源,并通过蓝牙音箱给出提示。

第一步:拖入节点

按下图所示,拖入poll state , swtch , delay,current state , call service,LS Filter, 及另一个 call service 节点,并依次将他们连接起来

Node-Red 设置变量控制设备开启次数


以下方法经本人验证通过,环境如下:

Home Assistant 0.91.4

Node-RED V0.20.5

node-red-contrib-home-assistant-websocket 0.13.1

相关设备已接入Home Assistant


前言:我有一株漂亮的茉莉花,某一次出远门,为了照顾它,我用闲置的鱼缸、一个小水泵和一截水管组成了一个简易的灌溉系统。同时,将水泵连接在一个智能插座上,这样我就可以使用手机远程的控制它完成浇水。但为了浇透,我需要远程打开水泵运行1分钟,然后关闭约5分钟,待水向下完全渗透后再次打开水泵运行1分钟。是的,这很麻烦,所以有这这篇文章

第一步:实现自动关闭功能

首先我们要实现的是当发现智能插座(水泵)打开后,等待1分钟,自动关闭它

按下图所示,拖入events: state , delay及 call service节点,并依次将他们连接起来

在Home Assisntant及Node-Red中控制安卓盒子WEBOX


以下方法经本人验证通过,环境如下:

Home Assistant 0.91.4

泰捷WEBOX we30 固件版本tvos1.2.1.6

泰捷WEBOX we30 已接入Home Assistant


第一步:在安卓盒子we30中设置-安全与隐私中将ADB调试设置为”允许”

第二步:在Home Assistant的服务页面,服务选择”androidtv.adb_command”,Service Data中按如下填写:

Node-Red 实现无人时自动延时关灯


以下方法经本人验证通过,环境如下:

Home Assistant 0.91.4

Node-RED V0.20.5

node-red-contrib-home-assistant-websocket 0.13.1

米家多功能网关及相关设备已接入Home Assistant


前言:在文章 将home-assistant接入node-red实现自动化 的最后,我们实现了一个简单的自动化,既判断有人移动时开灯。对应的,本文将实现一个简单的无人自动延时关灯的自动化。

第一步:拖入节点

按下图所示,拖入poll state , switch , current state , call service 及 debug 节点,并依次将他们连接起来

Node-Red 利用节点进行时间调度及实现定时任务


以下方法经本人验证通过,环境如下:

Node-RED V0.20.5

node-red-contrib-light-scheduler 0.0.15


前言:在文章 将home-assistant接入node-red实现自动化 的最后,我们实现了一个简单的自动化,既判断有人移动时开灯。在实际情况中,我们往往需要加入时间控制,例如定时在某个时间段内生效,或是在天黑后生效,此时,就需要一个模块 node-red-contrib-light-scheduler

第一步:Node-Red中安装模块