#pragma warning restore 649 private string ProcessReadDataRequest(Request.ReadDataRequest readData) { if (!_devices.ContainsKey(readData.Id)) { Logger.Logger.Log("ReadDataRequest on unknown device {0}", readData.Id); return(JsonConvert.SerializeObject(new InvalidRequestAnswer { InvalidRequestReason = "UnknownDevice" })); } OneWireAdapter.beginExclusive(true); var answer = DoReadDeviceData(readData); OneWireAdapter.endExclusive(); return(JsonConvert.SerializeObject(answer)); }
private object DoReadDeviceData(Request.ReadDataRequest readData) { var device = OneWireAdapter.getDeviceContainer(_devices[readData.Id].FullId); if (!device.isPresent()) { Logger.Logger.Log("ReadDataRequest, selected device ({0}) is no longer present", readData.Id); return(new InvalidRequestAnswer { InvalidRequestReason = "DeviceNotPresent" }); } var switchDevice = device as SwitchContainer; if (switchDevice != null) { var rawData = switchDevice.readDevice(); if (!switchDevice.hasLevelSensing()) { Logger.Logger.Log("ReadDataRequest, selected device ({0}) has no level sensing", readData.Id); return(new InvalidRequestAnswer { InvalidRequestReason = "TryToReadIoDeviceWithoutLevelSensing" }); } if (readData.Unit >= switchDevice.getNumberChannels(rawData)) { Logger.Logger.Log("ReadDataRequest, invalid unit number ({0}) for selected device ({1})", readData.Unit, readData.Id); return(new InvalidRequestAnswer { InvalidRequestReason = "IoDeviceReadWithUnitNumberOutOfRange" }); } return(new ReadDataAnswer { DigitalIo = switchDevice.getLevel((int)readData.Unit, rawData) }); } var temperatureDevice = device as TemperatureContainer; if (temperatureDevice != null) { var rawData = temperatureDevice.readDevice(); temperatureDevice.doTemperatureConvert(rawData); rawData = temperatureDevice.readDevice(); return(new ReadDataAnswer { Temperature = (float)temperatureDevice.getTemperature(rawData) }); } var humidityDevice = device as HumidityContainer; if (humidityDevice != null) { var rawData = humidityDevice.readDevice(); return(new ReadDataAnswer { Humidity = (float)humidityDevice.getHumidity(rawData) }); } var potentiometerDevice = device as PotentiometerContainer; if (potentiometerDevice != null) { potentiometerDevice.readDevice(); return(new ReadDataAnswer { Voltage = potentiometerDevice.getWiperPosition() }); } var adDevice = device as ADContainer; if (adDevice != null) { var rawData = adDevice.readDevice(); if (readData.Unit >= adDevice.getNumberADChannels()) { Logger.Logger.Log("ReadDataRequest, invalid unit number ({0}) for selected device ({1})", readData.Unit, readData.Id); return(new InvalidRequestAnswer { InvalidRequestReason = "AdDeviceReadWithUnitNumberOutOfRange" }); } return(new ReadDataAnswer { Voltage = (int)(adDevice.getADVoltage((int)readData.Unit, rawData) * 1000) }); } Logger.Logger.Log("ReadDataRequest, type {0} for selected device ({1}) is not supported", device.GetType(), readData.Id); return(new InvalidRequestAnswer { InvalidRequestReason = "TryToReadUnsupportedDevice" }); }