Compare commits

...

7 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
b9e92cd46e Try explicit stops instead 2025-10-08 22:46:17 -04:00
23e5caf13a Disable dummy speaker
This is causing way too many issues with crashes and unexplained
behaviour especially on 32D units.
2025-10-08 22:46:17 -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:
@@ -413,13 +408,13 @@ i2s_audio:
number: GPIO17 # WS
i2s_bclk_pin:
number: GPIO16 # SCK
# Dummy I2S audio pipeline for "speaker"
- id: i2s_dummy
i2s_lrclk_pin:
number: GPIO15 # WS
ignore_strapping_warning: true # This isn't connected to anything anyways
i2s_bclk_pin:
number: GPIO14 # SCK
# # Dummy I2S audio pipeline for "speaker"
# - id: i2s_dummy
# i2s_lrclk_pin:
# number: GPIO15 # WS
# ignore_strapping_warning: true # This isn't connected to anything anyways
# i2s_bclk_pin:
# number: GPIO14 # SCK
microphone:
- platform: i2s_audio
@@ -430,23 +425,23 @@ microphone:
pdm: false
channel: left
speaker:
# Dummy speaker to fix home-assistant/core#142363
- platform: i2s_audio
id: dummy_speaker
i2s_audio_id: i2s_dummy
i2s_dout_pin: GPIO25
dac_type: external
bits_per_sample: 16bit
sample_rate: 16000
channel: mono #mono will have bad performance, however, we are not using the on device speaker
buffer_duration: 60ms
#speaker:
# # Dummy speaker to fix home-assistant/core#142363
# - platform: i2s_audio
# id: dummy_speaker
# i2s_audio_id: i2s_dummy
# i2s_dout_pin: GPIO25
# dac_type: external
# bits_per_sample: 16bit
# sample_rate: 16000
# channel: mono #mono will have bad performance, however, we are not using the on device speaker
# buffer_duration: 60ms
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
@@ -473,7 +468,7 @@ micro_wake_word:
voice_assistant:
id: va
microphone: mic
speaker: dummy_speaker
# speaker: dummy_speaker
micro_wake_word: mww
use_wake_word: false
noise_suppression_level: 3
@@ -518,6 +513,7 @@ voice_assistant:
red: 1
green: 0
blue: 0
- voice_assistant.stop:
else:
- logger.log: "Command successful!"
- light.turn_on:
@@ -527,6 +523,10 @@ voice_assistant:
red: 0
green: 1
blue: 0
- voice_assistant.stop:
on_tts_end:
- logger.log: "Finished STT result"
- voice_assistant.stop:
light:
- platform: rgb
@@ -551,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:
@@ -688,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
@@ -781,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
@@ -831,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"
@@ -992,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
@@ -1008,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);