企业微信定时推送提醒处于开启状态的设备(未完结)

更新:已增加企业微信
flows.json (8.5 KB)


各位好,首先感谢热心的各位群友,感谢n大,感谢萝卜的耐心指点

本帖处于探索状态,未完结,也期待有大神有更好的解决方案

本人刚刚接触node-red,东西要一点一点的学,还没学完,就想做个设备提醒功能,每天晚上定时微信提醒我哪些灯没关,哪些插座没关,暂不需要他定时去把所有的都关掉,因为可能洗衣机的插座,现在正在用着洗衣服,不能断电,自动关掉就gg了。当然如果说有大佬能把判断设备是否在使用着,用完了再自动关,那样也是不错。不过这些都是后话,我现在没法实现,太难了。

说了一堆废话,简而言之就是,定时、提醒、哪些设备处于开启状态

遇到的困难:
1,刚开始接触,不知道用哪个节点,一直在用get-entities ,是可以过滤状态 state 是on的,但是没法过滤设备,自动化啥的也会跟着带出来。尝试了n大的events state,以失败告终。
2,用这个处理的结果,我一直选的是array,用msg.payload[0].attributes.friendly_name取到单个的,没法用类似循环的办法,把所有的一下都出来,失败告终。

尝试了很多,均以失败告终,最终是萝卜哥指点,按照他的进行修改,原文链接

缺点是要每个设备都添加一下,说实在的,有点笨,萝卜,无意冒犯,别打我。。。能做出这样的来,萝卜也是很厉害 :100:

以下是我做的,分享给大家


其实是按照萝卜的改的
image
server和id改成自己的,就ok了

总结下,本贴不是教程贴,是希望有更多的人参与,说出更好的方法。另外微信推送方面,也没完成,完成后我会更新的。已更新,增加企业微信。
希望,希望大佬们,多多指点,论坛越来越好
附上流flows (3).json (7.3 KB)

感谢分享~ 紫薯布丁

你就是群里的 Just For Fun 吧?

按照你的需求,写了一个function。你看看。

// 从 context 中获取 HA 插件的全局对象,里面包含了所有设备的状态对象。
var ha=global.get("homeassistant");
// 获取ha对象里面所有设备状态对象
var states = ha.homeAssistant.states;
// 声明存放符合条件的实例,对象类型是数组,方便遍历。
var entity=[];
// 声明最后组成设备字符串对象
var str=‘’;
// 遍历整个 states 对象
for (var i in states){
    // i是字符串,所有可以通过 search 来正则匹配
    // ^ 是最开始的意思
    // \. 这里是转义,因为 ‘.’ 在正则里面是代表任意字符串,所以这里要转义告诉程序这个是点
    // search 如果筛选出来的结果是-1,那么代表这个字符串内没找到 ^light\.
    // 没找到就 continue 跳过进行下一步循环遍历
    if (i.search(/^light\./i) < 0){continue;}
    // 检查设备状态是否符合 off
    if (states[i].state === "off"){
        // 是 OFF 的话就把 friendly_name 添加到数组(entity)最后一位。
        entity.push(states[i].attributes.friendly_name);
    }
}
// 遍历数组,让所有数组元素组成一个字符串 str,并且每个元素都用逗号分割。
entity.forEach(function(v){str=str + v + ','});
// 删除最后一个字符串
// 因为上面遍历数组都会每个元素加一个逗号,所以要删除最后一个逗号
str=str.slice(0,-1);
msg.payload="当前关闭的设备有:" + str;

return msg;

flows.json (2.0 KB)

1赞

对对,我一会改下群昵称

大佬就是大佬 :100:,我有空了测试下,非常感谢

n大,测试已通过,非常完美,我在你的基础上,稍作改动
str定义的时候,给定义了一个空值,避免了undefined的出现 :grinning:var str=‘’;

1赞

这个写的可以,很管用

X8@FX{9BD$P10W0_SM~X41
为啥每次查找出来会有undefined的字符?

看帖不仔细,定义空值就好了