Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Sample project(s) available on GitHub
Syntax
public class NextPm : PollingSensorBase<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)>, IObservable<IChangeResult<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)>>, ISamplingSensor<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)>, ISensor<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)>, IDisposable, IPowerControllablePeripheral
Constructors
NextPm(ISerialPort)
Creates a NextPm instance
Declaration
public NextPm(ISerialPort serialPort)
Parameters
Type | Name | Description |
---|---|---|
ISerialPort | serialPort | The serial serialPort |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
NextPm(SerialPortName)
Creates a NextPm instance
Declaration
public NextPm(SerialPortName portName)
Parameters
Type | Name | Description |
---|---|---|
SerialPortName | portName | The serial serialPort name |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Properties
IsDisposed
Returns true if the object is disposed, otherwise false
Declaration
public bool IsDisposed { get; }
Property Value
Type | Description |
---|---|
bool |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Methods
Dispose()
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
Declaration
public void Dispose()
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Dispose(bool)
Dispose of the object
Declaration
protected virtual void Dispose(bool disposing)
Parameters
Type | Name | Description |
---|---|---|
bool | disposing | Is disposing |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Get10SecondAverageReading()
Gets the average particulate reading for the past 10 seconds
Declaration
public Task<ParticulateReading> Get10SecondAverageReading()
Returns
Type | Description |
---|---|
Task<ParticulateReading> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Get15MinuteAverageReading()
Gets the average particulate reading for the past 15 minutes
Declaration
public Task<ParticulateReading> Get15MinuteAverageReading()
Returns
Type | Description |
---|---|
Task<ParticulateReading> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Get1MinuteAverageReading()
Gets the average particulate reading for the past 60 seconds
Declaration
public Task<ParticulateReading> Get1MinuteAverageReading()
Returns
Type | Description |
---|---|
Task<ParticulateReading> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
GetFanSpeed()
Gets the fan speed (in percentage)
Declaration
public Task<int> GetFanSpeed()
Returns
Type | Description |
---|---|
Task<int> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
GetFirmwareVersion()
Gets the sensor's firmware
Declaration
public Task<short> GetFirmwareVersion()
Returns
Type | Description |
---|---|
Task<short> | The sensor's firmware version |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
GetTemperatureAndHumidity()
Gets the sensor's current Temperature and Humidity readings
Declaration
public Task<(Temperature temperature, RelativeHumidity humidity)> GetTemperatureAndHumidity()
Returns
Type | Description |
---|---|
Task<(Temperature temperature, RelativeHumidity humidity)> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
IsAsleep()
Checks to see if the sensor is in Sleep mode
Declaration
public Task<bool> IsAsleep()
Returns
Type | Description |
---|---|
Task<bool> | True if the sensor is in Sleep mode |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
PowerOff()
Puts the device into Sleep mode
Declaration
public Task PowerOff()
Returns
Type | Description |
---|---|
Task |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
PowerOn()
Wakes the device from Sleep mode
Declaration
public Task PowerOn()
Returns
Type | Description |
---|---|
Task |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
RaiseEventsAndNotify(IChangeResult<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)>)
Notify observers
Declaration
protected override void RaiseEventsAndNotify(IChangeResult<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)> changeResult)
Parameters
Type | Name | Description |
---|---|---|
IChangeResult<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)> | changeResult | provides new and old values |
Overrides
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
ReadSensor()
Read value from sensor
Declaration
protected override Task<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)> ReadSensor()
Returns
Type | Description |
---|---|
Task<(ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Temperature? temperature, RelativeHumidity? humidity)> | unitized value |
Overrides
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
SetFanSpeed(int)
Sets the sensor fan speed (in percentage)
Declaration
public Task SetFanSpeed(int speedPercent)
Parameters
Type | Name | Description |
---|---|---|
int | speedPercent |
Returns
Type | Description |
---|---|
Task |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Exceptions
Type | Condition |
---|---|
ArgumentOutOfRangeException |
Events
HumidityUpdated
Raised when a new humidity reading is taken
Declaration
public event EventHandler<IChangeResult<RelativeHumidity>> HumidityUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<RelativeHumidity>> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Readings10sUpdated
Raised when a new 10-second average reading is taken
Declaration
public event EventHandler<IChangeResult<ParticulateReading>> Readings10sUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<ParticulateReading>> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Readings15minUpdated
Raised when a new 15-minute average reading is taken
Declaration
public event EventHandler<IChangeResult<ParticulateReading>> Readings15minUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<ParticulateReading>> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
Readings1minUpdated
Raised when a new 1-minute average reading is taken
Declaration
public event EventHandler<IChangeResult<ParticulateReading>> Readings1minUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<ParticulateReading>> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}
TemperatureUpdated
Raised when a new temperature reading is taken
Declaration
public event EventHandler<IChangeResult<Temperature>> TemperatureUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Temperature>> |
Remarks
NextPm | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
NextPm nextPm;
public override Task Initialize()
{
var port = Device
.PlatformOS
.GetSerialPortName("COM1")
.CreateSerialPort();
nextPm = new NextPm(port);
nextPm.Readings10sUpdated += NextPm_Readings10sUpdated;
return Task.CompletedTask;
}
private void NextPm_Readings10sUpdated(object sender, IChangeResult<ParticulateReading> e)
{
Resolver.Log.Info($"Past 10 seconds");
Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter");
Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter");
Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles");
}
public override async Task Run()
{
Resolver.Log.Info("Run...");
var firmware = await nextPm.GetFirmwareVersion();
Resolver.Log.Info($"Firmware: 0x{firmware:X4}");
var tempAndHumidity = await nextPm.GetTemperatureAndHumidity();
Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%");
nextPm.StartUpdating();
}