homebridge-myplace
Version:
Exec Plugin bringing Advanatge Air MyPlace system to Homekit
54 lines (46 loc) • 1.72 kB
JavaScript
// devices auto-discovery
const { scanDevicesWithOpenPort } = require("./scanDevicesWithOpenPort");
const chalk = require("chalk");
async function devicesAutoDiscovery(config, log, portsToTry) {
let foundDevices = [];
for (const port of [...portsToTry]) { // copy so we can safely mutate
log.info(chalk.green(`🔍 Scanning for devices with port ${port} open...`));
portsToTry = portsToTry.filter(p => p !== port);
try {
const { AAIP1, AAIP2, AAIP3 } = await scanDevicesWithOpenPort(port);
foundDevices = [
{
name: config.devices?.[0]?.name ?? "Aircon",
ipAddress: AAIP1,
port,
extraTimers: config.devices?.[0]?.extraTimers ?? false,
debug: config.devices?.[0]?.debug ?? false,
},
{
name: config.devices?.[1]?.name ?? "Aircon2",
ipAddress: AAIP2,
port,
extraTimers: config.devices?.[1]?.extraTimers ?? false,
debug: config.devices?.[1]?.debug ?? false,
},
{
name: config.devices?.[2]?.name ?? "Aircon3",
ipAddress: AAIP3,
port,
extraTimers: config.devices?.[2]?.extraTimers ?? false,
debug: config.devices?.[2]?.debug ?? false,
},
].filter(d => d.ipAddress); // remove empty devices
if (foundDevices.length > 0) {
log.info(`✅ Found ${foundDevices.length} devices on port ${port}`);
break;
} else {
log.warn(`⚠️ No devices found on port ${port}, trying next...`);
}
} catch (err) {
log.error(`❌ Scan failed on port ${port}: ${err.message}`);
}
}
return foundDevices;
}
module.exports = { devicesAutoDiscovery };