mirror of
https://github.com/esphome/esphome.git
synced 2025-10-30 06:33:51 +00:00
Replace API deferred queue with efficient message batching system (#9012)
This commit is contained in:
55
tests/integration/fixtures/host_mode_batch_delay.yaml
Normal file
55
tests/integration/fixtures/host_mode_batch_delay.yaml
Normal file
@@ -0,0 +1,55 @@
|
||||
esphome:
|
||||
name: host-batch-delay-test
|
||||
host:
|
||||
api:
|
||||
batch_delay: 0ms
|
||||
logger:
|
||||
|
||||
# Add multiple sensors to test batching
|
||||
sensor:
|
||||
- platform: template
|
||||
name: "Test Sensor 1"
|
||||
id: test_sensor1
|
||||
lambda: |-
|
||||
return 1.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 2"
|
||||
id: test_sensor2
|
||||
lambda: |-
|
||||
return 2.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 3"
|
||||
id: test_sensor3
|
||||
lambda: |-
|
||||
return 3.0;
|
||||
update_interval: 0.1s
|
||||
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
name: "Test Binary Sensor 1"
|
||||
id: test_binary_sensor1
|
||||
lambda: |-
|
||||
return millis() % 1000 < 500;
|
||||
- platform: template
|
||||
name: "Test Binary Sensor 2"
|
||||
id: test_binary_sensor2
|
||||
lambda: |-
|
||||
return millis() % 2000 < 1000;
|
||||
|
||||
switch:
|
||||
- platform: template
|
||||
name: "Test Switch 1"
|
||||
id: test_switch1
|
||||
turn_on_action:
|
||||
- logger.log: "Switch 1 turned on"
|
||||
turn_off_action:
|
||||
- logger.log: "Switch 1 turned off"
|
||||
- platform: template
|
||||
name: "Test Switch 2"
|
||||
id: test_switch2
|
||||
turn_on_action:
|
||||
- logger.log: "Switch 2 turned on"
|
||||
turn_off_action:
|
||||
- logger.log: "Switch 2 turned off"
|
||||
322
tests/integration/fixtures/host_mode_many_entities.yaml
Normal file
322
tests/integration/fixtures/host_mode_many_entities.yaml
Normal file
@@ -0,0 +1,322 @@
|
||||
esphome:
|
||||
name: host-mode-many-entities
|
||||
friendly_name: "Host Mode Many Entities Test"
|
||||
|
||||
logger:
|
||||
|
||||
host:
|
||||
|
||||
api:
|
||||
|
||||
sensor:
|
||||
# 50 test sensors with predictable values for batching test
|
||||
- platform: template
|
||||
name: "Test Sensor 1"
|
||||
lambda: return 1.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 2"
|
||||
lambda: return 2.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 3"
|
||||
lambda: return 3.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 4"
|
||||
lambda: return 4.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 5"
|
||||
lambda: return 5.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 6"
|
||||
lambda: return 6.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 7"
|
||||
lambda: return 7.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 8"
|
||||
lambda: return 8.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 9"
|
||||
lambda: return 9.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 10"
|
||||
lambda: return 10.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 11"
|
||||
lambda: return 11.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 12"
|
||||
lambda: return 12.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 13"
|
||||
lambda: return 13.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 14"
|
||||
lambda: return 14.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 15"
|
||||
lambda: return 15.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 16"
|
||||
lambda: return 16.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 17"
|
||||
lambda: return 17.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 18"
|
||||
lambda: return 18.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 19"
|
||||
lambda: return 19.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 20"
|
||||
lambda: return 20.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 21"
|
||||
lambda: return 21.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 22"
|
||||
lambda: return 22.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 23"
|
||||
lambda: return 23.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 24"
|
||||
lambda: return 24.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 25"
|
||||
lambda: return 25.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 26"
|
||||
lambda: return 26.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 27"
|
||||
lambda: return 27.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 28"
|
||||
lambda: return 28.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 29"
|
||||
lambda: return 29.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 30"
|
||||
lambda: return 30.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 31"
|
||||
lambda: return 31.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 32"
|
||||
lambda: return 32.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 33"
|
||||
lambda: return 33.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 34"
|
||||
lambda: return 34.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 35"
|
||||
lambda: return 35.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 36"
|
||||
lambda: return 36.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 37"
|
||||
lambda: return 37.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 38"
|
||||
lambda: return 38.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 39"
|
||||
lambda: return 39.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 40"
|
||||
lambda: return 40.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 41"
|
||||
lambda: return 41.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 42"
|
||||
lambda: return 42.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 43"
|
||||
lambda: return 43.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 44"
|
||||
lambda: return 44.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 45"
|
||||
lambda: return 45.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 46"
|
||||
lambda: return 46.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 47"
|
||||
lambda: return 47.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 48"
|
||||
lambda: return 48.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 49"
|
||||
lambda: return 49.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 50"
|
||||
lambda: return 50.0;
|
||||
update_interval: 0.1s
|
||||
|
||||
# Mixed entity types for comprehensive batching test
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
name: "Test Binary Sensor 1"
|
||||
lambda: return millis() % 1000 < 500;
|
||||
- platform: template
|
||||
name: "Test Binary Sensor 2"
|
||||
lambda: return millis() % 2000 < 1000;
|
||||
|
||||
switch:
|
||||
- platform: template
|
||||
name: "Test Switch 1"
|
||||
lambda: return true;
|
||||
turn_on_action:
|
||||
- logger.log: "Switch 1 ON"
|
||||
turn_off_action:
|
||||
- logger.log: "Switch 1 OFF"
|
||||
- platform: template
|
||||
name: "Test Switch 2"
|
||||
lambda: return false;
|
||||
turn_on_action:
|
||||
- logger.log: "Switch 2 ON"
|
||||
turn_off_action:
|
||||
- logger.log: "Switch 2 OFF"
|
||||
|
||||
text_sensor:
|
||||
- platform: template
|
||||
name: "Test Text Sensor 1"
|
||||
lambda: return std::string("Test Value 1");
|
||||
- platform: template
|
||||
name: "Test Text Sensor 2"
|
||||
lambda: return std::string("Test Value 2");
|
||||
- platform: version
|
||||
name: "ESPHome Version"
|
||||
|
||||
number:
|
||||
- platform: template
|
||||
name: "Test Number"
|
||||
min_value: 0
|
||||
max_value: 100
|
||||
step: 1
|
||||
lambda: return 50.0;
|
||||
set_action:
|
||||
- logger.log: "Number set"
|
||||
|
||||
select:
|
||||
- platform: template
|
||||
name: "Test Select"
|
||||
options:
|
||||
- "Option 1"
|
||||
- "Option 2"
|
||||
initial_option: "Option 1"
|
||||
optimistic: true
|
||||
set_action:
|
||||
- logger.log: "Select changed"
|
||||
|
||||
text:
|
||||
- platform: template
|
||||
name: "Test Text"
|
||||
mode: text
|
||||
initial_value: "Hello"
|
||||
set_action:
|
||||
- logger.log: "Text changed"
|
||||
|
||||
valve:
|
||||
- platform: template
|
||||
name: "Test Valve"
|
||||
open_action:
|
||||
- logger.log: "Valve opening"
|
||||
close_action:
|
||||
- logger.log: "Valve closing"
|
||||
stop_action:
|
||||
- logger.log: "Valve stopping"
|
||||
|
||||
alarm_control_panel:
|
||||
- platform: template
|
||||
name: "Test Alarm"
|
||||
codes:
|
||||
- "1234"
|
||||
arming_away_time: 0s
|
||||
arming_home_time: 0s
|
||||
pending_time: 0s
|
||||
trigger_time: 300s
|
||||
restore_mode: ALWAYS_DISARMED
|
||||
on_disarmed:
|
||||
- logger.log: "Alarm disarmed"
|
||||
on_arming:
|
||||
- logger.log: "Alarm arming"
|
||||
on_armed_away:
|
||||
- logger.log: "Alarm armed away"
|
||||
on_armed_home:
|
||||
- logger.log: "Alarm armed home"
|
||||
on_pending:
|
||||
- logger.log: "Alarm pending"
|
||||
on_triggered:
|
||||
- logger.log: "Alarm triggered"
|
||||
|
||||
event:
|
||||
- platform: template
|
||||
name: "Test Event"
|
||||
event_types:
|
||||
- first_event
|
||||
- second_event
|
||||
|
||||
button:
|
||||
- platform: template
|
||||
name: "Test Button"
|
||||
on_press:
|
||||
- logger.log: "Button pressed"
|
||||
@@ -0,0 +1,136 @@
|
||||
esphome:
|
||||
name: host-mode-many-entities-multi
|
||||
friendly_name: "Host Mode Many Entities Multiple Connections Test"
|
||||
|
||||
logger:
|
||||
|
||||
host:
|
||||
|
||||
api:
|
||||
|
||||
sensor:
|
||||
# 20 test sensors for faster testing with multiple connections
|
||||
- platform: template
|
||||
name: "Test Sensor 1"
|
||||
lambda: return 1.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 2"
|
||||
lambda: return 2.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 3"
|
||||
lambda: return 3.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 4"
|
||||
lambda: return 4.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 5"
|
||||
lambda: return 5.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 6"
|
||||
lambda: return 6.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 7"
|
||||
lambda: return 7.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 8"
|
||||
lambda: return 8.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 9"
|
||||
lambda: return 9.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 10"
|
||||
lambda: return 10.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 11"
|
||||
lambda: return 11.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 12"
|
||||
lambda: return 12.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 13"
|
||||
lambda: return 13.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 14"
|
||||
lambda: return 14.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 15"
|
||||
lambda: return 15.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 16"
|
||||
lambda: return 16.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 17"
|
||||
lambda: return 17.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 18"
|
||||
lambda: return 18.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 19"
|
||||
lambda: return 19.0;
|
||||
update_interval: 0.1s
|
||||
- platform: template
|
||||
name: "Test Sensor 20"
|
||||
lambda: return 20.0;
|
||||
update_interval: 0.1s
|
||||
|
||||
# Mixed entity types for comprehensive batching test
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
name: "Test Binary Sensor 1"
|
||||
lambda: return millis() % 1000 < 500;
|
||||
- platform: template
|
||||
name: "Test Binary Sensor 2"
|
||||
lambda: return millis() % 2000 < 1000;
|
||||
|
||||
text_sensor:
|
||||
- platform: template
|
||||
name: "Test Text Sensor 1"
|
||||
lambda: return std::string("Test Value 1");
|
||||
- platform: template
|
||||
name: "Test Text Sensor 2"
|
||||
lambda: return std::string("Test Value 2");
|
||||
- platform: version
|
||||
name: "ESPHome Version"
|
||||
|
||||
switch:
|
||||
- platform: template
|
||||
name: "Test Switch 1"
|
||||
lambda: return true;
|
||||
turn_on_action:
|
||||
- logger.log: "Switch 1 ON"
|
||||
turn_off_action:
|
||||
- logger.log: "Switch 1 OFF"
|
||||
|
||||
button:
|
||||
- platform: template
|
||||
name: "Test Button"
|
||||
on_press:
|
||||
- logger.log: "Button pressed"
|
||||
|
||||
number:
|
||||
- platform: template
|
||||
name: "Test Number"
|
||||
min_value: 0
|
||||
max_value: 100
|
||||
step: 1
|
||||
lambda: return 50.0;
|
||||
set_action:
|
||||
- logger.log: "Number set"
|
||||
@@ -5,3 +5,46 @@ api:
|
||||
encryption:
|
||||
key: N4Yle5YirwZhPiHHsdZLdOA73ndj/84veVaLhTvxCuU=
|
||||
logger:
|
||||
|
||||
# Test sensors to verify batching works with noise encryption
|
||||
sensor:
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 1"
|
||||
lambda: return 1.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 2"
|
||||
lambda: return 2.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 3"
|
||||
lambda: return 3.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 4"
|
||||
lambda: return 4.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 5"
|
||||
lambda: return 5.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 6"
|
||||
lambda: return 6.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 7"
|
||||
lambda: return 7.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 8"
|
||||
lambda: return 8.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 9"
|
||||
lambda: return 9.0;
|
||||
update_interval: 2s
|
||||
- platform: template
|
||||
name: "Noise Test Sensor 10"
|
||||
lambda: return 10.0;
|
||||
update_interval: 2s
|
||||
|
||||
Reference in New Issue
Block a user