private async Task RunAsync() { _bleModuleConnection.Start("COM3"); _logger?.LogInformation("Discover and connect to device"); var flowerCareSmartMonitor = await _bleDeviceManager.ConnectByServiceUuidAsync("95FE".HexStringToByteArray()); _logger?.LogInformation("Read device status"); var status = await flowerCareSmartMonitor.CharacteristicsByUuid[new Guid("00001a02-0000-1000-8000-00805f9b34fb")].ReadValueAsync(); var batteryLevel = status[0]; var firmwareVersion = Encoding.ASCII.GetString(status.Skip(2).ToArray()).TrimEnd(new char[] { (char)0 }); _logger?.LogInformation($"Battery level: {batteryLevel}%"); _logger?.LogInformation($"Firmware version: {firmwareVersion}"); _logger?.LogInformation("Read device sensor data"); await flowerCareSmartMonitor.CharacteristicsByUuid[new Guid("00001a00-0000-1000-8000-00805f9b34fb")].WriteValueAsync(new byte[] { 0xa0, 0x1f }); var sensorData = await flowerCareSmartMonitor.CharacteristicsByUuid[new Guid("00001a01-0000-1000-8000-00805f9b34fb")].ReadValueAsync(); var temperature = BitConverter.ToInt16(sensorData.Take(2).ToArray(), 0) / 10f; var lightIntensity = BitConverter.ToInt32(sensorData.Skip(3).Take(4).ToArray(), 0); var soilMoisture = sensorData[7]; var soilFertility = BitConverter.ToInt16(sensorData.Skip(8).Take(2).ToArray(), 0); _logger?.LogInformation($"Temperature: {temperature} °C"); _logger?.LogInformation($"Light intensity: {lightIntensity} lux"); _logger?.LogInformation($"Soil moisture: {soilMoisture}%"); _logger?.LogInformation($"Soil fertility: {soilFertility} µS/cm"); await flowerCareSmartMonitor.DisconnectAsync(); await Task.Delay(10); _bleModuleConnection.Stop(); }
private async Task RunAsync() { _bleModuleConnection.Start("COM3"); _logger?.LogInformation("Discover and connect to device"); var miTemperatureHumidityMonitor = await _bleDeviceManager.ConnectByServiceUuidAsync("0F180A18".HexStringToByteArray()); _logger?.LogInformation("Read device status"); var battery = await miTemperatureHumidityMonitor.CharacteristicsByUuid[new Guid("00002a19-0000-1000-8000-00805f9b34fb")].ReadValueAsync(); var batteryLevel = battery[0]; var firmware = await miTemperatureHumidityMonitor.CharacteristicsByUuid[new Guid("00002a26-0000-1000-8000-00805f9b34fb")].ReadValueAsync(); var firmwareVersion = Encoding.ASCII.GetString(firmware).TrimEnd(new char[] { (char)0 }); _logger?.LogInformation($"Battery level: {batteryLevel}%"); _logger?.LogInformation($"Firmware version: {firmwareVersion}"); _logger?.LogInformation("Read device sensor data"); miTemperatureHumidityMonitor.CharacteristicsByUuid[new Guid("226caa55-6476-4566-7562-66734470666d")].ValueChanged += (sender, args) => { var dataString = Encoding.ASCII.GetString(args.Value).TrimEnd(new char[] { (char)0 }); var match = Regex.Match(dataString, @"T=([\d\.]*)\s+?H=([\d\.]*)"); if (match.Success) { var temperature = float.Parse(match.Groups[1].Captures[0].Value); var airHumidity = float.Parse(match.Groups[2].Captures[0].Value); _logger?.LogInformation($"Temperature: {temperature} °C"); _logger?.LogInformation($"Air humidity: {airHumidity}%"); } }; _logger?.LogInformation("Enable notifications"); await miTemperatureHumidityMonitor.CharacteristicsByUuid[new Guid("226caa55-6476-4566-7562-66734470666d")].WriteCccAsync(BleCccValue.NotificationsEnabled); var ccc = await miTemperatureHumidityMonitor.CharacteristicsByUuid[new Guid("226caa55-6476-4566-7562-66734470666d")].ReadCccAsync(); await Task.Delay(10000); await miTemperatureHumidityMonitor.DisconnectAsync(); _bleModuleConnection.Stop(); }