mirror of
https://github.com/esphome/esphome.git
synced 2025-11-20 00:35:44 +00:00
Major refactoring to address memory efficiency, advertisement cycling,
and immediate advertising support:
**Use FixedVector instead of std::vector:**
- Replace std::vector with FixedVector for measurements storage
- Initialize with exact sizes determined from configuration
- Eliminates STL reallocation overhead and reduces flash usage
- Uses runtime-sized FixedVector allocated once in setup()
**Config key changes:**
- Use `sensors` and `binary_sensors` (plurals) for consistency
- Matches ESPHome conventions for sensor arrays
**Advertisement size management and cycling:**
- Calculate max advertisement size (31 bytes total, minus overhead)
- Split measurements across multiple packets if they don't fit
- Automatically cycle through packets on each advertising interval
- Ensures all sensors get advertised even with many measurements
- Overhead: 8 bytes unencrypted, 16 bytes encrypted
**Immediate advertising support:**
- Add `advertise_immediately` option for sensors/binary_sensors
- When enabled, triggers immediate advertisement on state change
- Interrupts normal advertising cycle to send only that sensor
- Resumes normal cycle after immediate advertisement
- Perfect for motion sensors, door sensors, or critical alerts
**Implementation details:**
- Refactored encode functions to use raw pointers and calculate sizes
- Build multiple advertisement packets as needed
- Track current packet index for cycling
- Handle immediate advertising with separate packet building path
- Proper encryption handling with per-packet counters
Example configuration:
```yaml
bthome:
sensors:
- type: temperature
id: room_temp
- type: humidity
id: room_humidity
binary_sensors:
- type: motion
id: pir_sensor
advertise_immediately: true # Instant notification
- type: door
id: front_door
advertise_immediately: true
```
20 lines
385 B
YAML
20 lines
385 B
YAML
sensor:
|
|
- platform: template
|
|
id: test_temperature
|
|
name: "Test Temperature"
|
|
|
|
binary_sensor:
|
|
- platform: template
|
|
id: test_motion
|
|
name: "Test Motion"
|
|
|
|
bthome:
|
|
encryption_key: "231d39c1d7cc1ab1aee224cd096db932"
|
|
sensors:
|
|
- type: temperature
|
|
id: test_temperature
|
|
advertise_immediately: true
|
|
binary_sensors:
|
|
- type: motion
|
|
id: test_motion
|