1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-12 14:53:49 +01:00

add modbus

This commit is contained in:
J. Nick Koston
2025-10-09 11:38:50 -10:00
parent 9418bbeefc
commit aa31c9ee59
43 changed files with 184 additions and 42 deletions

View File

@@ -40,6 +40,14 @@ from esphome.config_helpers import Extend, Remove
# Path to common bus configs
COMMON_BUS_PATH = Path("tests/test_build_components/common")
# Package dependencies - maps packages to the packages they include
# When a component uses a package on the left, it automatically gets
# the packages on the right as well
PACKAGE_DEPENDENCIES = {
"modbus": ["uart"], # modbus packages include uart packages
# Add more package dependencies here as needed
}
# Components that must be tested in isolation (not grouped or batched with others)
# These have known build issues that prevent grouping
# NOTE: This should be kept in sync with both test_build_components and split_components_for_ci.py
@@ -208,6 +216,11 @@ def analyze_yaml_file(yaml_file: Path) -> dict[str, Any]:
for pkg_name in packages:
if pkg_name in valid_buses:
result["buses"].add(pkg_name)
# Add any package dependencies (e.g., modbus includes uart)
if pkg_name in PACKAGE_DEPENDENCIES:
for dep in PACKAGE_DEPENDENCIES[pkg_name]:
if dep in valid_buses:
result["buses"].add(dep)
return result

View File

@@ -26,7 +26,7 @@ sys.path.insert(0, str(Path(__file__).parent.parent))
from esphome import yaml_util
from esphome.config_helpers import merge_config
from script.analyze_component_buses import get_common_bus_packages
from script.analyze_component_buses import PACKAGE_DEPENDENCIES, get_common_bus_packages
def load_yaml_file(yaml_file: Path) -> dict:
@@ -68,6 +68,13 @@ def extract_packages_from_yaml(data: dict) -> dict[str, str]:
# Only include common bus packages, ignore component-specific ones
if name in common_bus_packages:
packages[name] = str(value)
# Also track package dependencies (e.g., modbus includes uart)
# This ensures components using modbus are grouped with uart
if name in PACKAGE_DEPENDENCIES:
for dep in PACKAGE_DEPENDENCIES[name]:
if dep in common_bus_packages:
# Mark as included via dependency
packages[f"_dep_{dep}"] = f"(included via {name})"
return packages

View File

@@ -1,8 +1,6 @@
modbus:
flow_control_pin: ${flow_control_pin}
sensor:
- platform: growatt_solar
modbus_id: modbus_bus
update_interval: 10s
protocol_version: RTU
inverter_status:

View File

@@ -1,6 +1,6 @@
substitutions:
flow_control_pin: GPIO3
packages:
uart: !include ../../test_build_components/common/uart/esp32-c3-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-c3-idf.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO13
packages:
uart: !include ../../test_build_components/common/uart/esp32-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO15
packages:
uart: !include ../../test_build_components/common/uart/esp8266-ard.yaml
modbus: !include ../../test_build_components/common/modbus/esp8266-ard.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO3
packages:
uart: !include ../../test_build_components/common/uart/rp2040-ard.yaml
modbus: !include ../../test_build_components/common/modbus/rp2040-ard.yaml
<<: !include common.yaml

View File

@@ -1,8 +1,6 @@
modbus:
flow_control_pin: ${flow_control_pin}
sensor:
- platform: havells_solar
modbus_id: modbus_bus
update_interval: 60s
phase_a:
voltage:

View File

@@ -1,6 +1,6 @@
substitutions:
flow_control_pin: GPIO3
packages:
uart: !include ../../test_build_components/common/uart/esp32-c3-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-c3-idf.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO13
packages:
uart: !include ../../test_build_components/common/uart/esp32-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO15
packages:
uart: !include ../../test_build_components/common/uart/esp8266-ard.yaml
modbus: !include ../../test_build_components/common/modbus/esp8266-ard.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO3
packages:
uart: !include ../../test_build_components/common/uart/rp2040-ard.yaml
modbus: !include ../../test_build_components/common/modbus/rp2040-ard.yaml
<<: !include common.yaml

View File

@@ -1,8 +1,6 @@
modbus:
flow_control_pin: ${flow_control_pin}
sensor:
- platform: kuntze
modbus_id: modbus_bus
ph:
name: Kuntze pH
temperature:

View File

@@ -1,6 +1,6 @@
substitutions:
flow_control_pin: GPIO3
packages:
uart: !include ../../test_build_components/common/uart/esp32-c3-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-c3-idf.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO13
packages:
uart: !include ../../test_build_components/common/uart/esp32-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO15
packages:
uart: !include ../../test_build_components/common/uart/esp8266-ard.yaml
modbus: !include ../../test_build_components/common/modbus/esp8266-ard.yaml
<<: !include common.yaml

View File

@@ -4,6 +4,6 @@ substitutions:
flow_control_pin: GPIO3
packages:
uart: !include ../../test_build_components/common/uart/rp2040-ard.yaml
modbus: !include ../../test_build_components/common/modbus/rp2040-ard.yaml
<<: !include common.yaml

View File

@@ -3,12 +3,9 @@ esphome:
then:
- pzemac.reset_energy: pzemac1
modbus:
- id: pzemac_modbus
sensor:
- platform: pzemac
modbus_id: pzemac_modbus
modbus_id: modbus_bus
id: pzemac1
voltage:
name: PZEMAC Voltage

View File

@@ -1,5 +1,5 @@
substitutions:
packages:
uart: !include ../../test_build_components/common/uart/esp32-c3-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-c3-idf.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO5
packages:
uart: !include ../../test_build_components/common/uart/esp32-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO2
packages:
uart: !include ../../test_build_components/common/uart/esp8266-ard.yaml
modbus: !include ../../test_build_components/common/modbus/esp8266-ard.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO5
packages:
uart: !include ../../test_build_components/common/uart/rp2040-ard.yaml
modbus: !include ../../test_build_components/common/modbus/rp2040-ard.yaml
<<: !include common.yaml

View File

@@ -3,12 +3,9 @@ esphome:
then:
- pzemdc.reset_energy: pzemdc1
modbus:
- id: pzemdc_modbus
sensor:
- platform: pzemdc
modbus_id: pzemdc_modbus
modbus_id: modbus_bus
id: pzemdc1
voltage:
name: PZEMDC Voltage

View File

@@ -1,5 +1,5 @@
substitutions:
packages:
uart: !include ../../test_build_components/common/uart/esp32-c3-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-c3-idf.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO5
packages:
uart: !include ../../test_build_components/common/uart/esp32-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO2
packages:
uart: !include ../../test_build_components/common/uart/esp8266-ard.yaml
modbus: !include ../../test_build_components/common/modbus/esp8266-ard.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO5
packages:
uart: !include ../../test_build_components/common/uart/rp2040-ard.yaml
modbus: !include ../../test_build_components/common/modbus/rp2040-ard.yaml
<<: !include common.yaml

View File

@@ -1,5 +1,6 @@
sensor:
- platform: sdm_meter
modbus_id: modbus_bus
phase_a:
current:
name: Phase A Current

View File

@@ -1,5 +1,5 @@
substitutions:
packages:
uart: !include ../../test_build_components/common/uart/esp32-c3-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-c3-idf.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO5
packages:
uart: !include ../../test_build_components/common/uart/esp32-idf.yaml
modbus: !include ../../test_build_components/common/modbus/esp32-idf.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO2
packages:
uart: !include ../../test_build_components/common/uart/esp8266-ard.yaml
modbus: !include ../../test_build_components/common/modbus/esp8266-ard.yaml
<<: !include common.yaml

View File

@@ -3,6 +3,6 @@ substitutions:
rx_pin: GPIO5
packages:
uart: !include ../../test_build_components/common/uart/rp2040-ard.yaml
modbus: !include ../../test_build_components/common/modbus/rp2040-ard.yaml
<<: !include common.yaml

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for BK72XX Arduino tests
packages:
uart: !include ../uart/bk72xx-ard.yaml
substitutions:
flow_control_pin: P6
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP32 Arduino tests
packages:
uart: !include ../uart/esp32-ard.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP32-C3 Arduino tests
packages:
uart: !include ../uart/esp32-c3-ard.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP32-C3 IDF tests
packages:
uart: !include ../uart/esp32-c3-idf.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,13 @@
# Common Modbus configuration for ESP32 IDF tests
# Provides a shared Modbus bus that all components can use
packages:
uart: !include ../uart/esp32-idf.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP32-S2 Arduino tests
packages:
uart: !include ../uart/esp32-s2-ard.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP32-S2 IDF tests
packages:
uart: !include ../uart/esp32-s2-idf.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP32-S3 Arduino tests
packages:
uart: !include ../uart/esp32-s3-ard.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP32-S3 IDF tests
packages:
uart: !include ../uart/esp32-s3-idf.yaml
substitutions:
flow_control_pin: GPIO4
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for ESP8266 Arduino tests
packages:
uart: !include ../uart/esp8266-ard.yaml
substitutions:
flow_control_pin: GPIO5
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}

View File

@@ -0,0 +1,12 @@
# Common Modbus configuration for RP2040 Arduino tests
packages:
uart: !include ../uart/rp2040-ard.yaml
substitutions:
flow_control_pin: GPIO2
modbus:
- id: modbus_bus
uart_id: uart_bus
flow_control_pin: ${flow_control_pin}