From 0d32496f19626caa40d8c6754a53355ad9deff06 Mon Sep 17 00:00:00 2001 From: iranl Date: Wed, 15 May 2024 20:54:47 +0200 Subject: [PATCH] Auto Release --- .github/workflows/build.yml | 131 ++++++++++++++++++++++++++++++------ .gitignore | 5 ++ README.md | 6 +- how-to-flash.txt | 79 ++++++++++++++++++++++ src/WebCfgServer.cpp | 18 ++--- 5 files changed, 206 insertions(+), 33 deletions(-) create mode 100644 how-to-flash.txt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac3b54e..8996ff9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,15 +34,16 @@ jobs: - name: Install ESPTool run: pip install --upgrade esptool - name: Build PlatformIO Project esp32dev - run: | + run: | pio run --environment esp32dev mkdir -p release/esp32dev cp .pio/build/esp32dev/firmware.bin release/esp32dev/nuki_hub_esp32.bin cp .pio/build/esp32dev/partitions.bin release/esp32dev/nuki_hub.partitions.bin cp .pio/build/esp32dev/bootloader.bin release/esp32dev/bootloader.bin cp bin/boot_app0.bin release/esp32dev/boot_app0.bin + cp how-to-flash.txt release/esp32dev/how-to-flash.txt esptool.py --chip esp32 merge_bin -o release/esp32dev/webflash_nuki_hub_esp32.bin --flash_mode dio --flash_freq keep --flash_size keep 0xe000 bin/boot_app0.bin 0x1000 release/esp32dev/bootloader.bin 0x10000 release/esp32dev/nuki_hub_esp32.bin 0x8000 release/esp32dev/nuki_hub.partitions.bin - echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32.bin 0x8000 nuki_hub.partitions.bin" > release/esp32dev/flash.sh + echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32.bin 0x8000 nuki_hub.partitions.bin" > release/esp32dev/flash.sh - name: Build PlatformIO Project esp32-s3 run: | pio run --environment esp32-s3 @@ -51,8 +52,9 @@ jobs: cp .pio/build/esp32-s3/partitions.bin release/esp32s3/nuki_hub.partitions.bin cp .pio/build/esp32-s3/bootloader.bin release/esp32s3/bootloader.bin cp bin/boot_app0.bin release/esp32s3/boot_app0.bin + cp how-to-flash.txt release/esp32s3/how-to-flash.txt esptool.py --chip esp32s3 merge_bin -o release/esp32s3/webflash_nuki_hub_esp32s3.bin --flash_mode dio --flash_freq keep --flash_size keep 0xe000 bin/boot_app0.bin 0x0 release/esp32s3/bootloader.bin 0x10000 release/esp32s3/nuki_hub_esp32s3.bin 0x8000 release/esp32s3/nuki_hub.partitions.bin - echo "esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32s3.bin 0x8000 nuki_hub.partitions.bin" > release/esp32s3/flash.sh + echo "esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32s3.bin 0x8000 nuki_hub.partitions.bin" > release/esp32s3/flash.sh - name: Build PlatformIO Project esp32-c3 run: | pio run --environment esp32-c3 @@ -61,8 +63,9 @@ jobs: cp .pio/build/esp32-c3/partitions.bin release/esp32c3/nuki_hub.partitions.bin cp .pio/build/esp32-c3/bootloader.bin release/esp32c3/bootloader.bin cp bin/boot_app0.bin release/esp32c3/boot_app0.bin + cp how-to-flash.txt release/esp32c3/how-to-flash.txt esptool.py --chip esp32c3 merge_bin -o release/esp32c3/webflash_nuki_hub_esp32c3.bin --flash_mode dio --flash_freq keep --flash_size keep 0xe000 bin/boot_app0.bin 0x0 release/esp32c3/bootloader.bin 0x10000 release/esp32c3/nuki_hub_esp32c3.bin 0x8000 release/esp32c3/nuki_hub.partitions.bin - echo "esptool.py --chip esp32c3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32c3.bin 0x8000 nuki_hub.partitions.bin" > release/esp32c3/flash.sh + echo "esptool.py --chip esp32c3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32c3.bin 0x8000 nuki_hub.partitions.bin" > release/esp32c3/flash.sh - name: Build PlatformIO Project esp32solo1 run: | pio run --environment esp32solo1 @@ -71,7 +74,8 @@ jobs: cp .pio/build/esp32solo1/partitions.bin release/esp32solo1/nuki_hub.partitions.bin cp .pio/build/esp32solo1/bootloader.bin release/esp32solo1/bootloader.bin cp bin/boot_app0.bin release/esp32solo1/boot_app0.bin - echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32solo1.bin 0x8000 nuki_hub.partitions.bin" > release/esp32solo1/flash.sh + cp how-to-flash.txt release/esp32solo1/how-to-flash.txt + echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32solo1.bin 0x8000 nuki_hub.partitions.bin" > release/esp32solo1/flash.sh - name: Upload Artifact esp32dev uses: actions/upload-artifact@v4 with: @@ -93,7 +97,7 @@ jobs: name: esp32solo1-assets path: release/esp32solo1 - name: Build PlatformIO Project esp32dev_dbg - run: | + run: | pio run --environment esp32dev_dbg mkdir -p debug/esp32dev cp .pio/build/esp32dev_dbg/bootloader.bin debug/esp32dev/bootloader.bin @@ -101,7 +105,8 @@ jobs: cp .pio/build/esp32dev_dbg/partitions.bin debug/esp32dev/nuki_hub.partitions.bin cp .pio/build/esp32dev_dbg/firmware.elf debug/esp32dev/nuki_hub_esp32.elf cp bin/boot_app0.bin debug/esp32dev/boot_app0.bin - echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32dev/flash.sh + cp how-to-flash.txt debug/esp32dev/how-to-flash.txt + echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32dev/flash.sh - name: Build PlatformIO Project esp32-s3_dbg run: | pio run --environment esp32-s3_dbg @@ -111,7 +116,8 @@ jobs: cp .pio/build/esp32-s3_dbg/partitions.bin debug/esp32s3/nuki_hub.partitions.bin cp .pio/build/esp32-s3_dbg/firmware.elf debug/esp32s3/nuki_hub_esp32s3.elf cp bin/boot_app0.bin debug/esp32s3/boot_app0.bin - echo "esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32s3.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32s3/flash.sh + cp how-to-flash.txt debug/esp32s3/how-to-flash.txt + echo "esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32s3.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32s3/flash.sh - name: Build PlatformIO Project esp32-c3_dbg run: | pio run --environment esp32-c3_dbg @@ -121,7 +127,8 @@ jobs: cp .pio/build/esp32-c3_dbg/partitions.bin debug/esp32c3/nuki_hub.partitions.bin cp .pio/build/esp32-c3_dbg/firmware.elf debug/esp32c3/nuki_hub_esp32c3.elf cp bin/boot_app0.bin debug/esp32c3/boot_app0.bin - echo "esptool.py --chip esp32c3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32c3.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32c3/flash.sh + cp how-to-flash.txt debug/esp32c3/how-to-flash.txt + echo "esptool.py --chip esp32c3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32c3.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32c3/flash.sh - name: Build PlatformIO Project esp32solo1_dbg run: | pio run --environment esp32solo1_dbg @@ -131,7 +138,8 @@ jobs: cp .pio/build/esp32solo1_dbg/partitions.bin debug/esp32solo1/nuki_hub.partitions.bin cp .pio/build/esp32solo1_dbg/firmware.elf debug/esp32solo1/nuki_hub_esp32solo1.elf cp bin/boot_app0.bin debug/esp32solo1/boot_app0.bin - echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 bin/boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32solo1.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32solo1/flash.sh + cp how-to-flash.txt debug/esp32solo1/how-to-flash.txt + echo "esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32solo1.bin 0x8000 nuki_hub.partitions.bin" > debug/esp32solo1/flash.sh - name: Upload Artifact esp32dev-debug uses: actions/upload-artifact@v4 with: @@ -152,32 +160,117 @@ jobs: with: name: esp32solo1-debug-assets path: debug/esp32solo1 - release: + name: Release new version needs: build runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags') steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + - name: Download esp32dev + uses: actions/download-artifact@v4 + with: + name: esp32-assets + path: release/esp32dev + - name: Download esp32-s3 + uses: actions/download-artifact@v4 + with: + name: esp32-s3-assets + path: release/esp32s3 + - name: Download esp32-c3 + uses: actions/download-artifact@v4 + with: + name: esp32-c3-assets + path: release/esp32c3 + - name: Download esp32solo1 + uses: actions/download-artifact@v4 + with: + name: esp32solo1-assets + path: release/esp32solo1 - name: Download esp32dev-debug - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: esp32-debug-assets path: debug/esp32dev - + - name: Download esp32-s3-debug + uses: actions/download-artifact@v4 + with: + name: esp32-s3-debug-assets + path: debug/esp32s3 + - name: Download esp32-c3-debug + uses: actions/download-artifact@v4 + with: + name: esp32-c3-debug-assets + path: debug/esp32c3 + - name: Download esp32solo1-debug + uses: actions/download-artifact@v4 + with: + name: esp32solo1-debug-assets + path: debug/esp32solo1 - name: Get the version id: get_version run: echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT - - - name: Build the zip archive from the documentation + - name: Build the zip archive for ESP32 + run: | + cd release/esp32dev + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32.zip * -x "webflash_nuki_hub_esp32.bin" + - name: Build the zip archive for ESP32-S3 + run: | + cd release/esp32s3 + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-S3.zip * -x "webflash_nuki_hub_esp32s3.bin" + - name: Build the zip archive for ESP32-C3 + run: | + cd release/esp32c3 + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-C3.zip * -x "webflash_nuki_hub_esp32c3.bin" + - name: Build the zip archive for ESP32-SOLO1 + run: | + cd release/esp32solo1 + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-SOLO1.zip * + - name: Build the zip archive for ESP32 Debug run: | cd debug/esp32dev - zip -9r ../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-DEBUG.zip * - + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-DEBUG.zip * + - name: Build the zip archive for ESP32-S3 Debug + run: | + cd debug/esp32s3 + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-S3-DEBUG.zip * + - name: Build the zip archive for ESP32-C3 Debug + run: | + cd debug/esp32c3 + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-C3-DEBUG.zip * + - name: Build the zip archive for ESP32-SOLO1 Debug + run: | + cd debug/esp32solo1 + zip -9r ../../NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-SOLO1-DEBUG.zip * - name: Create Release id: create_release uses: ncipollo/release-action@v1 with: prerelease: false + allowUpdates: true + updateOnlyUnreleased: true draft: true - artifacts: "NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-DEBUG.zip" - artifactContentType: application/zip \ No newline at end of file + name: "Nuki Hub ${{ steps.get_version.outputs.VERSION }}" + artifacts: "NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32.zip,NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-S3.zip,NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-C3.zip,NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-SOLO1.zip,NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-DEBUG.zip,NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-S3-DEBUG.zip,NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-C3-DEBUG.zip,NukiHub-${{ steps.get_version.outputs.VERSION }}-ESP32-SOLO1-DEBUG.zip" + artifactContentType: application/zip + - name: Copy binaries to ota and webflash + run: | + cp release/esp32dev/nuki_hub_esp32.bin ota/nuki_hub_esp32.bin + cp release/esp32s3/nuki_hub_esp32s3.bin ota/nuki_hub_esp32s3.bin + cp release/esp32c3/nuki_hub_esp32c3.bin ota/nuki_hub_esp32c3.bin + cp release/esp32solo1/nuki_hub_esp32solo1.bin ota/nuki_hub_esp32solo1.bin + cp release/esp32dev/webflash_nuki_hub_esp32.bin webflash/webflash_nuki_hub_esp32.bin + cp release/esp32s3/webflash_nuki_hub_esp32s3.bin webflash/webflash_nuki_hub_esp32s3.bin + cp release/esp32c3/webflash_nuki_hub_esp32c3.bin webflash/webflash_nuki_hub_esp32c3.bin + rm -rf release + rm -rf debug + rm -rf NukiHub-*.zip + - name: Commit binaries to master + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "Update binaries for version ${{ steps.get_version.outputs.VERSION }}" + file_pattern: 'ota/*.bin webflash/*.bin' + branch: master \ No newline at end of file diff --git a/.gitignore b/.gitignore index b55bea0..dcb8ca9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,13 @@ .idea build +debug +release cmake-build-debug cmake-build-release cmake-build-release-s3 +bin/* +ota/* +webflash/*.bin .pio .vscode .project diff --git a/README.md b/README.md index d9519bb..edd44e0 100644 --- a/README.md +++ b/README.md @@ -45,14 +45,16 @@ As an alternative to Wi-Fi (which is available on any supported ESP32), the foll Note for users upgrading from Nuki Hub 8.21 or lower:
Please go to "MQTT and Network Configuration" and select "Wi-Fi only" as the network device (unless you use other network hardware). -## Installation +## First time installation Flash the firmware to an ESP32. The easiest way to install is to use the web installer using a compatible browser like Chrome/Opera/Edge:
https://technyon.github.io/nuki_hub/
NOTE: Webflash is not available for the ESP32-Solo1

Alternatively download the latest release for your ESP32 model from https://github.com/technyon/nuki_hub/releases
-Unpack the 7z archive and read the included readme.txt for installation instructions for either "Espressif Flash Download Tools" or "esptool". +Unpack the zip archive and read the included how-to-flash.txt for installation instructions for either "Espressif Flash Download Tools" or "esptool".
+
+Updates can be installed using the Nuki Hub web configurator ## Initial setup (Network and MQTT) diff --git a/how-to-flash.txt b/how-to-flash.txt new file mode 100644 index 0000000..9d41121 --- /dev/null +++ b/how-to-flash.txt @@ -0,0 +1,79 @@ +Project homepage +-- +https://github.com/technyon/nuki_hub + +Howto flash (Webflash) +-- + +-The easiest way to install is to use the web installer using a compatible browser like Chrome/Opera/Edge +-Open https://technyon.github.io/nuki_hub/ +-Connect your ESP to the computer using USB +-Click on "Connect" +-Select your device from the list and click on "Connect" +-Select "INSTALL NUKIHUB" +-Optionally select "Erase device" +-Click on "Next" +-Click on "Install" + +NOTE: Webflash is not available for the ESP32-Solo1 + +Howto flash (Espressif Flash Download Tools) +-- + +- Download the Espressif Flash Download Tools (https://www.espressif.com/en/support/download/other-tools) +- Unpack and start tool +- Add all four bin files with the corresponding address: + +ESP32 +e000 boot_app0.bin +1000 bootloader.bin +8000 nuki_hub.partitions.bin +10000 nuki_hub_esp32.bin + +ESP32-S3 +e000 boot_app0.bin +0 bootloader.bin +8000 nuki_hub.partitions.bin +10000 nuki_hub_esp32s3.bin + +ESP32-C3 +e000 boot_app0.bin +0 bootloader.bin +8000 nuki_hub.partitions.bin +10000 nuki_hub_esp32c3.bin + +ESP32-Solo1 +e000 boot_app0.bin +1000 bootloader.bin +8000 nuki_hub.partitions.bin +10000 nuki_hub_esp32solo1.bin + +Make sure the checkmarks for all files are enabled. + +- Select the COM-Port the ESP device is connected to +- Click "START" +- The flash process should start. If it doesn't you eventually have to press a button (labeled BOOT or similar) or short the corresponding PIN on the ESP device + + +Howto flash (esptool) +-- + +As an alternative to the Download Tools, you can also use the esptool from the Espressif SDK. The command line to flash looks like this: + +ESP32 + +esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32.bin 0x8000 nuki_hub.partitions.bin + +ESP-S3 + +esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32s3.bin 0x8000 nuki_hub.partitions.bin + +ESP-C3 + +esptool.py --chip esp32c3 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x0 bootloader.bin 0x10000 nuki_hub_esp32c3.bin 0x8000 nuki_hub.partitions.bin + +ESP32-Solo1 + +esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq keep --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader.bin 0x10000 nuki_hub_esp32solo1.bin 0x8000 nuki_hub.partitions.bin + +Adjust the serial device and path to the binaries if necessary. \ No newline at end of file diff --git a/src/WebCfgServer.cpp b/src/WebCfgServer.cpp index 1ac17aa..8d9ad38 100644 --- a/src/WebCfgServer.cpp +++ b/src/WebCfgServer.cpp @@ -1178,18 +1178,12 @@ void WebCfgServer::buildOtaHtml(String &response, bool errored) response.concat("
Choose the updated nuki_hub.bin file to upload:
"); response.concat("
"); - - if(_preferences->getBool(preference_check_updates)) - { - response.concat("
"); - - response.concat("

"); - } - + response.concat("
"); + response.concat("

"); response.concat("
Initiating Over-the-air update. This will take about two minutes, please be patient.
You will be forwarded automatically when the update is complete.
"); response.concat("