UNPKG

redmatic-homekit

Version:

HAP-Nodejs based Node-RED nodes to create HomeKit Accessories

70 lines (65 loc) 2.66 kB
<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">