From d1b9019887208686c9b9f608df4c7a70d487f30d Mon Sep 17 00:00:00 2001 From: Jan Grewe <jan@faked.org> Date: Tue, 25 Oct 2022 19:54:33 +0200 Subject: [PATCH] add SCD40 add MLX90614 --- growbox.yaml | 2 ++ include/mlx90614.h | 28 ++++++++++++++++++++++++++++ packages/mlx90614.yaml | 34 ++++++++++++++++++++++++++++++++++ packages/scd40.yaml | 22 ++++++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 include/mlx90614.h create mode 100644 packages/mlx90614.yaml create mode 100644 packages/scd40.yaml diff --git a/growbox.yaml b/growbox.yaml index 91bd394..a9a9c58 100644 --- a/growbox.yaml +++ b/growbox.yaml @@ -8,3 +8,5 @@ packages: time: !include packages/time.yaml bme280: !include packages/bme280.yaml yieryi2178: !include packages/yieryi3178.yaml + scd40: !include packages/scd40.yaml + mlx90614: !include packages/mlx90614.yaml diff --git a/include/mlx90614.h b/include/mlx90614.h new file mode 100644 index 0000000..a1467dc --- /dev/null +++ b/include/mlx90614.h @@ -0,0 +1,28 @@ +#include "esphome.h" +#include "Adafruit_MLX90614.h" + +class MLX90614 : public PollingComponent { + public: + + Adafruit_MLX90614 mlx90614 = Adafruit_MLX90614(); + Sensor *ambient_temperature = new Sensor(); + Sensor *object_temperature = new Sensor(); + + MLX90614( uint32_t update_interval ) : PollingComponent(update_interval) {} + + void setup() override { + mlx90614.begin(); + } + + void update() override { + float amb_temperature = 0.0; + amb_temperature = mlx90614.readAmbientTempC(); // reading twice seemed to eliminate intermittent invalid data reads (shows as 1037.5 C) + amb_temperature = mlx90614.readAmbientTempC(); + ambient_temperature->publish_state(amb_temperature); + + float obj_temperature = 0.0; + obj_temperature = mlx90614.readObjectTempC(); // only had invalid reads for ambient teperature but taking two readings of object temperature as well fwiw + obj_temperature = mlx90614.readObjectTempC(); + object_temperature->publish_state(obj_temperature); + } +}; diff --git a/packages/mlx90614.yaml b/packages/mlx90614.yaml new file mode 100644 index 0000000..513e486 --- /dev/null +++ b/packages/mlx90614.yaml @@ -0,0 +1,34 @@ +esphome: + includes: + - include/mlx90614.h + libraries: + - Wire + - SPI + - https://github.com/adafruit/Adafruit_BusIO @ 1.13.2 + - https://github.com/adafruit/Adafruit-MLX90614-Library @ 2.1.3 + +sensor: +- platform: custom + lambda: |- + auto mlx90614 = new MLX90614(5000); + App.register_component(mlx90614); + return {mlx90614->ambient_temperature, mlx90614->object_temperature}; + sensors: + - id: mlx90614_temperature_ambient + name: "IR: Ambient Temperature" + unit_of_measurement: °C + accuracy_decimals: 2 + - id: mlx90614_temperature_object + name: "IR: Object Temperature" + unit_of_measurement: °C + accuracy_decimals: 2 + + +prometheus: + relabel: + mlx90614_temperature_object: + id: temperature_ir + name: "Object Temperature (IR)" + mlx90614_temperature_ambient: + id: temperature_ir_ambient + name: "Ambient Temperature (IR)" diff --git a/packages/scd40.yaml b/packages/scd40.yaml new file mode 100644 index 0000000..f785abe --- /dev/null +++ b/packages/scd40.yaml @@ -0,0 +1,22 @@ +sensor: +- platform: scd4x + update_interval: 5s + ambient_pressure_compensation_source: bme280_pressure + co2: + id: scd40_co2 + name: "CO2" + temperature: + id: scd40_temperature + name: "CO2: Temperature" + humidity: + id: scd40_humidity + name: "CO2: Humidity" + +prometheus: + relabel: + scd40_temperature: + id: temperature_co2 + name: "Temperature (CO2)" + scd40_humidity: + id: humidity_co2 + name: "Humidity (CO2)" -- GitLab