/
environment.py
91 lines (65 loc) · 2.27 KB
/
environment.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import time
import logging
import Adafruit_DHT
import tsl2561
import w1thermsensor
from .base import register_sensor, Sensor, SensorNotAvailableException
logger = logging.getLogger(__name__)
@register_sensor
class AM2302(Sensor):
def __init__(self, *args, pin: int, **kwargs):
Sensor.__init__(self, *args, uses_height=True, **kwargs)
self.pin = pin
_header_sensor = [
"Temperature (°C)",
"Humidity (%)",
]
def _read(self, **kwargs):
logger.debug("Reading AM2302 sensor on pin {}".format(self.pin))
try:
humid, temp = Adafruit_DHT.read(Adafruit_DHT.AM2302, self.pin)
except RuntimeError as e:
raise SensorNotAvailableException(e)
if humid is None or temp is None:
raise SensorNotAvailableException(
"No AM2302 instance on pin {}".format(self.pin))
humid = round(humid, 3)
temp = round(temp, 3)
logger.info("Read {}°C, {}% humidity".format(temp, humid))
return [temp, humid]
@register_sensor
class DS18B20(Sensor):
def __init__(self, *args, **kwargs):
Sensor.__init__(self, *args, uses_height=True, **kwargs)
_header_sensor = [
"Temperature (°C)",
]
def _read(self, **kwargs):
logger.debug("Reading DS18B20 sensor")
try:
sensor = w1thermsensor.W1ThermSensor()
temp = sensor.get_temperature()
except RuntimeError as e:
raise SensorNotAvailableException(e)
temp = round(temp, 3)
logger.info("Read {}°C".format(temp))
return [temp]
@register_sensor
class TSL2561(Sensor):
def __init__(self, *args, **kwargs):
Sensor.__init__(self, *args, uses_height=True, **kwargs)
_header_sensor = [
"Illuminance (lux)",
"broadband",
"ir",
]
def _read(self, **kwargs):
logger.debug("Reading TSL2561 sensor via i2c")
try:
lux_sensor = tsl2561.TSL2561()
broadband, ir = lux_sensor._get_luminosity()
lux = lux_sensor._calculate_lux(broadband, ir)
except OSError as e:
raise SensorNotAvailableException(e)
logger.info("Read {} lux (br: {}, ir: {})".format(lux, broadband, ir))
return [lux, broadband, ir]