コード例 #1
0
 public override void Load()
 {
     try
     {
         IsEnabled = true;
         PositionScaleFactor = 0.1;
         _lastTimeStamp = 0;
         _velocityVec = new Vector3D(0, 0, 0);
         _positionVec = new Vector3D(0, 0, 0);
         RawPosition = _positionVec;
         _device = SensorDevices.GetFirstAvailable(FilterEnum.FindUSB);
         _keepCallbackAlive = new ThreeSpaceInterop.DataCallbackDelegate(dataCallbackFunc);
         // keepCallbackAlive is to prevent crash from garbage collection not being able to track into the unmanged code of ThreeSpace_API.dll
         ThreeSpaceInterop.SetNewDataCallBack(_device.DeviceId, _keepCallbackAlive);
         StreamCommandSlots slots = new StreamCommandSlots(StreamCommand.TSS_NULL);
         slots.Slot0 = StreamCommand.TSS_GET_TARED_ORIENTATION_AS_QUATERNION;
         slots.Slot1 = StreamCommand.TSS_GET_CORRECTED_ACCELEROMETER_VECTOR;
         ThreeSpaceInterop.SetStreamingTiming(_device.DeviceId, 0, 0xffffffff, 0, ref _device.TimeStamp);
         ThreeSpaceInterop.SetStreamingSlots(_device.DeviceId, ref slots, ref _device.TimeStamp);
         ThreeSpaceInterop.StartStreaming(_device.DeviceId, ref _device.TimeStamp);
         Calibrate();
     }
     catch (Exception exc)
     {
         IsEnabled = false;
     }
 }
コード例 #2
0
    void Update()
    {
        if (Input.GetKey(KeyCode.Escape))
        {
            SceneStackManager.Instance.LoadPrevious();
        }

        StartCamera();

        if (!startTrackerDone)
        {
            TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_INSTANT);
            SensorDevice.GetInstance().Start();
            startTrackerDone = true;
        }

        TrackingState  state          = TrackerManager.GetInstance().UpdateTrackingState();
        TrackingResult trackingResult = state.GetTrackingResult();

        if (trackingResult.GetCount() == 0)
        {
            instantTrackable.OnTrackFail();
            return;
        }

        Trackable track = trackingResult.GetTrackable(0);

        instantTrackable.OnTrackSuccess(track.GetId(), track.GetName(), track.GetPose());

                #if UNITY_EDITOR
        if (Input.GetMouseButtonDown(0))
        {
            if (linePointCount < 100)
            {
                linePoint [linePointCount++] = TrackerManager.GetInstance().GetWorldPositionFromScreenCoordinate(Input.mousePosition);
                lineRenderer.positionCount   = linePointCount;
                lineRenderer.SetPositions(linePoint);
            }
        }
                #else
        if (Input.touchCount > 0)
        {
            if (linePointCount < 100)
            {
                linePoint [linePointCount++] = TrackerManager.GetInstance().GetWorldPositionFromScreenCoordinate(Input.GetTouch(0).position);
                lineRenderer.positionCount   = linePointCount;
                lineRenderer.SetPositions(linePoint);
            }
        }

        if (Input.GetTouch(0).phase == TouchPhase.Ended)
        {
            linePointCount = 0;
        }
                #endif
    }
コード例 #3
0
        private MeasurementData GetCustomMeasurementValue(SensorDevice sensorDevice, List <MeasurementData> measurements, CustomMeasurementRule rule)
        {
            var sensorMeasurement = measurements.FirstOrDefault(m => m.SensorId.Equals(rule.SensorId, StringComparison.OrdinalIgnoreCase) &&
                                                                m.SensorDeviceId.Equals(sensorDevice.Id, StringComparison.OrdinalIgnoreCase));

            if (sensorMeasurement == null)
            {
                _logger.LogError($"No sensor '{rule.SensorId}' found from measurements of device type '{sensorDevice.SensorDeviceTypeId}'");
                return(null);
            }

            var data = new MeasurementData()
            {
                SensorDeviceId = sensorDevice.Id, SensorId = rule.Id, Timestamp = DateTime.Now
            };
            var comparisonResult = LogicHelper.Compare(sensorMeasurement.Value, rule.Value, rule.Operator);

            switch (rule.Type)
            {
            case Shared.Enum.ValueType.Default:
                data.Value = comparisonResult ? "true" : "false";
                break;

            case Shared.Enum.ValueType.WasLast:
                var keyName = $"{sensorDevice.Id}-{sensorMeasurement.SensorId}-{rule.Id}";
                if (comparisonResult)
                {
                    if (!_wasLastList.ContainsKey(keyName))
                    {
                        _wasLastList.Add(keyName, DateTime.Now);
                    }
                    else
                    {
                        _wasLastList[keyName] = DateTime.Now;
                    }
                    data.Value = "0";
                }
                else
                {
                    if (_wasLastList.ContainsKey(keyName))
                    {
                        var ts = DateTime.Now - _wasLastList[keyName];
                        data.Value = ((int)ts.TotalSeconds).ToString();
                    }
                    else
                    {
                        data.Value = "-1";
                    }
                }
                break;

            default:
                break;
            }
            return(data);
        }
コード例 #4
0
 void OnApplicationPause(bool pause)
 {
     if (pause)
     {
         SensorDevice.GetInstance().Stop();
         TrackerManager.GetInstance().StopTracker();
         startTrackerDone = false;
         StopCamera();
     }
 }
コード例 #5
0
 void StopCamera()
 {
     if (cameraStartDone)
     {
         Debug.Log("Unity StopCamera");
         CameraDevice.GetInstance().Stop();
         cameraStartDone = false;
         SensorDevice.GetInstance().Stop();
     }
 }
コード例 #6
0
        public async Task ReadDeviceDataAsync_RuuviTagFound_ReturnData()
        {
            // Arrange
            var numberFormatInfo = new NumberFormatInfo()
            {
                NumberDecimalSeparator = "."
            };
            const string ruuviTagAddress = "testAddress";
            var          sensorDevice    = new SensorDevice
            {
                SensorDeviceTypeId = Type.SensorDeviceTypeId.RuuviTag,
                Id      = "SensorDevice1",
                Address = ruuviTagAddress
            };
            var ruuviTag = new RuuviTag()
            {
                AccelerationX             = 0.123,
                AccelerationY             = 0.564,
                AccelerationZ             = -0.153,
                AirPressure               = 1060,
                BatteryVoltage            = 2.11,
                DataFormat                = 5,
                Humidity                  = 77,
                MacAddress                = ruuviTagAddress,
                MeasurementSequenceNumber = 22,
                MovementCounter           = 123,
                Temperature               = 33.3,
                TxPower = 3
            };

            _bleReaderMock.Setup(b => b.GetManufacturerDataAsync <RuuviTag>(ruuviTagAddress)).ReturnsAsync(ruuviTag);
            var deviceDataReader = _serviceProvider.GetService <DeviceDataReader.DeviceDataReader>();

            // Act
            var measurementList = await deviceDataReader.ReadDeviceDataAsync(sensorDevice);

            // Assert
            Assert.AreEqual(8, measurementList.Count, "Amount of returned measurements is not correct");
            Assert.AreEqual(ruuviTag.AccelerationX.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                           m.SensorId.Equals("AccelerationX", StringComparison.OrdinalIgnoreCase)).Value, "Value of AccelerationX is not correct");
            Assert.AreEqual(ruuviTag.AccelerationY.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                           m.SensorId.Equals("AccelerationY", StringComparison.OrdinalIgnoreCase)).Value, "Value of AccelerationY is not correct");
            Assert.AreEqual(ruuviTag.AccelerationZ.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                           m.SensorId.Equals("AccelerationZ", StringComparison.OrdinalIgnoreCase)).Value, "Value of AccelerationZ is not correct");
            Assert.AreEqual(ruuviTag.AirPressure.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                         m.SensorId.Equals("Pressure", StringComparison.OrdinalIgnoreCase)).Value, "Value of Pressure is not correct");
            Assert.AreEqual(ruuviTag.BatteryVoltage.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                            m.SensorId.Equals("BatteryVoltage", StringComparison.OrdinalIgnoreCase)).Value, "Value of BatteryVoltage is not correct");
            Assert.AreEqual(ruuviTag.Humidity.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                      m.SensorId.Equals("Humidity", StringComparison.OrdinalIgnoreCase)).Value, "Value of Humidity is not correct");
            Assert.AreEqual(ruuviTag.Temperature.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                         m.SensorId.Equals("Temperature", StringComparison.OrdinalIgnoreCase)).Value, "Value of Temperature is not correct");
            Assert.AreEqual(ruuviTag.MovementCounter.Value.ToString(numberFormatInfo), measurementList.First(m =>
                                                                                                             m.SensorId.Equals("MovementCounter", StringComparison.OrdinalIgnoreCase)).Value, "Value of MovementCounter is not correct");
        }
コード例 #7
0
 /// <summary>
 /// Gets the slot with given SensorDevice.
 /// </summary>
 /// <returns>The slot with device.</returns>
 /// <param name="sensorDevice">Sensor device.</param>
 public DeviceSlot GetSlotWithDevice(SensorDevice sensorDevice)
 {
     foreach (var slot in _deviceSlots)
     {
         if (!slot.IsEmpty && (slot.ConnectedDevice.Id == sensorDevice.Id))
         {
             return(slot);
         }
     }
     return(null);
 }
コード例 #8
0
        public void AddDeviceToSlot(int slotIndex, SensorDevice device)
        {
            if (slotIndex < 0 || slotIndex >= MaxNumConnectedDevices)
            {
                return;
            }

            _deviceSlots[slotIndex].AddDevice(device);
            device.SlotIndex = slotIndex;
            RaiseDeviceAddedEvent(new SlotEventArgs(_deviceSlots[slotIndex]));
        }
コード例 #9
0
        private void InitializeCommands()
        {
            ConnectCommand = new RelayCommand(async() =>
            {
                await navigation.PushAsync(PageUrls.SENSORCONNECTVIEW);
            });

            GoToCategoriesCommand = new RelayCommand(async() =>
            {
                await navigation.PushAsync(PageUrls.CATEGORIESVIEW);
            });

            //LoginCommand = new RelayCommand(async () =>
            //{
            //    if (userDataService.LoggedInUser == null)
            //        await navigation.PushModalAsync(PageUrls.LOGINVIEW);
            //});

            TestCommand = new RelayCommand(() =>
            {
                SensorDevice sensor = ServiceLocator.Current.GetInstance <SensorDevice>();
                if (sensor.MovementService != null)
                {
                    if (!sensor.MovementService.IsOn)
                    {
                        sensor.MovementService.SetEnabled(true);
                    }
                    if (!sensor.MovementService.IsUpdating)
                    {
                        sensor.MovementService.StartReadData(1000);
                        sensor.MovementService.OnValueChanged += MovementService_OnValueChanged;
                    }
                    else
                    {
                        sensor.MovementService.StopReadData();
                        sensor.MovementService.OnValueChanged -= MovementService_OnValueChanged;
                        foreach (var vect in vectList)
                        {
                            Debug.WriteLine(vect.X + "," + vect.Y + "," + vect.Z);
                        }
                    }
                }
                else
                {
                    Debug.WriteLine("Movementsensor not found.");
                }

                if (sensor.KeyService != null)
                {
                    sensor.KeyService.StartReadData(100);
                    sensor.KeyService.OnKeyPushed += KeyService_OnKeyPushed;
                }
            });
        }
コード例 #10
0
        public async Task GetDeviceDataAsync_BluetoothDevices_ScanMade()
        {
            var sensorDeviceTypeId = "RuuviTag";

            // Arrange
            var sensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = sensorDeviceTypeId,
                Id = "SensorDevice1"
            };

            var sensorDeviceType = new SensorDeviceType()
            {
                Id      = sensorDeviceTypeId,
                Sensors = new List <Sensor>()
                {
                    new Sensor()
                    {
                        Id = "Sensor1",
                    }
                }
            };

            _dataReaderMock.Setup(d => d.ReadDeviceDataAsync(It.IsAny <SensorDevice>()))
            .ReturnsAsync(new List <MeasurementData>());

            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 1,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
                {
                    sensorDeviceType
                }
            };

            _configMock.Setup(c => c.Value).Returns(config);

            var deviceScanner = _serviceProvider.GetService <Collector.DeviceScanner.DeviceScanner>();

            // Act
            var fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            // Assert
            _bleReaderMock.Verify(b => b.ScanAsync(It.IsAny <string>(), It.IsAny <int>()), Times.Once,
                                  "Bluetooth scan should've been made");
        }
コード例 #11
0
        public async Task ExecuteAsync_PublishSensorDeviceTypeData_CorrectlyPublished()
        {
            var publishedMessages = new List <MqttApplicationMessage>();
            var sensorDevice      = new SensorDevice()
            {
                Id = "Device1",
                SensorDeviceTypeId = "DeviceType1"
            };

            //Arrange
            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 1,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
            };

            _mqttClientMock.Setup(m => m.IsConnected).Returns(true);
            _mqttClientMock.Setup(m => m.PublishAsync(It.IsAny <MqttApplicationMessage>(), CancellationToken.None)).Callback((MqttApplicationMessage message, CancellationToken ct) => { publishedMessages.Add(message); });
            _configMock.Setup(c => c.Value).Returns(config);

            //Act
            var btGwService = _serviceProvider.GetService <CollectorService>();
            var cts         = new CancellationTokenSource();

#pragma warning disable CS4014
            // Run as fire & forget
            Task.Run(() => btGwService.StartAsync(cts.Token).ConfigureAwait(false));
#pragma warning restore CS4014

            await Task.Delay(100);

            await btGwService.HandleConnectedAsync(new MqttClientConnectedEventArgs(new MqttClientAuthenticateResult()));

            cts.Cancel();

            // Assert
            var topic   = MqttMessageHelper.GetSensorDeviceTopic(sensorDevice.Id);
            var payload = MqttMessageHelper.SerializePayload(sensorDevice);
            var message = publishedMessages.FirstOrDefault(m => m.Topic.Equals(topic, StringComparison.OrdinalIgnoreCase));

            Assert.IsNotNull(message, "MQTT message for type data of sensor device was not received");
            Assert.AreEqual(topic, message?.Topic, "Sensor device message topic was not correct");
            Assert.AreEqual(payload, message?.ConvertPayloadToString(), "Sensor device message payload was not correct");
        }
コード例 #12
0
    void Start()
    {
        instantTrackable = FindObjectOfType <InstantTrackableBehaviour>();
        if (instantTrackable == null)
        {
            return;
        }

        instantTrackable.OnTrackFail();
        StartCamera();

        TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_INSTANT);
        SensorDevice.GetInstance().Start();
    }
コード例 #13
0
        public async Task CreateAsync(string sensorId, int deviceId)
        {
            var sensorDevice = new SensorDevice
            {
                DeviceId = deviceId,
                SensorId = sensorId
            };

            _context.Attach(sensorDevice);
            _context.Entry(sensorDevice).State = EntityState.Added;
            await _context.SaveChangesAsync();

            _context.Entry(sensorDevice).State = EntityState.Detached;
        }
コード例 #14
0
 void StartCamera()
 {
     if (!cameraStartDone)
     {
         Debug.Log("Unity StartCamera");
         ResultCode result = CameraDevice.GetInstance().Start();
         if (result == ResultCode.Success)
         {
             cameraStartDone = true;
             SensorDevice.GetInstance().Start();
             //CameraDevice.GetInstance().SetAutoWhiteBalanceLock(true);   // For ODG-R7 preventing camera flickering
         }
     }
 }
コード例 #15
0
    void Start()
    {
        //focusIndicator = transform.GetChild(0).GetComponent<SpriteRenderer>();
        //focusIndicator.enabled = false;
        //myColor = GetComponent<SpriteRenderer>().color;

        if (devicesController == null)
        {
            devicesController = GetComponentInParent <SensorDevicesController>();
        }
        if (device == null)
        {
            device = GetComponentInParent <SensorDevice>();
        }
    }
コード例 #16
0
 void OnApplicationPause(bool pause)
 {
     if (pause)
     {
         SensorDevice.GetInstance().Stop();
         TrackerManager.GetInstance().StopTracker();
         StopCamera();
     }
     else
     {
         StartCamera();
         TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_INSTANT);
         SensorDevice.GetInstance().Start();
     }
 }
コード例 #17
0
 public void SaveOrUpdate(SensorDevice district)
 {
     using (FLMSEntities entities = new FLMSEntities())
     {
         if (district.Id == 0)
         {
             entities.SensorDevices.Add(district);
             entities.SaveChanges();
         }
         else
         {
             entities.Entry(district).State = System.Data.Entity.EntityState.Modified;
             entities.SaveChanges();
         }
     }
 }
コード例 #18
0
        public async Task ReadDeviceDataAsync_DeviceTypeUnknown_LogAnError()
        {
            // Arrange
            var sensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = "SomeUnsupportedDeviceType"
            };

            var deviceDataReader = _serviceProvider.GetService <DeviceDataReader.DeviceDataReader>();

            // Act
            var measurementList = await deviceDataReader.ReadDeviceDataAsync(sensorDevice);

            // Assert
            Assert.AreEqual(0, measurementList.Count, "Measurement list cound should be zero");
            _loggerMock.Verify(l => l.Log(LogLevel.Error, It.IsAny <EventId>(), It.IsAny <It.IsAnyType>(), It.IsAny <Exception>(),
                                          (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()), Times.Once, "It should have been logged that the device type is unknown");
        }
コード例 #19
0
    public void Select(SensorDevice device)
    {
        if (selectedDevice != device) // A new device will be selected
        {
            if (selectedDevice)
            {
                Deselect();
            }

            if (cameraController.MoveTo(device.transform))
            {
                device.Select();

                canvasController.Populate(device);
                selectedDevice = device;
            }
        }
        else   // The selected device is already selected, so deselect it
        {
            Deselect();
        }

        //if (selectedDevice == null)
        //{
        //    device.Select();

        //    canvasController.Populate(device);
        //    selectedDevice = device;

        //    cameraController.MoveTo(device.transform);
        //}
        //else if (selectedDevice != device)
        //{
        //    Deselect();


        //}
        //else if (selectedDevice == device)
        //{
        //    Deselect();
        //}
    }
コード例 #20
0
    void Update()
    {
        if (instantTrackable == null)
        {
            return;
        }

        StartCamera();

        if (!startTrackerDone)
        {
            TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_INSTANT);
            SensorDevice.GetInstance().Start();
            startTrackerDone = true;
        }

        TrackingState  state          = TrackerManager.GetInstance().UpdateTrackingState();
        TrackingResult trackingResult = state.GetTrackingResult();

        cameraBackgroundBehaviour.UpdateCameraBackgroundImage(state);

        if (trackingResult.GetCount() == 0)
        {
            instantTrackable.OnTrackFail();
            instantPlaneGrid.EnableDrawing(false);
            return;
        }

        instantPlaneGrid.EnableDrawing(true);

        Trackable trackable = trackingResult.GetTrackable(0);

        planMatrix = trackable.GetPose();
        Matrix4x4 poseMatrix = trackable.GetPose() * Matrix4x4.Translate(touchSumPosition);

        instantTrackable.OnTrackSuccess(trackable.GetId(), trackable.GetName(), poseMatrix);

        if (Input.touchCount > 0 && !rotationController.getRotationState() && !zoomInOut.getScaleState())
        {
            UpdateTouchDelta(Input.GetTouch(0).position);
        }
    }
コード例 #21
0
        public async Task GetDeviceDataAsync_NoDataAvailable_CustomMeasurementsNotHandled()
        {
            var customRule = new CustomMeasurementRule();

            // Arrange
            var sensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = "someSensorDeviceTypeId",
                Id = "someSensorId",
                CalculatedMeasurements = new List <CustomMeasurementRule>()
                {
                    customRule
                }
            };

            _dataReaderMock.Setup(d => d.ReadDeviceDataAsync(It.IsAny <SensorDevice>()))
            .ReturnsAsync(new List <MeasurementData>());

            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 1,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
            };

            _configMock.Setup(c => c.Value).Returns(config);

            var deviceScanner = _serviceProvider.GetService <Collector.DeviceScanner.DeviceScanner>();

            // Act
            var fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            // Assert
            _loggerMock.Verify(l => l.Log(LogLevel.Error, It.IsAny <EventId>(), It.IsAny <It.IsAnyType>(), It.IsAny <Exception>(),
                                          (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()), Times.Never, "No error should be raised in DeviceScanner if no measurement data available");
        }
コード例 #22
0
    void Update()
    {
        if (Input.GetKey(KeyCode.Escape))
        {
            SceneStackManager.Instance.LoadPrevious();
        }

        if (instantTrackable == null)
        {
            return;
        }

        StartCamera();

        if (!startTrackerDone)
        {
            TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_INSTANT);
            SensorDevice.GetInstance().Start();
            startTrackerDone = true;
        }

        TrackingState  state          = TrackerManager.GetInstance().UpdateTrackingState();
        TrackingResult trackingResult = state.GetTrackingResult();

        if (trackingResult.GetCount() == 0)
        {
            instantTrackable.OnTrackFail();
            return;
        }

        if (Input.touchCount > 0)
        {
            UpdateTouchDelta(Input.GetTouch(0).position);
        }

        Trackable trackable  = trackingResult.GetTrackable(0);
        Matrix4x4 poseMatrix = trackable.GetPose() * Matrix4x4.Translate(touchSumPosition);

        instantTrackable.OnTrackSuccess(trackable.GetId(), trackable.GetName(), poseMatrix);
    }
コード例 #23
0
 public void postUpdate(SensorDevice device)
 {
     if (mostRecentUpdates.ContainsKey(device.ID))
     {
         mostRecentUpdates[device.ID] = device;
     }
     else
     {
         mostRecentUpdates.Add(device.ID, device);
     }
     if (!displayedDevices.ContainsKey(device.ID))
     {
         if (device.isActive())
         {
             addToggleDevice(device);
         }
     }
     else
     {
         updateToggleDevice(device);
     }
 }
コード例 #24
0
        public async Task <IList <MeasurementData> > ReadDeviceDataAsync(SensorDevice sensorDevice)
        {
            var measurements = new List <MeasurementData>();

            switch (sensorDevice.SensorDeviceTypeId)
            {
            case Type.SensorDeviceTypeId.RuuviTag:
                measurements.AddRange(await GetRuuviTagMeasurementsAsync(sensorDevice));
                break;

            case Type.SensorDeviceTypeId.Dht22:
                measurements.AddRange(GetDht22Measurements(sensorDevice));
                break;

            // Add handlers for other device types here
            default:
                _logger.LogError($"Type of device at {sensorDevice.Address} is not supported. " +
                                 "Please check that it's been correctly defined in 'sensordevicetype' section of the configuration file");
                break;
            }
            return(measurements);
        }
コード例 #25
0
        public async Task ReadDeviceDataAsync_RuuviTagNotFound_LogAWarning()
        {
            // Arrange
            const string ruuviTagAddress = "testAddress";
            var          sensorDevice    = new SensorDevice
            {
                SensorDeviceTypeId = Type.SensorDeviceTypeId.RuuviTag,
                Id      = "SensorDevice1",
                Address = ruuviTagAddress
            };

            _bleReaderMock.Setup(b => b.GetManufacturerDataAsync <RuuviTag>(ruuviTagAddress)).ReturnsAsync(default(RuuviTag));
            var deviceDataReader = _serviceProvider.GetService <DeviceDataReader.DeviceDataReader>();

            // Act
            var measurementList = await deviceDataReader.ReadDeviceDataAsync(sensorDevice);

            // Assert
            Assert.AreEqual(0, measurementList.Count, "Measurement list cound should be zero");
            _loggerMock.Verify(l => l.Log(LogLevel.Warning, It.IsAny <EventId>(), It.IsAny <It.IsAnyType>(), It.IsAny <Exception>(),
                                          (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()), Times.Once, "It should have been logged that RuuviTag could not be read");
        }
コード例 #26
0
        // GET: SensorDevices
        public ActionResult Index(int?id)
        {
            SensorDeviceViewModel sensorDeviceViewModel = new SensorDeviceViewModel();

            if (id != null)
            {
                SensorDevice sensorDevice = sensorDeviceService.GetSensorDeviceById(id);

                sensorDeviceViewModel = new SensorDeviceViewModel()
                {
                    Id           = sensorDevice.Id,
                    IsActive     = sensorDevice.IsActive,
                    ModelNumber  = sensorDevice.Model,
                    SerialNumber = sensorDevice.SerialNumber,
                    SupplierName = sensorDevice.Supplier.Name
                };
            }

            ViewBag.SupplierList = new SelectList(genericService.GetList <Supplier>(), "Id", "Name");

            return(View(sensorDeviceViewModel));
        }
コード例 #27
0
 public void Load(IWorkspace workspace)
 {
     _device = new SensorDevice();
     workspace.RuntimeManager.System.HardwareController.RegisterHardwareDevice(_device);
 }
コード例 #28
0
        public async Task GetDeviceDataAsync_CustomMeasurementSensorNotExists_ReturnNull()
        {
            var sensorDeviceTypeId = "SomeSensorType";
            var sensorDeviceId     = "SomeSensorDevice";
            var sensorId           = "SomeSensor";
            var customRule         = new CustomMeasurementRule()
            {
                Class    = "MyClass",
                Id       = "MyId",
                Name     = "My custom measurement",
                Unit     = "qwerty",
                Operator = Shared.Enum.OperatorType.IsGreaterThan,
                SensorId = "UnknownSensor",
                Type     = Shared.Enum.ValueType.Default,
                Value    = "somevalue"
            };

            // Arrange
            var sensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = sensorDeviceTypeId,
                Id = sensorDeviceId,
                CalculatedMeasurements = new List <CustomMeasurementRule>()
                {
                    customRule
                }
            };

            var sensorDeviceType = new SensorDeviceType()
            {
                Id      = sensorDeviceTypeId,
                Sensors = new List <Sensor>()
                {
                    new Sensor()
                    {
                        Id = sensorId,
                    }
                }
            };

            _dataReaderMock.Setup(d => d.ReadDeviceDataAsync(It.IsAny <SensorDevice>()))
            .ReturnsAsync(new List <MeasurementData>()
            {
                new MeasurementData()
                {
                    SensorDeviceId = sensorDeviceId,
                    SensorId       = sensorId,
                    Value          = "some value"
                }
            });

            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 1,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
                {
                    sensorDeviceType
                }
            };

            _configMock.Setup(c => c.Value).Returns(config);

            var deviceScanner = _serviceProvider.GetService <Collector.DeviceScanner.DeviceScanner>();

            // Act
            var fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            // Assert
            Assert.AreEqual(1, fullList.Count, "Amount of measurements is not correct");
            Assert.AreEqual(sensorDeviceId, fullList[0].SensorDeviceId, "Sensor device ID is not correct");
        }
コード例 #29
0
        public async Task GetDeviceDataAsync_WasLastTypeCustomMeasurementExists_HandleValueZeroAndMinusOne(
            Shared.Enum.OperatorType operatorType, string measurementValue, string customRuleValue, string expectedComparisonValue)
        {
            var sensorDeviceTypeId = "SomeSensorType";
            var sensorDeviceId     = "SomeSensorDevice";
            var sensorId           = "SomeSensor";
            var customRule         = new CustomMeasurementRule()
            {
                Class    = "MyClass",
                Id       = "MyId",
                Name     = "My custom measurement",
                Unit     = "qwerty",
                Operator = operatorType,
                SensorId = sensorId,
                Type     = Shared.Enum.ValueType.WasLast,
                Value    = customRuleValue
            };

            // Arrange
            var sensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = sensorDeviceTypeId,
                Id = sensorDeviceId,
                CalculatedMeasurements = new List <CustomMeasurementRule>()
                {
                    customRule
                }
            };

            var sensorDeviceType = new SensorDeviceType()
            {
                Id      = sensorDeviceTypeId,
                Sensors = new List <Sensor>()
                {
                    new Sensor()
                    {
                        Id = sensorId,
                    }
                }
            };

            _dataReaderMock.Setup(d => d.ReadDeviceDataAsync(It.IsAny <SensorDevice>()))
            .ReturnsAsync(new List <MeasurementData>()
            {
                new MeasurementData()
                {
                    SensorDeviceId = sensorDeviceId,
                    SensorId       = sensorId,
                    Value          = measurementValue
                }
            })
            ;

            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 1,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
                {
                    sensorDeviceType
                }
            };

            _configMock.Setup(c => c.Value).Returns(config);

            var deviceScanner = _serviceProvider.GetService <Collector.DeviceScanner.DeviceScanner>();

            // Act
            var fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            // Assert
            Assert.AreEqual(2, fullList.Count, "Amount of measurements is not correct");

            var customMeasurement = fullList.First(f => f.SensorId.Equals(customRule.Id, StringComparison.OrdinalIgnoreCase));

            Assert.AreEqual(sensorDeviceId, customMeasurement.SensorDeviceId, "Sensor device ID does not match");
            Assert.AreNotEqual(default(DateTime), customMeasurement.Timestamp, "Timestamp has not been set");
            Assert.AreEqual(expectedComparisonValue, customMeasurement.Value, "Value is not what expected");
        }
コード例 #30
0
        public async Task ExecuteAsync_PublishMeasurementData_CorrectlyPublished()
        {
            MqttApplicationMessage publishedMessage = null;
            var sensorDevice = new SensorDevice()
            {
                Id = "Device1",
                SensorDeviceTypeId = "DeviceType1"
            };

            var sensorDeviceType = new SensorDeviceType()
            {
                Id      = "DeviceType1",
                Sensors = new List <Sensor>()
                {
                    new Sensor()
                    {
                        Id = "Sensor1",
                    }
                }
            };

            //Arrange
            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 0,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
                {
                    sensorDeviceType
                }
            };

            var measurementData = new MeasurementData()
            {
                SensorDeviceId = sensorDevice.Id, SensorId = sensorDeviceType.Sensors[0].Id, Timestamp = DateTime.Now, Value = "123"
            };
            var measurementList = new List <MeasurementData>()
            {
                measurementData
            };

            _mqttClientMock.Setup(m => m.IsConnected).Returns(true);
            _mqttClientMock.Setup(m => m.PublishAsync(It.IsAny <MqttApplicationMessage>(), CancellationToken.None)).Callback((MqttApplicationMessage message, CancellationToken ct) => { publishedMessage = message; });
            _configMock.Setup(c => c.Value).Returns(config);
            _deviceScannerMock.Setup(d => d.GetDeviceDataAsync(config.SensorDevices)).ReturnsAsync(measurementList);

            //Act
            var btGwService = _serviceProvider.GetService <CollectorService>();
            var cts         = new CancellationTokenSource();

#pragma warning disable CS4014
            // Run as fire & forget
            Task.Run(() => btGwService.StartAsync(cts.Token).ConfigureAwait(false));
#pragma warning restore CS4014

            await Task.Delay(100);

            cts.Cancel();

            var expectedMessage = $"{Constant.TopicMeasurement}/{sensorDevice.Location}/{sensorDevice.Id}/{measurementData.SensorId}";
            Assert.AreEqual(expectedMessage, publishedMessage.Topic, "Published topic was incorrect");
            Assert.AreEqual(measurementData.Value, publishedMessage.ConvertPayloadToString(), "Published payload was incorrect");
        }
コード例 #31
0
        public async Task GetDeviceDataAsync_WasLastTypeCustomMeasurement_SequenceWorksCorrectly()
        {
            var sensorDeviceTypeId = "SomeSensorType";
            var sensorDeviceId     = "SomeSensorDevice";
            var sensorId           = "SomeSensor";
            var customRule         = new CustomMeasurementRule()
            {
                Class    = "MyClass",
                Id       = "MyId",
                Name     = "My custom measurement",
                Unit     = "qwerty",
                Operator = Shared.Enum.OperatorType.IsGreaterThan,
                SensorId = sensorId,
                Type     = Shared.Enum.ValueType.WasLast,
                Value    = "1.66"
            };

            // Arrange
            var sensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = sensorDeviceTypeId,
                Id = sensorDeviceId,
                CalculatedMeasurements = new List <CustomMeasurementRule>()
                {
                    customRule
                }
            };

            var sensorDeviceType = new SensorDeviceType()
            {
                Id      = sensorDeviceTypeId,
                Sensors = new List <Sensor>()
                {
                    new Sensor()
                    {
                        Id = sensorId,
                    }
                }
            };

            _dataReaderMock.SetupSequence(d => d.ReadDeviceDataAsync(It.IsAny <SensorDevice>()))
            .ReturnsAsync(new List <MeasurementData>()
            {
                new MeasurementData()
                {
                    SensorDeviceId = sensorDeviceId,
                    SensorId       = sensorId,
                    Value          = "0.1"
                }
            })
            .ReturnsAsync(new List <MeasurementData>()
            {
                new MeasurementData()
                {
                    SensorDeviceId = sensorDeviceId,
                    SensorId       = sensorId,
                    Value          = "2.1"
                }
            })
            .ReturnsAsync(new List <MeasurementData>()
            {
                new MeasurementData()
                {
                    SensorDeviceId = sensorDeviceId,
                    SensorId       = sensorId,
                    Value          = "0.1"
                }
            })
            .ReturnsAsync(new List <MeasurementData>()
            {
                new MeasurementData()
                {
                    SensorDeviceId = sensorDeviceId,
                    SensorId       = sensorId,
                    Value          = "2.1"
                }
            })
            ;

            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 1,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
                {
                    sensorDeviceType
                }
            };

            _configMock.Setup(c => c.Value).Returns(config);

            var deviceScanner = _serviceProvider.GetService <Collector.DeviceScanner.DeviceScanner>();

            // Act
            var fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            var customMeasurement = fullList.First(f => f.SensorId.Equals(customRule.Id, StringComparison.OrdinalIgnoreCase));

            Assert.AreEqual("-1", customMeasurement.Value, "Value is not what expected when condition has not been true yet");

            fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            customMeasurement = fullList.First(f => f.SensorId.Equals(customRule.Id, StringComparison.OrdinalIgnoreCase));
            Assert.AreEqual("0", customMeasurement.Value, "Value is not what expected when condition became true");

            // Wait more than one second to get "WasLast" value to get updated to 1
            await Task.Delay(1200);

            fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            customMeasurement = fullList.First(f => f.SensorId.Equals(customRule.Id, StringComparison.OrdinalIgnoreCase));
            Assert.AreEqual("1", customMeasurement.Value, "Value is not what expected when condition became false again");

            fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            customMeasurement = fullList.First(f => f.SensorId.Equals(customRule.Id, StringComparison.OrdinalIgnoreCase));
            Assert.AreEqual("0", customMeasurement.Value, "Value is not what expected when condition is true again");
        }
コード例 #32
0
        public async Task GetDeviceDataAsync_CustomMeasurementCreatedForCorrectSensor()
        {
            var sensorDeviceTypeId    = "SomeSensorType";
            var sensorDeviceId        = "SomeSensorDevice";
            var sensorId              = "SomeSensor";
            var anotherSensorDeviceId = "AnotherSensor";
            var customRule            = new CustomMeasurementRule()
            {
                Class    = "MyClass",
                Id       = "MyId",
                Name     = "My custom measurement",
                Unit     = "qwerty",
                Operator = Shared.Enum.OperatorType.IsGreaterThan,
                SensorId = sensorId,
                Type     = Shared.Enum.ValueType.Default,
                Value    = "10"
            };

            // Arrange
            var sensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = sensorDeviceTypeId,
                Id = sensorDeviceId,
                CalculatedMeasurements = new List <CustomMeasurementRule>()
                {
                    customRule
                }
            };
            var anotherSensorDevice = new SensorDevice
            {
                SensorDeviceTypeId = sensorDeviceTypeId,
                Id = anotherSensorDeviceId,
                CalculatedMeasurements = new List <CustomMeasurementRule>()
                {
                    customRule
                }
            };

            var sensorDeviceType = new SensorDeviceType()
            {
                Id      = sensorDeviceTypeId,
                Sensors = new List <Sensor>()
                {
                    new Sensor()
                    {
                        Id = sensorId,
                    }
                }
            };

            _dataReaderMock.Setup(d => d.ReadDeviceDataAsync(It.IsAny <SensorDevice>()))
            .ReturnsAsync(new List <MeasurementData>()
            {
                new MeasurementData()
                {
                    SensorDeviceId = anotherSensorDeviceId,
                    SensorId       = sensorId,
                    Value          = "12"
                },
                new MeasurementData()
                {
                    SensorDeviceId = sensorDeviceId,
                    SensorId       = sensorId,
                    Value          = "8"
                }
            });

            var config = new CollectorConfiguration
            {
                CollectorEnabled     = true,
                BluetoothAdapterName = "test",
                ScanIntervalSeconds  = 1,
                SensorDevices        = new List <SensorDevice>()
                {
                    sensorDevice, anotherSensorDevice
                },
                SensorDeviceTypes = new List <SensorDeviceType>()
                {
                    sensorDeviceType
                }
            };

            _configMock.Setup(c => c.Value).Returns(config);

            var deviceScanner = _serviceProvider.GetService <Collector.DeviceScanner.DeviceScanner>();

            // Act
            var fullList = await deviceScanner.GetDeviceDataAsync(config.SensorDevices);

            // Assert
            Assert.AreEqual(6, fullList.Count, "Amount of measurements is not correct");

            var customMeasurement = fullList.First(f => f.SensorId.Equals(customRule.Id, StringComparison.OrdinalIgnoreCase));

            Assert.IsFalse(bool.Parse(customMeasurement.Value), "Custom measurement value should be false for the correct sensor device");
        }