public SensorTelemetry(ILogger logger, IDevice device, AbstractSensor sensor)
 {
     this._logger = logger;
     this._deviceId = device.DeviceID;
     this._sensor = sensor;
     this.TelemetryActive = !string.IsNullOrWhiteSpace(device.HostName) && !string.IsNullOrWhiteSpace(device.PrimaryAuthKey);
 }
        protected override bool InitSensor(AbstractSensor sensor)
        {
            if (sensor is VisualSensor visualSensor)
            {
                visualSensor.viewDistance = viewDistance.Value;
                return(true);
            }

            return(false);
        }
Beispiel #3
0
        protected override bool InitSensor(AbstractSensor sensor)
        {
            if (sensor is HearingSensor hearingSensor)
            {
                hearingSensor.hearingRadius = hearRadius.Value;
                return(true);
            }

            return(false);
        }
        protected override bool InitSensor(AbstractSensor sensor)
        {
            if (sensor is SectorVisualSensor sectorVisualSensor)
            {
                sectorVisualSensor.viewDistance = viewDistance.Value;
                sectorVisualSensor.viewAngle    = viewAngle.Value;
                return(true);
            }

            return(false);
        }
Beispiel #5
0
        public void AddSensor(AvailableSensors sensorType, string json)
        {
            var serializerOptions = new JsonSerializerOptions
            {
                Converters = { new DynamicJsonConverter() }
            };
            dynamic model = JsonSerializer.Deserialize <dynamic>(json, serializerOptions);

            AbstractSensor sensorToCreate = null;

            switch (sensorType)
            {
            case AvailableSensors.UserNotificationStateSensor:
                sensorToCreate = new UserNotificationStateSensor(this._publisher, (int)model.UpdateInterval, model.Name);
                break;

            case AvailableSensors.DummySensor:
                sensorToCreate = new DummySensor(this._publisher, (int)model.UpdateInterval, model.Name);
                break;

            case AvailableSensors.CurrentClockSpeedSensor:
                sensorToCreate = new CurrentClockSpeedSensor(this._publisher, (int)model.UpdateInterval, model.Name);
                break;

            case AvailableSensors.CPULoadSensor:
                sensorToCreate = new CPULoadSensor(this._publisher, (int)model.UpdateInterval, model.Name);
                break;

            case AvailableSensors.WMIQuerySensor:
                sensorToCreate = new WMIQuerySensor(this._publisher, model.Query, (int)model.UpdateInterval, model.Name);
                break;

            case AvailableSensors.MemoryUsageSensor:
                sensorToCreate = new MemoryUsageSensor(this._publisher, (int)model.UpdateInterval, model.Name);
                break;

            case AvailableSensors.ActiveWindowSensor:
                sensorToCreate = new ActiveWindowSensor(this._publisher, (int)model.UpdateInterval, model.Name);
                break;

            default:
                Log.Logger.Error("Unknown sensortype");
                break;
            }
            if (sensorToCreate != null)
            {
                this._configurationService.AddConfiguredSensor(sensorToCreate);
            }
        }
Beispiel #6
0
        private void AddSensorInListSensors(List <Sensor> businessLevelSensors, AbstractSensor sensor)
        {
            SensorManufacturer sensorManufacturer = null;

            switch (sensor.SensorType)
            {
            case "PressureSensor":
                sensorManufacturer = new PressureSensorManufacturer();
                break;

            case "TemperatureSensor":
                sensorManufacturer = new TemperatureSensorManufacturer();
                break;

            case "MagneticFieldSensor":
                sensorManufacturer = new MagneticFieldSensorSensorManufacturer();;
                break;
            }
            businessLevelSensors.Add(sensorManufacturer.CreateSensor(ParseStringInEnum(sensor.SensorType), sensor.MeasurementInterval));
        }
 private async void SensorStarted(AbstractSensor sensor, dynamic device)
 {
    
        bool hasMutex = false;
         try
         {
             await sensor.DoMeasure();
             hasMutex = mutex.WaitOne(1000);
             if (hasMutex)
             {
                 Sensors.Add(sensor);
             }
         }
         finally
         {
             if (hasMutex)
             {
                 mutex.ReleaseMutex();
             }
         }
 }
        public async void ReadSensorSettings(MqttPublisher publisher)
        {
            while (this._sensorsSettingsFileLocked)
            {
                await Task.Delay(500);
            }
            this._sensorsSettingsFileLocked = true;
            List <ConfiguredSensor> sensors = new List <ConfiguredSensor>();

            using (var stream = new FileStream(Path.Combine(path, "configured-sensors.json"), FileMode.Open))
            {
                Log.Logger.Information($"reading configured sensors from: {stream.Name}");
                if (stream.Length > 0)
                {
                    sensors = await JsonSerializer.DeserializeAsync <List <ConfiguredSensor> >(stream);
                }
                stream.Close();
                this._sensorsSettingsFileLocked = false;
            }

            foreach (ConfiguredSensor configuredSensor in sensors)
            {
                AbstractSensor sensor = null;
                switch (configuredSensor.Type)
                {
                case "UserNotificationStateSensor":
                    sensor = new UserNotificationStateSensor(publisher, configuredSensor.UpdateInterval, configuredSensor.Name, configuredSensor.Id);
                    break;

                case "DummySensor":
                    sensor = new DummySensor(publisher, configuredSensor.UpdateInterval, configuredSensor.Name, configuredSensor.Id);
                    break;

                case "CurrentClockSpeedSensor":
                    sensor = new CurrentClockSpeedSensor(publisher, configuredSensor.UpdateInterval, configuredSensor.Name, configuredSensor.Id);
                    break;

                case "WMIQuerySensor":
                    sensor = new WMIQuerySensor(publisher, configuredSensor.Query, configuredSensor.UpdateInterval, configuredSensor.Name, configuredSensor.Id);
                    break;

                case "CPULoadSensor":
                    sensor = new CPULoadSensor(publisher, configuredSensor.UpdateInterval, configuredSensor.Name, configuredSensor.Id);
                    break;

                case "MemoryUsageSensor":
                    sensor = new MemoryUsageSensor(publisher, configuredSensor.UpdateInterval, configuredSensor.Name, configuredSensor.Id);
                    break;

                case "ActiveWindowSensor":
                    sensor = new ActiveWindowSensor(publisher, configuredSensor.UpdateInterval, configuredSensor.Name, configuredSensor.Id);
                    break;

                default:
                    Log.Logger.Error("unsupported sensor type in config");
                    break;
                }
                if (sensor != null)
                {
                    this.ConfiguredSensors.Add(sensor);
                }
            }
        }
 public void AddConfiguredSensor(AbstractSensor sensor)
 {
     this.ConfiguredSensors.Add(sensor);
     sensor.PublishAutoDiscoveryConfigAsync();
     WriteSettingsAsync();
 }
 private void onRemoveSensor(AbstractSensor sensor)
 {
     bool hasMutex = false;
     try
     {
         hasMutex = _mutex.WaitOne(1000);
         var existingSensor = this.DeviceSensors.FirstOrDefault<AbstractSensor>(sn => sn.UniqueName.Equals(sensor.UniqueName));
     if (existingSensor != null)
     {               
         this.DeviceSensors.Remove(existingSensor);
         this.Logger.LogWarning("Removed sensor {0} uniquename {1} for deviceid {2}", sensor.Title, sensor.UniqueName, this.DeviceID);
         }
     }
     finally
     {
         if (hasMutex)
         {
             _mutex.ReleaseMutex();
         }
     }
 }
        public void AddDeviceSensor(AbstractSensor sensor)
        {               
              this.onRemoveSensor(sensor);

            bool hasMutex = false;
            try
            {
                this.Logger.LogInfo("Adding sensor {0} uniquename {1} for deviceid {2}", sensor.Title, sensor.UniqueName, this.DeviceID);
                hasMutex = _mutex.WaitOne(1000);
                this.DeviceSensors.Add(sensor);
                    sensor.onSensorSessionLost += onRemoveSensor;

                var monitorTelemetry = new SensorTelemetry(this.Logger, this, sensor);
                this.TelemetryEvents.Add(monitorTelemetry);

                this.Logger.LogInfo("Sensor {0} addedd sucessfully", sensor.Title);
            }
            finally
            {
                if (hasMutex)
                {
                    _mutex.ReleaseMutex();
                }
            }

        }
        public async void StartDeviceSensorAsync(AbstractSensor sensor, dynamic device)
        {
            if (device == null)
                return;

            bool hasMutex = false;
            try
            {
                hasMutex = _mutex.WaitOne(5000);
                ;

                // check if device already exists
                string deviceID = DeviceSchemaHelper.GetDeviceID(device);
                WeatherShieldDevice existingDevice;
                if (!_devices.ContainsKey(deviceID))
                {
                    
                    var deviceCancellationToken = new CancellationTokenSource();
                    _cancellationTokens.Add(deviceID, deviceCancellationToken);

                    //Initialize device as a new
                    existingDevice = new WeatherShieldDevice(this._logger, this._transportFactory,
                        this._telemetryFactory, this._configProvider, deviceCancellationToken.Token);

                    InitialDeviceConfig config = await this._deviceConfiguration.GetDeviceAsync(deviceID);
                    if (config == null) {
                        config = new InitialDeviceConfig();
                        ///HostName=MtcDataCenter.azure-devices.net;DeviceId=makhluDev;SharedAccessKey=Q3e1wSyrkpspcR06m11bNw==
                        config.Key = @"QoGh9kGJus4hvWUX9Hhjag==";//string.Empty;
                        config.HostName = @"MtcDataCenter.azure-devices.net";//string.Empty;                        
                    }
                    existingDevice.Init(config, device);
                    
                    _devices.Add(deviceID, existingDevice);

                }
                else
                {
                    existingDevice = _devices[deviceID] as WeatherShieldDevice;
                }
                existingDevice.AddDeviceSensor(sensor);


                this._logger.LogInfo("Addedd sensor {0} dor device id {1}", new object[] { sensor.Title, existingDevice.DeviceID });

            }catch(Exception ex)
            {
                this._logger.LogError("Error adding {0} for device {1}. Error message: {2}", new object[] { sensor, device, ex.Message });
            }
            finally
                {
                    if (hasMutex)
                    {
                        _mutex.ReleaseMutex();
                    }
                }
}
Beispiel #13
0
 /// <summary>
 /// 移除感观
 /// </summary>
 /// <param name="sensor"></param>
 public void RemoveSensor(AbstractSensor sensor)
 {
     listSensor.Remove(sensor);
 }
Beispiel #14
0
 /// <summary>
 /// 添加感观
 /// </summary>
 /// <param name="sensor"></param>
 public void AddSensor(AbstractSensor sensor)
 {
     listSensor.Add(sensor);
 }
Beispiel #15
0
 protected abstract bool InitSensor(AbstractSensor sensor);