Пример #1
0
#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));
        }
Пример #2
0
        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"
            });
        }