Example #1
0
        public SensorValues GetSensorValue(string deviceId)
        {
            SensorValues s = new SensorValues();

            s.DeviceId = deviceId;
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                s.Pulse = getPulsevaluse();
                sw.Stop();

                s.Timewatch    = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));
                s.StatusDevice = "On";

                return(s);
            }
            catch (Exception exc)
            {
                s.StatusDevice = "Error: " + exc.Message;

                s.Pulse = "nd";

                return(s);
            }
            finally
            { }

            return(null);
        }
Example #2
0
        /// <summary>
        /// Get sensor's values.
        /// </summary>
        ///
        /// <param name="sensor">Sensor to get values of.</param>
        /// <param name="sensorValues">etrieved sensor's values.</param>
        ///
        /// <returns>Returns <b>true</b> if command was executed successfully or <b>false</b> otherwise.</returns>
        ///
        public bool GetSensorValue(Sensor sensor, out SensorValues sensorValues)
        {
            byte[] command = new byte[3];
            byte[] reply   = new byte[16];

            sensorValues = new SensorValues( );

            // prepare message
            command[0] = (byte)NXTCommandType.DirectCommand;
            command[1] = (byte)NXTDirectCommand.GetInputValues;
            command[2] = (byte)sensor;

            if (SendCommand(command, reply))
            {
                sensorValues.IsValid      = (reply[4] != 0);
                sensorValues.IsCalibrated = (reply[5] != 0);
                sensorValues.SensorType   = (SensorType)reply[6];
                sensorValues.SensorMode   = (SensorMode)reply[7];
                sensorValues.Raw          = (ushort)(reply[8] | (reply[9] << 8));
                sensorValues.Normalized   = (ushort)(reply[10] | (reply[11] << 8));
                sensorValues.Scaled       = (short)(reply[12] | (reply[13] << 8));
                sensorValues.Calibrated   = (short)(reply[14] | (reply[15] << 8));

                return(true);
            }

            return(false);
        }
        public async Task <SensorValues> AddSensorValuesAsync(SensorValues sensors)
        {
            var sensorsCollection = _database.GetCollection <SensorValues>("sensors");
            await sensorsCollection.InsertOneAsync(sensors);

            return(sensors);
        }
        public async Task <IActionResult> Post([FromBody] SensorsInput sensorsInput)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var sensors = new SensorValues()
            {
                //DeviceTimestamp = sensorsInput.DeviceTimestamp, // TODO change to DateTime
                Temperature  = sensorsInput.Temperature.Value,
                Humidity     = sensorsInput.Humidity.Value,
                SoilMoisture = sensorsInput.SoilMoisture.Value
            };

            // save sensor values
            await _sensorRepository.AddSensorValuesAsync(sensors);

            var wateringResult = _wateringService.CalculateMilliseconds(sensors);

            // TODO move to Watering Controller
            if (wateringResult.Milliseconds > 0)
            {
                var watering = new WateringValue(sensors, wateringResult.Milliseconds);
                await _wateringRepository.AddWateringAsync(watering);
            }

            return(CreatedAtAction("Get", new { id = sensors.Id }, wateringResult));
        }
Example #5
0
        SensorValues GetSensorvalues()
        {
            Sensor       s       = new Sensor();
            SensorValues sValues = s.GetSensorValue("myPulseDevice");

            pValue         = Convert.ToDouble(sValues.Pulse);
            this.timewatch = sValues.Timewatch;
            return(sValues);
        }
Example #6
0
        SensorValues GetSensorvalues()
        {
            Sensor       s       = new Sensor();
            SensorValues sValues = s.GetSensorValue("myFirstDevice");

            tempValue      = Convert.ToDouble(sValues.Temp);
            this.timewatch = sValues.Timewatch;
            return(sValues);
        }
Example #7
0
        private SensorValuesModel getValuesModel(SensorValues values, ObjectId parentId)
        {
            var str_values = Newtonsoft.Json.JsonConvert.SerializeObject(values);
            var obj_values = (JObject.Parse(str_values)).ToObject <SensorValuesModel>();

            obj_values.sensorId = parentId;

            return(obj_values);
        }
Example #8
0
 public void Clear()
 {
     SensorValues.Clear();
     MaxSensorValues.Clear();
     NoiseOffsetValues.Clear();
     rawSensorValues.Clear();
     songAvgValues.Clear();
     ModeValues.Clear();
 }
Example #9
0
        double GetValue(double count)
        {
            Sensor       s       = new Sensor();
            SensorValues sValues = s.GetSensorValue("myPulseDevice");

            this.timewatch = sValues.Timewatch;
            pValue         = Convert.ToDouble(sValues.Pulse);
            return(pValue);
            //return (Math.Sin((count / Divider) * 2.0 * Math.PI) + random.NextDouble() - 0.5) * 33;
        }
Example #10
0
        private async void Receive_Timer_Tick(object state)
        {
            receiveTimer.Dispose();
            Sensor       s       = new Sensor();
            SensorValues sValues = s.GetSensorValue("myFirstDevice");

            await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
            });
        }
Example #11
0
        public WateringResult CalculateMilliseconds(SensorValues sensors)
        {
            var wateringResult = new WateringResult();

            if (sensors.SoilMoisture >= _appSettings.MinSoilMoisture)
            {
                // watering
                wateringResult.Milliseconds = _appSettings.WateringMilliseconds;
            }

            return(wateringResult);
        }
Example #12
0
        public void AddData(string sensorName, List <string> header, SensorValues newRecord)
        {
            prepareFs();

            var sensorInfo = this.getSensorInfo(sensorName);

            string str_values_line = valuesToString(newRecord);

            string[] arr_values   = { str_values_line };
            int      valuesLength = str_values_line.Length;

            if (sensorInfo.ReadIndex == 0)
            {
                // sensorInfo.CsvHeader = header;
                string   str_header   = headerToString(header);
                string[] arr_header   = { str_header };
                int      headerLength = str_header.Length;

                var borders = new LineBorders()
                {
                    StartPos = headerLength + 1,
                    EndPos   = headerLength + 1 + valuesLength
                };

                lock (sensorInfo.fileLock)
                {
                    // this will clear file - handy in development
                    File.Delete(sensorInfo.FileName);

                    File.AppendAllLines(sensorInfo.FileName, arr_header);
                    File.AppendAllLines(sensorInfo.FileName, arr_values);

                    sensorInfo.Lines.Add(borders);
                }
            }
            else
            {
                var lastBorders = sensorInfo.getLastLine();
                File.AppendAllLines(sensorInfo.FileName, arr_values);

                var borders = new LineBorders()
                {
                    StartPos = lastBorders.EndPos + 1,
                    EndPos   = lastBorders.EndPos + 1 + valuesLength
                };

                sensorInfo.Lines.Add(borders);
            }

            sensorInfo.ReadIndex++;
        }
Example #13
0
        public SensorResult NormalizeValue(SensorValues sensorValues)
        {
            if (!double.TryParse(sensorValues.RawValue, NumberStyles.Any, CultureInfo.InvariantCulture, out var temp))
            {
                throw new InvalidOperationException($"Can't parse double value '{sensorValues.RawValue}' for CustomTemperatureSensor");
            }

            return(new SensorResult
            {
                RawValue = sensorValues.RawValue,
                Parameter = DeviceInfo.Parameter,
                DeviceId = DeviceInfo.Id
            });
        }
Example #14
0
        public void Refresh()
        {
            for (int i = 0; i < NewPointsCount; i++)
            {
                SensorValues sValues = GetSensorvalues();
                baseTime += sValues.Timewatch / baseTimeSelector;

                points.RemoveAt(0);
                //  points.Add(new Point(count, GetValue(count)));
                points.Add(new Point(baseTime, Convert.ToDouble(sValues.Pulse)));
                IncreaseCount();
                iter++;
            }
            OnDataChanged(ChartDataUpdateType.Reset, -1);
        }
Example #15
0
        public void ReadADC()
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();


                Sensor       s       = new Sensor();
                SensorValues sValues = s.GetSensorValue(_deviceId);


                sw.Stop();

                double microseconds = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));
                //   double ns = 1000000000.0 * (double)sw.ElapsedTicks / Stopwatch.Frequency;

                sumTime += microseconds;



                var task = this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    textPlaceHolder.Text = sValues.Temp + " °C";

                    data.Add(
                        new Point
                        (
                            indexcount2++,
                            Convert.ToDouble(sValues.Temp)

                        ));

                    indexcount2++;

                    txtTimeDiffMedio.Text = "Istant: " + Convert.ToString(sumTime / indexcount2) + " us";
                    txtTimeDiff.Text      = "medio: " + microseconds + " us";
                });
            }
            catch (Exception e)
            { StatusText.Text = e.Message; }
        }
Example #16
0
        public SensorReaderEvent(
            string serviceId,
            string sensorName,
            List <string> dataHeader,
            int lastReadIndex,
            SensorValues newData,
            string ipAddress,
            int listeningPort,
            string customMessage = "")

            : base(serviceId, ServiceType.SensorReader, customMessage)
        {
            SensorName    = sensorName;
            LastReadIndex = lastReadIndex;

            IpAddress     = ipAddress;
            ListeningPort = listeningPort;
            DataHeader    = dataHeader;
            NewData       = newData;
        }
Example #17
0
        private async void OnTimerTick(object sender, object e)
        {
            try
            {
                Sensor       s       = new Sensor();
                SensorValues sValues = s.GetSensorValue("myFirstDevice");

                await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    data.Add(
                        new Point
                        (
                            indexAwait++,
                            Convert.ToDouble(sValues.Temp)

                        ));
                });
            }
            catch (Exception ex)
            { StatusText.Text = ex.Message; }
        }
Example #18
0
        public async Task TestSensorDataProcessing()
        {
            var clientRepository = _factory.Services.GetService <MqttClientRepository>();

            byte[] actualBytes  = null;
            var    deviceId     = Guid.NewGuid();
            var    deviceClient = await clientRepository.Subscribe("data/microclimate", (s, bytes) =>
            {
                actualBytes = bytes;
                return(Task.CompletedTask);
            });

            var deviceInfo = new DeviceInfo
            {
                DeviceCode = "CustomTemp",
                Id         = deviceId,
                Parameter  = ParameterType.TemperatureInside,
                Type       = DeviceType.Sensor
            };
            var sensorTemperature = 20.4d.ToString(CultureInfo.InvariantCulture);
            var sensorValue       = new SensorValues()
            {
                RawValue = sensorTemperature,
                DeviceId = deviceId
            };

            await deviceClient.PublishAsync("data/device", deviceInfo);

            await Task.Delay(1000);

            await deviceClient.PublishAsync("data/sensors", sensorValue);

            await Task.Delay(8000);

            var actualMicroClimateParameter = actualBytes.DeserializeJsonBytes <MicroClimateParameterValue>();

            Assert.Equal(actualMicroClimateParameter.ParameterType, deviceInfo.Parameter);
            Assert.Equal(actualMicroClimateParameter.Value, sensorTemperature);
        }
Example #19
0
        private async void StartProcess()
        {
            int indexcount = 0;
            await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(2));

            while (true)
            {
                Sensor       s       = new Sensor();
                SensorValues sValues = s.GetSensorValue(_deviceId);
                textPlaceHolder.Text = sValues.Temp + " °C";

                data.Add(
                    new Point
                    (
                        indexcount++,
                        Convert.ToDouble(sValues.Temp)

                    ));

                await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(1));
            }
        }
Example #20
0
 private string valuesToString(SensorValues values)
 {
     return(JsonConvert.SerializeObject(values));
 }
Example #21
0
        // interface implementation

        public async Task <bool> AddToSensor(
            string sensorName,
            SensorValues newValues)
        {
            if (!await createConnection())
            {
                return(false);
            }

            string sensorsCollName = config.sensorsCollection;
            string valuesCollName  = config.sensorValuesCollection;

            var sensorColl = database.GetCollection <SensorModel>(sensorsCollName);

            try
            {
                SensorModel parentSensor = null;

                var sensorCursor = await sensorColl.FindAsync <SensorModel>(
                    (record) => record.sensorName == sensorName);

                await sensorCursor.MoveNextAsync();

                if (sensorCursor.Current.Count() > 0)
                {
                    parentSensor = sensorCursor.Current.First();
                }
                else
                {
                    sensorCursor.Dispose();
                    parentSensor = new SensorModel(sensorName);
                    await sensorColl.InsertOneAsync(parentSensor);
                }

                var valuesModel = getValuesModel(newValues, parentSensor.id);

                var valuesColl =
                    database.GetCollection <SensorValuesModel>(valuesCollName);

                await valuesColl.InsertOneAsync(valuesModel);
            }
            catch (TimeoutException)
            {
                Console.WriteLine($"Failed to connect with the database on: "
                                  + $"{config.dbAddress} ... ");

                return(false);
            }

            // var sensorFilter = Builders<SensorModel>
            //  .Filter
            //  .Eq(s => s.sensorName, sensorName);

            // var update = Builders<SensorModel>
            //  .Update
            //  .Push<SensorValues>(s => s.records, newValues);

            // UpdateResult addResult = null;
            // try
            // {
            //  addResult = await sensorColl.UpdateOneAsync(
            //      sensorFilter,
            //      update,
            //      new UpdateOptions { IsUpsert = true });

            // }
            // catch (TimeoutException)
            // {
            //  Console.WriteLine($"Failed to connect with the database on: "
            //      + $"{config.dbAddress} ... ");

            //  return false;
            // }

            return(true);
        }
Example #22
0
        /// <summary>
        /// Get sensor's values.
        /// </summary>
        /// 
        /// <param name="sensor">Sensor to get values of.</param>
        /// <param name="sensorValues">etrieved sensor's values.</param>
        /// 
        /// <returns>Returns <b>true</b> if command was executed successfully or <b>false</b> otherwise.</returns>
        /// 
        public bool GetSensorValue( Sensor sensor, out SensorValues sensorValues )
        {
            byte[] command = new byte[3];
            byte[] reply = new byte[16];

            sensorValues = new SensorValues( );

            // prepare message
            command[0] = (byte) NXTCommandType.DirectCommand;
            command[1] = (byte) NXTDirectCommand.GetInputValues;
            command[2] = (byte) sensor;

            if ( SendCommand( command, reply ) )
            {
                sensorValues.IsValid      = ( reply[4] != 0 );
                sensorValues.IsCalibrated = ( reply[5] != 0 );
                sensorValues.SensorType   = (SensorType) reply[6];
                sensorValues.SensorMode   = (SensorMode) reply[7];
                sensorValues.Raw          = (ushort) ( reply[8] | ( reply[9] << 8 ) );
                sensorValues.Normalized   = (ushort) ( reply[10] | ( reply[11] << 8 ) );
                sensorValues.Scaled       = (short) ( reply[12] | ( reply[13] << 8 ) );
                sensorValues.Calibrated   = (short) ( reply[14] | ( reply[15] << 8 ) );

                return true;
            }

            return false;
        }
Example #23
0
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            var    sp     = (SerialPort)sender;
            string indata = _lastFragment + sp.ReadExisting();

            sp.DiscardInBuffer();

            if (!IsReading)
            {
                return;
            }

            indata = indata.Replace("\r\n", "\n");

            var lines     = indata.Split(SEP_LINES);
            var noOfLines = lines.Length;

            if (!indata.EndsWith(new string(SEP_LINES, 1)))
            {
                // last fragment is not complete
                --noOfLines;
                _lastFragment = lines[noOfLines];
            }
            else
            {
                _lastFragment = "";
            }

            const string suffixTime = "| ";

            for (int index = 0; index < noOfLines; index++)
            {
                var line = lines[index];
                var pos  = line.IndexOf(suffixTime, StringComparison.Ordinal);
                if (pos >= 0)
                {
                    line = line.Substring(pos + suffixTime.Length);
                }

                if (line.StartsWith(COMMENT_PREFIX))
                {
                    continue;
                }

                const string animationPrefix = @"=== ";
                if (line.StartsWith(animationPrefix))
                {
                    _animationTitle = line.Substring(animationPrefix.Length);
                    _animationTitle = _animationTitle.Replace(@" ===", "");
                }

                var fragments = line.Split(SEP_TIME_VALUE);
                try
                {
                    switch (fragments.Length)
                    {
                    case 1:
                        fragments = fragments[0].Split(';');

                        if (fragments.Length != 6)
                        {
                            continue;
                        }

                        AddValue(fragments[0], modeValueBuf, ModeValues);
                        AddValue(fragments[1], noiceOffsetValueBuf, NoiseOffsetValues);
                        AddValue(fragments[2], sensorValueBuf, SensorValues);
                        AddValue(fragments[3], rawSensorValueBuf, rawSensorValues, _animationTitle);
                        _animationTitle = null;
                        AddValue(fragments[4], maxSensorValueBuf, MaxSensorValues);
                        AddValue(fragments[5], songAvgValueBuf, songAvgValues);
                        break;

                    case 2:
                        DataItem di;
                        di.Time  = Parse(fragments[0]);
                        di.Value = Parse(fragments[1]);

                        if (di.Time < _lastTime)
                        {
                            continue;
                        }
                        _lastTime = di.Time;

                        SensorValues.Add(di.Value);
                        break;
                    }
                }
                catch (FormatException)
                {
                }
            }

            ModeValues.AddRange(modeValueBuf); modeValueBuf.Clear();
            SensorValues.AddRange(sensorValueBuf); sensorValueBuf.Clear();
            MaxSensorValues.AddRange(maxSensorValueBuf); maxSensorValueBuf.Clear();
            NoiseOffsetValues.AddRange(noiceOffsetValueBuf); noiceOffsetValueBuf.Clear();
            rawSensorValues.AddRange(rawSensorValueBuf); rawSensorValueBuf.Clear();
            songAvgValues.AddRange(songAvgValueBuf); songAvgValueBuf.Clear();
        }