示例#1
0
        public override void StopPlugin()
        {
            base.StopPlugin();

            adapter.Dispose();
            adapter = null;
        }
示例#2
0
        public override void InitPlugin()
        {
            //Debugger.Launch();
            base.InitPlugin();

            adapter = new OneWireAdapter(OneWireAdapterConfiguration.Default);

            oneWireSensorTypes = GetSensorsTypes();
        }
示例#3
0
        private string ProcessWriteDataRequest(Request.WriteDataRequest writeData)
        {
            if (!_devices.ContainsKey(writeData.Id))
            {
                Logger.Logger.Log("WriteDataRequest on unknown device {0}", writeData.Id);
                return("");
            }

            OneWireAdapter.beginExclusive(true);
            DoWriteDeviceData(writeData);
            OneWireAdapter.endExclusive();

            return(JsonConvert.SerializeObject(new WriteAckAnswer {
                Ack = true
            }));
        }
示例#4
0
        private string ProcessReadChanelsNbRequest(Request.ReadNbChanelsRequest readData)
        {
            if (!_devices.ContainsKey(readData.Id))
            {
                Logger.Logger.Log("ReadChanelsNbRequest on unknown device {0}", readData.Id);
                return(JsonConvert.SerializeObject(new InvalidRequestAnswer {
                    InvalidRequestReason = "UnknownDevice"
                }));
            }

            OneWireAdapter.beginExclusive(true);
            var answer = DoReadDeviceChanelsNb(readData);

            OneWireAdapter.endExclusive();

            return(JsonConvert.SerializeObject(answer));
        }
示例#5
0
        private string ProcessGetDevicesRequest()
        {
            // Search for all 1-wire devices
            OneWireAdapter.beginExclusive(true);
            var devices = OneWireAdapter.getAllDeviceContainers();

            OneWireAdapter.endExclusive();

            // Rebuild internal devices list
            _devices = new Dictionary <string, Device>();
            while (devices.hasMoreElements())
            {
                var dev = ConvertDevice((OneWireContainer)devices.nextElement());
                _devices[dev.Id] = dev;
            }

            // Build answer
            var answer = new GetDevicesAnswer {
                Devices = new List <Device>(_devices.Values)
            };

            return(JsonConvert.SerializeObject(answer));
        }
示例#6
0
        private object DoReadDeviceChanelsNb(Request.ReadNbChanelsRequest readData)
        {
            var device = OneWireAdapter.getDeviceContainer(_devices[readData.Id].FullId);

            if (!device.isPresent())
            {
                Logger.Logger.Log("ReadChanelsNbRequest, 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();
                return(new ReadNbChanelsAnswer {
                    ChanelsNb = switchDevice.getNumberChannels(rawData)
                });
            }

            var adDevice = device as ADContainer;

            if (adDevice != null)
            {
                adDevice.readDevice();
                return(new ReadNbChanelsAnswer {
                    ChanelsNb = adDevice.getNumberADChannels()
                });
            }

            Logger.Logger.Log("ReadDeviceChanelsNb, type {0} for selected device ({1}) is not supported", device.GetType(), readData.Id);
            return(new InvalidRequestAnswer {
                InvalidRequestReason = "TryToReadChanelsNbUnsupportedDevice"
            });
        }
示例#7
0
        private void DoWriteDeviceData(Request.WriteDataRequest writeData)
        {
            var device = OneWireAdapter.getDeviceContainer(_devices[writeData.Id].FullId);

            if (!device.isPresent())
            {
                Logger.Logger.Log("WriteDataRequest, selected device ({0}) is no longer present", writeData.Id);
                return;
            }

            var switchDevice = device as SwitchContainer;

            if (switchDevice != null)
            {
                var rawData = switchDevice.readDevice();
                if (writeData.Unit >= switchDevice.getNumberChannels(rawData))
                {
                    Logger.Logger.Log("WriteDataRequest, invalid unit number ({0}) for selected device ({1})", writeData.Unit, writeData.Id);
                    return;
                }
                switchDevice.setLatchState((int)writeData.Unit, writeData.Value, false, rawData);
                switchDevice.writeDevice(rawData);
            }
        }
示例#8
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"
            });
        }
 protected TemperatureSensorBase(byte[] address,  OneWireAdapter adapter)
     : base(address, adapter)
 {
 }
示例#10
0
 public SensorDS18B20(byte[] address, OneWireAdapter adapter)
     : base(address, adapter)
 {
 }
示例#11
0
 public OneWireDevice(byte[] address, OneWireAdapter adapter)
 {
     Address = address;
     Adapter = adapter;
 }
 protected TemperatureSensorBase(byte[] address, OneWireAdapter adapter)
     : base(address, adapter)
 {
 }
示例#13
0
 public OneWireDevice(byte[] address, OneWireAdapter adapter)
 {
     Address = address;
     Adapter = adapter;
 }
示例#14
0
 public SensorDS18B20(byte[] address, OneWireAdapter adapter)
     : base(address, adapter)
 {
 }