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
initial_value: '"mww_computer"'
- id: light_is_holding
type: bool
restore_value: no
initial_value: 'false'
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
then:
if:
condition:
- binary_sensor.is_on: supersensor_occupancy
- switch.is_on: enable_presence_led
then:
- light.turn_on:
id: output_led
brightness: 25%
red: 1
green: 1
blue: 1
transition_length: 1s
else:
- light.turn_off:
id: output_led
transition_length: 1s
- if:
condition:
lambda: 'return !id(light_is_holding);'
then:
- if:
condition:
- binary_sensor.is_on: supersensor_occupancy
- switch.is_on: enable_presence_led
then:
- light.turn_on:
id: output_led
brightness: 25%
red: 1
green: 1
blue: 1
transition_length: 1s
else:
- light.turn_off:
id: output_led
transition_length: 1s
- id: pir_handler
then:
@@ -446,7 +441,7 @@ micro_wake_word:
id: mww
microphone:
microphone: mic
gain_factor: 64
gain_factor: 2
stop_after_detection: false
models:
- model: github://joshuaboniface/Custom_V2_MicroWakeWords/models/computer/computer.json
@@ -556,7 +551,13 @@ light:
- automation:
name: hold
sequence:
- globals.set:
id: light_is_holding
value: "true"
- delay: 5s
- globals.set:
id: light_is_holding
value: "false"
- script.execute: light_off
output:
@@ -693,6 +694,20 @@ sensor:
id: sht45_humidity
accuracy_decimals: 1
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);
- sliding_window_moving_average:
window_size: 20
@@ -786,8 +801,8 @@ sensor:
- platform: tsl2591
address: 0x29
update_interval: 1s
integration_time: 200ms
update_interval: 2s
integration_time: 600ms
power_save_mode: no
gain: auto
device_factor: 53
@@ -836,7 +851,7 @@ binary_sensor:
device_class: occupancy
on_state:
then:
- script.execute: presence_light_on
- script.execute: light_off
- platform: gpio
name: "PIR GPIO"
@@ -997,7 +1012,7 @@ switch:
number:
# Temperature offset:
# A calibration from -30 to +5 for the temperature sensor
# A calibration from -30 to +10 for the temperature sensor
- platform: template
name: "Temperature Offset"
id: temperature_offset_setter
@@ -1013,12 +1028,12 @@ number:
value: !lambda 'return float(x);'
# Humidity offset:
# A calibration from -20 to +20 for the humidity sensor
# A calibration from -50 to +50 for the humidity sensor
- platform: template
name: "Humidity Offset"
id: humidity_offset_setter
min_value: -20
max_value: 20
min_value: -50
max_value: 50
step: 0.1
lambda: |-
return id(humidity_offset);