node-red-contrib-miio-humidifier
Version:
Miio node for Smartmi humidifier (Xiaomi)
178 lines (165 loc) • 8.14 kB
HTML
<script type="text/x-red" data-template-name="miio-humidifier-output">
<link rel="stylesheet" href="miio-humidifier/static/css/common.css" type="text/css" />
<div class="form-row">
<label for="node-input-name" class="l-width"><i class="icon-tag"></i> <span data-i18n="label.name"></span></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]placeholder.name">
</div>
<div class="form-row">
<label for="node-input-server" class="l-width"><i class="fa fa-globe"></i> <span data-i18n="label.server"></span></label>
<input type="text" id="node-input-server">
</div>
<div class="form-row">
<label for="node-input-command" class="l-width"><i class="fa fa-tasks"></i> <span data-i18n="label.command"></span></label>
<input type="text" id="node-input-command" style="width:70%">
<input type="hidden" id="node-input-commandType">
</div>
<div class="form-row">
<label for="node-input-payload" class="l-width"><i class="fa fa-envelope"></i> <span data-i18n="label.payload"></span></label>
<input type="text" id="node-input-payload" style="width:70%">
<input type="hidden" id="node-input-payloadType">
</div>
</script>
<script type="text/javascript">
RED.nodes.registerType('miio-humidifier-output', {
category: 'miio-humidifier',
color: '#00bc9c',
icon: "mi.png",
align: 'right',
defaults: {
name: {
value: ""
},
server: {
type: "miio-humidifier-server",
required: true
},
command_name: {
value: null
},
command: {
value: 'set_power',
},
commandType: {
value: 'miio_cmd',
},
payload: {
value: 'payload',
},
payloadType: {
value: 'msg',
}
},
inputs: 1,
outputs: 0,
outputLabels: ["state"],
paletteLabel: 'out',
label: function () {
var label = 'Air Humidifier Out';
if (this.name) {
label = this.name;
} else if (typeof(this.command_name) == 'string' && this.command_name.length) {
label = this.command_name;
}
return label;
},
oneditprepare: function () {
var node = this;
var topicTypes = {
value: 'miio_cmd',
label: 'mi',
icon: 'icons/node-red-contrib-miio-humidifier/mi.png',
options: [
{'value':'set_power', 'label':RED._("node-red-contrib-miio-humidifier/out:commands.set_power")},
{'value':'set_mode', 'label':RED._("node-red-contrib-miio-humidifier/out:commands.set_mode")},
{'value':'set_limit_hum', 'label':RED._("node-red-contrib-miio-humidifier/out:commands.set_limit_hum")},
{'value':'set_led_b', 'label':RED._("node-red-contrib-miio-humidifier/out:commands.set_led_b")},
{'value':'set_buzzer', 'label':RED._("node-red-contrib-miio-humidifier/out:commands.set_buzzer")},
{'value':'set_dry', 'label':RED._("node-red-contrib-miio-humidifier/out:commands.set_dry")},
{'value':'set_child_lock', 'label':RED._("node-red-contrib-miio-humidifier/out:commands.set_child_lock")}
]
};
$('#node-input-command').typedInput({
types: [topicTypes, {value:'homekit',label:'homekit',icon: 'icons/node-red-contrib-miio-humidifier/homekit-logo.png',options:['homekit']}, 'str', 'msg', {value:'object',label:'object',options:['json']}],
default: 'msg',
value: 'topic',
typeField: $('#node-input-commandType'),
});
$('#node-input-device').on('change', function(type, value) {
$('#node-input-command').trigger('change');
});
$('#node-input-command').on('change', function(type, value) {
var val = $(this).val();
//chane options
var miioOptions = {};
if ('set_power' === val || 'set_child_lock' === val || 'set_dry' === val || 'set_buzzer' === val) {
miioOptions = [
{'value':'on', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.on")},
{'value':'off', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.off")}
];
} else if ('set_mode' === val) {
miioOptions = [
{'value':'auto', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.auto")},
{'value':'silent', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.silent")},
{'value':'medium', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.medium")},
{'value':'high', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.high")}
];
} else if ('set_led_b' === val) {
miioOptions = [
{'value':'0', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.max")},
{'value':'1', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.mid")},
{'value':'2', 'label':RED._("node-red-contrib-miio-humidifier/out:arguments.none")}
];
} else if ('set_limit_hum' === val) {
miioOptions = [
{'value':'40', 'label':'40%'},
{'value':'45', 'label':'45%'},
{'value':'50', 'label':'50%'},
{'value':'55', 'label':'55%'},
{'value':'60', 'label':'60%'},
{'value':'65', 'label':'65%'},
{'value':'70', 'label':'70%'},
{'value':'75', 'label':'75%'},
{'value':'80', 'label':'80%'}
];
}
if (miioOptions.length) {
var payloadTypes = {
value: 'miio_payload',
label: 'mi',
icon: 'icons/node-red-contrib-miio-humidifier/mi.png',
options: miioOptions
};
$('#node-input-payload').typedInput('types', [payloadTypes, 'msg', 'flow', 'global', 'str', 'num']);
} else {
$('#node-input-payload').typedInput('types', ['msg', 'flow', 'global', 'str', 'num']);
}
});
//init typedInput
var payloadTypes = {
value: 'miio_payload',
label: 'mi',
icon: 'icons/node-red-contrib-miio-humidifier/mi.png',
options: []
};
$('#node-input-payload').typedInput({
types: [payloadTypes, 'msg', 'flow', 'global', 'str', 'num'],
default: 'msg',
value: 'payload',
typeField: $('#node-input-payloadType'),
});
$('#node-input-commandType').val(node.commandType);
$('#node-input-payloadType').val(node.payloadType);
},
oneditsave: function () {
var commandCode = $('#node-input-command').val();
var commandType = $('#node-input-commandType').val();
if (commandType == 'miio_cmd') {
var commandCode = $('#node-input-command').val();
var commandLabel = $('.red-ui-typedInput-options [value=' + commandCode + ']').text();
this.command_name = commandLabel?commandLabel:null;
} else {
this.command_name = commandCode;
}
}
});
</script>