sds011

package module
v1.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2024 License: Apache-2.0 Imports: 8 Imported by: 0

README

Simple go package to control / read data from Nova Fitness SDS011 fine dust sensor

Github Release GoDoc Go Report Card Build/Test Status

This package allows to extract structured data from an SDS011 fine dust / particle density sensor device (see here for details / specs). Usage is fairly trivial (see examples directory for a simple console logger implementation).

Features

  • Extraction of firmware version / date
  • Reading / setting of reporting mode (continuous / query-based)
  • Reading / setting of working mode (active / sleep)
  • Polling / query of fine dust data (PM2.5 / PM10) values

Installation

go get -u github.com/fako1024/sds011

Example

// Initialize a new SDS011 sensor
sensor, err := sds011.New("/dev/ttyUSB0")
if err != nil {
  logrus.StandardLogger().Fatalf("Error opening /dev/ttyUSB0: %s", err)
}

// Ensure that device is active, then enable query mode
if err := sensor.SetWorkMode(sds011.WorkModeActive); err != nil {
  logrus.StandardLogger().Errorf("Error setting active mode: %s", err)
}
if err := sensor.SetReportingMode(sds011.ReportingModeQuery); err != nil {
  logrus.StandardLogger().Errorf("Error setting query reporting mode: %s", err)
}

// Ensure that the sensor is put in sleep mode after termination to conserve
// lifetime of the laser
defer func() {
  if err := sensor.SetWorkMode(sds011.WorkModeSleep); err != nil {
    logrus.StandardLogger().Errorf("Error setting sleep mode: %s", err)
  }

  sensor.Close()
}()

// Continuously put the device to active mode for 30 seconds, read out the data
// and put it back to sleep to conserve lifetime of the laser
for {

  // Activate laser and fan, then wait for 30s for the device to settle and for
  // stable air flow
  if err := sensor.SetWorkMode(sds011.WorkModeActive); err != nil {
    logrus.StandardLogger().Errorf("Error setting active mode: %s", err)
  }
  time.Sleep(30 * time.Second)

  // Read single data point
  dataPoint, err := sensor.QueryData()
  if err != nil {
    logrus.StandardLogger().Errorf("Error reading data: %s", err)
  }

  // Log data
  logrus.StandardLogger().Infof("Read data: %s", dataPoint)

  // Put sensor to sleep mode
  if err := sensor.SetWorkMode(sds011.WorkModeSleep); err != nil {
    logrus.StandardLogger().Errorf("Error setting sleep mode: %s", err)
  }

  // Wait 5 minutes to perform the next measurement
  time.Sleep(5 * time.Minute)
}

Documentation

Index

Constants

View Source
const (
	CommandGetFirmwarePrefix      = "aab40700"
	CommandGetWorkModePrefix      = "aab40600"
	CommandGetReportingModePrefix = "aab40200"
	CommandGetWorkPeriodPrefix    = "aab40800"

	CommandSetWorkModePrefix      = "aab40601"
	CommandSetReportingModePrefix = "aab40201"
	CommandSetWorkPeriodPrefix    = "aab40801"
)

Command prefixes

View Source
const (

	// ReportingModeActive denotes active reporting (device sends data continuously)
	ReportingModeActive = ReportingMode("00")

	// ReportingModeQuery denotes manual reporting (data must be queried)
	ReportingModeQuery = ReportingMode("01")

	// WorkModeSleep denotes inactive mode (laser + fan powered down)
	WorkModeSleep = WorkMode("00")

	// WorkModeActive denotes active mode (laser + fan operative)
	WorkModeActive = WorkMode("01")

	// WorkPeriodContinuous denotes continuous operation of the device
	WorkPeriodContinuous = 0

	// WorkPeriodMax denotes the maximum delay between measurements (30 minutes)
	WorkPeriodMax = 30
)

Variables

This section is empty.

Functions

This section is empty.

Types

type DataPoint

type DataPoint struct {
	TimeStamp time.Time
	PM25      float64
	PM10      float64
}

DataPoint denotes a set of data taken at a specific point in time

func (*DataPoint) String

func (p *DataPoint) String() string

String returns a well-formatted string for the data point, fulfilling the Stringer interface

type ReportingMode

type ReportingMode string

ReportingMode wraps the device reporting mode

type SDS011

type SDS011 struct {
	// contains filtered or unexported fields
}

SDS011 denotes a Nova Fitness SDS011 fine dust sensor endpoint

func New

func New(socket string) (*SDS011, error)

New creates a new SDS011 object

func (*SDS011) Close

func (s *SDS011) Close() error

Close closes the connection to the device

func (*SDS011) GetFirmware

func (s *SDS011) GetFirmware() (string, error)

GetFirmware determines the firmware version of the sensor

func (*SDS011) GetReportingMode

func (s *SDS011) GetReportingMode() (ReportingMode, error)

GetReportingMode determines the current reporting mode of the sensor

func (*SDS011) GetWorkMode

func (s *SDS011) GetWorkMode() (WorkMode, error)

GetWorkMode determines the current working mode of the sensor

func (*SDS011) GetWorkPeriod

func (s *SDS011) GetWorkPeriod() (int, error)

GetWorkPeriod determines the current working period of the sensor (work for 30 seconds, sleep for n minutes)

func (*SDS011) QueryData

func (s *SDS011) QueryData() (*DataPoint, error)

QueryData extract the current PM2.5 and PM10 values from the sensor (in query mode)

func (*SDS011) SetReportingMode

func (s *SDS011) SetReportingMode(mode ReportingMode) error

SetReportingMode sets the current reporting mode of the sensor

func (*SDS011) SetWorkMode

func (s *SDS011) SetWorkMode(mode WorkMode) error

SetWorkMode sets the current working mode of the sensor

func (*SDS011) SetWorkPeriod

func (s *SDS011) SetWorkPeriod(delayMinutes int) error

SetWorkPeriod sets the working period of the sensor (work for 30 seconds, sleep for n minutes) NOTE: 0 denots continuous operation

func (*SDS011) WaitForData

func (s *SDS011) WaitForData() (*DataPoint, error)

WaitForData extract the current PM2.5 and PM10 values from the sensor (in continuous mode) Data is returned upon reception from the serial endpoint

type WorkMode

type WorkMode string

WorkMode wraps the device working mode

Directories

Path Synopsis
examples
logger command
monitor command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL