Compare commits

..

5 Commits

Author SHA1 Message Date
cd68cd6811 Adjust TSL to 2s update
1s is too frequent and would sometimes fail to poll.
2025-10-20 02:22:49 -04:00
2c6d185bfc Add dynamic humidity calibration from temp offset
With the physical limitations of the SuperSensor, we were able to
compensate for the temperature differential due to internal heating from
the ESP, but this compensation was not being taken into account by the
humidity sensor.

Add a compensation factor based on the offset to ensure humidity
properly tracks the filtered temperature value.
2025-10-20 01:46:09 -04:00
861d1e1c4d Increase possible humidity offsets and fix gain 2025-10-20 00:01:14 -04:00
d75325198f Fix conditional errors 2025-10-10 16:52:49 -04:00
a259542870 Properly fix light-switching-while-holding bug
Use a global to keep the state here, and set it while a hold is active,
only clearing it afterwards. While held calls to `light_off` are skipped
entirely.
2025-10-10 16:49:45 -04:00

View File

@@ -164,39 +164,34 @@ globals:
restore_value: yes restore_value: yes
initial_value: '"mww_computer"' initial_value: '"mww_computer"'
- id: light_is_holding
type: bool
restore_value: no
initial_value: 'false'
script: script:
- id: presence_light_on
then:
if:
condition:
- switch.is_on: enable_presence_led
- light.is_off: output_led
then:
- light.turn_on:
id: output_led
brightness: 25%
red: 1
green: 1
blue: 1
transition_length: 1s
- id: light_off - id: light_off
then: then:
if: - if:
condition: condition:
- binary_sensor.is_on: supersensor_occupancy lambda: 'return !id(light_is_holding);'
- switch.is_on: enable_presence_led then:
then: - if:
- light.turn_on: condition:
id: output_led - binary_sensor.is_on: supersensor_occupancy
brightness: 25% - switch.is_on: enable_presence_led
red: 1 then:
green: 1 - light.turn_on:
blue: 1 id: output_led
transition_length: 1s brightness: 25%
else: red: 1
- light.turn_off: green: 1
id: output_led blue: 1
transition_length: 1s transition_length: 1s
else:
- light.turn_off:
id: output_led
transition_length: 1s
- id: pir_handler - id: pir_handler
then: then:
@@ -446,7 +441,7 @@ micro_wake_word:
id: mww id: mww
microphone: microphone:
microphone: mic microphone: mic
gain_factor: 64 gain_factor: 2
stop_after_detection: false stop_after_detection: false
models: models:
- model: github://joshuaboniface/Custom_V2_MicroWakeWords/models/computer/computer.json - model: github://joshuaboniface/Custom_V2_MicroWakeWords/models/computer/computer.json
@@ -556,7 +551,13 @@ light:
- automation: - automation:
name: hold name: hold
sequence: sequence:
- globals.set:
id: light_is_holding
value: "true"
- delay: 5s - delay: 5s
- globals.set:
id: light_is_holding
value: "false"
- script.execute: light_off - script.execute: light_off
output: output:
@@ -693,6 +694,20 @@ sensor:
id: sht45_humidity id: sht45_humidity
accuracy_decimals: 1 accuracy_decimals: 1
filters: filters:
- lambda: |-
// Grab measured and corrected temperatures
float t_meas = id(sht45_temperature).state - id(temperature_offset);
float t_corr = id(sht45_temperature).state;
float rh_meas = x;
// Compute saturation vapor pressures (Magnus formula)
auto es = [](float T) { return 6.112 * exp((17.62 * T) / (243.12 + T)); };
float rh_corr = rh_meas * es(t_meas) / es(t_corr);
// Clamp to 0100 %
if (rh_corr < 0) rh_corr = 0;
if (rh_corr > 100) rh_corr = 100;
return rh_corr + id(humidity_offset);
- offset: !lambda return id(humidity_offset); - offset: !lambda return id(humidity_offset);
- sliding_window_moving_average: - sliding_window_moving_average:
window_size: 20 window_size: 20
@@ -786,8 +801,8 @@ sensor:
- platform: tsl2591 - platform: tsl2591
address: 0x29 address: 0x29
update_interval: 1s update_interval: 2s
integration_time: 200ms integration_time: 600ms
power_save_mode: no power_save_mode: no
gain: auto gain: auto
device_factor: 53 device_factor: 53
@@ -836,7 +851,7 @@ binary_sensor:
device_class: occupancy device_class: occupancy
on_state: on_state:
then: then:
- script.execute: presence_light_on - script.execute: light_off
- platform: gpio - platform: gpio
name: "PIR GPIO" name: "PIR GPIO"
@@ -997,7 +1012,7 @@ switch:
number: number:
# Temperature offset: # Temperature offset:
# A calibration from -30 to +5 for the temperature sensor # A calibration from -30 to +10 for the temperature sensor
- platform: template - platform: template
name: "Temperature Offset" name: "Temperature Offset"
id: temperature_offset_setter id: temperature_offset_setter
@@ -1013,12 +1028,12 @@ number:
value: !lambda 'return float(x);' value: !lambda 'return float(x);'
# Humidity offset: # Humidity offset:
# A calibration from -20 to +20 for the humidity sensor # A calibration from -50 to +50 for the humidity sensor
- platform: template - platform: template
name: "Humidity Offset" name: "Humidity Offset"
id: humidity_offset_setter id: humidity_offset_setter
min_value: -20 min_value: -50
max_value: 20 max_value: 50
step: 0.1 step: 0.1
lambda: |- lambda: |-
return id(humidity_offset); return id(humidity_offset);