Skip to content

Ran black, updated to pylint 2.x #27

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
source actions-ci/install.sh
- name: Pip install pylint, black, & Sphinx
run: |
pip install --force-reinstall pylint==1.9.2 black==19.10b0 Sphinx sphinx-rtd-theme
pip install pylint black==19.10b0 Sphinx sphinx-rtd-theme
- name: Library version
run: git describe --dirty --always --tags
- name: PyLint
Expand Down
16 changes: 12 additions & 4 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ ignore-patterns=
#init-hook=

# Use multiple processes to speed up Pylint.
# jobs=1
jobs=2

# List of plugins (as comma separated values of python modules names) to load,
Expand Down Expand Up @@ -50,7 +51,8 @@ confidence=
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,import-error
# disable=import-error,print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call
disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,import-error,bad-continuation

# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
Expand Down Expand Up @@ -117,7 +119,8 @@ spelling-store-unknown-words=no
[MISCELLANEOUS]

# List of note tags to take in consideration, separated by a comma.
notes=FIXME,XXX,TODO
# notes=FIXME,XXX,TODO
notes=FIXME,XXX


[TYPECHECK]
Expand Down Expand Up @@ -200,6 +203,7 @@ redefining-builtins-modules=six.moves,future.builtins
[FORMAT]

# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
# expected-line-ending-format=
expected-line-ending-format=LF

# Regexp for a line that is allowed to be longer than the limit.
Expand Down Expand Up @@ -272,9 +276,11 @@ class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$

# Naming hint for class names
# class-name-hint=[A-Z_][a-zA-Z0-9]+$
class-name-hint=[A-Z_][a-zA-Z0-9_]+$

# Regular expression matching correct class names
# class-rgx=[A-Z_][a-zA-Z0-9]+$
class-rgx=[A-Z_][a-zA-Z0-9_]+$

# Naming hint for constant names
Expand All @@ -294,7 +300,8 @@ function-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
function-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$

# Good variable names which should always be accepted, separated by a comma
good-names=r,g,b,i,j,k,n,ex,Run,_
# good-names=i,j,k,ex,Run,_
good-names=r,g,b,w,i,j,k,n,x,y,z,ex,ok,Run,_

# Include a hint for the correct naming format with invalid-name
include-naming-hint=no
Expand Down Expand Up @@ -391,6 +398,7 @@ valid-metaclass-classmethod-first-arg=mcs
max-args=5

# Maximum number of attributes for a class (see R0902).
# max-attributes=7
max-attributes=11

# Maximum number of boolean expressions in a if statement
Expand All @@ -415,7 +423,7 @@ max-returns=6
max-statements=50

# Minimum number of public methods for a class (see R0903).
min-public-methods=2
min-public-methods=1


[EXCEPTIONS]
Expand Down
144 changes: 103 additions & 41 deletions adafruit_bme680.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import time
import math
from micropython import const

try:
import struct
except ImportError:
Expand Down Expand Up @@ -86,20 +87,49 @@

_BME680_RUNGAS = const(0x10)

_LOOKUP_TABLE_1 = (2147483647.0, 2147483647.0, 2147483647.0, 2147483647.0, 2147483647.0,
2126008810.0, 2147483647.0, 2130303777.0, 2147483647.0, 2147483647.0,
2143188679.0, 2136746228.0, 2147483647.0, 2126008810.0, 2147483647.0,
2147483647.0)

_LOOKUP_TABLE_2 = (4096000000.0, 2048000000.0, 1024000000.0, 512000000.0, 255744255.0, 127110228.0,
64000000.0, 32258064.0, 16016016.0, 8000000.0, 4000000.0, 2000000.0, 1000000.0,
500000.0, 250000.0, 125000.0)
_LOOKUP_TABLE_1 = (
2147483647.0,
2147483647.0,
2147483647.0,
2147483647.0,
2147483647.0,
2126008810.0,
2147483647.0,
2130303777.0,
2147483647.0,
2147483647.0,
2143188679.0,
2136746228.0,
2147483647.0,
2126008810.0,
2147483647.0,
2147483647.0,
)

_LOOKUP_TABLE_2 = (
4096000000.0,
2048000000.0,
1024000000.0,
512000000.0,
255744255.0,
127110228.0,
64000000.0,
32258064.0,
16016016.0,
8000000.0,
4000000.0,
2000000.0,
1000000.0,
500000.0,
250000.0,
125000.0,
)


def _read24(arr):
"""Parse an unsigned 24-bit value as a floating point and return it."""
ret = 0.0
#print([hex(i) for i in arr])
# print([hex(i) for i in arr])
for b in arr:
ret *= 256.0
ret += float(b & 0xFF)
Expand All @@ -111,6 +141,7 @@ class Adafruit_BME680:

:param int refresh_rate: Maximum number of readings per second. Faster property reads
will be from the previous reading."""

def __init__(self, *, refresh_rate=10):
"""Check the BME680 was found, read the coefficients and enable the sensor for continuous
reads."""
Expand All @@ -120,7 +151,7 @@ def __init__(self, *, refresh_rate=10):
# Check device ID.
chip_id = self._read_byte(_BME680_REG_CHIPID)
if chip_id != _BME680_CHIPID:
raise RuntimeError('Failed to find BME680! Chip ID 0x%x' % chip_id)
raise RuntimeError("Failed to find BME680! Chip ID 0x%x" % chip_id)

self._read_calibration()

Expand Down Expand Up @@ -199,7 +230,7 @@ def filter_size(self, size):
def temperature(self):
"""The compensated temperature in degrees celsius."""
self._perform_reading()
calc_temp = (((self._t_fine * 5) + 128) / 256)
calc_temp = ((self._t_fine * 5) + 128) / 256
return calc_temp / 100

@property
Expand All @@ -211,31 +242,49 @@ def pressure(self):
var2 = (var2 * self._pressure_calibration[5]) / 4
var2 = var2 + (var1 * self._pressure_calibration[4] * 2)
var2 = (var2 / 4) + (self._pressure_calibration[3] * 65536)
var1 = (((((var1 / 4) * (var1 / 4)) / 8192) *
(self._pressure_calibration[2] * 32) / 8) +
((self._pressure_calibration[1] * var1) / 2))
var1 = (
(((var1 / 4) * (var1 / 4)) / 8192)
* (self._pressure_calibration[2] * 32)
/ 8
) + ((self._pressure_calibration[1] * var1) / 2)
var1 = var1 / 262144
var1 = ((32768 + var1) * self._pressure_calibration[0]) / 32768
calc_pres = 1048576 - self._adc_pres
calc_pres = (calc_pres - (var2 / 4096)) * 3125
calc_pres = (calc_pres / var1) * 2
var1 = (self._pressure_calibration[8] * (((calc_pres / 8) * (calc_pres / 8)) / 8192)) / 4096
var1 = (
self._pressure_calibration[8] * (((calc_pres / 8) * (calc_pres / 8)) / 8192)
) / 4096
var2 = ((calc_pres / 4) * self._pressure_calibration[7]) / 8192
var3 = (((calc_pres / 256) ** 3) * self._pressure_calibration[9]) / 131072
calc_pres += ((var1 + var2 + var3 + (self._pressure_calibration[6] * 128)) / 16)
return calc_pres/100
calc_pres += (var1 + var2 + var3 + (self._pressure_calibration[6] * 128)) / 16
return calc_pres / 100

@property
def humidity(self):
"""The relative humidity in RH %"""
self._perform_reading()
temp_scaled = ((self._t_fine * 5) + 128) / 256
var1 = ((self._adc_hum - (self._humidity_calibration[0] * 16)) -
((temp_scaled * self._humidity_calibration[2]) / 200))
var2 = (self._humidity_calibration[1] *
(((temp_scaled * self._humidity_calibration[3]) / 100) +
(((temp_scaled * ((temp_scaled * self._humidity_calibration[4]) / 100)) /
64) / 100) + 16384)) / 1024
var1 = (self._adc_hum - (self._humidity_calibration[0] * 16)) - (
(temp_scaled * self._humidity_calibration[2]) / 200
)
var2 = (
self._humidity_calibration[1]
* (
((temp_scaled * self._humidity_calibration[3]) / 100)
+ (
(
(
temp_scaled
* ((temp_scaled * self._humidity_calibration[4]) / 100)
)
/ 64
)
/ 100
)
+ 16384
)
) / 1024
var3 = var1 * var2
var4 = self._humidity_calibration[5] * 128
var4 = (var4 + ((temp_scaled * self._humidity_calibration[6]) / 100)) / 16
Expand All @@ -254,14 +303,16 @@ def humidity(self):
def altitude(self):
"""The altitude based on current ``pressure`` vs the sea level pressure
(``sea_level_pressure``) - which you must enter ahead of time)"""
pressure = self.pressure # in Si units for hPascal
pressure = self.pressure # in Si units for hPascal
return 44330 * (1.0 - math.pow(pressure / self.sea_level_pressure, 0.1903))

@property
def gas(self):
"""The gas resistance in ohms"""
self._perform_reading()
var1 = ((1340 + (5 * self._sw_err)) * (_LOOKUP_TABLE_1[self._gas_range])) / 65536
var1 = (
(1340 + (5 * self._sw_err)) * (_LOOKUP_TABLE_1[self._gas_range])
) / 65536
var2 = ((self._adc_gas * 32768) - 16777216) + var1
var3 = (_LOOKUP_TABLE_2[self._gas_range] * var1) / 512
calc_gas_res = (var3 + (var2 / 2)) / var2
Expand All @@ -276,8 +327,10 @@ def _perform_reading(self):
# set filter
self._write(_BME680_REG_CONFIG, [self._filter << 2])
# turn on temp oversample & pressure oversample
self._write(_BME680_REG_CTRL_MEAS,
[(self._temp_oversample << 5)|(self._pressure_oversample << 2)])
self._write(
_BME680_REG_CTRL_MEAS,
[(self._temp_oversample << 5) | (self._pressure_oversample << 2)],
)
# turn on humidity oversample
self._write(_BME680_REG_CTRL_HUM, [self._humidity_oversample])
# gas measurements enabled
Expand All @@ -295,8 +348,8 @@ def _perform_reading(self):

self._adc_pres = _read24(data[2:5]) / 16
self._adc_temp = _read24(data[5:8]) / 16
self._adc_hum = struct.unpack('>H', bytes(data[8:10]))[0]
self._adc_gas = int(struct.unpack('>H', bytes(data[13:15]))[0] / 64)
self._adc_hum = struct.unpack(">H", bytes(data[8:10]))[0]
self._adc_gas = int(struct.unpack(">H", bytes(data[13:15]))[0] / 64)
self._gas_range = data[14] & 0x0F

var1 = (self._adc_temp / 8) - (self._temp_calibration[0] * 2)
Expand All @@ -310,11 +363,13 @@ def _read_calibration(self):
coeff = self._read(_BME680_BME680_COEFF_ADDR1, 25)
coeff += self._read(_BME680_BME680_COEFF_ADDR2, 16)

coeff = list(struct.unpack('<hbBHhbBhhbbHhhBBBHbbbBbHhbb', bytes(coeff[1:39])))
#print("\n\n",coeff)
coeff = list(struct.unpack("<hbBHhbBhhbbHhhBBBHbbbBbHhbb", bytes(coeff[1:39])))
# print("\n\n",coeff)
coeff = [float(i) for i in coeff]
self._temp_calibration = [coeff[x] for x in [23, 0, 1]]
self._pressure_calibration = [coeff[x] for x in [3, 4, 5, 7, 8, 10, 9, 12, 13, 14]]
self._pressure_calibration = [
coeff[x] for x in [3, 4, 5, 7, 8, 10, 9, 12, 13, 14]
]
self._humidity_calibration = [coeff[x] for x in [17, 16, 18, 19, 20, 21, 22]]
self._gas_calibration = [coeff[x] for x in [25, 24, 26]]

Expand Down Expand Up @@ -345,9 +400,13 @@ class Adafruit_BME680_I2C(Adafruit_BME680):
:param bool debug: Print debug statements when True.
:param int refresh_rate: Maximum number of readings per second. Faster property reads
will be from the previous reading."""

def __init__(self, i2c, address=0x77, debug=False, *, refresh_rate=10):
"""Initialize the I2C device at the 'address' given"""
from adafruit_bus_device import i2c_device
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
i2c_device,
)

self._i2c = i2c_device.I2CDevice(i2c, address)
self._debug = debug
super().__init__(refresh_rate=refresh_rate)
Expand Down Expand Up @@ -386,38 +445,41 @@ class Adafruit_BME680_SPI(Adafruit_BME680):
"""

def __init__(self, spi, cs, baudrate=100000, debug=False, *, refresh_rate=10):
from adafruit_bus_device import spi_device
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
spi_device,
)

self._spi = spi_device.SPIDevice(spi, cs, baudrate=baudrate)
self._debug = debug
super().__init__(refresh_rate=refresh_rate)

def _read(self, register, length):
if register != _BME680_REG_STATUS:
#_BME680_REG_STATUS exists in both SPI memory pages
#For all other registers, we must set the correct memory page
# _BME680_REG_STATUS exists in both SPI memory pages
# For all other registers, we must set the correct memory page
self._set_spi_mem_page(register)

register = (register | 0x80) & 0xFF # Read single, bit 7 high.
with self._spi as spi:
spi.write(bytearray([register])) #pylint: disable=no-member
spi.write(bytearray([register])) # pylint: disable=no-member
result = bytearray(length)
spi.readinto(result) #pylint: disable=no-member
spi.readinto(result) # pylint: disable=no-member
if self._debug:
print("\t$%02X => %s" % (register, [hex(i) for i in result]))
return result

def _write(self, register, values):
if register != _BME680_REG_STATUS:
#_BME680_REG_STATUS exists in both SPI memory pages
#For all other registers, we must set the correct memory page
# _BME680_REG_STATUS exists in both SPI memory pages
# For all other registers, we must set the correct memory page
self._set_spi_mem_page(register)
register &= 0x7F # Write, bit 7 low.
with self._spi as spi:
buffer = bytearray(2 * len(values))
for i, value in enumerate(values):
buffer[2 * i] = register + i
buffer[2 * i + 1] = value & 0xFF
spi.write(buffer) #pylint: disable=no-member
spi.write(buffer) # pylint: disable=no-member
if self._debug:
print("\t$%02X <= %s" % (values[0], [hex(i) for i in values[1:]]))

Expand Down
Loading