『瀚思彼岸』» 智能家居技术论坛

标题: 小弟在家里做了一套恒温系统自动化供大家参考一下 [打印本页]

作者: tangye    时间: 2021-5-24 11:07
标题: 小弟在家里做了一套恒温系统自动化供大家参考一下
本帖最后由 tangye 于 2021-5-26 17:58 编辑

周末在家里鼓捣 node-red,感觉还是很好用的。

耗材:

Aqara Hub M1s
小米门窗传感器
小米无线开关 - 1个手工控制小夜灯,1手工个控制净化器
小米烟雾报警器 zigbee 版本
小米温湿度传感器2代 - 1个主卧,1个次卧
小米蓝牙网关插座2代 - 连接温湿度传感器,并控制净化器开关
小米智能加湿器 jsq1 - 携带温湿度传感器放客厅
小米床头灯
小米空调伴侣2代 - 控制空调

全部接入米家+homeassistant+homekit
由于加湿器 homebridge 的插件实现比较好,无需cloud,加湿器是通过 homebridge 接入 homeassistant 的

[attach]29882[/attach](更新于5月26日)

两个小米开关是用的 home assistant 的自动化处理的,也可以用 node-red 的 device 功能(桃色的那个设备,这样可以复用很多逻辑,不过因为是前天做的,就没加进来)
空调是利用体感温度控制的,体感温度使用的是论坛里提到的一个算法,wiki:https://zh.wikipedia.org/zh-sg/% ... F%E6%BA%AB%E5%BA%A6

另外,使用的 home assistant 自带的 WAQI 来做空气质量监控,控制净化器
所有环境传感器:

[attach]29846[/attach][attach]29847[/attach]

利用 homekit 的地理围栏功能,可以实现比较好的自动化的开关,确保无人的时候,部分自动化可以不使用
5月26日:
做了一版本优化,增加了那些数字监控的稳定性逻辑,比如超过28度10分钟后,才触发什么的逻辑,本来也可以利用 stoptimer 来做,自己写了一个 js 的脚本,这样就可以用一个 function 节点,代替一堆节点了。
这里给出 function 的代码,供大家参考一下,哦对了,这里要利用到 outputCount 属性,如果有4种情况,要把 outputCount 设置为 4, 代码里的 messages 也是 4 的数组形态,为了多个输出口:
  1. const timeout = 1000 * 600;
  2. const payload = msg.payload;
  3. const state = payload >= 28 ?
  4.                 0 : payload >= 26 ?
  5.                 1 : payload >= 23 ?
  6.                 2 : 3;

  7. const last_state = context.get("last_state") ?? -1;
  8. const last_handler = context.get("handler");
  9. msg.state = state;

  10. if (state != last_state) {
  11.     context.set("last_state", state);
  12.     if (last_state == -1) {
  13.         const messages = [null, null, null, null];
  14.         messages[state] = msg;
  15.         return messages;
  16.     }
  17.     last_handler && clearTimeout(last_handler);
  18.     const handler = setTimeout(() => {
  19.         context.set("handler", undefined);
  20.         const messages = [null, null, null, null];
  21.         messages[state] = context.get("last_msg");
  22.         context.set("last_msg", undefined);
  23.         node.send(messages, false);
  24.         node.done();
  25.     }, timeout);
  26.     context.set("handler", handler);
  27.     context.set("last_msg", msg);
  28.     return;
  29. } else if (last_handler) {
  30.     context.set("last_msg", msg);
  31.     return null;
  32. } else {
  33.     context.set("last_msg", undefined);
  34.     const messages = [null, null, null, null];
  35.     messages[state] = msg;
  36.     return messages;
  37. }
复制代码
function 要在关闭的时候,增加回收 timer 和 context 的逻辑:
  1. // 节点正在停止或重新部署时,将运行此处添加的代码。
  2. const last_handler = context.get("handler");
  3. last_handler && clearTimeout(last_handler);
  4. context.set("handler", undefined);
  5. context.set("last_msg", undefined);
  6. context.set("last_state", undefined);
复制代码
这个代码专门用来处理,类似于温度、湿度等数据的自动化稳定器。确保抖动的数据不至于导致不停的开关设备。目前已经用了好多天了,之前湿度经常测试不太准,某个测试点会特别低,触发打开加湿器。所以,我做了一个2min的抖动处理就解决了这个问题,空调也是,因为温度在临界值附近时,不停导致空调开关没有必要,我做了一个10min钟防抖,就没有这个情况发生了。




作者: lnight    时间: 2021-5-24 14:40
这个的话一共花了多少钱,NR里边像是阳台门关闭自动化那个有个方块紫框的那个,是安装的哪个新节点?看起来像是可以定时触发获取数据,不用时间戳激活。
作者: tangye    时间: 2021-5-26 17:28
本帖最后由 tangye 于 2021-5-26 17:44 编辑
lnight 发表于 2021-5-24 14:40
这个的话一共花了多少钱,NR里边像是阳台门关闭自动化那个有个方块紫框的那个,是安装的哪个新节点?看起来 ...

紫色的是最新版本的 hassio 自带的 node-red 插件提供的,还在 alpha 阶段。用于从 device 监听触发消息的模块。因为有的设备不含实体,但是会触发消息。[attach]29883[/attach]

作者: tangye    时间: 2021-5-26 17:41
tangye 发表于 2021-5-26 17:28
紫色的是最新版本的 hassio 自带的 node-red 插件提供的,还在 alpha 阶段。用于从 device 监听触发消息 ...

所有设备价格包含了运费(有某东、有品、拼夕夕、淘宝都有淘):
Aqara Hub M1s:178
小米门窗传感器: 76
小米无线开关 - 1个手工控制小夜灯,1手工个控制净化器:48 * 2
小米烟雾报警器 zigbee 版本: 145
小米温湿度传感器2代 - 1个主卧,1个次卧: 18 * 2
小米蓝牙网关插座2代 - 连接温湿度传感器,并控制净化器开关: 59
小米智能除菌加湿器 jsq1 - 携带温湿度传感器放客厅:  260
小米床头灯:169
小米空调伴侣2代 - 控制空调: 79

总共 1100 左右
作者: skyflying5    时间: 2021-5-26 20:14
阳台门用的哪个开门关门器?
作者: zsqduke    时间: 2021-5-31 06:07
为什么不让空调自带的恒温工作?有人在,室外温度高于某个值,一直开着就行了,变频空调压缩机会自动按需启停。温度非常稳定
作者: kukulang    时间: 2021-5-31 11:39
// 节点正在停止或重新部署时,将运行此处添加的代码。
const last_handler = context.get("handler");
last_handler && clearTimeout(last_handler);
context.set("handler", undefined);
context.set("last_msg", undefined);
context.set("last_state", undefined);   请问老大 这段代码 怎么用 放在哪里?
作者: tangye    时间: 2021-6-3 21:11
skyflying5 发表于 2021-5-26 20:14
阳台门用的哪个开门关门器?

小米门窗传感器 1代
作者: tangye    时间: 2021-6-3 21:12
zsqduke 发表于 2021-5-31 06:07
为什么不让空调自带的恒温工作?有人在,室外温度高于某个值,一直开着就行了,变频空调压缩机会自动按需启 ...

是为了使用体感温度控制,同时空调是在客厅,我家孩子在卧室,用的卧室的温度控制的客厅的空调。
作者: tangye    时间: 2021-6-3 21:14
kukulang 发表于 2021-5-31 11:39
// 节点正在停止或重新部署时,将运行此处添加的代码。
const last_handler = context.get("handler");
la ...

[attach]29972[/attach]放在这里

作者: tangye    时间: 2021-6-3 21:16
目前这套跑的很稳定,长期,家里的空气质量、湿度、温度,都控制在很小的波动范围,这期间,北京,下过大雨,有过高温。虽然,加湿器、空调、净化器都会频繁开关,但是确实自动化的效果不一般。
作者: zhouhui920    时间: 2021-7-8 09:21
我天,随便周末两天就有个工程师产生了
作者: 13990973177    时间: 2021-10-7 14:16
能把流分享出来吗谢谢




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5