From 8d9f6c969ded44284ab21f1c8936dc3d2eb18400 Mon Sep 17 00:00:00 2001 From: Jan Grewe <jan@faked.org> Date: Sat, 13 Jul 2024 23:01:14 +0200 Subject: [PATCH] allow setting temperature and humidty offsets add filtering for water levels --- packages/air_bme280.yaml | 112 ++++++++++++++++++++++++++++++--------- packages/air_scd40.yaml | 1 - packages/level.yaml | 2 + 3 files changed, 89 insertions(+), 26 deletions(-) diff --git a/packages/air_bme280.yaml b/packages/air_bme280.yaml index 81c98f7..df9d5b8 100644 --- a/packages/air_bme280.yaml +++ b/packages/air_bme280.yaml @@ -1,31 +1,93 @@ +substitutions: + bme280_temperature_offset: "0.0" + bme280_humidity_offset: "0.0" + +globals: + - id: bme280_temperature_offset + type: float + restore_value: yes + initial_value: ${bme280_temperature_offset} + - id: bme280_humidity_offset + type: float + restore_value: yes + initial_value: ${bme280_humidity_offset} + sensor: -- platform: bme280_i2c - address: 0x76 - update_interval: 5s - temperature: - id: bme280_temperature - name: "Air: Temperature" - accuracy_decimals: 2 - #<<: !include filter.yaml + - platform: bme280_i2c + address: 0x76 + update_interval: 5s + temperature: + id: bme280_temperature + name: "Air: Temperature" + accuracy_decimals: 2 + on_value: + then: + - lambda: |- + id(${fan_script}).execute(); + filters: + - lambda: return x + id(bme280_temperature_offset); + humidity: + id: bme280_humidity + name: "Air: Humidity" + accuracy_decimals: 2 + #<<: !include filter.yaml + on_value: + then: + - lambda: |- + id(${fan_script}).execute(); + id(${humidifier_script}).execute(); + filters: + - lambda: return x + id(bme280_humidity_offset); + pressure: + id: bme280_pressure + name: "Air: Pressure" + accuracy_decimals: 2 + <<: !include filter.yaml + +select: + - platform: template + name: "Air: Temperature Offset" + options: ["-3", "-2", "-1", "0", "1", "2", "3"] + initial_option: "0" + optimistic: true + restore_value: true on_value: - then: - - lambda: |- - id(${fan_script}).execute(); - humidity: - id: bme280_humidity - name: "Air: Humidity" - accuracy_decimals: 2 - #<<: !include filter.yaml + - globals.set: + id: bme280_temperature_offset + value: !lambda "return atof(x.c_str());" + - platform: template + name: "Air: Humidity Offset" + options: + [ + "-10", + "-9", + "-8", + "-7", + "-6", + "-5", + "-4", + "-3", + "-2", + "-1", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + ] + initial_option: "0" + optimistic: true + restore_value: true on_value: - then: - - lambda: |- - id(${fan_script}).execute(); - id(${humidifier_script}).execute(); - pressure: - id: bme280_pressure - name: "Air: Pressure" - accuracy_decimals: 2 - <<: !include filter.yaml + - globals.set: + id: bme280_humidity_offset + value: !lambda "return atof(x.c_str());" prometheus: relabel: diff --git a/packages/air_scd40.yaml b/packages/air_scd40.yaml index 36736bc..4a80e22 100644 --- a/packages/air_scd40.yaml +++ b/packages/air_scd40.yaml @@ -2,7 +2,6 @@ sensor: - platform: scd4x id: scd40 update_interval: 5s - temperature_offset: 4.9 ambient_pressure_compensation_source: bme280_pressure co2: id: scd40_co2 diff --git a/packages/level.yaml b/packages/level.yaml index 6e95bf4..00509d3 100644 --- a/packages/level.yaml +++ b/packages/level.yaml @@ -64,6 +64,7 @@ sensor: unit_of_measurement: "cm" accuracy_decimals: 2 update_interval: 5s + <<: !include filter.yaml lambda: |- float dataCurrent = id(waterlevel_tank_voltage).state * 1024.0 / 120.0; // Sense Resistor: 120ohm float depth = (dataCurrent - id(waterlevel_current_init)) * (id(waterlevel_range) / id(waterlevel_density) / 16.0) / 10; @@ -74,6 +75,7 @@ sensor: unit_of_measurement: "cm" accuracy_decimals: 2 update_interval: 5s + <<: !include filter.yaml lambda: |- float dataCurrent = id(waterlevel_system_voltage).state * 1024.0 / 120.0; // Sense Resistor: 120ohm float depth = (dataCurrent - id(waterlevel_current_init)) * (id(waterlevel_range) / id(waterlevel_density) / 16.0) / 10; -- GitLab