public async Task <bool> FindDevicesAsync(HardwareConfig config) { var modified = false; if (config.MiHome != null) { foreach (var gatewayConfig in config.MiHome.Gateways) { var miHome = new MiHome(gatewayConfig.Password, gatewayConfig.Id); m_MiHomeObjects.Add(miHome); await Task.Delay(5000); var gateway = miHome.GetGateway(); if (gateway != null) { AddDevice(gatewayConfig.Name, gatewayConfig.Description, gateway); foreach (var device in miHome.GetDevices()) { var deviceConfig = gatewayConfig.Devices.SingleOrDefault(deviceConfig => deviceConfig.Id == device.Sid); if (deviceConfig == null) { deviceConfig = CreateDeviceConfig(device); gatewayConfig.Devices.Add(deviceConfig); modified = true; } AddDevice(deviceConfig.Name, deviceConfig.Description, device); } } } } if (config.Http != null) { foreach (var deviceConfig in config.Http.Devices) { var device = HttpDevice.Create(deviceConfig.Type); if (device != null) { device.Host = deviceConfig.Host; AddDevice(deviceConfig.Name, deviceConfig.Description, device); } } } if (config.Virtual != null) { foreach (var switchConfig in config.Virtual.Switches) { var @switch = new Virtual.Switch(); @switch.SetStatus(switchConfig.Status); AddDevice(switchConfig.Name, switchConfig.Description, @switch); } } return(modified); }
public static void Main(string[] args) { // pwd of your gateway (optional, needed only to send commands to your devices) // and sid of your gateway (optional, use only when you have 2 gateways in your LAN) using (var miHome = new MiHome()) { Task.Delay(5000).Wait(); foreach (var miHomeDevice in miHome.GetDevices()) { Console.WriteLine(miHomeDevice); // all discovered devices } Console.ReadLine(); } }