From fa9901c586c266365c6ce822c2f05664924de991 Mon Sep 17 00:00:00 2001 From: TheYOSH Date: Tue, 5 Feb 2019 23:34:02 +0100 Subject: [PATCH] Add support for MLX90614 sensor. #247 --- .gitmodules | 3 +++ python-MLX90614 | 1 + terrariumI2CSensor.py | 42 +++++++++++++++++++++++++++++++++++++++ terrariumSensor.py | 5 +++-- views/sensor_settings.tpl | 1 + 5 files changed, 50 insertions(+), 2 deletions(-) create mode 160000 python-MLX90614 diff --git a/.gitmodules b/.gitmodules index 698b55316..fadb1cdc1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "hls-proxy"] path = hls-proxy url = https://github.com/Viblast/hls-proxy.git +[submodule "python-MLX90614"] + path = python-MLX90614 + url = https://github.com/CRImier/python-MLX90614.git diff --git a/python-MLX90614 b/python-MLX90614 new file mode 160000 index 000000000..715b84f42 --- /dev/null +++ b/python-MLX90614 @@ -0,0 +1 @@ +Subproject commit 715b84f42c742b4b988bc89ec1b155ae947be2d9 diff --git a/terrariumI2CSensor.py b/terrariumI2CSensor.py index 897ef03a6..e78edba00 100644 --- a/terrariumI2CSensor.py +++ b/terrariumI2CSensor.py @@ -14,6 +14,8 @@ # https://github.com/ageir/chirp-rpi sys.path.insert(0, './chirp-rpi') import chirp +sys.path.insert(0, './python-MLX90614') +from mlx90614 import MLX90614 from gevent import monkey, sleep monkey.patch_all() @@ -522,3 +524,43 @@ def get_data(self): data['temp_offset'] = self.get_temperature_offset_calibration() return data + +class terrariumMLX90614Sensor(terrariumSensorSource): + TYPE = 'mlx90614' + VALID_SENSOR_TYPES = ['temperature'] + + def set_address(self,address): + super(terrariumMLX90614Sensor,self).set_address(address) + data = self.get_address().split(',') + self.i2c_address = int('0x' + data[0],16) + self.i2c_bus = 1 + self.temp_type = 'object' + if len(data) == 3: + _, self.i2c_bus, self.temp_type = data + elif len(data) == 2: + if 'a' == data[1]: + self.temp_type = 'ambient' + elif 'o' == data[1]: + self.temp_type = 'object' + else: + self.i2c_bus = data[1] + + def load_data(self): + data = None + + try: + data = {} + sensor = MLX90614(self.i2c_address,int(self.i2c_bus)) + + # we cannot cache data here.... as both are 'temperature' values + if 'object' == self.temp_type: + data['temperature'] = float(sensor.get_obj_temp()) + elif 'ambient' == self.temp_type: + data['temperature'] = float(sensor.get_amb_temp()) + else: + data = None + + except Exception as ex: + print(ex) + + return data diff --git a/terrariumSensor.py b/terrariumSensor.py index 647543668..baa6ef66b 100644 --- a/terrariumSensor.py +++ b/terrariumSensor.py @@ -428,7 +428,7 @@ def load_data(self): from terrariumAnalogSensor import terrariumSKUSEN0161Sensor from terrariumBluetoothSensor import terrariumMiFloraSensor from terrariumGPIOSensor import terrariumYTXXSensorDigital, terrariumDHT11Sensor, terrariumDHT22Sensor, terrariumAM2302Sensor, terrariumHCSR04Sensor -from terrariumI2CSensor import terrariumSHT2XSensor, terrariumHTU21DSensor, terrariumSi7021Sensor, terrariumBME280Sensor, terrariumChirpSensor, terrariumVEML6075Sensor, terrariumSHT3XSensor +from terrariumI2CSensor import terrariumSHT2XSensor, terrariumHTU21DSensor, terrariumSi7021Sensor, terrariumBME280Sensor, terrariumChirpSensor, terrariumVEML6075Sensor, terrariumSHT3XSensor, terrariumMLX90614Sensor # Not sure if this is needed here again....? monkey.patch_all() @@ -464,7 +464,8 @@ class terrariumSensor(object): terrariumVEML6075Sensor, terrariumChirpSensor, terrariumSHT3XSensor, - terrariumMHZ19Sensor} + terrariumMHZ19Sensor, + terrariumMLX90614Sensor} def __new__(self, sensor_id, hardware_type, sensor_type, address, name = '', callback_indicator = None): for sensor in terrariumSensor.SENSORS: diff --git a/views/sensor_settings.tpl b/views/sensor_settings.tpl index f1fb3a508..c985bad30 100644 --- a/views/sensor_settings.tpl +++ b/views/sensor_settings.tpl @@ -119,6 +119,7 @@ +