ForgetMeNot - 智能家居通知平台





准备工作:
材料:
哇哦,这么多东西……
这是一个相当广泛的项目,我们对所使用的硬件、软件和其他产品做出了一些早期的设计选择。
如果您打算跟着我们一起学习,我们推荐以下列表,但很多部件都可以换成更容易获得的物品。WeMos 开发板就是一个例子 - 无论您手头有哪种便宜的开发板,您都可以让它工作而无需进行太多更改。
另一种例子是智能插座的外壳。虽然漂亮又坚固,但任何(非金属)盒子都可以。我们恰好有激光切割机,每个有激光切割机的人突然间都对激光切割有了很多种用途。所有的东西。我们的 3D 打印部件也是如此。
所以 - 只需摇动您自己的装备,如果您需要帮助将某个部件替换为另一个部件,请在下方发表评论。
微控制器、电路板和屏蔽
- 4 个 ESP8266 开发板(我们使用了 LoLin 制造的 WeMos D1 minis)
- 1 x D1 微型继电器屏蔽
- 1 x L293N Hbridge(用于门激活器的直流引擎)
力量
- 50 根 Arduino 式跳线(根据您使用的电路板,您可能需要更多母头-公头或更多公头-公头。每种都准备一些,它们总是有用的)-请注意,其中一些将被剥去,用于门激活器
- 3 x 10 欧姆电阻
- 1 x Xuanshi XS-XB6 16A ~250v 最大 3500W 电源板 + 延长线(任何延长线 + 220V 插座分线器都可以)-请注意,它将被剥离以用于智能插座
- 3 根 Micro-USB 线缆
- 3 个 USB 壁式充电器
- 1 x DY-0120200(输入:100-240V,50-60Hz 输出:12V---2A)带 DC 筒形公头的 AC/DC 适配器(或同等适配器)
- 1 个母 DC 筒形插孔
- 1 个 220V 至 5V 变压器(用于直接从电源板为智能插座板供电,无需额外的电源)
传感器
- 1 个 LDR 光传感器
- 1 个簧片继电器(作为窗户的传感器)
- 1 个 DHT 温度传感器
电机
- 1 个直流电机(我们使用了无芯金属刷电机,但任何适合您的 3D 打印门激活器外壳的电机都可以)
- 1 个伺服电机(任何尺寸都可以,但一定要使用足够强大的电机来拨动所需的开关)
激光切割部件
- 1 个智能插座盒
3D 打印部件
- 1 x 门启动器外壳
手机
本教程是针对 Android 手机编写的,但目前看来 Integromat 不支持 iOS 设备。因此,遗憾的是,本教程需要 Android 手机。
软件
- Arduino IDE(集成开发环境 - 基本上是一个花哨的代码编辑器)
- 将您的开发板加载到 IDE 中,以便轻松上传
- 请参阅附件中所有相关库的草图
- Node-RED集成平台
- 我们主要使用库存节点,但也有少数例外 - 请参阅附件中所有相关节点的流程
- Integromat.com(服务连接器,允许将多个服务链接在一起 - 在我们的例子中是 Android 应用程序和我们的 Node-RED 服务器)
- 我们使用了免费套餐,这足以满足平台的日常使用
- PushBullet.com(推送通知服务)
- 我们使用的是免费版本,这足以满足平台的日常使用
- ngrok(安全隧道服务)
- 我们使用这个免费的隧道软件将我们本地运行的仪表板的链接公开给全世界,这样我们就可以从推送通知中的 URL 访问仪表板
- Mosquitto MQTT 代理
- MQTT 是用于在连接的设备和 Node-RED 之间传输消息的协议。由于 Node-RED 没有内置 MQTT 服务器,因此我们必须使用外部服务器。
了解流程

系统的一般流程(之后构建 Node-RED 流程)如下:
- 你离开家
- 你的手机与家里的 WiFi 断开连接
- Integromat 收到消息并通知 Node-RED
- Node-RED 检查你家里的传感器和仪表板上的开关的状态
- 如果有任何东西遗留或打开,它会通知 PushBullet
- PushBullet 向您的手机发送通知,其中包含 Node-RED 仪表板链接
- 您可以进入仪表板并关闭相关内容
本质上,我们提供一种集中的方法来管理您家中的各种物品,并验证您离开家时它们处于正确的状态。
在实践中,我们在这个项目中具备以下能力:
- 窗口状态 - 打开/关闭(由簧片继电器状态指示)
- 灯光状态 - 开/关(由 LDR 状态指示)
- 空间加热器的状态 - 开/关(由 DHT 温度传感器指示)
- 门启动器 - 打开/关闭(直流电机定制的 3D 外壳)
- 智能插座激活器-开/关(连接到电源板的 D1 继电器)
- 开关按压激活器-开/关(连接到电路板的伺服器)
在我们看来,这足以展示该平台的功能。如果需要,它可以轻松扩展(使用 Node-RED)以添加更多状态指示器/激活器。
Ngrok




ngrok是一种隧道服务。它允许我们将本地运行的服务(在我们的例子中是 Node-RED)暴露给外界 - 无需设置服务器或处理 DNS 记录。您只需在计算机上运行 Node-RED,然后在 Node-RED 运行的同一端口上运行 ngrok。就是这样 - 您将获得一个 URL,您可以使用它从世界任何地方访问 Node-RED,无论它连接到哪个网络。
安装和配置
- 从这里下载适合您的操作系统的 ngrok 。
- 按照下载页面上的步骤进行操作,直到“启动”步骤。
- 在“启动步骤”中,将 80 替换为 1880 - 例如,./ngrok http 1880或ngrok http 1880,具体取决于您的操作系统。
- 记下您在命令行中看到的http URL - 我们稍后会用到它。请参阅图片中的示例。
Node-RED





安装和配置
Node-RED 是该项目的主要逻辑控制器,它是一种可视化编程环境,可让您将各种软件(和硬件!)服务连接在一起,以创建统一的应用程序。作为额外功能,它允许生成漂亮的仪表板,可以从各种服务中获取信息,甚至控制这些服务。
如果您熟悉 Node-RED,只需从这个 Gist获取我们的流程,并从下面的步骤 8 中添加您的 ngrok id。
如果您不熟悉 Node-RED 或尚未安装它,请按照以下步骤在本地计算机上加载我们的 Node-RED 流程:
- Node-RED 需要 Node.js,这是一种具有自己特殊开发环境的编程语言。从此处获取与您的操作系统相关的安装程序,然后按照说明进行操作。
- 现在,您可以按照此处的说明安装 Node-RED 本身。请记下 Node-RED 的安装位置,因为下一步需要它。
- 现在您已经安装了 Node-RED,请按照上述步骤中的说明运行它,并验证您是否可以看到一个空白的画布页面。它应该位于http://127.0.0.1:1880。
- 现在您需要安装此项目中使用的一些附加节点(Node-RED 将其称为扩展或模块)。请按照此处和此处的说明安装这两个模块。
- 现在节点已安装完毕,请重新启动 node-red 服务器(只需终止服务并重新启动即可)。现在,您的流程中应该有两个节点可用。
- 从这里下载该项目的 Node-RED 流程,然后按照此处的说明将其导入到您的 Node-RED 安装中。
- 确保您能看到屏幕上方所示的流程图片。
- 还记得上一步中的 ngrok URL 吗?将其输入到“构建推送通知”节点。这将使我们能够在我们用于接收通知的任何设备上看到仪表板的实时链接(在本地机器上运行)。
流程说明
请注意,流程分为两部分 - 上面是主逻辑,下面是组件逻辑。
主要逻辑负责查明您是否已经离开家(通过在Integromat WiFi Leave Endpoint节点中接收来自 Integromat 的 GET 请求),返回成功响应(因此 Integromat 不会挂起,在Send Success Message To Integromat中),然后检查所有传感器和激活器以检查它们的当前状态(这发生在Build Push Notification功能节点内,使用全局上下文存储来获取信息)。如果该检查检测到某些东西已打开或打开,它会触发 PushBullet 推送通知(在最上面的Send Push Notification节点中)。最下面的Send Push Notification节点负责发送延迟的推送通知(对于空间加热器 - 有关其背后逻辑的更多信息,请参阅其步骤)。请注意,那里还有一个调试节点(称为Get Request),用于记录所有通过的请求,因此我们可以捕获 Integromat 这边的任何问题。
组件逻辑流程负责使用每个激活器/传感器的状态更新全局上下文存储,因此我们可以决定在推送通知中需要发送哪些信息(如果有)。请注意,这些流程有两种不同的变体:
激活器流程(按下开关/门/智能插座) -这些流程需要在仪表板上翻转开关后更新仪表板 + 触发现实世界中的某些活动。具体来说,它们都等待仪表板上发生操作(在开关节点中) ,然后翻转状态逻辑功能节点内的状态,并根据翻转的开关更新仪表板(在状态 LED节点中打开/关闭 LED ,并更改状态指示器节点中的文本)。此外,在开关翻转后,会向控制激活器的 WeMos 控制器发送 MQTT 消息(使用 MQTT-out激活器节点)以在物理世界中创建动作(即打开/关闭门或关闭/启用智能插座)。
传感器流程(灯/窗户/空间加热器) - 这些流程需要在传感器消息通过 MQTT 传入后更新仪表板。具体来说,它们都等待 MQTT 消息传入(使用 MQTT-in传感器节点),然后解析信息并在状态逻辑功能节点内翻转状态。之后,它们根据传入的消息更新仪表板(在状态 LED节点中打开/关闭 LED ,并在状态指示器节点中更改文本)。
看到每个组件上附加的注入器节点了吗?它们负责在仪表板首次启动时提供合理的默认值,以确保首次加载时不会发生任何异常。
注意: Node-RED 有两种“模式”:画布和 UI。画布是您创建和编辑节点的地方(位于http://127.0.0.1:1880或 http://YOUR_NGROK_ID.ngrok.io),UI 是您查看仪表板的地方(位于http://127.0.0.1:1880/ui或 http://YOUR_NGROK_ID.ngrok.io/ui)。
Integromat





报名
Integromat自称是“互联网的粘合剂”,它是一种以有趣的方式将各种软件连接在一起的服务。在我们的案例中,我们使用其 Android 应用程序检查您何时断开了家中的 WiFi,然后向我们的 Node-Red 服务器触发 HTTP 请求。此请求将触发上一步中描述的整个流程。
- 在此注册一个 Integromat 帐户。
- 从这里下载 Android 应用程序。
- 在 Integromat 网络控制台中(注册 Integromat 后您应该会看到它),打开左侧中间的“设备”选项卡。
- 单击左上角的“添加设备”并按照显示的步骤添加您的设备。
- 通过 Web 控制台授权应用程序后,打开它并进入右下角的设置。
- 点击 WiFi,然后选中(在“事件”下) “WiFi 断开连接事件”复选框。这样,应用程序就可以查看你的手机何时与 WiFi 网络断开连接。
创建我们的场景
Integromat 中的操作流程称为场景。我们将创建一个场景,等待任何WiFi 网络断开连接,然后仅过滤与我们家的 WiFi 网络匹配的网络。
- 请参阅上图以了解场景描述。
- 通过单击收藏夹附近的底部“+”号来创建每个节点(“气泡”),并添加三个所需的节点 - Android(WiFi 断开连接)、JSON(创建 JSON)和 HTTP(发出请求)。
- 将 Android 节点连接到 JSON 节点,将 JSON 节点连接到 HTTP 节点。
- 根据上图配置Android和JSON节点之间的过滤器。
- 根据上图配置每个节点。注意 HTTP 节点使用上一步创建的 ngrok URL。如果您的 ngrok URL 是http://ac72hs.ngrok.io,那么您的 ngrok id 就是 ac72hs。
蚊子

由于 Node-RED 没有自己的 MQTT 代理,而我们需要通过 MQTT 与传感器和激活器进行通信,因此我们将使用专用的 MQTT 代理。由于 Node-RED 推荐使用 Mosquitto,因此我们将使用它。请参阅此处了解有关 MQTT 的一些信息以及它经常用于 IoT 项目的原因。
安装和配置
- 从这里下载 Mosquitto并安装,全部根据您的操作系统进行。
- 通常情况下,您需要按照此处的说明将 Node-RED 连接到 Mosquitto。但是,如果您使用我们的流程,它已经为您预先配置好了。只要您正确安装流程和 Mosquitrro,并且 Mosquitto 在端口 1883 上运行(默认情况下在该端口上运行),它就可以开箱即用。
- 请注意,这意味着 MQTT 代理和您的 Node-RED 服务器在同一台机器上运行。这对于简化系统内部的通信非常有用。有关更多信息,请参阅下面的注释。
关于本地网络的说明
为了让您的设备能够与 Node-RED 正常配合使用,您需要让它们能够访问代理。虽然我们可以定义代理并使用它来与 Mosquitto 通信,但为了避免复杂化,我们建议使用一个简单的解决方案:确保您的计算机(运行 Node-RED 和 Mosquitto)和您的 ESP8266 开发板连接到同一个 WiFi。这样,您的设备就可以直接与您的代理通信,而无需任何中间人。
有人可能会问,为什么不使用 ngrok 来实现这一点,就像我们使用它从另一台设备浏览仪表板一样。简单的答案是你可以 - 但 ngrok 限制(在免费版本中)每个用户只能使用一个隧道。这意味着你只能向外界开放一个端口,在我们的例子中,该端口用于公开 Node-RED。因此,我们使用本地网络来绕过这个问题。
这意味着在每个草图中,您都需要修改代理的 IP 地址,以适合您计算机在本地网络上的 IP 地址。可以通过运行ipconfig(在 Windows 上)和ifconfig(在 Mac/Linux 上)并查找相关的 WiFi 接口来访问此地址。它应该列在inet 地址下。
然而,您在此过程中可能仍会遇到一些 MQTT 问题。因此,监控所有入站和出站 MQTT 流量很有用。
监控 MQTT 流量
虽然 Mosquitto 使用mosuitto_sub提供了开箱即用的功能,但对于更注重 GUI 的人来说,具有图形界面的客户端可能更易于使用。MQTTfx是一款出色的工具,我们在该项目的整个工作过程中广泛使用,我们衷心推荐它。感谢Jens Deters提供这款出色的工具!
Pushbullet




Pushbullet 是一项推送通知服务。它允许您为设备订阅该服务,然后根据相当多的可能集成向设备推送通知。我们将使用它来通知我们的设备,当家里的某件东西被打开或打开时,并在仪表板上添加一个链接,以便我们可以关闭或关闭我们在离开家之前忘记照顾的东西。
注册和配置
- 使用您的 Google 帐户在此注册一个 Pushbullet 帐户。
- 从这里下载 Pushbullet Android 应用程序。
- 登录 Pusbullet 后,单击此处并使用左侧的按钮添加您的设备。
- 然后转到此处并选择创建访问令牌。记下此令牌,我们将在下一步中需要它。
- 转到 Node-RED,然后单击发送推送通知节点。
- 在侧边栏(见图)中选择“PushBullet Config”,然后选择铅笔图标。
- 将步骤 4 中的访问令牌添加到“API 密钥”字段。
- 您现在应该能够在手机上收到推送通知。
Arduino IDE

在本教程中,我们使用 ESP8266 开发板来控制我们使用的各种硬件。为了将软件上传到开发板,我们需要使用 USB 电缆对其进行刷新。这个过程非常简单:将开发板连接到计算机,然后按下按钮。但是,要做到这一点,我们需要进行一些初步设置。
安装和配置
- 按照此处的指南安装 Arduino IDE。
- 按照此处的指南将 ESP8266 开发板的相关“驱动程序”安装到您的 Arduino IDE。
- 将草图(.ino 文件)上传到主板时,请确保使用合适的 USB 线(不是电源线,而是数据线)。
将草图上传至图板
在接下来的步骤中 - 涉及将硬件连接到我们现有的软件界面 - 我们只会说“将草图上传到电路板”。为了让以下每个步骤更多地关注硬件而不是软件,我们在这里详细介绍了一次上传流程:
- 使用 USB 线将开发板连接到计算机。
- 打开 Arudiono IDE。
- 打开您下载的草图以执行相关步骤。
- 在“工具”菜单中,选择“板”选项下的相关板。
- 在同一菜单中,确保“端口”选项选择了您的主板所连接的端口。默认情况下它应该会这样做,但如果没有,只需确保它这样做即可。如果您不确定计算机上的哪个端口是哪个,请参阅下一步。
- 点击屏幕右上角的箭头按钮(就在复选标记图标旁边),将草图上传到主板。这将编译并尝试将草图上传到主板。
- 如果以下步骤失败,请尝试在工具菜单中选择另一个端口或另一个主板。
- 如果您仍然遇到困难,请尝试查看这个 Quora 回答以了解后续步骤。
仪表板

上图显示了最终的仪表板的外观。注意到开关了吗?它们激活我们将在后续步骤中设置的各种硬件。LED 是状态指示器,当传感器感应到某种变化时以及当我们拨动开关时,它们会发生变化。
光传感器







这款光传感器可让您判断家中某个房间的灯是开着还是关着。如果将其妥善装进盒子并放在靠近灯的地方,其体积不会大于两个粘在一起的火柴盒。
组装 + 配置
- 根据附带的 Fritzing 原理图连接电路。
- 打开草图并更改以下变量:
- mqtt_server - 您的计算机的本地 IP 地址(因为它运行 Mosquitto,MQTT 代理)
- ssid - 你的电脑所连接的 WiFi 网络的名称,以及你希望你的主板所连接的 WiFi 网络的名称
- 密码- 所述 WiFi 网络的密码
- 将附带的草图上传至您的主板。
- 在仪表板上测试一下!
仪表板
查看“灯光”选项卡的 LED - 它将指示灯是打开还是关闭。
智能插座激活器








智能插座将普通电源板(带有适当长度的延长线)转换为智能对象 - 即,启用 WiFi 的继电器通过单击 Node-RED 仪表板上的按钮来打开和关闭它。这样,如果您忘记关闭插入插座的某个设备,您将能够手动将其关闭!
组装 + 配置
- 将电源线从中间剪断,并剥去电线。
- 按照 Fritzing Schematic 图将剥好的电线插入螺丝端子。
- 打开草图并更改以下变量:
- mqtt_server - 您的计算机的本地 IP 地址(因为它运行 Mosquitto,MQTT 代理)
- ssid - 你的电脑所连接的 WiFi 网络的名称,以及你希望你的主板所连接的 WiFi 网络的名称
- 密码- 所述 WiFi 网络的密码
- 将草图上传至开发板。
- 将继电器屏蔽连接至电路板。
- 根据 Fritzing 方案组装电路。
- 在仪表板上测试一下!
加分项——外壳
- 如果可以,请使用随附的 SmartOutletCasing 图像激光切割外壳。如果激光切割机不足,请取一个纸板箱,将图像粘贴在纸板箱的一侧,然后将其切割出来。
- 在盒子的侧面切两个孔,然后像附图一样滑入电源板。
- 将盒子内的条带两端绑住,以确保电路不会被拉过孔。
仪表板
查看“智能插座”选项卡的 LED - 它将指示智能插座是打开还是关闭。此外,打开
门启动器







这种巧妙的机制可以来回旋转钥匙,使我们能够锁定和解锁门。具体来说,如果你离开家时忘了锁门,你可以远程锁定它!:)
组装 + 配置
- 打开草图并更改以下变量:
- mqtt_server - 您的计算机的本地 IP 地址(因为它运行 Mosquitto,MQTT 代理)
- ssid - 你的电脑所连接的 WiFi 网络的名称,以及你希望你的主板所连接的 WiFi 网络的名称
- 密码- 所述 WiFi 网络的密码
- 将草图上传至 ESP8266 板。
- 根据原理图组装电路。请注意,我们使用外部电源来控制(相对较强的)直流电机。这需要 L298-N HBridge 和外部电源。我们不需要任何焊接,因为母筒式插孔和 HBridge 都有我们可以使用的漂亮螺丝端子 - 为了进行这些连接,我们剥去了几根跳线的一端。愿他们安息。
- 在仪表板上测试一下!
加分点——外壳
我们使用了Jack Lew的现有设计。如果您有 3D 打印机,这是一个很棒的手机壳,您可以将其贴在门上,并用螺栓或热胶固定。
仪表板
查看“门”选项卡的 LED - 它将指示门是打开还是关闭。此外,打开和关闭开关既有趣又有益!
窗户传感器







别让猫跑出去!此传感器使用簧片继电器来检查窗户是打开还是关闭。请注意,我们选择窗户只是为了举例——它可以用于许多其他用途,包括检查门是否打开,包括房屋、房间和冰箱门。
组装与配置
- 根据上面的 Fritzing 原理图组装电路。
- 打开草图并更改以下变量:
- mqtt_server - 您的计算机的本地 IP 地址(因为它运行 Mosquitto,MQTT 代理)
- ssid - 你的电脑所连接的 WiFi 网络的名称,以及你希望你的主板所连接的 WiFi 网络的名称
- 密码- 所述 WiFi 网络的密码
- 将您的草图上传至主板。
- 将簧片继电器的一部分连接到窗台,将另一部分连接到窗户本身(或您决定将传感器连接到的任何开口)。
- 在仪表板上测试一下!
仪表板
查看“窗口”选项卡的 LED - 它将指示窗口是打开还是关闭。
空间加热器传感器







空间加热器传感器
开关按压激活器




这是一个非常简单的伺服引擎,可以打开或关闭物理开关(电灯开关、热水器开关、电源板开关等)。如果您忘记关掉家中某个开关控制的物品(例如电灯或热水器),您可以远程将其关闭。
组装与配置
- 打开草图并更改以下变量:
- mqtt_server - 您的计算机的本地 IP 地址(因为它运行 Mosquitto,MQTT 代理)
- ssid - 你的电脑所连接的 WiFi 网络的名称,以及你希望你的主板所连接的 WiFi 网络的名称
- 密码- 所述 WiFi 网络的密码
- 将草图上传至你的开发板。
- 根据 Fritzing 原理图组装电路。
- 使用热胶或您自己制作的合适外壳将伺服器连接到相关开关。如果您制作了照片,请发送给我们!
- 测试仪表板!
仪表板
查看“开关按下”选项卡的 LED - 它将指示开关按下是打开还是关闭。此外,轻按开关可获得乐趣和收益!











