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); }
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); }
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); } }
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(); } } }
/// <summary> /// 移除感观 /// </summary> /// <param name="sensor"></param> public void RemoveSensor(AbstractSensor sensor) { listSensor.Remove(sensor); }
/// <summary> /// 添加感观 /// </summary> /// <param name="sensor"></param> public void AddSensor(AbstractSensor sensor) { listSensor.Add(sensor); }
protected abstract bool InitSensor(AbstractSensor sensor);