From 66b5076208f98e78b6dde6bf923b20980ced6b9e Mon Sep 17 00:00:00 2001 From: Benji <46675043+BenjiU@users.noreply.github.com> Date: Fri, 24 Jan 2020 14:21:38 +0100 Subject: [PATCH] Adding support for 1wire sensors DS18S20 and co (#80) * Create ds18b.py * Update and rename pi_mqtt_gpio/module/ds18b.py to pi_mqtt_gpio/modules/ds18b.py * testing DS18B * add config example * Update README.md Adding ds18b sensor module documentation and example. * Update README.md * Delete server.py * accidently deleted server.py * fix after testing Co-authored-by: Ellis Percival <github.com@failcode.co.uk> --- README.md | 12 +++++++++++ config.example.yml | 14 ++++++++++-- pi_mqtt_gpio/modules/ds18b.py | 40 +++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 pi_mqtt_gpio/modules/ds18b.py diff --git a/README.md b/README.md index 88703b1..5492f95 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Sensors - LM75 i2c temperature sensor (`lm75`) - DHT11 DHT22 AM2302 temperature/humidity sensor (`dht22`) - BH1750 light level sensor (`bh1750`) +- DS18S20, DS1822, DS18B20, DS1825, DS28EA00, MAX31850K one-wire temperature sensors: (`ds18b`) Installation ------------ @@ -148,6 +149,17 @@ sensor_inputs: interval: 10 digits: 2 +sensor_modules: + - name: ds18b22 + module: ds18b + type: DS18S20 + address: 000803702e49 + +sensor_inputs: + - name: ds18b22 + module: ds18b22 + interval: 60 + digits: 2 ``` #### SSL/TLS diff --git a/config.example.yml b/config.example.yml index 9fcc900..156bf83 100644 --- a/config.example.yml +++ b/config.example.yml @@ -24,6 +24,11 @@ sensor_modules: i2c_bus_num: 1 chip_addr: 0x48 + - name: ds18b22 + module: ds18b + type: DS18S20 + address: 000803702e49 + digital_inputs: - name: button module: raspberrypi @@ -57,7 +62,12 @@ digital_outputs: off_payload: "OFF" sensor_inputs: - - name: temperature + - name: temp_lm75 module: lm75 interval: 15 - digits: 4 \ No newline at end of file + digits: 4 + + - name: temp_dsb18 + module: ds18b22 + interval: 10 + digits: 2 diff --git a/pi_mqtt_gpio/modules/ds18b.py b/pi_mqtt_gpio/modules/ds18b.py new file mode 100644 index 0000000..5a47f53 --- /dev/null +++ b/pi_mqtt_gpio/modules/ds18b.py @@ -0,0 +1,40 @@ +from pi_mqtt_gpio.modules import GenericSensor + +REQUIREMENTS = ("w1thermsensor",) +ALLOWED_TYPES = ["DS18S20", "DS1822", "DS18B20", "DS1825", "DS28EA00", "MAX31850K"] +CONFIG_SCHEMA = { + "address": dict(type="string", required=True, empty=False), + "type": dict( + type="string", required=True, empty=False, allowed=ALLOWED_TYPES + list(map(str.lower, ALLOWED_TYPES)) + ), +} + +class Sensor(GenericSensor): + """ + Implementation of Sensor class for the one wire temperature sensors. DS18B etc. + """ + + def __init__(self, config): + from w1thermsensor import W1ThermSensor + + sensor_config_type = config["type"] + + #get the sensor type mapping + self.sensor_type = None + for w1_sensor_type, w1_sensor_name in W1ThermSensor.TYPE_NAMES.items(): + if w1_sensor_name.lower() == sensor_config_type.lower(): + self.sensor_type = w1_sensor_type + + # initialization failed + if self.sensor_type is None: + raise Exception("Supported sensor types: " + str(W1ThermSensor.TYPE_NAMES.values())) + + self.sensor = W1ThermSensor(self.sensor_type, config["address"].lower()) + + def setup_sensor(self, config): + return True # nothing to do here + + def get_value(self, config): + """get the temperature value from the sensor""" + temperature = self.sensor.get_temperature() + return temperature -- GitLab