Skip to content

Commit b2fe434

Browse files
committed
Add Missing Type Annotations
1 parent 650c89f commit b2fe434

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

adafruit_scd30.py

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
from adafruit_bus_device import i2c_device
3434
from micropython import const
3535

36+
try:
37+
from typing import Union, Optional # pylint: disable=unused-import
38+
from busio import I2C
39+
except ImportError:
40+
pass
3641

3742
__version__ = "0.0.0+auto.0"
3843
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_SCD30.git"
@@ -85,7 +90,9 @@ class SCD30:
8590
8691
"""
8792

88-
def __init__(self, i2c_bus, ambient_pressure=0, address=SCD30_DEFAULT_ADDR):
93+
def __init__(
94+
self, i2c_bus: I2C, ambient_pressure: int = 0, address: int = SCD30_DEFAULT_ADDR
95+
) -> None:
8996
if ambient_pressure != 0:
9097
if ambient_pressure < 700 or ambient_pressure > 1400:
9198
raise AttributeError("`ambient_pressure` must be from 700-1400 mBar")
@@ -104,13 +111,13 @@ def __init__(self, i2c_bus, ambient_pressure=0, address=SCD30_DEFAULT_ADDR):
104111
self._relative_humidity = None
105112
self._co2 = None
106113

107-
def reset(self):
114+
def reset(self) -> None:
108115
"""Perform a soft reset on the sensor, restoring default values"""
109116
self._send_command(_CMD_SOFT_RESET)
110117
time.sleep(0.1) # not mentioned by datasheet, but required to avoid IO error
111118

112119
@property
113-
def measurement_interval(self):
120+
def measurement_interval(self) -> int:
114121
"""Sets the interval between readings in seconds. The interval value must be from 2-1800
115122
116123
.. note::
@@ -121,13 +128,13 @@ def measurement_interval(self):
121128
return self._read_register(_CMD_SET_MEASUREMENT_INTERVAL)
122129

123130
@measurement_interval.setter
124-
def measurement_interval(self, value):
131+
def measurement_interval(self, value: int) -> None:
125132
if value < 2 or value > 1800:
126133
raise AttributeError("measurement_interval must be from 2-1800 seconds")
127134
self._send_command(_CMD_SET_MEASUREMENT_INTERVAL, value)
128135

129136
@property
130-
def self_calibration_enabled(self):
137+
def self_calibration_enabled(self) -> bool:
131138
"""Enables or disables automatic self calibration (ASC). To work correctly, the sensor must
132139
be on and active for 7 days after enabling ASC, and exposed to fresh air for at least 1 hour
133140
per day. Consult the manufacturer's documentation for more information.
@@ -144,32 +151,32 @@ def self_calibration_enabled(self):
144151
return self._read_register(_CMD_AUTOMATIC_SELF_CALIBRATION) == 1
145152

146153
@self_calibration_enabled.setter
147-
def self_calibration_enabled(self, enabled):
154+
def self_calibration_enabled(self, enabled: bool) -> None:
148155
self._send_command(_CMD_AUTOMATIC_SELF_CALIBRATION, enabled)
149156
if enabled:
150157
time.sleep(0.01)
151158

152159
@property
153-
def data_available(self):
160+
def data_available(self) -> bool:
154161
"""Check the sensor to see if new data is available"""
155162
return self._read_register(_CMD_GET_DATA_READY)
156163

157164
@property
158-
def ambient_pressure(self):
165+
def ambient_pressure(self) -> int:
159166
"""Specifies the ambient air pressure at the measurement location in mBar. Setting this
160167
value adjusts the CO2 measurement calculations to account for the air pressure's effect on
161168
readings. Values must be in mBar, from 700 to 1400 mBar"""
162169
return self._read_register(_CMD_CONTINUOUS_MEASUREMENT)
163170

164171
@ambient_pressure.setter
165-
def ambient_pressure(self, pressure_mbar):
172+
def ambient_pressure(self, pressure_mbar: int) -> None:
166173
pressure_mbar = int(pressure_mbar)
167174
if pressure_mbar != 0 and (pressure_mbar > 1400 or pressure_mbar < 700):
168175
raise AttributeError("ambient_pressure must be from 700 to 1400 mBar")
169176
self._send_command(_CMD_CONTINUOUS_MEASUREMENT, pressure_mbar)
170177

171178
@property
172-
def altitude(self):
179+
def altitude(self) -> int:
173180
"""Specifies the altitude at the measurement location in meters above sea level. Setting
174181
this value adjusts the CO2 measurement calculations to account for the air pressure's effect
175182
on readings.
@@ -182,11 +189,11 @@ def altitude(self):
182189
return self._read_register(_CMD_SET_ALTITUDE_COMPENSATION)
183190

184191
@altitude.setter
185-
def altitude(self, altitude):
192+
def altitude(self, altitude: int) -> None:
186193
self._send_command(_CMD_SET_ALTITUDE_COMPENSATION, int(altitude))
187194

188195
@property
189-
def temperature_offset(self):
196+
def temperature_offset(self) -> float:
190197
"""Specifies the offset to be added to the reported measurements to account for a bias in
191198
the measured signal. Value is in degrees Celsius with a resolution of 0.01 degrees and a
192199
maximum value of 655.35 C
@@ -200,7 +207,7 @@ def temperature_offset(self):
200207
return raw_offset / 100.0
201208

202209
@temperature_offset.setter
203-
def temperature_offset(self, offset):
210+
def temperature_offset(self, offset: Union[float, int]) -> None:
204211
if offset > 655.35:
205212
raise AttributeError(
206213
"Offset value must be less than or equal to 655.35 degrees Celsius"
@@ -209,7 +216,7 @@ def temperature_offset(self, offset):
209216
self._send_command(_CMD_SET_TEMPERATURE_OFFSET, int(offset * 100))
210217

211218
@property
212-
def forced_recalibration_reference(self):
219+
def forced_recalibration_reference(self) -> int:
213220
"""Specifies the concentration of a reference source of CO2 placed in close proximity to the
214221
sensor. The value must be from 400 to 2000 ppm.
215222
@@ -221,11 +228,11 @@ def forced_recalibration_reference(self):
221228
return self._read_register(_CMD_SET_FORCED_RECALIBRATION_FACTOR)
222229

223230
@forced_recalibration_reference.setter
224-
def forced_recalibration_reference(self, reference_value):
231+
def forced_recalibration_reference(self, reference_value: int) -> None:
225232
self._send_command(_CMD_SET_FORCED_RECALIBRATION_FACTOR, reference_value)
226233

227234
@property
228-
def CO2(self): # pylint:disable=invalid-name
235+
def CO2(self) -> float: # pylint:disable=invalid-name
229236
"""Returns the CO2 concentration in PPM (parts per million)
230237
231238
.. note::
@@ -237,7 +244,7 @@ def CO2(self): # pylint:disable=invalid-name
237244
return self._co2
238245

239246
@property
240-
def temperature(self):
247+
def temperature(self) -> float:
241248
"""Returns the current temperature in degrees Celsius
242249
243250
.. note::
@@ -249,7 +256,7 @@ def temperature(self):
249256
return self._temperature
250257

251258
@property
252-
def relative_humidity(self):
259+
def relative_humidity(self) -> float:
253260
"""Returns the current relative humidity in %rH.
254261
255262
.. note::
@@ -260,7 +267,7 @@ def relative_humidity(self):
260267
self._read_data()
261268
return self._relative_humidity
262269

263-
def _send_command(self, command, arguments=None):
270+
def _send_command(self, command: int, arguments: Optional[int] = None) -> None:
264271
# if there is an argument, calculate the CRC and include it as well.
265272
if arguments is not None:
266273
self._crc_buffer[0] = arguments >> 8
@@ -280,7 +287,7 @@ def _send_command(self, command, arguments=None):
280287
i2c.write(self._buffer, end=end_byte)
281288
time.sleep(0.05) # 3ms min delay
282289

283-
def _read_register(self, reg_addr):
290+
def _read_register(self, reg_addr: int) -> int:
284291
self._buffer[0] = reg_addr >> 8
285292
self._buffer[1] = reg_addr & 0xFF
286293
with self.i2c_device as i2c:
@@ -293,7 +300,7 @@ def _read_register(self, reg_addr):
293300
raise RuntimeError("CRC check failed while reading data")
294301
return unpack_from(">H", self._buffer[0:2])[0]
295302

296-
def _read_data(self):
303+
def _read_data(self) -> None:
297304
self._send_command(_CMD_READ_MEASUREMENT)
298305
with self.i2c_device as i2c:
299306
i2c.readinto(self._buffer)
@@ -314,11 +321,11 @@ def _read_data(self):
314321
">f", self._buffer[12:14] + self._buffer[15:17]
315322
)[0]
316323

317-
def _check_crc(self, data_bytes, crc):
324+
def _check_crc(self, data_bytes: bytearray, crc: int) -> bool:
318325
return crc == self._crc8(bytearray(data_bytes))
319326

320327
@staticmethod
321-
def _crc8(buffer):
328+
def _crc8(buffer: bytearray) -> int:
322329
crc = 0xFF
323330
for byte in buffer:
324331
crc ^= byte

0 commit comments

Comments
 (0)