Exemplo n.º 1
0
        private bool RefreshDevices()
        {
            lock (LockObject)
            {
                if (_restHandler.NoContext)
                {
                    SetConnectionDeviceToNotConnected();

                    return(false);
                }
                //Temporary copy the json

                //Refresh all devices
                foreach (KeyValuePair <string, JObject> pair in JsonCommand)
                {
                    if (JsonCommand[pair.Key.ToString()].HasPendingCommand == true)
                    {
                        _log.Debug("Waiting for changes, abort this update");
                        break;
                    }

                    var deviceId   = pair.Value.GetValue("DeviceID");
                    var buildingId = pair.Value.GetValue("BuildingId");
                    var result     = _restHandler.DoDeviceGet(deviceId, buildingId);

                    if (!result.Success)
                    {
                        _unsuccessfullAttempts++;
                        if (_unsuccessfullAttempts > 3)
                        {
                            _restHandler.RemoveContext();
                            _unsuccessfullAttempts = 0;
                        }
                        continue;
                    }

                    Device connectionDevice = _climateDevices[pair.Key.ToString()][Constants.Connection];
                    connectionDevice.SetValue((double)1).SetText($"Connected");                    // - {DateTime.Now.ToString("HH:mm:ss")}");


                    _unsuccessfullAttempts = 0;
                    dynamic deviceResponse = JObject.Parse(result.ResponseContent);

                    //Update fields

                    if (deviceResponse.ContainsKey("NextCommunication"))
                    {
                        _nextCommunication = deviceResponse.NextCommunication;
                    }


                    //Check for changes
                    if (JsonCommand[pair.Key.ToString()].ContainsKey("EffectiveFlags") &&
                        JsonCommand[pair.Key.ToString()].EffectiveFlags != deviceResponse.EffectiveFlags)
                    {
                        JsonCommand[pair.Key.ToString()].EffectiveFlags = deviceResponse.EffectiveFlags;
                    }

                    //Old code not working?
                    //if (JsonCommand[pair.Key.ToString()].ContainsKey("RoomTemperature") &&
                    //	JsonCommand[pair.Key.ToString()].RoomTemperature != deviceResponse.RoomTemperature)
                    //{
                    //	JsonCommand[pair.Key.ToString()].RoomTemperature = deviceResponse.RoomTemperature;
                    //	_climateDevices[pair.Key.ToString()]["CurrentTemperatureDevice"]
                    //		.SetValue((double)deviceResponse.RoomTemperature);
                    //}
                    //New code for getting RoomTemp
                    if (deviceResponse.ContainsKey("RoomTemperature") && _climateDevices[pair.Key.ToString()].ContainsKey("CurrentTemperatureDevice"))
                    {
                        _climateDevices[pair.Key.ToString()]["CurrentTemperatureDevice"]
                        .SetValue((double)deviceResponse["RoomTemperature"]);
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("SetTemperature") &&
                        JsonCommand[pair.Key.ToString()].SetTemperature != deviceResponse.SetTemperature)
                    {
                        JsonCommand[pair.Key.ToString()].SetTemperature = deviceResponse.SetTemperature;

                        _climateDevices[pair.Key.ToString()]["SetpointTemperatureDevice"]
                        .SetValue((double)deviceResponse.SetTemperature);
                    }
                    else if (JsonCommand[pair.Key.ToString()].ContainsKey("SetTemperature") == false)
                    {
                        JsonCommand[pair.Key.ToString()].SetTemperature = deviceResponse.SetTemperature;
                        _climateDevices[pair.Key.ToString()]["SetpointTemperatureDevice"]
                        .SetValue((double)deviceResponse.SetTemperature);
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("SetFanSpeed") &&
                        JsonCommand[pair.Key.ToString()].SetFanSpeed != deviceResponse.v)
                    {
                        JsonCommand[pair.Key.ToString()].SetFanSpeed = deviceResponse.SetFanSpeed;
                        _climateDevices[pair.Key.ToString()][Constants.FanSpeed]
                        .SetValue((double)deviceResponse.SetFanSpeed);
                    }
                    else if (JsonCommand[pair.Key.ToString()].ContainsKey("SetFanSpeed") == false)
                    {
                        JsonCommand[pair.Key.ToString()].SetFanSpeed = deviceResponse.SetFanSpeed;
                        _climateDevices[pair.Key.ToString()][Constants.FanSpeed]
                        .SetValue((double)deviceResponse.SetFanSpeed);
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("OperationMode") &&
                        JsonCommand[pair.Key.ToString()].OperationMode != deviceResponse.OperationMode)
                    {
                        JsonCommand[pair.Key.ToString()].OperationMode = deviceResponse.OperationMode;
                        _climateDevices[pair.Key.ToString()]["OperationalModeDevice"]
                        .SetValue((double)deviceResponse.OperationMode);
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("VaneHorizontal") &&
                        JsonCommand[pair.Key.ToString()].VaneHorizontal != deviceResponse.VaneHorizontal)
                    {
                        JsonCommand[pair.Key.ToString()].VaneHorizontal = deviceResponse.VaneHorizontal;
                        _climateDevices[pair.Key.ToString()][Constants.VaneHorizontal]
                        .SetValue((double)deviceResponse.VaneHorizontal);
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("VaneVertical") &&
                        JsonCommand[pair.Key.ToString()].VaneVertical != deviceResponse.VaneVertical)
                    {
                        JsonCommand[pair.Key.ToString()].VaneVertical = deviceResponse.VaneVertical;
                        _climateDevices[pair.Key.ToString()][Constants.VaneVertical]
                        .SetValue((double)deviceResponse.VaneVertical);
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("NumberOfFanSpeeds") &&
                        JsonCommand[pair.Key.ToString()].NumberOfFanSpeeds != deviceResponse.NumberOfFanSpeeds)
                    {
                        JsonCommand[pair.Key.ToString()].NumberOfFanSpeeds = deviceResponse.NumberOfFanSpeeds;
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("DefaultHeatingSetTemperature") &&
                        JsonCommand[pair.Key.ToString()].DefaultHeatingSetTemperature !=
                        deviceResponse.DefaultHeatingSetTemperature)
                    {
                        JsonCommand[pair.Key.ToString()].DefaultHeatingSetTemperature =
                            deviceResponse.DefaultHeatingSetTemperature;
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("DefaultCoolingSetTemperature") &&
                        JsonCommand[pair.Key.ToString()].DefaultCoolingSetTemperature !=
                        deviceResponse.DefaultCoolingSetTemperature)
                    {
                        JsonCommand[pair.Key.ToString()].DefaultCoolingSetTemperature =
                            deviceResponse.DefaultCoolingSetTemperature;
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("InStandbyMode") &&
                        JsonCommand[pair.Key.ToString()].InStandbyMode != deviceResponse.InStandbyMode)
                    {
                        JsonCommand[pair.Key.ToString()].InStandbyMode = deviceResponse.InStandbyMode;
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("Power") &&
                        JsonCommand[pair.Key.ToString()].Power != deviceResponse.Power)
                    {
                        JsonCommand[pair.Key.ToString()].Power = deviceResponse.Power;
                        _climateDevices[pair.Key.ToString()][Constants.PowerDevice].SetValue((double)deviceResponse.Power);
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey("Power") &&
                        JsonCommand[pair.Key.ToString()].Power != deviceResponse.Power)
                    {
                        if (deviceResponse.Power == true)
                        {
                            JsonCommand[pair.Key.ToString()].Power = true;
                            _climateDevices[pair.Key.ToString()][Constants.PowerDevice].SetValue((double)1);
                        }
                        else
                        {
                            JsonCommand[pair.Key.ToString()].Power = false;
                            _climateDevices[pair.Key.ToString()][Constants.PowerDevice].SetValue((double)0);
                        }
                    }
                    else if (JsonCommand[pair.Key.ToString()].ContainsKey("Power") == false)
                    {
                        if (deviceResponse.Power == true)
                        {
                            JsonCommand[pair.Key.ToString()].Power = true;
                            _climateDevices[pair.Key.ToString()][Constants.PowerDevice].SetValue((double)1);
                        }
                        else
                        {
                            JsonCommand[pair.Key.ToString()].Power = false;
                            _climateDevices[pair.Key.ToString()][Constants.PowerDevice].SetValue((double)0);
                        }
                    }

                    if (JsonCommand[pair.Key.ToString()].ContainsKey(Constants.HasPendingCommand) &&
                        JsonCommand[pair.Key.ToString()].HasPendingCommand != deviceResponse.HasPendingCommand)
                    {
                        JsonCommand[pair.Key.ToString()].HasPendingCommand = false;
                    }
                }
            }

            return(true);
        }