Skip to content

Conversation

johnzielke
Copy link

@johnzielke johnzielke commented Jul 4, 2025

Add info on how multiple meters can be read using a single HardwareSerial UART.

Description:

Related issue (if applicable): fixes

Pull request in esphome with YAML changes (if applicable):

  • esphome/esphome#

Checklist:

  • I am merging into next because this is new documentation that has a matching pull-request in esphome as linked above.
    or

  • I am merging into current because this is a fix, change and/or adjustment in the current documentation and is not for a new component or feature.

  • Link added in /components/index.rst when creating new documents for new components or cookbook.

Add info on how multiple meters can be read using a single HardwareSerial UART.
@johnzielke johnzielke changed the base branch from current to next July 4, 2025 05:16
@probot-esphome probot-esphome bot added next and removed current labels Jul 4, 2025
@johnzielke johnzielke changed the base branch from next to current July 4, 2025 05:16
@probot-esphome probot-esphome bot added current and removed next labels Jul 4, 2025
Copy link

netlify bot commented Jul 4, 2025

Deploy Preview for esphome ready!

Name Link
🔨 Latest commit 8f6dc5a
🔍 Latest deploy log https://app.netlify.com/projects/esphome/deploys/68bee13a703c700008cd6569
😎 Deploy Preview https://deploy-preview-5062--esphome.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Contributor

coderabbitai bot commented Jul 4, 2025

Caution

Review failed

An error occurred during the review process. Please try again later.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
components/sml.rst (2)

227-233: Minor wording & punctuation tweaks improve clarity

Consider tightening the phrasing and fixing the “more than 2” → “more than two” style nit. It reads more naturally in docs and is consistent with the rest of the page.


259-282: Duplicate sensor filter blocks – consider extracting comment

Both sensor definitions share identical filters. To keep the sample concise:

filters:
  - multiply: 0.0001  # applies to both meters

You can mention once in a comment that both sensors need the same scaling.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 74fc2db and 4fd54f2.

📒 Files selected for processing (1)
  • components/sml.rst (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**`: - Do not generate or add any sequence diagrams

**: - Do not generate or add any sequence diagrams

⚙️ Source: CodeRabbit Configuration File

List of files the instruction was applied to:

  • components/sml.rst
🧠 Learnings (1)
📓 Common learnings
Learnt from: jesserockz
PR: esphome/esphome-docs#4865
File: .github/workflows/needs-docs.yml:0-0
Timestamp: 2025-05-01T03:29:47.922Z
Learning: In the esphome-docs repository, the "current" label is automatically added by a bot to pull requests, making it a reliable indicator for the target branch.
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Check
  • GitHub Check: build
🔇 Additional comments (1)
components/sml.rst (1)

246-258: Verify load_settings(true) – API may have changed

UARTComponent::load_settings() in ESPHome currently takes no arguments (it reloads pins & parity automatically). Passing true could break compilation for users who paste this snippet verbatim.

Please double-check against the current ESPHome API and adjust if needed, e.g.:

id(uart_multiplexed).load_settings();

If an argument is indeed required, add a short explanation.

Comment on lines 236 to 245
uart:
- baud_rate: 9600
data_bits: 8
rx_pin:
number: 17 # Set to the first of the GPIO pins
id: uart_multiplex_rx_pin
stop_bits: 1
rx_buffer_size: 512
id: uart_multiplexed

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

YAML indentation & trailing-space issues will break copy-paste usage

The example block contains:

  • Trailing spaces after uart: (line 236) – these are rendered in the docs and copy-paste ends up with an invalid key.
  • List indentation is off (list items should be indented two spaces under the key).
    Current indentation confuses YAML linters and ESPHome rejects the config.

Proposed fix:

-    uart:    
-     - baud_rate: 9600
-       data_bits: 8
-       rx_pin: 
-        number: 17 # Set to the first of the GPIO pins
-        id: uart_multiplex_rx_pin
-       stop_bits: 1
-       rx_buffer_size: 512
-       id: uart_multiplexed
+  uart:
+    - baud_rate: 9600
+      data_bits: 8
+      rx_pin:
+        number: 17  # first GPIO pin
+        id: uart_multiplex_rx_pin
+      stop_bits: 1
+      rx_buffer_size: 512
+      id: uart_multiplexed
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
uart:
- baud_rate: 9600
data_bits: 8
rx_pin:
number: 17 # Set to the first of the GPIO pins
id: uart_multiplex_rx_pin
stop_bits: 1
rx_buffer_size: 512
id: uart_multiplexed
uart:
- baud_rate: 9600
data_bits: 8
rx_pin:
number: 17 # first GPIO pin
id: uart_multiplex_rx_pin
stop_bits: 1
rx_buffer_size: 512
id: uart_multiplexed
🤖 Prompt for AI Agents
In components/sml.rst around lines 236 to 245, fix the YAML indentation by
removing trailing spaces after the key 'uart:' and ensure list items under
'uart:' are indented exactly two spaces. Adjust the nested keys accordingly to
conform to proper YAML structure so that linters and ESPHome accept the
configuration without errors.

Copy link

github-actions bot commented Sep 7, 2025

There hasn't been any activity on this pull request recently. This pull request has been automatically marked as stale because of that and will be closed if no further activity occurs within 7 days. Thank you for your contributions.

@github-actions github-actions bot added the stale label Sep 7, 2025
@johnzielke johnzielke changed the base branch from current to next September 8, 2025 13:45
@esphome esphome bot added next and removed current labels Sep 8, 2025
@johnzielke
Copy link
Author

@jesserockz Is there any interest in merging something like this? Or should I close this and post it somewhere else outside of the official esphome docs?

@Copilot Copilot AI review requested due to automatic review settings September 8, 2025 13:55
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds documentation for reading multiple SML meters using UART multiplexing when the controller has insufficient UARTs. It provides a practical solution for users who need to connect more than two meters to an ESP32.

  • Adds a new "Reading multiple meters" section explaining UART multiplexing concept
  • Provides a complete YAML configuration example showing how to switch between meters
  • Includes sensor definitions for multiple meters with different server IDs

Comment on lines 222 to 260
.. code-block:: yaml

uart:
- baud_rate: 9600
data_bits: 8
rx_pin:
number: GPIO17 # Set to the first of the GPIO pins in multiplex_pins
id: uart_multiplex_rx_pin
stop_bits: 1
rx_buffer_size: 512
id: uart_multiplexed

sml:
- id: sml_multiplexed
uart_id: uart_multiplexed
on_data:
- lambda: |-
std::vector<gpio_num_t> multiplex_pins = {::GPIO_NUM_17,::GPIO_NUM_19};
static size_t current_index = 0;
current_index = (current_index + 1) % multiplex_pins.size();
gpio_num_t new_rx_pin = multiplex_pins[current_index];
id(uart_multiplex_rx_pin).set_pin(new_rx_pin);
id(uart_multiplexed).load_settings(true);

sensor:
- platform: sml
name: "Solar Roof"
sml_id: sml_multiplexed
server_id: "12345ab" # IMPORTANT! Set the correct server id
obis_code: "1-0:2.8.0"

- platform: sml
name: "Solar Carport"
sml_id: sml_multiplexed
server_id: "67890cd" # IMPORTANT! Set the correct server id
obis_code: "1-0:2.8.0"



Copy link
Preview

Copilot AI Sep 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code block should use yaml syntax highlighting instead of the reStructuredText .. code-block:: yaml directive. This file uses Markdown format, so it should use triple backticks with yaml language identifier: ```yaml

Suggested change
.. code-block:: yaml
uart:
- baud_rate: 9600
data_bits: 8
rx_pin:
number: GPIO17 # Set to the first of the GPIO pins in multiplex_pins
id: uart_multiplex_rx_pin
stop_bits: 1
rx_buffer_size: 512
id: uart_multiplexed
sml:
- id: sml_multiplexed
uart_id: uart_multiplexed
on_data:
- lambda: |-
std::vector<gpio_num_t> multiplex_pins = {::GPIO_NUM_17,::GPIO_NUM_19};
static size_t current_index = 0;
current_index = (current_index + 1) % multiplex_pins.size();
gpio_num_t new_rx_pin = multiplex_pins[current_index];
id(uart_multiplex_rx_pin).set_pin(new_rx_pin);
id(uart_multiplexed).load_settings(true);
sensor:
- platform: sml
name: "Solar Roof"
sml_id: sml_multiplexed
server_id: "12345ab" # IMPORTANT! Set the correct server id
obis_code: "1-0:2.8.0"
- platform: sml
name: "Solar Carport"
sml_id: sml_multiplexed
server_id: "67890cd" # IMPORTANT! Set the correct server id
obis_code: "1-0:2.8.0"
```yaml
uart:
- baud_rate: 9600
data_bits: 8
rx_pin:
number: GPIO17 # Set to the first of the GPIO pins in multiplex_pins
id: uart_multiplex_rx_pin
stop_bits: 1
rx_buffer_size: 512
id: uart_multiplexed
sml:
- id: sml_multiplexed
uart_id: uart_multiplexed
on_data:
- lambda: |-
std::vector<gpio_num_t> multiplex_pins = {::GPIO_NUM_17,::GPIO_NUM_19};
static size_t current_index = 0;
current_index = (current_index + 1) % multiplex_pins.size();
gpio_num_t new_rx_pin = multiplex_pins[current_index];
id(uart_multiplex_rx_pin).set_pin(new_rx_pin);
id(uart_multiplexed).load_settings(true);
sensor:
- platform: sml
name: "Solar Roof"
sml_id: sml_multiplexed
server_id: "12345ab" # IMPORTANT! Set the correct server id
obis_code: "1-0:2.8.0"
- platform: sml
name: "Solar Carport"
sml_id: sml_multiplexed
server_id: "67890cd" # IMPORTANT! Set the correct server id
obis_code: "1-0:2.8.0"

Copilot uses AI. Check for mistakes.

obis_code: "1-0:2.8.0"



Copy link
Preview

Copilot AI Sep 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove the extra blank lines at the end of the new section. Only one blank line is needed before the next section.

Suggested change

Copilot uses AI. Check for mistakes.

@johnzielke johnzielke changed the base branch from next to current September 8, 2025 14:00
@esphome esphome bot added current and removed next labels Sep 8, 2025
@johnzielke johnzielke closed this Sep 8, 2025
@johnzielke
Copy link
Author

Reopened in new format in #5341

@github-actions github-actions bot locked and limited conversation to collaborators Sep 10, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants