2017-06-30 21:32:10 +02:00
< script type = "text/javascript" >
RED.nodes.registerType('xiaomi-plug', {
2017-07-02 17:21:47 +02:00
category: 'xiaomi',
color: '#3FADB5',
2017-06-30 21:32:10 +02:00
defaults: {
gateway: {value:"", type:"xiaomi-configurator"},
name: {value: ""},
sid: {value: "", required: true},
onmsg: {value: ""},
offmsg: {value: ""},
output: {value: "0"}
},
inputs: 1,
outputs: 2,
outputLabels: ["Status","Control"],
2017-07-02 17:21:47 +02:00
paletteLabel: "plug (zigbee)",
2017-06-30 21:32:10 +02:00
icon: "outlet-icon.png",
label: function () {
return this.name || "xiaomi-plug";
},
oneditprepare: function() {
var node = this;
// Get the config node id from the select box:
var configNodeID = $('#node-input-gateway').val();
// Get the config node using the ID:
var configNode = RED.nodes.node(configNodeID);
$("#node-input-output").change(function () {
if ($(this).val() == "2") {
$(".node-input-msg").show();
} else {
$(".node-input-msg").hide();
}
});
$("#node-input-gateway").change(function () {
});
for (key in configNode.deviceList) {
var device = configNode.deviceList[key];
if (device.model === "plug") {
$('#node-input-sid').append('< option value = "' + device.sid + '" > ' + device.desc + '< / option > ');
}
}
$('#node-input-sid').val(node.sid);
},
oneditsave: function() {
var node = this;
node.sid = $("#node-input-sid").val();
}
});
< / script >
< script type = "text/x-red" data-template-name = "xiaomi-plug" >
< div class = "form-row" >
< label for = "node-input-gateway" > < i class = "icon-tag" > < / i > Gateway< / label >
< input type = "text" id = "node-input-gateway" placeholder = "xiaomi gateway" >
< / div >
< div class = "form-row" >
< label for = "node-input-name" > < i class = "icon-tag" > < / i > Name< / label >
< input type = "text" id = "node-input-name" placeholder = "Name" >
< / div >
< div class = "form-row" >
< label for = "node-input-sid" > < i class = "icon-tag" > < / i > Device< / label >
< select id = "node-input-sid" placeholder = "xiaomi gateway" > < / select >
< / div >
< div class = "form-row" >
< label for = "node-input-output" > < i class = "icon-tag" > < / i > Output< / label >
< select id = "node-input-output" style = "width:70%;" >
< option value = "0" > Full data< / option >
< option value = "1" > Just values< / option >
< option value = "2" > Template< / option >
< / select >
< / div >
< div class = "form-row node-input-msg" >
2017-06-30 22:02:50 +02:00
< label for = "node-input-onmsg" > < i class = "fa fa-power-off" > < / i > On msg< / label >
2017-06-30 21:32:10 +02:00
< input type = "text" id = "node-input-onmsg" >
< / div >
< div class = "form-row node-input-msg" >
2017-06-30 22:02:50 +02:00
< label for = "node-input-offmsg" > < i class = "fa fa-power-off" > < / i > Off msg< / label >
2017-06-30 21:32:10 +02:00
< input type = "text" id = "node-input-offmsg" >
< / div >
< / script >
< script type = "text/x-red" data-help-name = "xiaomi-plug" >
2017-07-03 22:41:43 +02:00
< p > The Xiaomi plug (zigbee) node< / p >
2017-07-03 17:44:05 +02:00
< p > This is the plug (socket) version which is attached to a Xiaomi gateway. The Wifi version is not yet supported.< / p >
< p > To switch an output you need to specify the key of the gateway in the gateway configuration; without the key
2017-07-03 22:41:43 +02:00
no output can be switched. To retrieve the gateway key consult the Xiaomi Mi Home App.< / p >
< h3 > Inputs< / h3 >
2017-07-03 17:44:05 +02:00
< dl class = "message-properties" >
2017-07-03 22:41:43 +02:00
< dt > payload
< span class = "property-type" > string | json< / span >
< / dt >
< dd > Gateway < code > plug< / code > message of type < code > read_ack< / code > , < code > heartbeat< / code > or < code > report< / code > . Or < code > on< / code > or < code > off< / code > .< / dd >
< / dl >
< h3 > Outputs< / h3 >
< ol class = "node-ports" >
< li > Status output
< dl class = "message-properties" >
< dt > payload < span class = "property-type" > string | json< / span > < / dt >
< dd > raw data, value or template.< / dd >
< / dl >
< / li >
< li > Control output
< dl class = "message-properties" >
< dt > payload < span class = "property-type" > json< / span > < / dt >
< dd > Gateway < code > write_cmd< / code > to switch the output on or off.< / dd >
< / dl >
< / li >
< / ol >
< h3 > Details< / h3 >
< p > The incoming json message is parsed if the type model is < code > plug< / code > and
the < code > sid< / code > matches the configured value for this device.< / p >
< p > On the input you can send the string < code > on< / code > to switch the plug on. To turn it off just send the string < code > off< / code > < / p >
< p > Output 1 reports the status, output 2 is the write command for the plug.< / p >
< p > Three output types are supported:
2017-07-03 17:44:05 +02:00
< ul >
< li > Full data< / li >
< li > Just values< / li >
< li > Template< / li >
< / ul >
2017-07-03 22:41:43 +02:00
< / p >
< h4 > Full data< / h4 >
< p > Passes the complete json object received from the gateway on output 1. Use this if you need the raw data.< / p >
< h4 > Just values< / h4 >
< p > Only passes the values < code > on< / code > or < code > off< / code > on output 1.< / p >
< h4 > Template< / h4 >
< p > Use your own template to pass the values on. The template can contain < a href = "http://mustache.github.io/mustache.5.html" > mustache-style< / a > tags.
Any property from the data section of the full object can be used.< / p >
2017-07-03 17:44:05 +02:00
< p > Sample message:< / p >
< p > < pre >
{
cmd: "write_ack"
model: "plug"
sid: "158d00012f1fb5"
short_id: 47414
data: "{
"voltage":3600,
"status":"off",
"inuse":"0",
"power_consumed":"4000",
"load_power":"0"
}"
}< / pre > < / p >
2017-06-30 21:32:10 +02:00
< / script >