Exemplo n.º 1
0
        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);
                }
            }
        }