采集型水表每日累计值计算及限量告警
约 439 字大约 1 分钟
采集型水表每日累计值计算及限量告警
水表通常上报的是当前读数,也就是累计用水量,单位是 m³
。但是在实际使用中,我们希望记录水表每日的累计用量,在工业场景中对每日用量进行限量告警,通知企业主或客户关注用水情况。
通过 ThingsCloud 规则引擎云函数,可以非常快速的实现这个计算需求,我们创建一个属性上报预处理规则,在云函数中使用如下示例代码,请通过代码中的注释进行学习。
module.exports = function (report_attributes) {
/**
* report_attributes: 上报的属性对象,同时作为函数返回值。函数中可更新属性对象。
*/
if (report_attributes.water !== undefined) {
// 调用 ThingsCloud 内置函数,读取设备当前属性,也就是上次上报后的数据
const attrs = Cloud.getCurrentAttributes();
// 计算本次上报和上次的差值
report_attributes.water_add = report_attributes.water - attrs.water;
if (report_attributes.water_add < 0) {
// 如果水表设备端清零读数,会出现负值,这里判断并做修正
report_attributes.water_add = 0;
}
// 记录本次上报的年月日
report_attributes.report_date = Cloud.Utils.dateFormat("YYYYMMDD");
// 读取当前的累计增加值,默认为 0
let water_add_total = attrs.water_add_total || 0;
if (report_attributes.report_date !== attrs.report_date) {
// 如果是新的一天首次上报
// 保存每日的用水量,在历史数据中可以查看每日的用水量
report_attributes.day_water = water_add_total;
// 清零累计增加值,开始新一天的累加计算
water_add_total = 0;
}
// 更新累计增加值
report_attributes.water_add_total = water_add_total + report_attributes.water_add;
// 默认告警状态为flase
report_attributes.water_alarm = false;
if (report_attributes.water_add_total > 100) {
// 如果达到 100,告警为 true
report_attributes.water_alarm = true;
}
// 更新水表上报次数
report_attributes.water_count = (attrs.water_count || 0) + 1;
}
return report_attributes;
}
详细了解 ThingsCloud 消息规则,请浏览 消息规则