redmatic-homekit
Version:
HAP-Nodejs based Node-RED nodes to create HomeKit Accessories
70 lines (65 loc) • 2.66 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('redmatic-homekit-zigbee-devices', {
category: 'redmatic homekit',
defaults: {
herdsman: {value: 'localhost', type: 'zigbee-shepherd', required: true},
bridgeConfig: {value: 'CC:22:3D:E3:CE:C7:51826', type: 'redmatic-homekit-bridge', required: true},
deviceConfig: {value: {}}
},
inputs: 0,
outputs: 0,
icon: 'homekit2.png',
color: '#E2D96E',
paletteLabel: 'zigbee',
align: 'left',
label() {
return this.name || 'zigbee';
},
labelStyle() {
return this.name ? 'node_label_italic' : '';
},
oneditprepare() {
$.getJSON('redmatic-homekit/zigbee-devices?id=' + this.id, data => {
this.deviceConfig = this.deviceConfig || {};
const firstRun = Object.keys(this.deviceConfig).length === 0;
data.sort((a, b) => String(a.name).localeCompare(b.name)).forEach(device => {
const enabled = firstRun || (this.deviceConfig[device.ieeeAddr] && this.deviceConfig[device.ieeeAddr].enabled);
$('table#devices').append(`<tr>
<td><input class="device-enable" data-addr="${device.ieeeAddr}" type="checkbox"${enabled ? ' checked' : ''}></td>
<td>${device.name}<br>${device.ieeeAddr}</td>
<td>${device.manufacturerName}<br>${device.modelID}</td>
</tr>`);
})
});
},
oneditsave() {
const node = this;
$('input.device-enable').each(function () {
node.deviceConfig[$(this).data('addr')] = {enabled: $(this).is(':checked')};
});
}
});
</script>
<script type="text/x-red" data-template-name="redmatic-homekit-zigbee-devices">
<div class="form-row">
<label for="node-input-herdsman"><i class="icon-global"></i> herdsman</label>
<input type="text" id="node-input-herdsman">
</div>
<div class="form-row">
<label for="node-input-bridgeConfig"><i class="icon-globe"></i> Bridge</label>
<input type="text" id="node-input-bridgeConfig">
</div>
<div class="form-row">
<table id="devices"></table>
</div>
<style>
table#devices input.device-enable {
display: inline-block;
width: 32px;
}
table#devices tr td {
padding-bottom: 6px;
}
</style>
</script>
<script type="text/x-red" data-help-name="redmatic-homekit-zigbee-devices">