UNPKG

node-red-contrib-xiaomi-devices

Version:

A set of nodes to control some of the popular Xiaomi sensors which are connected to the Xiaomi Gateway.

116 lines (106 loc) 5.8 kB
<script type="text/javascript"> RED.nodes.registerType('xiaomi-configurator', { category: 'config', defaults: { name: {value: ""}, deviceList: {value:[{ sid:"", desc:"", model:"plug"}]}, key: {value: ""} }, label: function () { return this.name || "xiaomi-configurator"; }, oneditprepare: function() { var node = this; var tw_sensor_ht = {value:"sensor_ht", label:"sensor ht", icon:"icons/node-red-contrib-xiaomi-devices/sensor-ht-tw-icon.png"}; var tw_magnet = {value:"magnet", label:"contact", icon:"icons/node-red-contrib-xiaomi-devices/magnet-tw-icon.png"}; var tw_motion = {value:"motion", label:"motion", icon:"icons/node-red-contrib-xiaomi-devices/motion-tw-icon.png"}; var tw_plug = {value:"plug", label:"plug", icon:"icons/node-red-contrib-xiaomi-devices/plug-tw-icon.png"}; var tw_switch = {value:"switch", label:"switch", icon:"icons/node-red-contrib-xiaomi-devices/switch-tw-icon.png"}; $("#node-config-input-devices").css('min-height','250px').css('min-width','450px').editableList({ addItem: function(container, i, device) { if (!device.hasOwnProperty('model')) { device.model = 'sensor_ht'; } var row = $('<div/>').appendTo(container); $('<label/>',{for:"node-config-input-sid-"+i, style:"margin-left: 3px; width: 15px;vertical-align:middle"}).appendTo(row); var sid = $('<input/>',{id:"node-config-input-sid-"+i,type:"text", placeholder:"SID", style:"width:auto;vertical-align:top"}).appendTo(row); sid.typedInput({ default: 'sensor_ht', types: [tw_sensor_ht, tw_magnet, tw_motion, tw_plug, tw_switch] }); $('<label/>',{for:"node-config-input-desc-"+i, style:"margin-left: 7px; width: 20px;vertical-align:middle"}).html('<i class="fa fa-pencil-square-o"></i>').appendTo(row); var desc = $('<input/>',{id:"node-config-input-desc-"+i, type:"text", placeholder:"description", style:"width:auto;vertical-align:top"}).appendTo(row); sid.typedInput('value', device.sid); sid.typedInput('type', device.model); desc.val(device.desc); }, resize: function() { }, removeItem: function(opt) { }, sortItems: function(rules) { }, sortable: true, removable: true }); for (var i=0;i<this.deviceList.length;i++) { var device = this.deviceList[i]; $("#node-config-input-devices").editableList('addItem', device); } var listHeight = $("#node-config-input-devices").editableList('items').size() * 51 + 50; $("#node-config-input-devices").editableList('height', listHeight); }, oneditsave: function() { var devices = $("#node-config-input-devices").editableList('items'); var node = this; var devicesArray = []; devices.each(function(i) { var deviceElement = $(this); var sid = deviceElement.find("#node-config-input-sid-"+i).val(); var desc = deviceElement.find("#node-config-input-desc-"+i).val(); var model = deviceElement.find("#node-config-input-sid-"+i).typedInput('type'); var d = {}; d['sid']=sid; d['desc']=desc; d['model']=model; devicesArray.push(d); }); node.deviceList = devicesArray; } }); </script> <script type="text/x-red" data-template-name="xiaomi-configurator"> <div class="form-row"> <label for="node-config-input-name"><i class="icon-tag"></i> Name</label> <input type="text" id="node-config-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-config-input-key"><i class="fa fa-ticket"></i> Key/Password</label> <input type="text" id="node-config-input-key" placeholder="Key"> </div> <div class="form-row node-config-input-devices"> <ol id="node-config-input-devices"></ol> </div> </script> <script type="text/x-red" data-help-name="xiaomi-configurator"> <p>Device configuration for Xiaomi nodes.</p> <h3>Details</h3> <p>This configuration node is used by the Xiaomi device nodes. Here you can add devices with their device-id (SID), type and a description.</p> <p>At the moment the following devices are supported: <lu> <li>Humidity & Temperature sensor [sensor ht]</li> <li>Body motion sensor [motion]</li> <li>Magnet contact sensor [contact]</li> <li>Wall socket plug (zigbee) [plug]</li> <li>Push button [switch]</li> </lu> </p> <p>To be able to receive messages from the Xiaomi gateway, you need to set the gateway in developer mode. Once in developer mode, the gateway sends JSON messages over the network as UDP packages. On the internet their are a lot of guides on how to put the gateway in developer mode.</p> <p>If you want to use the wall sockets, you need to set the key from the gateway. The key can be retrieved via the Xiaomi Home App when in developer mode. Enter the key here and it is used together with the token from the gateway's heartbeat message to recalculate the key to switch the plug. If you do not specify a key, the plug-node can not be used.</p> </script>