Skip to content

Commit c647efe

Browse files
committed
Merge master with blinka migration
1 parent bd92c67 commit c647efe

File tree

5 files changed

+111
-79
lines changed

5 files changed

+111
-79
lines changed

sensors/linux/float_sensor.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ def read(self):
2525
value = self.gpio_pin.value
2626
return value
2727

28-
def readRaw(self):
28+
def read_raw(self):
2929
"""Read the sensor(s) but return the raw data, useful for debugging"""
3030
return self.read()

sensors/linux/humidity_sensor.py

+61-21
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
import time
21
import json
3-
import redis
4-
from .sensor import Sensor
5-
import adafruit_dht
62
import sys
7-
sys.path.append('..')
3+
import time
84

5+
import adafruit_dht
6+
7+
from sensors.linux.sensor import Sensor
8+
9+
sys.path.append('..')
910

1011
from logger.Logger import Logger, LOG_LEVEL
1112

12-
# r = redis.Redis(host='127.0.0.1', port=6379)
13+
1314
# PIN MODE : OUT | IN
1415

1516

@@ -21,46 +22,85 @@ def __init__(self, pin, name=None, key=None, model='11', redis_conn=None):
2122
return
2223

2324
def init_sensor(self):
24-
"""Initialize the sensor here (i.e. set pin mode, get addresses, etc) this gets called by the worker"""
25-
sensor_types = {'11': adafruit_dht.DHT11,
26-
'22': adafruit_dht.DHT22,
27-
'2302': adafruit_dht.DHT22} # AM2302 = DHT22
25+
"""
26+
Initialize the sensor here (i.e. set pin mode, get addresses, etc)
27+
this gets called by the worker
28+
"""
29+
sensor_types = {
30+
'11': adafruit_dht.DHT11,
31+
'22': adafruit_dht.DHT22,
32+
'2302': adafruit_dht.DHT22
33+
} # AM2302 = DHT22
2834
if self.type in sensor_types:
2935
self.sensor = sensor_types[self.type]
3036
else:
31-
Logger.log(LOG_LEVEL["warning"], 'Sensor Model Error: Defaulting to DHT11')
37+
Logger.log(
38+
LOG_LEVEL["warning"],
39+
'Sensor Model Error: Defaulting to DHT11'
40+
)
3241
self.sensor = adafruit_dht.DHT11
3342
return
3443

3544
def read(self):
36-
"""Read the sensor(s), parse the data and store it in redis if redis is configured"""
45+
"""
46+
Read the sensor(s), parse the data and store it in redis if redis
47+
is configured
48+
"""
49+
# Set values just in case we never set them up.
50+
51+
humidity = None
52+
temperature_c = None
3753

38-
for i in range(15): # read_retry() not implemented in new lib
54+
# read_retry() not implemented in new lib
55+
for i in range(15):
3956
dhtDevice = self.sensor(self.pin)
57+
4058
try:
4159
temperature_c = dhtDevice.temperature
4260
humidity = dhtDevice.humidity
4361
if humidity is not None and temperature_c is not None:
4462
break
63+
4564
except RuntimeError:
46-
# Errors happen fairly often, DHT's are hard to read, just keep going:
65+
# Errors happen fairly often, DHT's are hard to read,
66+
# just keep going:
4767
time.sleep(2)
4868
continue
69+
4970
except Exception as error:
5071
self.sensor(self.pin).exit()
51-
Logger.log(LOG_LEVEL["error"], f'DHT Reading was Invalid. Trying again next cycle. Details: {error.args[0]}')
72+
Logger.log(
73+
LOG_LEVEL["error"],
74+
f'DHT Reading was Invalid. Trying again next cycle. Details: {error.args[0]}'
75+
)
5276
return None
5377

5478
if humidity is not None and temperature_c is not None:
55-
self.r.set(self.key + '_temperature', round(temperature_c * 1.8 + 32, 2))
56-
self.r.set(self.key + '_humidity', humidity)
57-
readings = {'temperature': round(temperature_c * 1.8 + 32, 2), 'humidity': round(humidity, 2)}
79+
self.r.set(
80+
self.key + '_temperature',
81+
round(temperature_c * 1.8 + 32, 2)
82+
)
83+
self.r.set(
84+
self.key + '_humidity', humidity
85+
)
86+
readings = {
87+
'temperature': round(temperature_c * 1.8 + 32, 2),
88+
'humidity': round(humidity, 2)
89+
}
5890
self.r.set(self.key, json.dumps(readings))
5991
return readings
6092
else:
61-
Logger.log(LOG_LEVEL["error"], 'DHT Reading was Invalid. Trying again next cycle.')
93+
Logger.log(
94+
LOG_LEVEL["error"],
95+
'DHT Reading was Invalid. Trying again next cycle.'
96+
)
6297
return None
6398

64-
def readRaw(self):
65-
"""Read the sensor(s) but return the raw data, useful for debugging"""
99+
def read_raw(self):
100+
"""
101+
Read the sensor(s) but return the raw data, useful for debugging
102+
103+
Returns:
104+
105+
"""
66106
return self.read()

sensors/linux/i2c/bme680_sensor.py

+18-12
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
import time
21
import json
3-
import redis
4-
from .sensor import Sensor
5-
import board
6-
from busio import I2C
2+
import sys
3+
74
import adafruit_bme680
85

96
from logger.Logger import Logger, LOG_LEVEL
7+
from sensors.linux.i2c.sensor import Sensor
108

11-
import sys
129
sys.path.append('..')
1310

14-
import variables
15-
1611

1712
class Bme680Sensor(Sensor):
1813

@@ -21,7 +16,9 @@ def __init__(self, address=None, name=None, key=None, redis_conn=None):
2116
return
2217

2318
def init_sensor(self):
24-
self.sensor = adafruit_bme680.Adafruit_BME680_I2C(self.i2c, debug=False)
19+
self.sensor = adafruit_bme680.Adafruit_BME680_I2C(
20+
self.i2c, debug=False
21+
)
2522
# change this to match the location's pressure (hPa) at sea level
2623
self.sensor.sea_level_pressure = 1013.25
2724
return
@@ -39,13 +36,22 @@ def read(self):
3936
self.r.set(self.key + '_gas', gas)
4037
self.r.set(self.key + '_pressure', pressure)
4138
self.r.set(self.key + '_altitude', altitude)
42-
readings = {'temperature': temperature, 'humidity': humidity, 'pressure': pressure, 'gas': gas, 'altitude': altitude}
39+
readings = {
40+
'temperature': temperature,
41+
'humidity': humidity,
42+
'pressure': pressure,
43+
'gas': gas,
44+
'altitude': altitude
45+
}
4346
self.r.set(self.key, json.dumps(readings))
4447
# print('BME680:', readings)
4548
return readings
4649
else:
47-
Logger.log(LOG_LEVEL["error"], 'Failed to get reading [BME680]. Try again!')
50+
Logger.log(
51+
LOG_LEVEL["error"],
52+
'Failed to get reading [BME680]. Try again!'
53+
)
4854

49-
def readRaw(self):
55+
def read_raw(self):
5056
"""Read the sensor(s) but return the raw data, useful for debugging"""
5157
return self.read()

sensors/linux/i2c/sensor.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ def read(self):
4040
# GPIO.input(pin)
4141
pass
4242

43-
def readRaw(self):
43+
def read_raw(self):
4444
"""Read the sensor(s) but return the raw data, useful for debugging"""
4545
pass
4646

47-
# self.pin not defined and readPin() doesn't seemto be called. So I commented it
47+
# self.pin not defined and read_pin() doesn't seemto be called. So I commented it
4848
'''
49-
def readPin(self):
49+
def read_pin(self):
5050
"""Read the pin from the board. Can be analog or digital based on \"analog_pin_mode\""""
5151
data = self.gpio.input(self.pin)
5252
return data

sensors/linux/sensor.py

+28-42
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,53 @@
1-
import time
2-
import json
3-
import redis
4-
import digitalio
5-
import board
61
import re
2+
3+
import board
4+
import digitalio
5+
76
from logger.Logger import Logger, LOG_LEVEL
7+
from sensors.base_sensor import BaseSensor
88

99

1010
# PIN MODE : OUT | IN
1111

12-
class Sensor():
12+
class Sensor(BaseSensor):
1313

1414
def __init__(self, pin, name=None, key=None, redis_conn=None):
15+
16+
super().__init__(
17+
pin=pin,
18+
name=name,
19+
key=key,
20+
redis_conn=redis_conn
21+
)
1522
self.pin_obj = getattr(board, pin)
1623

1724
if re.match(r'D\d+$', pin):
1825
self.is_digital = True
1926
elif re.match(r'A\d+$', pin):
2027
self.is_digital = False
2128
else:
22-
Logger.log(LOG_LEVEL["error"], "Cannot detect pin type (Digital or analog), should be Dxx or Axx for digital or analog. Please refer to https://github.com/adafruit/Adafruit_Blinka/tree/master/src/adafruit_blinka/board")
23-
24-
if key is None:
25-
raise Exception('No "key" Found in Sensor Config')
26-
else:
27-
self.key = key.replace(" ", "_").lower()
28-
29-
if name is None:
30-
self.name = self.key.replace("_", " ").title()
31-
else:
32-
self.name = name
29+
Logger.log(
30+
LOG_LEVEL["error"],
31+
"Cannot detect pin type (Digital or analog), should be Dxx or Axx for digital or analog. "
32+
"Please refer to "
33+
"https://github.com/adafruit/Adafruit_Blinka/tree/master/src/adafruit_blinka/board"
34+
)
3335

3436
self.gpio = digitalio
35-
try:
36-
self.r = redis_conn if redis_conn is not None else redis.Redis(host='127.0.0.1', port=6379)
37-
except KeyError:
38-
self.r = redis.Redis(host='127.0.0.1', port=6379)
39-
return
40-
41-
def init_sensor(self):
42-
"""Initialize the sensor here (i.e. set pin mode, get addresses, etc)"""
43-
# GPIO.setmode(GPIO.BCM)
44-
# GPIO.setup(pin, GPIO.IN)
45-
pass
4637

47-
def read(self):
48-
"""Read the sensor(s), parse the data and store it in redis if redis is configured"""
49-
# GPIO.input(pin)
50-
pass
51-
52-
def readRaw(self):
53-
# Read the sensor(s) but return the raw data, useful for debugging
54-
pass
55-
56-
def readPin(self):
38+
def read_pin(self):
5739
"""Read the pin from the board.
5840
59-
pin value must be a blinka Pin. D for a digital input and A for an analog input, followed by the pin number.
60-
You check the board-specific pin mapping [here](https://github.com/adafruit/Adafruit_Blinka/blob/master/src/adafruit_blinka/board/).
41+
Pin value must be a blinka Pin.
42+
D for a digital input and A for an analog input, followed by the
43+
pin number.
44+
45+
You check the board-specific pin mapping
46+
[here](https://github.com/adafruit/Adafruit_Blinka/blob/master/src/adafruit_blinka/board/).
6147
6248
Examples:
63-
readPin(board.D12)
64-
readPin(board.A12)
49+
read_pin(board.D12)
50+
read_pin(board.A12)
6551
"""
6652
if self.is_digital:
6753
data = self.gpio.DigitalInOut(self.pin_obj).value

0 commit comments

Comments
 (0)