UNPKG

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.

63 lines (54 loc) 2.27 kB
const miDevicesUtils = require('../src/utils'); module.exports = (RED) => { // motion function XiaomiMotionNode(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.motion_status || payload.data.status) { data['no_motion_since'] = 0 data['state'] = 'on' } if (payload.data.no_motion) { data['no_motion_since'] = payload.data.no_motion data['state'] = 'off' } if (payload.data.lux) { data['lux'] = payload.data.lux } 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-motion", XiaomiMotionNode); };