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); }