mirror of
https://github.com/esphome/esphome.git
synced 2025-11-18 07:45:56 +00:00
Merge branch 'ld24xx_mac_version_format' into integration
This commit is contained in:
2
.github/workflows/auto-label-pr.yml
vendored
2
.github/workflows/auto-label-pr.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
if: github.event.action != 'labeled' || github.event.sender.type != 'Bot'
|
if: github.event.action != 'labeled' || github.event.sender.type != 'Bot'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
|
|
||||||
- name: Generate a token
|
- name: Generate a token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
|
|||||||
2
.github/workflows/ci-api-proto.yml
vendored
2
.github/workflows/ci-api-proto.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||||
with:
|
with:
|
||||||
|
|||||||
2
.github/workflows/ci-clang-tidy-hash.yml
vendored
2
.github/workflows/ci-clang-tidy-hash.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||||
|
|||||||
2
.github/workflows/ci-docker.yml
vendored
2
.github/workflows/ci-docker.yml
vendored
@@ -43,7 +43,7 @@ jobs:
|
|||||||
- "docker"
|
- "docker"
|
||||||
# - "lint"
|
# - "lint"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Check out code from base repository
|
- name: Check out code from base repository
|
||||||
if: steps.pr.outputs.skip != 'true'
|
if: steps.pr.outputs.skip != 'true'
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
with:
|
with:
|
||||||
# Always check out from the base repository (esphome/esphome), never from forks
|
# Always check out from the base repository (esphome/esphome), never from forks
|
||||||
# Use the PR's target branch to ensure we run trusted code from the main repo
|
# Use the PR's target branch to ensure we run trusted code from the main repo
|
||||||
|
|||||||
30
.github/workflows/ci.yml
vendored
30
.github/workflows/ci.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
|||||||
cache-key: ${{ steps.cache-key.outputs.key }}
|
cache-key: ${{ steps.cache-key.outputs.key }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Generate cache-key
|
- name: Generate cache-key
|
||||||
id: cache-key
|
id: cache-key
|
||||||
run: echo key="${{ hashFiles('requirements.txt', 'requirements_test.txt', '.pre-commit-config.yaml') }}" >> $GITHUB_OUTPUT
|
run: echo key="${{ hashFiles('requirements.txt', 'requirements_test.txt', '.pre-commit-config.yaml') }}" >> $GITHUB_OUTPUT
|
||||||
@@ -70,7 +70,7 @@ jobs:
|
|||||||
if: needs.determine-jobs.outputs.python-linters == 'true'
|
if: needs.determine-jobs.outputs.python-linters == 'true'
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
with:
|
with:
|
||||||
@@ -91,7 +91,7 @@ jobs:
|
|||||||
- common
|
- common
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
with:
|
with:
|
||||||
@@ -132,7 +132,7 @@ jobs:
|
|||||||
- common
|
- common
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
id: restore-python
|
id: restore-python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
@@ -183,7 +183,7 @@ jobs:
|
|||||||
component-test-batches: ${{ steps.determine.outputs.component-test-batches }}
|
component-test-batches: ${{ steps.determine.outputs.component-test-batches }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
with:
|
with:
|
||||||
# Fetch enough history to find the merge base
|
# Fetch enough history to find the merge base
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
@@ -237,7 +237,7 @@ jobs:
|
|||||||
if: needs.determine-jobs.outputs.integration-tests == 'true'
|
if: needs.determine-jobs.outputs.integration-tests == 'true'
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Set up Python 3.13
|
- name: Set up Python 3.13
|
||||||
id: python
|
id: python
|
||||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||||
@@ -273,7 +273,7 @@ jobs:
|
|||||||
if: github.event_name == 'pull_request' && (needs.determine-jobs.outputs.cpp-unit-tests-run-all == 'true' || needs.determine-jobs.outputs.cpp-unit-tests-components != '[]')
|
if: github.event_name == 'pull_request' && (needs.determine-jobs.outputs.cpp-unit-tests-run-all == 'true' || needs.determine-jobs.outputs.cpp-unit-tests-components != '[]')
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
|
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
@@ -321,7 +321,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
with:
|
with:
|
||||||
# Need history for HEAD~1 to work for checking changed files
|
# Need history for HEAD~1 to work for checking changed files
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
@@ -400,7 +400,7 @@ jobs:
|
|||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
with:
|
with:
|
||||||
# Need history for HEAD~1 to work for checking changed files
|
# Need history for HEAD~1 to work for checking changed files
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
@@ -489,7 +489,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
with:
|
with:
|
||||||
# Need history for HEAD~1 to work for checking changed files
|
# Need history for HEAD~1 to work for checking changed files
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
@@ -577,7 +577,7 @@ jobs:
|
|||||||
version: 1.0
|
version: 1.0
|
||||||
|
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
with:
|
with:
|
||||||
@@ -662,7 +662,7 @@ jobs:
|
|||||||
if: github.event_name == 'pull_request' && !startsWith(github.base_ref, 'beta') && !startsWith(github.base_ref, 'release')
|
if: github.event_name == 'pull_request' && !startsWith(github.base_ref, 'beta') && !startsWith(github.base_ref, 'release')
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code from GitHub
|
- name: Check out code from GitHub
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
with:
|
with:
|
||||||
@@ -688,7 +688,7 @@ jobs:
|
|||||||
skip: ${{ steps.check-script.outputs.skip }}
|
skip: ${{ steps.check-script.outputs.skip }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out target branch
|
- name: Check out target branch
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.base_ref }}
|
ref: ${{ github.base_ref }}
|
||||||
|
|
||||||
@@ -840,7 +840,7 @@ jobs:
|
|||||||
flash_usage: ${{ steps.extract.outputs.flash_usage }}
|
flash_usage: ${{ steps.extract.outputs.flash_usage }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out PR branch
|
- name: Check out PR branch
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
with:
|
with:
|
||||||
@@ -908,7 +908,7 @@ jobs:
|
|||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Restore Python
|
- name: Restore Python
|
||||||
uses: ./.github/actions/restore-python
|
uses: ./.github/actions/restore-python
|
||||||
with:
|
with:
|
||||||
|
|||||||
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
@@ -54,7 +54,7 @@ jobs:
|
|||||||
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
|
|||||||
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
|||||||
branch_build: ${{ steps.tag.outputs.branch_build }}
|
branch_build: ${{ steps.tag.outputs.branch_build }}
|
||||||
deploy_env: ${{ steps.tag.outputs.deploy_env }}
|
deploy_env: ${{ steps.tag.outputs.deploy_env }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Get tag
|
- name: Get tag
|
||||||
id: tag
|
id: tag
|
||||||
# yamllint disable rule:line-length
|
# yamllint disable rule:line-length
|
||||||
@@ -60,7 +60,7 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
id-token: write
|
id-token: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||||
with:
|
with:
|
||||||
@@ -92,7 +92,7 @@ jobs:
|
|||||||
os: "ubuntu-24.04-arm"
|
os: "ubuntu-24.04-arm"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||||
with:
|
with:
|
||||||
@@ -168,7 +168,7 @@ jobs:
|
|||||||
- ghcr
|
- ghcr
|
||||||
- dockerhub
|
- dockerhub
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
|
|
||||||
- name: Download digests
|
- name: Download digests
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
|
|||||||
4
.github/workflows/sync-device-classes.yml
vendored
4
.github/workflows/sync-device-classes.yml
vendored
@@ -13,10 +13,10 @@ jobs:
|
|||||||
if: github.repository == 'esphome/esphome'
|
if: github.repository == 'esphome/esphome'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
|
|
||||||
- name: Checkout Home Assistant
|
- name: Checkout Home Assistant
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
|
||||||
with:
|
with:
|
||||||
repository: home-assistant/core
|
repository: home-assistant/core
|
||||||
path: lib/home-assistant
|
path: lib/home-assistant
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ namespace esphome {
|
|||||||
namespace ld2410 {
|
namespace ld2410 {
|
||||||
|
|
||||||
static const char *const TAG = "ld2410";
|
static const char *const TAG = "ld2410";
|
||||||
static const char *const UNKNOWN_MAC = "unknown";
|
|
||||||
static const char *const VERSION_FMT = "%u.%02X.%02X%02X%02X%02X";
|
|
||||||
|
|
||||||
enum BaudRate : uint8_t {
|
enum BaudRate : uint8_t {
|
||||||
BAUD_RATE_9600 = 1,
|
BAUD_RATE_9600 = 1,
|
||||||
@@ -181,15 +179,15 @@ static inline bool validate_header_footer(const uint8_t *header_footer, const ui
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LD2410Component::dump_config() {
|
void LD2410Component::dump_config() {
|
||||||
std::string mac_str =
|
char mac_s[18];
|
||||||
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
char version_s[20];
|
||||||
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
const char *mac_str = ld24xx::format_mac_str(this->mac_address_, mac_s);
|
||||||
this->version_[4], this->version_[3], this->version_[2]);
|
ld24xx::format_version_str(this->version_, version_s);
|
||||||
ESP_LOGCONFIG(TAG,
|
ESP_LOGCONFIG(TAG,
|
||||||
"LD2410:\n"
|
"LD2410:\n"
|
||||||
" Firmware version: %s\n"
|
" Firmware version: %s\n"
|
||||||
" MAC address: %s",
|
" MAC address: %s",
|
||||||
version.c_str(), mac_str.c_str());
|
version_s, mac_str);
|
||||||
#ifdef USE_BINARY_SENSOR
|
#ifdef USE_BINARY_SENSOR
|
||||||
ESP_LOGCONFIG(TAG, "Binary Sensors:");
|
ESP_LOGCONFIG(TAG, "Binary Sensors:");
|
||||||
LOG_BINARY_SENSOR(" ", "Target", this->target_binary_sensor_);
|
LOG_BINARY_SENSOR(" ", "Target", this->target_binary_sensor_);
|
||||||
@@ -448,12 +446,12 @@ bool LD2410Component::handle_ack_data_() {
|
|||||||
|
|
||||||
case CMD_QUERY_VERSION: {
|
case CMD_QUERY_VERSION: {
|
||||||
std::memcpy(this->version_, &this->buffer_data_[12], sizeof(this->version_));
|
std::memcpy(this->version_, &this->buffer_data_[12], sizeof(this->version_));
|
||||||
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
char version_s[20];
|
||||||
this->version_[4], this->version_[3], this->version_[2]);
|
ld24xx::format_version_str(this->version_, version_s);
|
||||||
ESP_LOGV(TAG, "Firmware version: %s", version.c_str());
|
ESP_LOGV(TAG, "Firmware version: %s", version_s);
|
||||||
#ifdef USE_TEXT_SENSOR
|
#ifdef USE_TEXT_SENSOR
|
||||||
if (this->version_text_sensor_ != nullptr) {
|
if (this->version_text_sensor_ != nullptr) {
|
||||||
this->version_text_sensor_->publish_state(version);
|
this->version_text_sensor_->publish_state(version_s);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
@@ -506,9 +504,9 @@ bool LD2410Component::handle_ack_data_() {
|
|||||||
std::memcpy(this->mac_address_, &this->buffer_data_[10], sizeof(this->mac_address_));
|
std::memcpy(this->mac_address_, &this->buffer_data_[10], sizeof(this->mac_address_));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string mac_str =
|
char mac_s[18];
|
||||||
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
const char *mac_str = ld24xx::format_mac_str(this->mac_address_, mac_s);
|
||||||
ESP_LOGV(TAG, "MAC address: %s", mac_str.c_str());
|
ESP_LOGV(TAG, "MAC address: %s", mac_str);
|
||||||
#ifdef USE_TEXT_SENSOR
|
#ifdef USE_TEXT_SENSOR
|
||||||
if (this->mac_text_sensor_ != nullptr) {
|
if (this->mac_text_sensor_ != nullptr) {
|
||||||
this->mac_text_sensor_->publish_state(mac_str);
|
this->mac_text_sensor_->publish_state(mac_str);
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ namespace esphome {
|
|||||||
namespace ld2412 {
|
namespace ld2412 {
|
||||||
|
|
||||||
static const char *const TAG = "ld2412";
|
static const char *const TAG = "ld2412";
|
||||||
static const char *const UNKNOWN_MAC = "unknown";
|
|
||||||
static const char *const VERSION_FMT = "%u.%02X.%02X%02X%02X%02X";
|
|
||||||
|
|
||||||
enum BaudRate : uint8_t {
|
enum BaudRate : uint8_t {
|
||||||
BAUD_RATE_9600 = 1,
|
BAUD_RATE_9600 = 1,
|
||||||
@@ -200,15 +198,15 @@ static inline bool validate_header_footer(const uint8_t *header_footer, const ui
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LD2412Component::dump_config() {
|
void LD2412Component::dump_config() {
|
||||||
std::string mac_str =
|
char mac_s[18];
|
||||||
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
char version_s[20];
|
||||||
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
const char *mac_str = ld24xx::format_mac_str(this->mac_address_, mac_s);
|
||||||
this->version_[4], this->version_[3], this->version_[2]);
|
ld24xx::format_version_str(this->version_, version_s);
|
||||||
ESP_LOGCONFIG(TAG,
|
ESP_LOGCONFIG(TAG,
|
||||||
"LD2412:\n"
|
"LD2412:\n"
|
||||||
" Firmware version: %s\n"
|
" Firmware version: %s\n"
|
||||||
" MAC address: %s",
|
" MAC address: %s",
|
||||||
version.c_str(), mac_str.c_str());
|
version_s, mac_str);
|
||||||
#ifdef USE_BINARY_SENSOR
|
#ifdef USE_BINARY_SENSOR
|
||||||
ESP_LOGCONFIG(TAG, "Binary Sensors:");
|
ESP_LOGCONFIG(TAG, "Binary Sensors:");
|
||||||
LOG_BINARY_SENSOR(" ", "DynamicBackgroundCorrectionStatus",
|
LOG_BINARY_SENSOR(" ", "DynamicBackgroundCorrectionStatus",
|
||||||
@@ -492,12 +490,12 @@ bool LD2412Component::handle_ack_data_() {
|
|||||||
|
|
||||||
case CMD_QUERY_VERSION: {
|
case CMD_QUERY_VERSION: {
|
||||||
std::memcpy(this->version_, &this->buffer_data_[12], sizeof(this->version_));
|
std::memcpy(this->version_, &this->buffer_data_[12], sizeof(this->version_));
|
||||||
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
char version_s[20];
|
||||||
this->version_[4], this->version_[3], this->version_[2]);
|
ld24xx::format_version_str(this->version_, version_s);
|
||||||
ESP_LOGV(TAG, "Firmware version: %s", version.c_str());
|
ESP_LOGV(TAG, "Firmware version: %s", version_s);
|
||||||
#ifdef USE_TEXT_SENSOR
|
#ifdef USE_TEXT_SENSOR
|
||||||
if (this->version_text_sensor_ != nullptr) {
|
if (this->version_text_sensor_ != nullptr) {
|
||||||
this->version_text_sensor_->publish_state(version);
|
this->version_text_sensor_->publish_state(version_s);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
@@ -544,9 +542,9 @@ bool LD2412Component::handle_ack_data_() {
|
|||||||
std::memcpy(this->mac_address_, &this->buffer_data_[10], sizeof(this->mac_address_));
|
std::memcpy(this->mac_address_, &this->buffer_data_[10], sizeof(this->mac_address_));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string mac_str =
|
char mac_s[18];
|
||||||
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
const char *mac_str = ld24xx::format_mac_str(this->mac_address_, mac_s);
|
||||||
ESP_LOGV(TAG, "MAC address: %s", mac_str.c_str());
|
ESP_LOGV(TAG, "MAC address: %s", mac_str);
|
||||||
#ifdef USE_TEXT_SENSOR
|
#ifdef USE_TEXT_SENSOR
|
||||||
if (this->mac_text_sensor_ != nullptr) {
|
if (this->mac_text_sensor_ != nullptr) {
|
||||||
this->mac_text_sensor_->publish_state(mac_str);
|
this->mac_text_sensor_->publish_state(mac_str);
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ namespace esphome {
|
|||||||
namespace ld2450 {
|
namespace ld2450 {
|
||||||
|
|
||||||
static const char *const TAG = "ld2450";
|
static const char *const TAG = "ld2450";
|
||||||
static const char *const UNKNOWN_MAC = "unknown";
|
|
||||||
static const char *const VERSION_FMT = "%u.%02X.%02X%02X%02X%02X";
|
|
||||||
|
|
||||||
enum BaudRate : uint8_t {
|
enum BaudRate : uint8_t {
|
||||||
BAUD_RATE_9600 = 1,
|
BAUD_RATE_9600 = 1,
|
||||||
@@ -192,15 +190,15 @@ void LD2450Component::setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LD2450Component::dump_config() {
|
void LD2450Component::dump_config() {
|
||||||
std::string mac_str =
|
char mac_s[18];
|
||||||
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
char version_s[20];
|
||||||
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
const char *mac_str = ld24xx::format_mac_str(this->mac_address_, mac_s);
|
||||||
this->version_[4], this->version_[3], this->version_[2]);
|
ld24xx::format_version_str(this->version_, version_s);
|
||||||
ESP_LOGCONFIG(TAG,
|
ESP_LOGCONFIG(TAG,
|
||||||
"LD2450:\n"
|
"LD2450:\n"
|
||||||
" Firmware version: %s\n"
|
" Firmware version: %s\n"
|
||||||
" MAC address: %s",
|
" MAC address: %s",
|
||||||
version.c_str(), mac_str.c_str());
|
version_s, mac_str);
|
||||||
#ifdef USE_BINARY_SENSOR
|
#ifdef USE_BINARY_SENSOR
|
||||||
ESP_LOGCONFIG(TAG, "Binary Sensors:");
|
ESP_LOGCONFIG(TAG, "Binary Sensors:");
|
||||||
LOG_BINARY_SENSOR(" ", "MovingTarget", this->moving_target_binary_sensor_);
|
LOG_BINARY_SENSOR(" ", "MovingTarget", this->moving_target_binary_sensor_);
|
||||||
@@ -642,12 +640,12 @@ bool LD2450Component::handle_ack_data_() {
|
|||||||
|
|
||||||
case CMD_QUERY_VERSION: {
|
case CMD_QUERY_VERSION: {
|
||||||
std::memcpy(this->version_, &this->buffer_data_[12], sizeof(this->version_));
|
std::memcpy(this->version_, &this->buffer_data_[12], sizeof(this->version_));
|
||||||
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
char version_s[20];
|
||||||
this->version_[4], this->version_[3], this->version_[2]);
|
ld24xx::format_version_str(this->version_, version_s);
|
||||||
ESP_LOGV(TAG, "Firmware version: %s", version.c_str());
|
ESP_LOGV(TAG, "Firmware version: %s", version_s);
|
||||||
#ifdef USE_TEXT_SENSOR
|
#ifdef USE_TEXT_SENSOR
|
||||||
if (this->version_text_sensor_ != nullptr) {
|
if (this->version_text_sensor_ != nullptr) {
|
||||||
this->version_text_sensor_->publish_state(version);
|
this->version_text_sensor_->publish_state(version_s);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
@@ -663,9 +661,9 @@ bool LD2450Component::handle_ack_data_() {
|
|||||||
std::memcpy(this->mac_address_, &this->buffer_data_[10], sizeof(this->mac_address_));
|
std::memcpy(this->mac_address_, &this->buffer_data_[10], sizeof(this->mac_address_));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string mac_str =
|
char mac_s[18];
|
||||||
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
const char *mac_str = ld24xx::format_mac_str(this->mac_address_, mac_s);
|
||||||
ESP_LOGV(TAG, "MAC address: %s", mac_str.c_str());
|
ESP_LOGV(TAG, "MAC address: %s", mac_str);
|
||||||
#ifdef USE_TEXT_SENSOR
|
#ifdef USE_TEXT_SENSOR
|
||||||
if (this->mac_text_sensor_ != nullptr) {
|
if (this->mac_text_sensor_ != nullptr) {
|
||||||
this->mac_text_sensor_->publish_state(mac_str);
|
this->mac_text_sensor_->publish_state(mac_str);
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "esphome/core/defines.h"
|
#include "esphome/core/defines.h"
|
||||||
|
#include "esphome/core/helpers.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <span>
|
||||||
|
|
||||||
#ifdef USE_SENSOR
|
#ifdef USE_SENSOR
|
||||||
#include "esphome/core/helpers.h"
|
|
||||||
#include "esphome/components/sensor/sensor.h"
|
#include "esphome/components/sensor/sensor.h"
|
||||||
|
|
||||||
#define SUB_SENSOR_WITH_DEDUP(name, dedup_type) \
|
#define SUB_SENSOR_WITH_DEDUP(name, dedup_type) \
|
||||||
@@ -39,6 +40,27 @@
|
|||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace ld24xx {
|
namespace ld24xx {
|
||||||
|
|
||||||
|
static const char *const UNKNOWN_MAC = "unknown";
|
||||||
|
static const char *const VERSION_FMT = "%u.%02X.%02X%02X%02X%02X";
|
||||||
|
|
||||||
|
// Helper function to format MAC address with stack allocation
|
||||||
|
// Returns pointer to UNKNOWN_MAC constant or formatted buffer
|
||||||
|
// Buffer must be exactly 18 bytes (17 for "XX:XX:XX:XX:XX:XX" + null terminator)
|
||||||
|
inline const char *format_mac_str(const uint8_t *mac_address, std::span<char, 18> buffer) {
|
||||||
|
if (mac_address_is_valid(mac_address)) {
|
||||||
|
format_mac_addr_upper(mac_address, buffer.data());
|
||||||
|
return buffer.data();
|
||||||
|
}
|
||||||
|
return UNKNOWN_MAC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function to format firmware version with stack allocation
|
||||||
|
// Buffer must be exactly 20 bytes (format: "x.xxXXXXXX" fits in 11 + null terminator, 20 for safety)
|
||||||
|
inline void format_version_str(const uint8_t *version, std::span<char, 20> buffer) {
|
||||||
|
snprintf(buffer.data(), buffer.size(), VERSION_FMT, version[1], version[0], version[5], version[4], version[3],
|
||||||
|
version[2]);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef USE_SENSOR
|
#ifdef USE_SENSOR
|
||||||
// Helper class to store a sensor with a deduplicator & publish state only when the value changes
|
// Helper class to store a sensor with a deduplicator & publish state only when the value changes
|
||||||
template<typename T> class SensorWithDedup {
|
template<typename T> class SensorWithDedup {
|
||||||
|
|||||||
@@ -336,6 +336,7 @@ CONF_ENERGY = "energy"
|
|||||||
CONF_ENTITY_CATEGORY = "entity_category"
|
CONF_ENTITY_CATEGORY = "entity_category"
|
||||||
CONF_ENTITY_ID = "entity_id"
|
CONF_ENTITY_ID = "entity_id"
|
||||||
CONF_ENUM_DATAPOINT = "enum_datapoint"
|
CONF_ENUM_DATAPOINT = "enum_datapoint"
|
||||||
|
CONF_ENVIRONMENT_VARIABLES = "environment_variables"
|
||||||
CONF_EQUATION = "equation"
|
CONF_EQUATION = "equation"
|
||||||
CONF_ESP8266_DISABLE_SSL_SUPPORT = "esp8266_disable_ssl_support"
|
CONF_ESP8266_DISABLE_SSL_SUPPORT = "esp8266_disable_ssl_support"
|
||||||
CONF_ESPHOME = "esphome"
|
CONF_ESPHOME = "esphome"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from esphome.const import (
|
|||||||
CONF_COMPILE_PROCESS_LIMIT,
|
CONF_COMPILE_PROCESS_LIMIT,
|
||||||
CONF_DEBUG_SCHEDULER,
|
CONF_DEBUG_SCHEDULER,
|
||||||
CONF_DEVICES,
|
CONF_DEVICES,
|
||||||
|
CONF_ENVIRONMENT_VARIABLES,
|
||||||
CONF_ESPHOME,
|
CONF_ESPHOME,
|
||||||
CONF_FRIENDLY_NAME,
|
CONF_FRIENDLY_NAME,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
@@ -215,6 +216,11 @@ CONFIG_SCHEMA = cv.All(
|
|||||||
cv.string_strict: cv.Any([cv.string], cv.string),
|
cv.string_strict: cv.Any([cv.string], cv.string),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
cv.Optional(CONF_ENVIRONMENT_VARIABLES, default={}): cv.Schema(
|
||||||
|
{
|
||||||
|
cv.string_strict: cv.string,
|
||||||
|
}
|
||||||
|
),
|
||||||
cv.Optional(CONF_ON_BOOT): automation.validate_automation(
|
cv.Optional(CONF_ON_BOOT): automation.validate_automation(
|
||||||
{
|
{
|
||||||
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StartupTrigger),
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StartupTrigger),
|
||||||
@@ -426,6 +432,12 @@ async def _add_platformio_options(pio_options):
|
|||||||
cg.add_platformio_option(key, val)
|
cg.add_platformio_option(key, val)
|
||||||
|
|
||||||
|
|
||||||
|
@coroutine_with_priority(CoroPriority.FINAL)
|
||||||
|
async def _add_environment_variables(env_vars: dict[str, str]) -> None:
|
||||||
|
# Set environment variables for the build process
|
||||||
|
os.environ.update(env_vars)
|
||||||
|
|
||||||
|
|
||||||
@coroutine_with_priority(CoroPriority.AUTOMATION)
|
@coroutine_with_priority(CoroPriority.AUTOMATION)
|
||||||
async def _add_automations(config):
|
async def _add_automations(config):
|
||||||
for conf in config.get(CONF_ON_BOOT, []):
|
for conf in config.get(CONF_ON_BOOT, []):
|
||||||
@@ -563,6 +575,9 @@ async def to_code(config: ConfigType) -> None:
|
|||||||
if config[CONF_PLATFORMIO_OPTIONS]:
|
if config[CONF_PLATFORMIO_OPTIONS]:
|
||||||
CORE.add_job(_add_platformio_options, config[CONF_PLATFORMIO_OPTIONS])
|
CORE.add_job(_add_platformio_options, config[CONF_PLATFORMIO_OPTIONS])
|
||||||
|
|
||||||
|
if config[CONF_ENVIRONMENT_VARIABLES]:
|
||||||
|
CORE.add_job(_add_environment_variables, config[CONF_ENVIRONMENT_VARIABLES])
|
||||||
|
|
||||||
# Process areas
|
# Process areas
|
||||||
all_areas: list[dict[str, str | core.ID]] = []
|
all_areas: list[dict[str, str | core.ID]] = []
|
||||||
if CONF_AREA in config:
|
if CONF_AREA in config:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ aioesphomeapi==42.7.0
|
|||||||
zeroconf==0.148.0
|
zeroconf==0.148.0
|
||||||
puremagic==1.30
|
puremagic==1.30
|
||||||
ruamel.yaml==0.18.16 # dashboard_import
|
ruamel.yaml==0.18.16 # dashboard_import
|
||||||
ruamel.yaml.clib==0.2.14 # dashboard_import
|
ruamel.yaml.clib==0.2.15 # dashboard_import
|
||||||
esphome-glyphsets==0.2.0
|
esphome-glyphsets==0.2.0
|
||||||
pillow==11.3.0
|
pillow==11.3.0
|
||||||
cairosvg==2.8.2
|
cairosvg==2.8.2
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ esphome:
|
|||||||
debug_scheduler: true
|
debug_scheduler: true
|
||||||
platformio_options:
|
platformio_options:
|
||||||
board_build.flash_mode: dio
|
board_build.flash_mode: dio
|
||||||
|
environment_variables:
|
||||||
|
TEST_ENV_VAR: "test_value"
|
||||||
|
BUILD_NUMBER: "12345"
|
||||||
area:
|
area:
|
||||||
id: testing_area
|
id: testing_area
|
||||||
name: Testing Area
|
name: Testing Area
|
||||||
|
|||||||
Reference in New Issue
Block a user