node-red-contrib-mi-sensors
Version:
A set of nodes to control some of the popular Xiaomi sensors which are connected to the Xiaomi Gateway, and the Gateway itself.
65 lines (54 loc) • 2.34 kB
JavaScript
const miDevicesUtils = require('../src/utils');
module.exports = (RED) => {
// magnet, sensor_magnet.aq2
function XiaomiMagnetNode(config) {
RED.nodes.createNode(this, config);
this.gateway = RED.nodes.getNode(config.gateway);
this.sid = config.sid;
this.status({fill:"grey", shape:"ring", text:"battery - na"});
var node = this
if (this.gateway) {
this.on('input', (msg) => {
let payload = msg.payload;
//过滤掉心跳
if (payload.cmd == 'heartbeat') {
return null;
}
// Input from gateway
if (payload.sid) {
if (payload.sid == this.sid) {
miDevicesUtils.setStatus(this, payload.data);
let data = miDevicesUtils.get(node)
if (payload.data.no_close) {
data['open_since'] = payload.data.no_close
}
if (payload.data.status && payload.data.status == 'close') {
data['state'] = 'off'
data['open_since'] = 0
}
if (payload.data.status && payload.data.status == 'open') {
data['state'] = 'on'
data['open_since'] = 0
}
if (payload.data.batteryLevel) {
data['batteryLevel'] = payload.data.batteryLevel
}
miDevicesUtils.set(node, data)
payload.data = data
}
else {
msg = null;
}
}
// Prepare for request
else {
miDevicesUtils.prepareForGatewayRequest(this, msg);
let data = miDevicesUtils.get(node)
msg.payload.data = data
}
this.send(msg);
});
}
}
RED.nodes.registerType("xiaomi-magnet", XiaomiMagnetNode);
};