diff --git a/.github/workflows/validate_esphome.yml b/.github/workflows/validate_esphome.yml index 2388c43..a516df5 100644 --- a/.github/workflows/validate_esphome.yml +++ b/.github/workflows/validate_esphome.yml @@ -1,6 +1,10 @@ --- name: Validate ESPHome (Latest) +permissions: + contents: read + pull-requests: read + on: # yamllint disable-line rule:truthy workflow_dispatch: @@ -27,36 +31,234 @@ jobs: - name: Validate YAML files run: find . -name "*.yaml" -exec yamllint -c ./.rules/yamllint.yml {} + - build_basic: - name: Basic + build_ard_core: + name: Core (Arduino) + needs: code_scan runs-on: ubuntu-latest steps: - uses: actions/checkout@main - - name: Build core + - name: Build Core (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_core.yaml" + version: latest + + build_idf_core: + name: Core (IDF) + needs: code_scan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Core (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_core.yaml" + version: latest + + build_idf53_core: + name: Core (IDF v5.3) + needs: code_scan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Core (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_core.yaml" + version: latest + + build_ard_basic: + name: Basic (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Basic (Arduino) uses: esphome/build-action@main with: yaml-file: ".test/esphome_ard_basic.yaml" version: latest - build_bluetooth_proxy_4: - name: Bluetooth Proxy (IDF) + build_idf_basic: + name: Basic (IDF) + needs: build_idf_core runs-on: ubuntu-latest steps: - uses: actions/checkout@main - - name: Build core + - name: Build Basic (IDF) uses: esphome/build-action@main with: - yaml-file: ".test/esphome_idf_bluetooth_proxy.yaml" + yaml-file: ".test/esphome_idf_basic.yaml" version: latest - build_bluetooth_proxy_53: - name: Bluetooth Proxy (IDF v5.3) + build_idf53_basic: + name: Basic (IDF v5.3) + needs: build_idf53_core runs-on: ubuntu-latest steps: - uses: actions/checkout@main - - name: Build core + - name: Build Basic (IDF v5.3) uses: esphome/build-action@main with: - yaml-file: ".test/esphome_idf53_bluetooth_proxy.yaml" + yaml-file: ".test/esphome_idf53_basic.yaml" + version: latest + + build_ard_hw_relays: + name: HW Relays (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Relays (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_hw_relays.yaml" + version: latest + + build_idf_hw_relays: + name: HW Relays (IDF) + needs: build_idf_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Relays (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_hw_relays.yaml" + version: latest + + build_idf53_hw_relays: + name: HW Relays (IDF v5.3) + needs: build_idf53_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Relays (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_hw_relays.yaml" + version: latest + + build_ard_hw_speaker: + name: HW Speaker (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Speaker (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_hw_speaker.yaml" + version: latest + + build_idf_hw_speaker: + name: HW Speaker (IDF) + needs: build_idf_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Speaker (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_hw_speaker.yaml" + version: latest + + build_idf53_hw_speaker: + name: HW Speaker (IDF v5.3) + needs: build_idf53_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Speaker (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_hw_speaker.yaml" + version: latest + + build_ard_hw_vibration: + name: HW Vibration (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Vibration (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_hw_vibration.yaml" + version: latest + + build_idf_hw_vibration: + name: HW Vibration (IDF) + needs: build_idf_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Vibration (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_hw_vibration.yaml" + version: latest + + build_idf53_hw_vibration: + name: HW Vibration (IDF v5.3) + needs: build_idf53_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Vibration (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_hw_vibration.yaml" + version: latest + + build_ard_ble_proxy: + name: Bluetooth Proxy (Ard) + needs: build_ard_basic + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build BLE Proxy (Ard) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_ble_proxy.yaml" + version: latest + + build_idf_ble_proxy: + name: Bluetooth Proxy (IDF) + needs: build_idf_basic + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build BLE Proxy (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_ble_proxy.yaml" + version: latest + + build_idf53_ble_proxy: + name: Bluetooth Proxy (IDF v5.3) + needs: build_idf53_basic + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build BLE Proxy (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_ble_proxy.yaml" + version: latest + + build_ard_media_player: + name: Media Player (Ard) + needs: + - build_ard_basic + - build_ard_hw_relays + - build_ard_hw_vibration + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Media Player (Ard) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_media_player.yaml" version: latest ... diff --git a/.github/workflows/validate_esphome_beta.yml b/.github/workflows/validate_esphome_beta.yml index 917dedb..9cd663d 100644 --- a/.github/workflows/validate_esphome_beta.yml +++ b/.github/workflows/validate_esphome_beta.yml @@ -1,27 +1,29 @@ --- name: Validate ESPHome (Beta) +permissions: + contents: read + pull-requests: read + on: # yamllint disable-line rule:truthy push: paths: - - "*.yaml" - - "ESPHome/*.yaml" - - ".test/*.yaml" - - "*.h" - - "*.c" - - "*.cpp" - - "*.py" + - "*.{yml,yaml,h,cpp,c,py}" + - ".github/workflows/*.{yml,yaml,h,cpp,c,py}" + - ".test/*.{yml,yaml,h,cpp,c,py}" + - "components/*.{yml,yaml,h,cpp,c,py}" + - "components/tx_ultimate_easy/*.{yml,yaml,h,cpp,c,py}" + - "ESPHome/*.{yml,yaml,h,cpp,c,py}" branches: - main pull_request: paths: - - "*.yaml" - - "ESPHome/*.yaml" - - ".test/*.yaml" - - "*.h" - - "*.c" - - "*.cpp" - - "*.py" + - "*.{yml,yaml,h,cpp,c,py}" + - ".github/workflows/*.{yml,yaml,h,cpp,c,py}" + - ".test/*.{yml,yaml,h,cpp,c,py}" + - "components/*.{yml,yaml,h,cpp,c,py}" + - "components/tx_ultimate_easy/*.{yml,yaml,h,cpp,c,py}" + - "ESPHome/*.{yml,yaml,h,cpp,c,py}" workflow_dispatch: concurrency: @@ -47,36 +49,234 @@ jobs: - name: Validate YAML files run: find . -name "*.yaml" -exec yamllint -c ./.rules/yamllint.yml {} + - build_basic: - name: Basic + build_ard_core: + name: Core (Arduino) + needs: code_scan runs-on: ubuntu-latest steps: - uses: actions/checkout@main - - name: Build core + - name: Build Core (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_core.yaml" + version: beta + + build_idf_core: + name: Core (IDF) + needs: code_scan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Core (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_core.yaml" + version: beta + + build_idf53_core: + name: Core (IDF v5.3) + needs: code_scan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Core (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_core.yaml" + version: beta + + build_ard_basic: + name: Basic (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Basic (Arduino) uses: esphome/build-action@main with: yaml-file: ".test/esphome_ard_basic.yaml" version: beta - build_bluetooth_proxy_4: - name: Bluetooth Proxy (IDF) + build_idf_basic: + name: Basic (IDF) + needs: build_idf_core runs-on: ubuntu-latest steps: - uses: actions/checkout@main - - name: Build core + - name: Build Basic (IDF) uses: esphome/build-action@main with: - yaml-file: ".test/esphome_idf_bluetooth_proxy.yaml" + yaml-file: ".test/esphome_idf_basic.yaml" version: beta - build_bluetooth_proxy_53: - name: Bluetooth Proxy (IDF v5.3) + build_idf53_basic: + name: Basic (IDF v5.3) + needs: build_idf53_core runs-on: ubuntu-latest steps: - uses: actions/checkout@main - - name: Build core + - name: Build Basic (IDF v5.3) uses: esphome/build-action@main with: - yaml-file: ".test/esphome_idf53_bluetooth_proxy.yaml" + yaml-file: ".test/esphome_idf53_basic.yaml" + version: beta + + build_ard_hw_relays: + name: HW Relays (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Relays (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_hw_relays.yaml" + version: beta + + build_idf_hw_relays: + name: HW Relays (IDF) + needs: build_idf_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Relays (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_hw_relays.yaml" + version: beta + + build_idf53_hw_relays: + name: HW Relays (IDF v5.3) + needs: build_idf53_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Relays (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_hw_relays.yaml" + version: beta + + build_ard_hw_speaker: + name: HW Speaker (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Speaker (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_hw_speaker.yaml" + version: beta + + build_idf_hw_speaker: + name: HW Speaker (IDF) + needs: build_idf_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Speaker (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_hw_speaker.yaml" + version: beta + + build_idf53_hw_speaker: + name: HW Speaker (IDF v5.3) + needs: build_idf53_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Speaker (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_hw_speaker.yaml" + version: beta + + build_ard_hw_vibration: + name: HW Vibration (Arduino) + needs: build_ard_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Vibration (Arduino) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_hw_vibration.yaml" + version: beta + + build_idf_hw_vibration: + name: HW Vibration (IDF) + needs: build_idf_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Vibration (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_hw_vibration.yaml" + version: beta + + build_idf53_hw_vibration: + name: HW Vibration (IDF v5.3) + needs: build_idf53_core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build HW Vibration (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_hw_vibration.yaml" + version: beta + + build_ard_ble_proxy: + name: Bluetooth Proxy (Ard) + needs: build_ard_basic + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build BLE Proxy (Ard) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_ble_proxy.yaml" + version: beta + + build_idf_ble_proxy: + name: Bluetooth Proxy (IDF) + needs: build_idf_basic + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build BLE Proxy (IDF) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf_ble_proxy.yaml" + version: beta + + build_idf53_ble_proxy: + name: Bluetooth Proxy (IDF v5.3) + needs: build_idf53_basic + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build BLE Proxy (IDF v5.3) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_idf53_ble_proxy.yaml" + version: beta + + build_ard_media_player: + name: Media Player (Ard) + needs: + - build_ard_basic + - build_ard_hw_relays + - build_ard_hw_vibration + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - name: Build Media Player (Ard) + uses: esphome/build-action@main + with: + yaml-file: ".test/esphome_ard_media_player.yaml" version: beta ... diff --git a/.test/esphome_ard_basic.yaml b/.test/esphome_ard_basic.yaml index ed32a8f..20554a4 100644 --- a/.test/esphome_ard_basic.yaml +++ b/.test/esphome_ard_basic.yaml @@ -1,8 +1,13 @@ --- packages: - basic_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml # Basic package + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml esp32: framework: type: arduino + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password ... diff --git a/.test/esphome_ard_ble_proxy.yaml b/.test/esphome_ard_ble_proxy.yaml new file mode 100644 index 0000000..86cc07c --- /dev/null +++ b/.test/esphome_ard_ble_proxy.yaml @@ -0,0 +1,14 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml + addon_bluetooth_proxy: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml + +esp32: + framework: + type: arduino + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_ard_core.yaml b/.test/esphome_ard_core.yaml new file mode 100644 index 0000000..1b50c90 --- /dev/null +++ b/.test/esphome_ard_core.yaml @@ -0,0 +1,12 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + +esp32: + framework: + type: arduino + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_ard_hw_relays.yaml b/.test/esphome_ard_hw_relays.yaml new file mode 100644 index 0000000..704ac7d --- /dev/null +++ b/.test/esphome_ard_hw_relays.yaml @@ -0,0 +1,13 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_relays_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml + +esp32: + framework: + type: arduino + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_ard_hw_speaker.yaml b/.test/esphome_ard_hw_speaker.yaml new file mode 100644 index 0000000..62272ca --- /dev/null +++ b/.test/esphome_ard_hw_speaker.yaml @@ -0,0 +1,13 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_speaker_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_speaker.yaml + +esp32: + framework: + type: arduino + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_ard_hw_vibration.yaml b/.test/esphome_ard_hw_vibration.yaml new file mode 100644 index 0000000..5dbacea --- /dev/null +++ b/.test/esphome_ard_hw_vibration.yaml @@ -0,0 +1,13 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_vibration_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml + +esp32: + framework: + type: arduino + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_ard_media_player.yaml b/.test/esphome_ard_media_player.yaml new file mode 100644 index 0000000..9a9f744 --- /dev/null +++ b/.test/esphome_ard_media_player.yaml @@ -0,0 +1,15 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_relays_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml + standard_hw_vibration_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml + addon_media_player: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_addon_media_player.yaml + +esp32: + framework: + type: arduino + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf53_basic.yaml b/.test/esphome_idf53_basic.yaml new file mode 100644 index 0000000..1dabf1f --- /dev/null +++ b/.test/esphome_idf53_basic.yaml @@ -0,0 +1,15 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml + +esp32: + framework: + type: esp-idf + version: 5.3.1 + platform_version: 6.9.0 + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf53_ble_proxy.yaml b/.test/esphome_idf53_ble_proxy.yaml new file mode 100644 index 0000000..b17b6d2 --- /dev/null +++ b/.test/esphome_idf53_ble_proxy.yaml @@ -0,0 +1,16 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml + addon_bluetooth_proxy: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml + +esp32: + framework: + type: esp-idf + version: 5.3.1 + platform_version: 6.9.0 + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf53_bluetooth_proxy.yaml b/.test/esphome_idf53_core.yaml similarity index 65% rename from .test/esphome_idf53_bluetooth_proxy.yaml rename to .test/esphome_idf53_core.yaml index a8d3868..18239c7 100644 --- a/.test/esphome_idf53_bluetooth_proxy.yaml +++ b/.test/esphome_idf53_core.yaml @@ -1,11 +1,14 @@ --- packages: core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml - addon_bluetooth_proxy: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml esp32: framework: type: esp-idf version: 5.3.1 platform_version: 6.9.0 + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password ... diff --git a/.test/esphome_idf53_hw_relays.yaml b/.test/esphome_idf53_hw_relays.yaml new file mode 100644 index 0000000..d9f5bd0 --- /dev/null +++ b/.test/esphome_idf53_hw_relays.yaml @@ -0,0 +1,15 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_relays_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml + +esp32: + framework: + type: esp-idf + version: 5.3.1 + platform_version: 6.9.0 + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf53_hw_speaker.yaml b/.test/esphome_idf53_hw_speaker.yaml new file mode 100644 index 0000000..651ac37 --- /dev/null +++ b/.test/esphome_idf53_hw_speaker.yaml @@ -0,0 +1,15 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_speaker_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_speaker.yaml + +esp32: + framework: + type: esp-idf + version: 5.3.1 + platform_version: 6.9.0 + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf53_hw_vibration.yaml b/.test/esphome_idf53_hw_vibration.yaml new file mode 100644 index 0000000..d0a5ed3 --- /dev/null +++ b/.test/esphome_idf53_hw_vibration.yaml @@ -0,0 +1,15 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_vibration_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml + +esp32: + framework: + type: esp-idf + version: 5.3.1 + platform_version: 6.9.0 + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf_basic.yaml b/.test/esphome_idf_basic.yaml new file mode 100644 index 0000000..ab3d202 --- /dev/null +++ b/.test/esphome_idf_basic.yaml @@ -0,0 +1,13 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml + +esp32: + framework: + type: esp-idf + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf_ble_proxy.yaml b/.test/esphome_idf_ble_proxy.yaml new file mode 100644 index 0000000..c972d0f --- /dev/null +++ b/.test/esphome_idf_ble_proxy.yaml @@ -0,0 +1,14 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml + addon_bluetooth_proxy: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml + +esp32: + framework: + type: esp-idf + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf_bluetooth_proxy.yaml b/.test/esphome_idf_bluetooth_proxy.yaml deleted file mode 100644 index 3e434a5..0000000 --- a/.test/esphome_idf_bluetooth_proxy.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -packages: - core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml - addon_bluetooth_proxy: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml -... diff --git a/.test/esphome_idf_core.yaml b/.test/esphome_idf_core.yaml new file mode 100644 index 0000000..846889a --- /dev/null +++ b/.test/esphome_idf_core.yaml @@ -0,0 +1,12 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + +esp32: + framework: + type: esp-idf + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf_hw_relays.yaml b/.test/esphome_idf_hw_relays.yaml new file mode 100644 index 0000000..d78b1b4 --- /dev/null +++ b/.test/esphome_idf_hw_relays.yaml @@ -0,0 +1,13 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_relays_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml + +esp32: + framework: + type: esp-idf + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf_hw_speaker.yaml b/.test/esphome_idf_hw_speaker.yaml new file mode 100644 index 0000000..8bcf3ff --- /dev/null +++ b/.test/esphome_idf_hw_speaker.yaml @@ -0,0 +1,13 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_speaker_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_speaker.yaml + +esp32: + framework: + type: esp-idf + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/.test/esphome_idf_hw_vibration.yaml b/.test/esphome_idf_hw_vibration.yaml new file mode 100644 index 0000000..8ac9039 --- /dev/null +++ b/.test/esphome_idf_hw_vibration.yaml @@ -0,0 +1,13 @@ +--- +packages: + core_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml + standard_hw_vibration_package: !include ../ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml + +esp32: + framework: + type: esp-idf + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password +... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml index 743450c..1346efb 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml @@ -11,103 +11,23 @@ ##### - For normal system use, modifications to this file are NOT required. ##### #################################################################################################### --- -substitutions: - # RTTTL format: name:d=duration,o=octave,b=tempo:notes - # d=32 (32nd note), o=5 (octave 5), b=100 (tempo 100) - tone_volume_change: "scale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,b" # Use "none" to disable sound - -api: - actions: - - action: rtttl_play - variables: - # The RTTTL string for the melody to be played. - # It should follow the RTTTL format, including the melody's name, - # default settings, and a sequence of notes. - tone: string - then: - - lambda: |- - rtttl_speaker->stop(); - if (rtttl_speaker_gain->state > 0) { - ESP_LOGI("api", "Play tone: '%s'", tone.c_str()); - rtttl_speaker->play(tone.c_str()); - } - bluetooth_proxy: -esp32: - framework: - type: esp-idf - sdkconfig_options: - CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST: "y" - CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY: "y" - CONFIG_ESP32_REV_MIN_3: "y" - CONFIG_MBEDTLS_DYNAMIC_BUFFER: "y" - CONFIG_MBEDTLS_DYNAMIC_FREE_CA_CERT: "y" - CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA: "y" - CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC: "y" - CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY: "y" - CONFIG_SPIRAM_RODATA: "y" - CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP: "y" - esphome: platformio_options: build_flags: - -D TX_ULTIMATE_EASY_ADDON_BLE_PROXY -light: - - id: !extend light_full - platform: esp32_rmt_led_strip - rgb_order: GRB - rmt_channel: 1 - chipset: ws2812 - type: !remove - variant: !remove - max_refresh_rate: 33ms - use_psram: true - -media_player: !remove - -number: - - id: rtttl_speaker_gain - name: Sound - Volume - platform: template - max_value: 100 - min_value: 0 - step: 1 - initial_value: 100 - unit_of_measurement: "%" - internal: false - disabled_by_default: true - entity_category: config - device_class: sound_pressure - restore_value: true - optimistic: true - set_action: - then: - - lambda: |- - rtttl_speaker->set_gain((100-(x/10.0f))/100.0f); - std::string tone_volume_change = "${tone_volume_change}"; - // Play sound if tone_volume_change is not "none" - if (x > 0 and !tone_volume_change.empty() and tone_volume_change != "none") - rtttl_speaker->play(tone_volume_change); - rtttl_speaker->dump_config(); - -rtttl: - - id: rtttl_speaker - speaker: mp_speaker - script: - - id: !extend dump_config + - id: !extend dump_config_list_packages then: + - script.wait: dump_config - lambda: |- - ESP_LOGCONFIG("addon_ble_proxy", "Add-on BLE Proxy installed"); + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif -speaker: - - id: mp_speaker - platform: i2s_audio - dac_type: external - i2s_dout_pin: GPIO15 - i2s_audio_id: if_i2s_audio - i2s_comm_fmt: stand_msb - channel: mono + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Add-on - BLE Proxy"); ... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_addon_media_player.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_addon_media_player.yaml new file mode 100644 index 0000000..d6985fb --- /dev/null +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_addon_media_player.yaml @@ -0,0 +1,68 @@ +#################################################################################################### +##### TX Ultimate Easy for ESPHome ##### +##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy ##### +#################################################################################################### +##### Purpose: ESPHome - Add-on - Media player ##### +#################################################################################################### +##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo ##### +#################################################################################################### +##### NOTE: ##### +##### - Make changes ONLY if absolutely necessary and you have the required knowledge. ##### +##### - For normal system use, modifications to this file are NOT required. ##### +#################################################################################################### +--- +packages: + standard_hw_audio: !include TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml + +esp32: + framework: + type: arduino + +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_ADDON_MEDIA_PLAYER + +media_player: + - id: mp_media_player + name: Media Player + internal: false + platform: i2s_audio + i2s_dout_pin: GPIO15 + i2s_audio_id: if_i2s_audio + i2s_comm_fmt: msb + dac_type: external + mode: mono + mute_pin: + number: GPIO26 + inverted: true + allow_other_uses: true + +script: + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + #if !defined(TX_ULTIMATE_EASY_STANDARD_HW_AUDIO) + #error "The package TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Add-on - Media Player"); + +switch: + - id: sw_speaker_amplifier + name: Speaker - Amplifier + platform: gpio + pin: + number: GPIO26 + inverted: true + allow_other_uses: true + restore_mode: RESTORE_DEFAULT_ON + internal: true + entity_category: config +... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml index 32d9c55..843ca1a 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml @@ -29,12 +29,9 @@ substitutions: packages: # yamllint disable rule:colons - core_hw_buttons: !include TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml - core_hw_leds: !include TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml - core_hw_media_player: !include TX-Ultimate-Easy-ESPHome_core_hw_media_player.yaml - core_hw_relays: !include TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml - core_hw_touch: !include TX-Ultimate-Easy-ESPHome_core_hw_touch.yaml - core_hw_vibration: !include TX-Ultimate-Easy-ESPHome_core_hw_vibration.yaml + core_hw_buttons: !include TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml + core_hw_leds: !include TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml + core_hw_touch: !include TX-Ultimate-Easy-ESPHome_core_hw_touch.yaml # yamllint enable rule:colons api: @@ -61,23 +58,19 @@ binary_sensor: ESP_LOGCONFIG("core", "Pending restart: No"); - script.execute: dump_config_caller -button: - - id: bt_restart - name: Restart - internal: false - platform: restart - -captive_portal: - id: ap_captive_portal - esp32: - board: esp32dev + board: esp32dev # adafruit_feather_esp32_v2 # esp32dev flash_size: 8MB + framework: + type: esp-idf esphome: name: ${name} friendly_name: ${friendly_name} comment: TX Ultimate Easy + project: + name: "edwardtfn.tx_ultimate_easy" + version: ${version} platformio_options: build_flags: - -D TX_ULTIMATE_EASY_CORE @@ -112,9 +105,6 @@ globals: max_restore_data_length: 3 # initial_value: "''" -improv_serial: - id: serial_improv - logger: level: DEBUG @@ -187,12 +177,10 @@ script: ESP_LOGCONFIG("core", "Device name (HA): %s", tx_device_name->state.c_str()); ESP_LOGCONFIG("core", "Device hostname: %s", App.get_name().c_str()); - // Version information - ESP_LOGCONFIG("core", "ESPHome builder: %s", esphome_fw_version->state.c_str()); - ESP_LOGCONFIG("core", "TX Ultimate firmware version: ${version}"); + dump_config_versions->execute(); // Framework detection - #ifdef ARDUINO + #ifdef USE_ARDUINO ESP_LOGCONFIG("core", "Framework: Arduino"); #elif defined(USE_ESP_IDF) ESP_LOGCONFIG("core", "Framework: ESP-IDF"); @@ -217,6 +205,25 @@ script: then: - delay: ${DUMP_CONFIG_CALLER_DELAY} - script.execute: dump_config + - script.wait: dump_config + - script.execute: dump_config_list_packages + + - id: dump_config_list_packages + mode: restart + then: + - script.wait: dump_config + - lambda: |- + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, "Installed packages:"); + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Core"); + + - id: dump_config_versions + mode: restart + then: + - lambda: |- + // Version information + ESP_LOGCONFIG("core", "TX Ultimate firmware version: ${version}"); - id: publish_device_info mode: restart @@ -274,12 +281,6 @@ select: tx_ultimate->set_gang_count(id(gang_count)); text_sensor: - - id: esphome_fw_version - name: ESPHome Version - platform: version - entity_category: diagnostic - internal: false - - id: tx_fw_version name: TX Ultimate Easy Firmware Version platform: template @@ -316,13 +317,6 @@ text_sensor: } return result; -time: - - id: time_source - platform: homeassistant - -web_server: - wifi: id: wifi_component - ap: ... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml index 43c8717..d93d70b 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml @@ -57,6 +57,11 @@ binary_sensor: internal: false <<: *binary_sensor_button_base +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_CORE_HW_BUTTONS + globals: - id: button_press_button type: uint8_t @@ -203,6 +208,7 @@ script: - id: !extend dump_config then: - lambda: |- + // Button's actions ESP_LOGCONFIG("core_hw_buttons", "Button%s action%s:", id(gang_count_plural_suffix).c_str(), id(gang_count_plural_suffix).c_str()); @@ -222,6 +228,18 @@ script: ? sl_button_4_action->state.c_str() : "Unknown"); + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Core - Hardware - Buttons"); + - id: !extend touch_on_multi_touch_release then: - script.execute: buttons_release diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml index 087ce46..62579f7 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml @@ -29,6 +29,11 @@ substitutions: LIGHT_SIDES_RESTORE_MODE: RESTORE_DEFAULT_OFF LIGHT_INDIVIDUAL_RESTORE_MODE: RESTORE_DEFAULT_OFF +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_CORE_HW_LEDS + globals: - id: gb_lights_1 type: std::vector @@ -42,13 +47,15 @@ light: - id: light_full name: Light - All internal: true - platform: neopixelbus - type: GRB - variant: WS2811 - # method: esp32_rmt + platform: esp32_rmt_led_strip + rgb_order: GRB + rmt_channel: 1 + chipset: ws2812 num_leds: 32 pin: GPIO13 restore_mode: ${LIGHT_FULL_RESTORE_MODE} + max_refresh_rate: 33ms + use_psram: true # Those lights are available based on the model selections - &light_partition_with_effects @@ -436,56 +443,6 @@ script: light_us_right->set_internal(!id(is_us_model)); light_us_top->set_internal(!id(is_us_model)); - // LED Group Assignment: - // - For US model: gb_lights_1 = left side LEDs, gb_lights_2 = right side LEDs - // - For EU model: gb_lights_1 = bottom LEDs, gb_lights_2 = top LEDs - // Gang configurations determine which LED segments are active - switch (id(gang_count)) { - case 1: // 1 Gang - if (id(is_us_model)) { - id(gb_lights_1) = { light_us_rl_1_1_left }; - id(gb_lights_2) = { light_us_rl_1_1_right }; - } else { - id(gb_lights_1) = { light_eu_rl_1_1_bottom }; - id(gb_lights_2) = { light_eu_rl_1_1_top }; - } - break; - case 2: // 2 Gang - if (id(is_us_model)) { - id(gb_lights_1) = { light_us_rl_1_2_left, light_us_rl_2_2_left }; - id(gb_lights_2) = { light_us_rl_1_2_right, light_us_rl_2_2_right }; - } else { - id(gb_lights_1) = { light_eu_rl_1_2_bottom, light_eu_rl_2_2_bottom }; - id(gb_lights_2) = { light_eu_rl_1_2_top, light_eu_rl_2_2_top }; - } - break; - case 3: // 3 Gang - if (id(is_us_model)) { - id(gb_lights_1) = { light_us_rl_1_3_left, light_us_rl_2_3_left, light_us_rl_3_3_left }; - id(gb_lights_2) = { light_us_rl_1_3_right, light_us_rl_2_3_right, light_us_rl_3_3_right }; - } else { - id(gb_lights_1) = { light_eu_rl_1_3_bottom, light_eu_rl_2_3_bottom, light_eu_rl_3_3_bottom }; - id(gb_lights_2) = { light_eu_rl_1_3_top, light_eu_rl_2_3_top, light_eu_rl_3_3_top }; - } - break; - case 4: // 4 Gang - if (id(is_us_model)) { - id(gb_lights_1) = { light_us_rl_1_4_left, light_us_rl_2_4_left, - light_us_rl_3_4_left, light_us_rl_4_4_left }; - id(gb_lights_2) = { light_us_rl_1_4_right, light_us_rl_2_4_right, - light_us_rl_3_4_right, light_us_rl_4_4_right }; - } else { - id(gb_lights_1) = { light_eu_rl_1_4_bottom, light_eu_rl_2_4_bottom, - light_eu_rl_3_4_bottom, light_eu_rl_4_4_bottom }; - id(gb_lights_2) = { light_eu_rl_1_4_top, light_eu_rl_2_4_top, - light_eu_rl_3_4_top, light_eu_rl_4_4_top }; - } - break; - default: - ESP_LOGE("core_hw_leds", "Invalid gang count: %" PRIu8, id(gang_count)); - break; - } - - id: !extend dump_config then: - lambda: |- @@ -527,6 +484,18 @@ script: ESP_LOGCONFIG("core_hw_leds", " Sides: ${LIGHT_SIDES_RESTORE_MODE}"); ESP_LOGCONFIG("core_hw_leds", " Individual: ${LIGHT_INDIVIDUAL_RESTORE_MODE}"); + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Core - Hardware - LEDs"); + - id: light_set_state mode: parallel parameters: diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_touch.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_touch.yaml index f840b9d..8da5856 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_touch.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_touch.yaml @@ -198,6 +198,11 @@ binary_sensor: id: bs_swipe_down state: OFF # yamllint disable-line rule:truthy +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_CORE_HW_TOUCH + external_components: - source: type: git @@ -286,12 +291,25 @@ script: - id: !extend dump_config then: - lambda: |- + // Touch panel's state if (sw_touch_panel_power->state) ESP_LOGCONFIG("core_hw_touch", "Touch panel - Power: On"); else ESP_LOGW("core_hw_touch", "Touch panel - Power: OFF"); ESP_LOGCONFIG("core_hw_touch", "Touch event duration: %.0fms", nr_touch_duration->state); + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Core - Hardware - Touchpad"); + - id: touch_on_multi_touch_release mode: restart then: diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml new file mode 100644 index 0000000..0d9c0a7 --- /dev/null +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml @@ -0,0 +1,72 @@ +#################################################################################################### +##### TX Ultimate Easy for ESPHome ##### +##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy ##### +#################################################################################################### +##### Purpose: ESPHome Standard (non-essential, but recommended packages) ##### +#################################################################################################### +##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo ##### +#################################################################################################### +##### NOTE: ##### +##### - Make changes ONLY if absolutely necessary and you have the required knowledge. ##### +##### - For normal system use, modifications to this file are NOT required. ##### +#################################################################################################### +--- +packages: + # yamllint disable rule:colons + core_hw_relays: !include TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml + core_hw_speaker: !include TX-Ultimate-Easy-ESPHome_standard_hw_speaker.yaml + core_hw_vibration: !include TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml + # yamllint enable rule:colons + +button: + - id: bt_restart + name: Restart + internal: false + platform: restart + +captive_portal: + id: ap_captive_portal + +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_STANDARD + +script: + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Standard"); + + - id: !extend dump_config_versions + then: + - lambda: |- + // Version information + ESP_LOGCONFIG("standard", "ESPHome builder: %s", esphome_fw_version->state.c_str()); + +improv_serial: + id: serial_improv + +text_sensor: + - id: esphome_fw_version + name: ESPHome Version + platform: version + entity_category: diagnostic + internal: false + +time: + - id: time_source + platform: homeassistant + +web_server: + +wifi: + ap: +... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml new file mode 100644 index 0000000..3dcabb1 --- /dev/null +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml @@ -0,0 +1,36 @@ +#################################################################################################### +##### TX Ultimate Easy for ESPHome ##### +##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy ##### +#################################################################################################### +##### Purpose: ESPHome - Standard - I2S Audio ##### +#################################################################################################### +##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo ##### +#################################################################################################### +##### NOTE: ##### +##### - Make changes ONLY if absolutely necessary and you have the required knowledge. ##### +##### - For normal system use, modifications to this file are NOT required. ##### +#################################################################################################### +--- +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_STANDARD_HW_AUDIO + +i2s_audio: + id: if_i2s_audio + i2s_bclk_pin: GPIO2 + i2s_lrclk_pin: GPIO4 + +script: + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Standard - Hardware - Audio"); +... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml similarity index 81% rename from ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml rename to ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml index ee1c16e..432994f 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_relays.yaml @@ -2,7 +2,7 @@ ##### TX Ultimate Easy for ESPHome ##### ##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy ##### #################################################################################################### -##### Purpose: ESPHome Core - Hardware - Relays ##### +##### Purpose: ESPHome - Standard - Hardware - Relays ##### #################################################################################################### ##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo ##### #################################################################################################### @@ -19,12 +19,20 @@ substitutions: RELAY_RESTORE_MODE: RESTORE_DEFAULT_OFF LIGHT_RELAYS_RESTORE_MODE: RESTORE_DEFAULT_OFF +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_STANDARD_HW_RELAYS globals: - id: boot_initialization_relays type: bool restore_value: false initial_value: 'false' + - id: boot_initialization_relays_group_assignments + type: bool + restore_value: false + initial_value: 'false' - id: boot_initialization_relays_light_modes type: bool restore_value: false @@ -436,14 +444,17 @@ script: - id: boot_initialize_relays mode: restart then: + - script.execute: boot_initialize_relays_group_assignments - script.execute: boot_initialize_relays_light_modes - script.execute: boot_initialize_relays_relay_leds - script.execute: boot_initialize_relays_relay_modes + - script.wait: boot_initialize_relays_group_assignments - script.wait: boot_initialize_relays_light_modes - script.wait: boot_initialize_relays_relay_leds - script.wait: boot_initialize_relays_relay_modes - wait_until: condition: + - lambda: return id(boot_initialization_relays_group_assignments); - lambda: return id(boot_initialization_relays_light_modes); - lambda: return id(boot_initialization_relays_relay_leds); - lambda: return id(boot_initialization_relays_relay_modes); @@ -451,6 +462,61 @@ script: id: boot_initialization_relays value: 'true' + - id: boot_initialize_relays_group_assignments + mode: restart + then: + - lambda: |- + // LED Group Assignment: + // - For US model: gb_lights_1 = left side LEDs, gb_lights_2 = right side LEDs + // - For EU model: gb_lights_1 = bottom LEDs, gb_lights_2 = top LEDs + // Gang configurations determine which LED segments are active + switch (id(gang_count)) { + case 1: // 1 Gang + if (id(is_us_model)) { + id(gb_lights_1) = { light_us_rl_1_1_left }; + id(gb_lights_2) = { light_us_rl_1_1_right }; + } else { + id(gb_lights_1) = { light_eu_rl_1_1_bottom }; + id(gb_lights_2) = { light_eu_rl_1_1_top }; + } + break; + case 2: // 2 Gang + if (id(is_us_model)) { + id(gb_lights_1) = { light_us_rl_1_2_left, light_us_rl_2_2_left }; + id(gb_lights_2) = { light_us_rl_1_2_right, light_us_rl_2_2_right }; + } else { + id(gb_lights_1) = { light_eu_rl_1_2_bottom, light_eu_rl_2_2_bottom }; + id(gb_lights_2) = { light_eu_rl_1_2_top, light_eu_rl_2_2_top }; + } + break; + case 3: // 3 Gang + if (id(is_us_model)) { + id(gb_lights_1) = { light_us_rl_1_3_left, light_us_rl_2_3_left, light_us_rl_3_3_left }; + id(gb_lights_2) = { light_us_rl_1_3_right, light_us_rl_2_3_right, light_us_rl_3_3_right }; + } else { + id(gb_lights_1) = { light_eu_rl_1_3_bottom, light_eu_rl_2_3_bottom, light_eu_rl_3_3_bottom }; + id(gb_lights_2) = { light_eu_rl_1_3_top, light_eu_rl_2_3_top, light_eu_rl_3_3_top }; + } + break; + case 4: // 4 Gang + if (id(is_us_model)) { + id(gb_lights_1) = { light_us_rl_1_4_left, light_us_rl_2_4_left, + light_us_rl_3_4_left, light_us_rl_4_4_left }; + id(gb_lights_2) = { light_us_rl_1_4_right, light_us_rl_2_4_right, + light_us_rl_3_4_right, light_us_rl_4_4_right }; + } else { + id(gb_lights_1) = { light_eu_rl_1_4_bottom, light_eu_rl_2_4_bottom, + light_eu_rl_3_4_bottom, light_eu_rl_4_4_bottom }; + id(gb_lights_2) = { light_eu_rl_1_4_top, light_eu_rl_2_4_top, + light_eu_rl_3_4_top, light_eu_rl_4_4_top }; + } + break; + default: + ESP_LOGE("standard_hw_relays", "Invalid gang count: %" PRIu8, id(gang_count)); + break; + } + id(boot_initialization_relays_group_assignments) = true; + - id: boot_initialize_relays_light_modes mode: restart then: @@ -587,13 +653,13 @@ script: std::string select_state; bool toggle_relay = false; if (api_disconnected) { - ESP_LOGW("core_hw_relays", "Toggle relays:"); - ESP_LOGW("core_hw_relays", " API state: DISCONNECTED"); - ESP_LOGW("core_hw_relays", " Button: %" PRIu8, button); + ESP_LOGW("standard_hw_relays", "Toggle relays:"); + ESP_LOGW("standard_hw_relays", " API state: DISCONNECTED"); + ESP_LOGW("standard_hw_relays", " Button: %" PRIu8, button); } else { - ESP_LOGVV("core_hw_relays", "Toggle relays:"); - ESP_LOGVV("core_hw_relays", " API state: Connected"); - ESP_LOGVV("core_hw_relays", " Button: %" PRIu8, button); + ESP_LOGVV("standard_hw_relays", "Toggle relays:"); + ESP_LOGVV("standard_hw_relays", " API state: Connected"); + ESP_LOGVV("standard_hw_relays", " Button: %" PRIu8, button); } switch (button) { case ${BUTTON_1_ID}: @@ -626,55 +692,76 @@ script: break; } if (toggle_relay) { - ESP_LOGI("core_hw_relays", "Toggle relay %" PRIu8 ": (%s)", button, select_state.c_str()); + ESP_LOGI("standard_hw_relays", "Toggle relay %" PRIu8 ": (%s)", button, select_state.c_str()); } else if (not select_state.empty()) { - ESP_LOGV("core_hw_relays", "Ignoring toggle for relay %" PRIu8 ": action is '%s'", + ESP_LOGV("standard_hw_relays", "Ignoring toggle for relay %" PRIu8 ": action is '%s'", button, select_state.c_str()); } else { - ESP_LOGE("core_hw_relays", "No button action selected for button %" PRIu8, button); + ESP_LOGE("standard_hw_relays", "No button action selected for button %" PRIu8, button); } - id: !extend dump_config then: - lambda: |- - ESP_LOGCONFIG("core_hw_relays", "Relay%s mode%s:", + // Relay's modes + ESP_LOGCONFIG("standard_hw_relays", "Relay%s mode%s:", id(gang_count_plural_suffix).c_str(), id(gang_count_plural_suffix).c_str()); - ESP_LOGCONFIG("core_hw_relays", " Relay 1: %s", sl_relay_1_mode->has_state() + ESP_LOGCONFIG("standard_hw_relays", " Relay 1: %s", sl_relay_1_mode->has_state() ? sl_relay_1_mode->state.c_str() : "Unknown"); if (id(gang_count) >= 2) - ESP_LOGCONFIG("core_hw_relays", " Relay 2: %s", sl_relay_2_mode->has_state() + ESP_LOGCONFIG("standard_hw_relays", " Relay 2: %s", sl_relay_2_mode->has_state() ? sl_relay_2_mode->state.c_str() : "Unknown"); if (id(gang_count) >= 3) - ESP_LOGCONFIG("core_hw_relays", " Relay 3: %s", sl_relay_3_mode->has_state() + ESP_LOGCONFIG("standard_hw_relays", " Relay 3: %s", sl_relay_3_mode->has_state() ? sl_relay_3_mode->state.c_str() : "Unknown"); if (id(gang_count) >= 4) - ESP_LOGCONFIG("core_hw_relays", " Relay 4: %s", sl_relay_4_mode->has_state() + ESP_LOGCONFIG("standard_hw_relays", " Relay 4: %s", sl_relay_4_mode->has_state() ? sl_relay_4_mode->state.c_str() : "Unknown"); - ESP_LOGCONFIG("core_hw_relays", "Relay%s state%s:", + + // Relay's states + ESP_LOGCONFIG("standard_hw_relays", "Relay%s state%s:", id(gang_count_plural_suffix).c_str(), id(gang_count_plural_suffix).c_str()); - ESP_LOGCONFIG("core_hw_relays", " Relay 1: %s", sw_relay_1->state ? "ON" : "OFF"); + ESP_LOGCONFIG("standard_hw_relays", " Relay 1: %s", sw_relay_1->state ? "ON" : "OFF"); if (id(gang_count) >= 2) - ESP_LOGCONFIG("core_hw_relays", " Relay 2: %s", sw_relay_2->state ? "ON" : "OFF"); + ESP_LOGCONFIG("standard_hw_relays", " Relay 2: %s", sw_relay_2->state ? "ON" : "OFF"); if (id(gang_count) >= 3) - ESP_LOGCONFIG("core_hw_relays", " Relay 3: %s", sw_relay_3->state ? "ON" : "OFF"); + ESP_LOGCONFIG("standard_hw_relays", " Relay 3: %s", sw_relay_3->state ? "ON" : "OFF"); if (id(gang_count) >= 4) - ESP_LOGCONFIG("core_hw_relays", " Relay 4: %s", sw_relay_4->state ? "ON" : "OFF"); - ESP_LOGCONFIG("core_hw_relays", "Expose Relay's LEDs to Home Assistant: %s", + ESP_LOGCONFIG("standard_hw_relays", " Relay 4: %s", sw_relay_4->state ? "ON" : "OFF"); + ESP_LOGCONFIG("standard_hw_relays", "Expose Relay's LEDs to Home Assistant: %s", YESNO(sw_expose_relays_leds_to_ha->state)); - ESP_LOGCONFIG("core_hw_relays", "Boot initialization flags:"); - ESP_LOGCONFIG("core_hw_relays", " Overall: %s", YESNO(id(boot_initialization_relays))); - ESP_LOGCONFIG("core_hw_relays", " Light modes: %s", YESNO(id(boot_initialization_relays_light_modes))); - ESP_LOGCONFIG("core_hw_relays", " Relay modes: %s", YESNO(id(boot_initialization_relays_relay_modes))); - ESP_LOGCONFIG("core_hw_relays", " Status LEDs: %s", YESNO(id(boot_initialization_relays_relay_leds))); - ESP_LOGCONFIG("core_hw_relays", "Restore modes:"); - ESP_LOGCONFIG("core_hw_relays", " Relays: ${RELAY_RESTORE_MODE}"); - ESP_LOGCONFIG("core_hw_relays", " Status LEDs: ${LIGHT_RELAYS_RESTORE_MODE}"); + + // Boot initialization statuses + ESP_LOGCONFIG("standard_hw_relays", "Boot initialization flags:"); + ESP_LOGCONFIG("standard_hw_relays", " Overall: %s", YESNO(id(boot_initialization_relays))); + ESP_LOGCONFIG("standard_hw_relays", " Groups: %s", + YESNO(id(boot_initialization_relays_group_assignments))); + ESP_LOGCONFIG("standard_hw_relays", " Light modes: %s", YESNO(id(boot_initialization_relays_light_modes))); + ESP_LOGCONFIG("standard_hw_relays", " Relay modes: %s", YESNO(id(boot_initialization_relays_relay_modes))); + ESP_LOGCONFIG("standard_hw_relays", " Status LEDs: %s", YESNO(id(boot_initialization_relays_relay_leds))); + + // Substitutions + ESP_LOGCONFIG("standard_hw_relays", "Restore modes:"); + ESP_LOGCONFIG("standard_hw_relays", " Relays: ${RELAY_RESTORE_MODE}"); + ESP_LOGCONFIG("standard_hw_relays", " Status LEDs: ${LIGHT_RELAYS_RESTORE_MODE}"); + + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Standard - Hardware - Relays"); - id: show_relay_status mode: restart @@ -682,7 +769,7 @@ script: - script.wait: boot_initialize_relays - lambda: |- if (not id(boot_initialization_relays)) { - ESP_LOGW("core_hw_relays", "Relays not initialized yet"); + ESP_LOGW("standard_hw_relays", "Relays not initialized yet"); if (not boot_initialize_relays->is_running()) boot_initialize_relays->execute(); return; @@ -725,8 +812,8 @@ script: break; } - ESP_LOGV("core_hw_relays", "Relay %" PRIu8 " is %s", i + 1, relay_state ? "ON" : "OFF"); - ESP_LOGV("core_hw_relays", "Light Mode for Relay %" PRIu8 ": %s", i + 1, light_mode.c_str()); + ESP_LOGV("standard_hw_relays", "Relay %" PRIu8 " is %s", i + 1, relay_state ? "ON" : "OFF"); + ESP_LOGV("standard_hw_relays", "Light Mode for Relay %" PRIu8 ": %s", i + 1, light_mode.c_str()); // Use light_set_state for light updates if (relay_state) { diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_speaker.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_speaker.yaml new file mode 100644 index 0000000..e9d5c3b --- /dev/null +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_speaker.yaml @@ -0,0 +1,182 @@ +#################################################################################################### +##### TX Ultimate Easy for ESPHome ##### +##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy ##### +#################################################################################################### +##### Purpose: ESPHome - Standard - Hardware - Speaker ##### +#################################################################################################### +##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo ##### +#################################################################################################### +##### NOTE: ##### +##### - Make changes ONLY if absolutely necessary and you have the required knowledge. ##### +##### - For normal system use, modifications to this file are NOT required. ##### +#################################################################################################### +--- +substitutions: + # RTTTL format: name:d=duration,o=octave,b=tempo:notes + # d=32 (32nd note), o=5 (octave 5), b=100 (tempo 100) + tone_volume_change: "scale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,b" # Use "none" to disable sound + +packages: + standard_hw_audio: !include TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml + +api: + actions: + - action: rtttl_play + variables: + # The RTTTL string for the melody to be played. + # It should follow the RTTTL format, including the melody's name, + # default settings, and a sequence of notes. + tone: string + then: + - lambda: |- + rtttl_speaker->stop(); + if (speaker_volume->state > 0) { + ESP_LOGI("standard_speaker", "Play tone: '%s'", tone.c_str()); + rtttl_speaker->play(tone.c_str()); + } + +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_STANDARD_SPEAKER + +number: + - id: speaker_volume + name: Sound - Volume + platform: template + max_value: 100 + min_value: 0 + step: 1 + initial_value: 100 + unit_of_measurement: "%" + internal: false + disabled_by_default: true + entity_category: config + device_class: sound_pressure + restore_value: true + optimistic: true + set_action: + then: + - speaker.volume_set: + id: speaker_embedded + volume: !lambda return x/100.0f; + - lambda: |- + static const std::string tone_volume_change = "${tone_volume_change}"; + // Play sound if tone_volume_change is not "none" + if (x > 0 and !tone_volume_change.empty() and tone_volume_change != "none") + rtttl_speaker->play(tone_volume_change); + +rtttl: + - id: rtttl_speaker + speaker: speaker_embedded + +script: + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + #if !defined(TX_ULTIMATE_EASY_STANDARD_HW_AUDIO) + #error "The package TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Standard - Hardware - Speaker"); + + - id: speaker_play_click + then: + - if: + condition: + not: + - speaker.is_playing: speaker_embedded + then: + - speaker.play: + id: speaker_embedded + data: [ + 0x01, 0x02, 0x04, 0x06, 0x07, 0x08, 0x08, 0x06, 0x01, 0xFA, 0xF4, + 0xEF, 0xEE, 0xF1, 0xF7, 0xFF, 0x07, 0x0E, 0x11, 0x11, 0x10, 0x0C, + 0x06, 0xFF, 0xF8, 0xF1, 0xEC, 0xEA, 0xEC, 0xF2, 0xF9, 0xFF, 0x05, + 0x0A, 0x10, 0x14, 0x17, 0x17, 0x14, 0x0B, 0xFD, 0xED, 0xE0, 0xD9, + 0xDB, 0xE6, 0xF7, 0x0A, 0x19, 0x20, 0x1E, 0x14, 0x05, 0xF4, 0xE5, + 0xDF, 0xE4, 0xF4, 0x0C, 0x24, 0x36, 0x3D, 0x35, 0x20, 0xFF, 0xDD, + 0xC0, 0xAE, 0xA9, 0xB0, 0xC4, 0xE0, 0x03, 0x26, 0x48, 0x62, 0x70, + 0x6D, 0x59, 0x35, 0x08, 0xD8, 0xAC, 0x8D, 0x80, 0x85, 0x9C, 0xC1, + 0xF0, 0x21, 0x4E, 0x6F, 0x7F, 0x7A, 0x63, 0x3D, 0x0F, 0xE0, 0xB7, + 0x9B, 0x90, 0x96, 0xAC, 0xCE, 0xF6, 0x1D, 0x3C, 0x50, 0x55, 0x4D, + 0x3A, 0x20, 0x04, 0xEC, 0xD8, 0xCC, 0xC9, 0xCD, 0xD8, 0xE8, 0xF9, + 0x0A, 0x17, 0x1F, 0x20, 0x1C, 0x12, 0x07, 0xFC, 0xF2, 0xEC, 0xEB, + 0xED, 0xF3, 0xFA, 0x02, 0x0A, 0x10, 0x12, 0x12, 0x0E, 0x07, 0xFE, + 0xF5, 0xED, 0xEA, 0xEB, 0xEF, 0xF7, 0x00, 0x0A, 0x10, 0x13, 0x12, + 0x0F, 0x09, 0x02, 0xFB, 0xF5, 0xF3, 0xF2, 0xF3, 0xF6, 0xFB, 0xFF, + 0x03, 0x05, 0x07, 0x08, 0x07, 0x05, 0x03, 0x01, 0xFF, 0xFE, 0xFC, + 0xFB, 0xFB, 0xFC, 0xFC, 0xFD, 0xFE, 0xFF, 0x00, 0x01, 0x02, 0x02, + 0x01] + + - wait_until: + condition: + not: + - speaker.is_playing: speaker_embedded + - speaker.stop: speaker_embedded + + - id: !extend touch_on_multi_touch_release + then: + - script.execute: touch_on_multi_touch_release_speaker + + - id: touch_on_multi_touch_release_speaker + mode: restart + then: + - lambda: |- + if (sl_touch_speaker_feedback->state != "Disabled") + speaker_play_click->execute(); + + - id: !extend touch_on_press + then: + - script.execute: touch_on_press_speaker + + - id: touch_on_press_speaker + mode: restart + then: + - lambda: |- + if (sl_touch_speaker_feedback->state == "On press" or sl_touch_speaker_feedback->state == "Always") + speaker_play_click->execute(); + + - id: !extend touch_on_release + then: + - script.execute: touch_on_release_speaker + + - id: touch_on_release_speaker + mode: restart + then: + - lambda: |- + if (sl_touch_speaker_feedback->state == "On release" or sl_touch_speaker_feedback->state == "Always") + speaker_play_click->execute(); + +select: + - id: sl_touch_speaker_feedback + name: Touch - Speaker feedback + platform: template + options: + - "Disabled" + - "On press" + - "On release" + - "Always" + initial_option: "Disabled" + optimistic: true + restore_value: true + internal: false + entity_category: config + disabled_by_default: false + icon: mdi:vibrate + +speaker: + - id: speaker_embedded + platform: i2s_audio + dac_type: external + i2s_dout_pin: GPIO15 + i2s_audio_id: if_i2s_audio + i2s_comm_fmt: stand_msb + channel: mono +... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_vibration.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml similarity index 81% rename from ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_vibration.yaml rename to ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml index fd19fb9..bf7205c 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_vibration.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_standard_hw_vibration.yaml @@ -2,7 +2,7 @@ ##### TX Ultimate Easy for ESPHome ##### ##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy ##### #################################################################################################### -##### Purpose: ESPHome Core - Hardware - Vibration system ##### +##### Purpose: ESPHome - Standard - Hardware - Vibration system ##### #################################################################################################### ##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo ##### #################################################################################################### @@ -32,6 +32,11 @@ button: then: - script.execute: vibrate +esphome: + platformio_options: + build_flags: + - -D TX_ULTIMATE_EASY_STANDARD_HW_VIBRATION + number: - id: nr_vibrating_duration name: Vibrate duration @@ -57,16 +62,28 @@ script: then: - lambda: |- // Configuration - ESP_LOGCONFIG("core_hw_vibration", "Touch - Vibration feedback: %s", + ESP_LOGCONFIG("standard_hw_vibration", "Touch - Vibration feedback: %s", sl_touch_vibration_feedback->state.c_str()); - ESP_LOGCONFIG("core_hw_vibration", "Vibrate duration: %.0fms", nr_vibrating_duration->state); - ESP_LOGCONFIG("core_hw_vibration", "Vibrate max duration: ${vibration_max_duration}"); + ESP_LOGCONFIG("standard_hw_vibration", "Vibrate duration: %.0fms", nr_vibrating_duration->state); + ESP_LOGCONFIG("standard_hw_vibration", "Vibrate max duration: ${vibration_max_duration}"); // State if (bs_vibrating->state) - ESP_LOGW("core_hw_vibration", "Vibrating now: YES"); + ESP_LOGW("standard_hw_vibration", "Vibrating now: YES"); else - ESP_LOGCONFIG("core_hw_vibration", "Vibrating now: No"); + ESP_LOGCONFIG("standard_hw_vibration", "Vibrating now: No"); + + - id: !extend dump_config_list_packages + then: + - script.wait: dump_config + - lambda: |- + // Check for requirements + #if !defined(TX_ULTIMATE_EASY_CORE) + #error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required." + #endif + + // Identify itself + ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Standard - Hardware - Vibration"); - id: !extend touch_on_multi_touch_release then: diff --git a/README.md b/README.md index 4918684..b6b6b29 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,7 @@ This project builds upon the work of several amazing projects and contributors: - [SmartHome yourself - SONOFF TX Ultimate for ESPHome](https://github.com/SmartHome-yourself/sonoff-tx-ultimate-for-esphome) - [Un loco y su tecnologĂ­a - Sonoff TX Ultimate with ESPHome](https://www.youtube.com/watch?v=58v8oqSQgXQ) +- @PxPert - [Sonoff TX Ultimate and Voice Assistant](https://community.home-assistant.io/t/sonoff-tx-ultimate-and-voice-assistant/682214?u=edwardtfn) Special thanks to all contributors and community members who help make this project better. diff --git a/TX-Ultimate-Easy-ESPHome.yaml b/TX-Ultimate-Easy-ESPHome.yaml index 9823def..f8cff7b 100644 --- a/TX-Ultimate-Easy-ESPHome.yaml +++ b/TX-Ultimate-Easy-ESPHome.yaml @@ -19,6 +19,8 @@ packages: ref: latest # Or you can specify a version, like `ref: v2024.12.6` refresh: 5min files: - - ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml - # - ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml # Adds experimental BLE proxy support (limited) + - ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml # Core (essential) packages + - ESPHome/TX-Ultimate-Easy-ESPHome_standard.yaml # Non-essential, but recommended packages + # - ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml # Adds BLE proxy support + # - ESPHome/TX-Ultimate-Easy-ESPHome_addon_media_player.yaml # Adds experimental Media Player (limited) ... diff --git a/components/tx_ultimate_easy/tx_ultimate_easy.cpp b/components/tx_ultimate_easy/tx_ultimate_easy.cpp index 2c023bd..d233abf 100644 --- a/components/tx_ultimate_easy/tx_ultimate_easy.cpp +++ b/components/tx_ultimate_easy/tx_ultimate_easy.cpp @@ -2,6 +2,7 @@ #include "esphome/core/log.h" #include "tx_ultimate_easy.h" +#include #include namespace esphome { diff --git a/versioning/VERSION b/versioning/VERSION index 2d5323d..cda1ac9 100644 --- a/versioning/VERSION +++ b/versioning/VERSION @@ -1 +1 @@ -2024.12.20 +2024.12.21 diff --git a/versioning/VERSION_YAML b/versioning/VERSION_YAML index a705cbf..ab056b2 100644 --- a/versioning/VERSION_YAML +++ b/versioning/VERSION_YAML @@ -1 +1 @@ -version: 2024.12.20 +version: 2024.12.21