diff --git a/plugins/homekit/package-lock.json b/plugins/homekit/package-lock.json index 379ae2884..7f46019a9 100644 --- a/plugins/homekit/package-lock.json +++ b/plugins/homekit/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/homekit", - "version": "0.0.26", + "version": "0.0.34", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/homekit", - "version": "0.0.26", + "version": "0.0.34", "dependencies": { "axios": "^0.21.1", "hap-nodejs": "file:../HAP-NodeJS", diff --git a/plugins/homekit/package.json b/plugins/homekit/package.json index 44da5b385..73395cc93 100644 --- a/plugins/homekit/package.json +++ b/plugins/homekit/package.json @@ -42,5 +42,5 @@ "@types/node": "^14.17.9", "@types/url-parse": "^1.4.3" }, - "version": "0.0.26" + "version": "0.0.34" } diff --git a/plugins/homekit/src/main.ts b/plugins/homekit/src/main.ts index f054e3516..420756728 100644 --- a/plugins/homekit/src/main.ts +++ b/plugins/homekit/src/main.ts @@ -5,6 +5,7 @@ import { supportedTypes } from './common'; import './types' import { CameraMixin } from './camera-mixin'; import { maybeAddBatteryService } from './battery'; +import { randomBytes } from 'crypto'; const { systemManager, deviceManager } = sdk; @@ -60,7 +61,7 @@ class HomeKit extends ScryptedDeviceBase implements MixinProvider, Settings { getUsername() { return this.storage.getItem("mac") || (Object.entries(os.networkInterfaces()).filter(([iface, entry]) => iface.startsWith('en') || iface.startsWith('wlan')) as any) - .flat().map(([iface, entry]) => entry).find(i => i.family == 'IPv4').mac; + .flat().map(([iface, entry]) => entry).find(i => i && (i.family === 'IPv4' || i.family === 'IPv6'))?.mac; } async getSettings(): Promise { @@ -140,6 +141,16 @@ class HomeKit extends ScryptedDeviceBase implements MixinProvider, Settings { this.storage.setItem('defaultIncluded', JSON.stringify(defaultIncluded)); + let username = this.getUsername(); + if (!username) { + const buffers = []; + for (let i = 0; i < 6; i++) { + buffers.push(randomBytes(1).toString('hex')); + } + username = buffers.join(':'); + this.storage.setItem('username', username); + } + this.bridge.publish({ username: this.getUsername(), pincode: '123-45-678', @@ -160,7 +171,8 @@ class HomeKit extends ScryptedDeviceBase implements MixinProvider, Settings { const device = systemManager.getDeviceById(eventSource?.id); this.log.i(`Accessory descriptor changed: ${device?.name}. Requesting restart.`); - deviceManager.requestRestart(); + this.console.log('restart event', eventSource?.id, eventDetails.property, eventData); + // deviceManager.requestRestart(); }); } @@ -193,7 +205,8 @@ class HomeKit extends ScryptedDeviceBase implements MixinProvider, Settings { return; } this.log.i(`Accessory removed from HomeKit: ${device.name}. Requesting restart.`); - deviceManager.requestRestart(); + this.console.log('release mixin', id); + // deviceManager.requestRestart(); } }