private void GetDevices(int retry = 0) { lock (LockObject) { _log.Info("Fetching Devies from MelCloud"); if (retry > 1) { _log.Error("Could not get devices after trying two times"); //throw new Exception("Could not get devices. Aborting. Check your user is active and Melcloud is working"); return; } try { var result = _restHandler.DoDeviceListing(); _log.Debug(result.ResponseContent); if (result.Success) { _log.Debug("Got a successful response from melcloud"); dynamic data = JsonConvert.DeserializeObject(result.ResponseContent); //Convert data //Process all Floor devices _log.Debug("Process all devices pr floor"); if (data[0].Structure.ContainsKey("Floors") && data[0].Structure.Floors.Count > 0) { for (int i = 0; i < data[0].Structure.Floors.Count; i++) { _log.Debug("A floor detected"); for (int j = 0; j < data[0].Structure.Floors[i].Devices.Count; j++) { _log.Debug("A device detected"); CreateMelcloudDevice(data[0].Structure.Floors[i].Devices[j]); } } } else { _log.Debug("No floor devices found"); } _log.Debug("Process all devices pr area"); if (data[0].Structure.ContainsKey("Areas") && data[0].Structure.Areas.Count > 0) { for (int i = 0; i < data[0].Structure.Area.Count; i++) { for (int j = 0; j < data[0].Structure.Area[i].Devices.Count; j++) { CreateMelcloudDevice(data[0].Structure.Area[i].Devices[j]); } } } else { _log.Debug("No area devices found"); } _log.Debug("Process all devices pr clients"); if (data[0].Structure.ContainsKey("Clients") && data[0].Structure.Clients.Count > 0) { for (int i = 0; i < data[0].Structure.Clients.Count; i++) { for (int j = 0; j < data[0].Structure.Clients[i].Devices.Count; j++) { CreateMelcloudDevice(data[0].Structure.Clients[i].Devices[j]); } } } else { _log.Debug("No client devices found"); } _log.Debug("Process all devices pr devices"); if (data[0].Structure.ContainsKey("Devices") && data[0].Structure.Devices.Count > 0) { for (int i = 0; i < data[0].Structure.Devices.Count; i++) { //Create if we have multiple devices if (data[0].Structure.Devices[i].Devices != null && data[0].Structure.Devices[i].Devices.Count > 0) { for (int j = 0; j < data[0].Structure.Devices[i].Devices.Count; j++) { CreateMelcloudDevice(data[0].Structure.Devices[i].Devices[j]); } } //Create if we have a single device if (data[0].Structure.Devices[i].Devices == null && data[0].Structure.Devices[i].Device != null) { CreateMelcloudDevice(data[0].Structure.Devices[i]); } } } else { _log.Debug("No client devices found"); } } else { if (retry <= 1) { //Give it another chance - try to login first Login(); GetDevices(retry += 1); //Raise attempt with one } else { _log.Debug("No access, giving up"); Shutdown = true; //Shutdown plugin - should not run after this error throw new Exception("No access, giving up"); } } } catch (Exception ex) { _log.Info("Could not connect to Melcloud to fetch devices: " + ex); } } }