# Generic Sensor Library¶

This module contains class definitions for sensors. The Sensor class provides methods for handling generic sensors connected to specific pins of a device. It also provides easily accessible attributes for useful parameters automatically evaluated during the acquisition.

Every Sensor instance implements the following methods:

• getRaw: reads a raw value from the sensor and returns it
• setNormFunc: sets a normalization function
• getNormalized: reads a raw value from the sensor and returns a normalized one
• currentSample: returns last read sample
• previousSample: returns the last but one read sample
• doEverySample: appends to a list a function to be executed every time a get function is called
• resetSampleActions: resets Actions list
• addCheck: appends to a list a couple of a condition to be checked every time a get function is called the action to be executed if the condition is verified
• resetChek: resets Checks list
• startSampling: sets a sampling interval
• stopSampling: clears the sampling interval
• wait: sleeps
• setObservationWindow: sets the length of the window used to evaluate a set of useful parameters
• setSamplingTime: sets the private attribute _samplingTime (use carefully)

Every Sensor instance provides the following parameters evaluated in a window of n acquisitions (both in sampling mode and simple get calls):

• currentAverage: moving average for last n samples
• currentDerivative: last sample minus penultimate sample, all divided by sampling time in seconds (only sampling mode)
• currentTrend: last sample minus first sample of the window, all divided by sampling time in seconds (only sampling mode)
• minSample: smallest sample of the window
• maxSample: greatest sample of the window

And the following attributes to control the process of evaluation of the parameters:

• skipEval: if True skips the whole process of evaluation
• storeAverage: if False skips average evaluation
• storeTrend: if False skips trend evaluation
• storeMinMax: if False skips min and max evaluation

## The Sensor class¶

class Sensor

This is the base class for generic sensors connected to pins

_resetSamplingParams()

Resets sampling parameters

setObservationWindow(n)

Sets the length of the window (n) used to evaluate a set of useful parameters. Needed to evaluate those parameters during manual acquisition (calling getRaw/getNormalized functions), in sampling mode (entered by startSampling call) the length is given as a parameter of startSampling method.

Note

self._samplingTime can be found set in:

• sampling mode: setObservationWindow should not have been called
• get mode: self._samplingTime has been manually set because samplingTime dependent parameters (like trend and derivatived) are necessary in a non-sampling mode (should be very rare)
setSamplingTime(time)

Manually sets _samplingTime private attribute.

Warning

Use carefully setObservationWindow method

This attribute is automatically set when startSampling method is called.

currentSample()

Returns last read sample: stored as the last element of the buffer list.

The buffer is a list of _observationWindowN elements if the window evaluation process is not skipped, as a private attribute otherwise.

previousSample()

Returns last but one read sample: stored in the buffer list (see currentSample)

Note

Not available if evaluation process is skipped

getRaw()

Main acquisition method for raw data

getNormalized()

Main acquisition method for normalized data

doEverySample(to_do)

Appends a function to the list of those to be executed when _getValue is called.

Note

_getValue is called both in sampling and manual acquisition mode.

Example:

def out(obj):
print(obj.currentSample())

mySensor.doEverySample(out)

### 'out' is executed in both cases:
mySensor.startSampling(...)
mySensor.getRaw()


Returns self to allow a compact code:

mySensor.doEverySample(out).addCheck(...).startSampling(...)

resetSampleActions()

Resets _everySampleActions list

addCheck(condition, to_do)

Appends a condition to those to be checked every time _getValue is called and a function to the list of those to be executed when their conditions are verified.

‘condition’ must be a function that takes the current sensor object as a parameter and returns a boolean value:

def averageGreaterThanThreshold(obj):
if type(obj.currentAverage) != PNONE:
if obj.currentAverage > 50:
return True
else:
return False
else:
return False


‘to_do’ must be a function that takes the current sensor object as a parameter and performs some actions:

def succeed(obj):
print("Average is greater than threshold!")
print(obj.currentAverage)


Returns self to allow a compact code (see doEverySample)

resetCheck()

Resets _checkFunctions and _checkConditions lists

setNormFunc(fn)

Sets a normalization function. A normalization function takes the last raw acquired value and the current sensor object as parameters. Example:

def normalizeData(val,obj):
return obj.scale*(val/100)


It is recommended to use only static parameters stored in current object like scale factors. .. note:: In the object passed, obj.currentSample() returns the last but one read value because the buffer list is updated only after the normalization.

Returns self to allow a compact code (see doEverySample)

startSampling(time, observation_window, get_type, time_unit)

Starts reading samples every _samplingTime. Length of _observationWindowN to evaluate window parameters, type of acquisition and time_unit characterize the acquisition itself. If no observation_window is passed the evaluation of window parameters is skipped.

Returns self to allow a compact code (see doEverySample)

stopSampling()

Depending on mode:

• sampling mode: clears timer interval and stops sampling
• non sampling mode: resets sampling parameters

Returns self to allow a compact code (see doEverySample)

wait(time)

Sleeps for time milliseconds and returns self to allow a compact code:

mySensor.doEverySample(out).startSampling(...).wait(5000).stopSampling()