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()