diff --git a/growbox.yaml b/growbox.yaml index 91bd3947770c10072f267a6c165a72da99fa82ed..a9a9c589aa48dfba2556ced6287be86274dd45c6 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 0000000000000000000000000000000000000000..a1467dc11f5912c2da1342f3ebfb521122bebd46 --- /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 0000000000000000000000000000000000000000..513e486244f1aee9c2cbc0902617e91118880c81 --- /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 0000000000000000000000000000000000000000..f785abeb5ef2ef988d9e2c5902189db3d395b460 --- /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)"