diff --git a/node-red-contrib-xiaomi-configurator/xiaomi-configurator.html b/node-red-contrib-xiaomi-configurator/xiaomi-configurator.html index 8afcb04..418bd2a 100644 --- a/node-red-contrib-xiaomi-configurator/xiaomi-configurator.html +++ b/node-red-contrib-xiaomi-configurator/xiaomi-configurator.html @@ -31,6 +31,7 @@ model.append($("").val("plug").text("plug")); model.append($("").val("gateway").text("gateway")); model.append($("").val("switch").text("switch")); + model.append($("").val("motion").text("motion")); sid.val(device.sid); desc.val(device.desc); diff --git a/node-red-contrib-xiaomi-magnet/icons/outlet-icon.png b/node-red-contrib-xiaomi-magnet/icons/outlet-icon.png deleted file mode 100644 index f9c7e4a..0000000 Binary files a/node-red-contrib-xiaomi-magnet/icons/outlet-icon.png and /dev/null differ diff --git a/node-red-contrib-xiaomi-magnet/xiaomi-magnet.html b/node-red-contrib-xiaomi-magnet/xiaomi-magnet.html index 8e43c95..9242afa 100644 --- a/node-red-contrib-xiaomi-magnet/xiaomi-magnet.html +++ b/node-red-contrib-xiaomi-magnet/xiaomi-magnet.html @@ -75,11 +75,11 @@
- +
- +
diff --git a/node-red-contrib-xiaomi-motion/icons/motion-icon.png b/node-red-contrib-xiaomi-motion/icons/motion-icon.png new file mode 100644 index 0000000..86c7e68 Binary files /dev/null and b/node-red-contrib-xiaomi-motion/icons/motion-icon.png differ diff --git a/node-red-contrib-xiaomi-motion/xiaomi-motion.html b/node-red-contrib-xiaomi-motion/xiaomi-motion.html new file mode 100644 index 0000000..ae3279b --- /dev/null +++ b/node-red-contrib-xiaomi-motion/xiaomi-motion.html @@ -0,0 +1,89 @@ + + + + + diff --git a/node-red-contrib-xiaomi-motion/xiaomi-motion.js b/node-red-contrib-xiaomi-motion/xiaomi-motion.js new file mode 100644 index 0000000..10ea602 --- /dev/null +++ b/node-red-contrib-xiaomi-motion/xiaomi-motion.js @@ -0,0 +1,86 @@ +module.exports = function(RED) { + "use strict"; + var mustache = require("mustache"); + + function XiaomiMotionNode(config) { + RED.nodes.createNode(this, config); + this.gateway = RED.nodes.getNode(config.gateway); + this.sid = config.sid; + this.output = config.output; + this.motionmsg = config.motionmsg; + this.nomotionmsg = config.nomotionmsg; + + var node = this; + var state = ""; + + // node.status({fill:"yellow", shape:"dot", text:"unknown state"}); + node.status({fill:"grey",shape:"ring",text:"battery"}); + + if (this.gateway) { + node.on('input', function(msg) { + // var payload = JSON.parse(msg); + var payload = msg.payload; + + if (payload.sid == node.sid && payload.model == "motion") { + var data = JSON.parse(payload.data) + + // if (data.status && data.status == "open") { + // node.status({fill:"green", shape:"dot", text:"open"}); + // state = "open"; + // } else if (data.status && data.status == "close") { + // node.status({fill:"red", shape:"dot", text:"closed"}); + // state = "closed"; + // } + + if (data.voltage) { + if (data.voltage < 2500) { + node.status({fill:"red",shape:"dot",text:"battery"}); + } else if (data.voltage < 2900) { + node.status({fill:"yellow",shape:"dot",text:"battery"}); + } else { + node.status({fill:"green",shape:"dot",text:"battery"}); + } + } + + + if (node.output == "0") { + msg.payload = payload; + node.send([msg]); + } else if (node.output == "1") { + var status = null; + var duration = null; + + if (data.status) { + status = {"payload": data.status}; + } + if (data.no_motion) { + status = {"payload": "no_motion"}; + duration = {"payload": {"no_motion": data.no_motion}}; + } + + node.send([[status], [duration]]); + } else if (node.output == "2") { + var status = null; + + if (data.status === 'motion') { + status = {"payload": mustache.render(node.motionmsg, data)} + } else { + status = {"payload": mustache.render(node.nomotionmsg, data)} + } + node.send([status]); + } + } + }); + + node.on("close", function() { + }); + + } else { + // no gateway configured + } + + } + + RED.nodes.registerType("xiaomi-motion", XiaomiMotionNode); + +} diff --git a/node-red-contrib-xiaomi-socket/xiaomi-socket.js b/node-red-contrib-xiaomi-socket/xiaomi-socket.js index 0cd59bf..77e7ee7 100644 --- a/node-red-contrib-xiaomi-socket/xiaomi-socket.js +++ b/node-red-contrib-xiaomi-socket/xiaomi-socket.js @@ -16,7 +16,7 @@ module.exports = function(RED) { var currentToken = ""; var state = ""; - node.status({fill:"yellow", shape:"ring", text:"no key"}); + node.status({fill:"yellow", shape:"ring", text:"waiting for key"}); if (this.gateway) { node.on('input', function(msg) { @@ -61,7 +61,7 @@ module.exports = function(RED) { var data = JSON.parse(payload.data) if (currentToken == "") { - node.status({fill:"yellow", shape:"dot", text:"no key"}); + node.status({fill:"yellow", shape:"ring", text:"waiting for key"}); } else if (data.status && data.status == "on") { node.status({fill:"green", shape:"dot", text:"on"}); state = "on";