Merge remote-tracking branch 'upstream/master' into new-commands

This commit is contained in:
iranl
2025-04-14 19:59:29 +02:00
16 changed files with 192 additions and 130 deletions

View File

@@ -113,23 +113,22 @@ jobs:
run: |
mkdir -p ota/beta/
mkdir -p ota/master/
mkdir -p webflash/
mkdir -p resources/
mkdir -p src/
cp -vf release/*/nuki_hub_*.bin ota/beta/
cp -vf master/resources/ota_manifest.py resources/ota_manifest.py
cp -vf master/src/Config.h src/Config.h
python3 resources/ota_manifest.py beta $Version
find * -not -path "ota*" -not -path "webflash*" -delete
find * -not -path "ota*" -delete
rm -rf .github .gitignore .gitmodules
touch ota/beta/empty
touch ota/beta/dummy.bin
touch ota/master/empty
touch webflash/empty
- name: Commit binaries to binary
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Update binaries"
file_pattern: 'ota/* ota/master/* ota/beta/* webflash/*'
file_pattern: 'ota/* ota/master/* ota/beta/*'
branch: binary
skip_dirty_check: true
skip_fetch: true

View File

@@ -136,23 +136,21 @@ jobs:
run: |
mkdir -p ota/beta/
mkdir -p ota/master/
mkdir -p webflash/
mkdir -p resources/
mkdir -p src/
cp -vf release/*/nuki_hub_*.bin ota/master/
cp -vf master/resources/ota_manifest.py resources/ota_manifest.py
cp -vf master/src/Config.h src/Config.h
python3 resources/ota_manifest.py master $Version
find * -not -path "ota*" -not -path "webflash*" -delete
find * -not -path "ota*" -delete
rm -rf .github .gitignore .gitmodules
touch ota/beta/empty
touch ota/master/empty
touch webflash/empty
- name: Commit binaries to binary
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Update binaries"
file_pattern: 'ota/* ota/master/* ota/beta/* webflash/*'
file_pattern: 'ota/* ota/master/* ota/beta/*'
branch: binary
skip_dirty_check: true
skip_fetch: true

View File

@@ -124,7 +124,7 @@ jobs:
echo "${FOLDER} -- ${ZIPFILE}"
cd $FOLDER
zip -9r ../../${ZIPFILE} * -x "webflash_nuki_hub_*.bin"
zip -9r ../../${ZIPFILE} *
ARTIFACTS="${ARTIFACTS}${ZIPFILE},"
cd ../..
@@ -140,7 +140,7 @@ jobs:
prerelease: false
allowUpdates: true
updateOnlyUnreleased: false
draft: false
draft: true
generateReleaseNotes: true
makeLatest: true
name: "Nuki Hub ${{ steps.get_version.outputs.VERSION }}"
@@ -148,32 +148,29 @@ jobs:
artifacts: ${{ steps.zip.outputs.artifacts }}
artifactContentType: application/zip
tag: ${{ steps.get_version.outputs.VERSION }}
- name: Copy binaries to ota and webflash and remove beta
- name: Copy binaries to ota and remove beta
env:
Version: ${{ github.run_id }}.${{ github.run_number }}.${{ github.run_attempt }}
run: |
mkdir -p ota/beta/
mkdir -p ota/master/
mkdir -p webflash/
mkdir -p resources/
mkdir -p src/
cp -vf release/*/nuki_hub_*.bin ota/
cp -vf release/*/webflash_nuki_hub_*.bin webflash/
cp -vf release/*/nuki_hub_*.bin ota/
cp -vf master/resources/ota_manifest.py resources/ota_manifest.py
cp -vf master/src/Config.h src/Config.h
python3 resources/ota_manifest.py release $Version
python3 resources/ota_manifest.py beta none
find * -not -path "ota*" -not -path "webflash*" -delete
find * -not -path "ota*" -delete
rm -rf ota/beta/*.bin
rm -rf .github .gitignore .gitmodules
touch ota/beta/empty
touch ota/master/empty
touch webflash/empty
- name: Commit binaries to binary
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Update binaries"
file_pattern: 'ota/* ota/master/* ota/beta/* webflash/*'
file_pattern: 'ota/* ota/master/* ota/beta/*'
branch: binary
skip_dirty_check: true
skip_fetch: true

View File

@@ -15,7 +15,7 @@ Feel free to join us on Discord: https://discord.gg/9nPq85bP4p
## Supported devices
<b>Supported ESP32 devices:</b>
- Nuki Hub is compiled against all ESP32 models with Wi-Fi and Bluetooh Low Energy (BLE) which are supported by ESP-IDF 5.3.2 and Arduino Core 3.1.3.
- Nuki Hub is compiled against all ESP32 models with Wi-Fi and Bluetooh Low Energy (BLE) which are supported by ESP-IDF 5.4.1 and Arduino Core 3.2.0.
- Tested stable builds are provided for the ESP32, ESP32-S3, ESP32-C3, ESP32-C6 and ESP32-H2.
- Untested builds are provided for the ESP32-P4 (with the ESP32-C6-MINI-1 module for BLE and WiFi) and ESP32-Solo1 (as the developers don't own one).
@@ -58,6 +58,9 @@ See the "[Connecting via Ethernet](#connecting-via-ethernet-optional)" section f
We don't recommend using single-core ESP32 devices (ESP32-C3, ESP32-C6, ESP32-H2, ESP32-Solo1).<br>
Although Nuki Hub supports single-core devices, Nuki Hub uses both CPU cores (if available) to process tasks (e.g. HTTP server/MQTT client/BLE scanner/BLE client) and thus runs much better on dual-core devices.<br>
We also don't recommend using the original ESP32 or ESP32-Solo1 devices because these devices experience unexpected crashes related to the (closed-source) BLE controller.<br>
In all newer models (e.g. ESP32-S3, ESP32-P4, ESP32-C3, ESP32-C6, ESP32-H2) these unexpected crashed haven't been seen.
When buying a new device in 2025 we can only recommend the ESP32-S3 with PSRAM (look for an ESP32-S3 with the designation N>=4 and R>=2 such as an ESP32-S3 N16R8).<br>
The ESP32-S3 is a dual-core CPU with many GPIO's, ability to enlarge RAM using PSRAM, ability to connect Ethernet modules over SPI and optionally power the device with a PoE splitter.<br>
The only functions missing from the ESP32-S3 as compared to other ESP devices is the ability to use some Ethernet modules only supported by the original ESP32 (and ESP32-P4) and the ability to connect over WIFI6 (C6 or ESP32-P4 with C6 module)
@@ -71,17 +74,15 @@ Other considerations:
Devices ranked best-to-worst:
- ESP32-P4 with ESP32-C6-MINI-1 module (UNTESTED)
- ESP32-S3 with PSRAM
- ......
- ...... <br>
(Devices below will not support some Nuki Hub functions, be slower and/or are more likely to experience unexpected crashes)
- ESP32-S3 without PSRAM
- ......
- ESP32 with PSRAM
- ......<br>
(Devices below will not support some Nuki Hub functions)
- ......
- ESP32-S3 without PSRAM
- ESP32 without PSRAM
- ...... <br>
(Devices below will not support more Nuki Hub functions)
- ......
(Devices below will not support more Nuki Hub functions, be slower and/or are more likely to experience unexpected crashes)
- ESP32-C6
- ESP32-solo1
- ESP32-C3
@@ -128,7 +129,6 @@ This project is free to use for everyone. However if you feel like donating, you
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:<br>
https://technyon.github.io/nuki_hub/<br>
NOTE: Webflash is not available for the ESP32-Solo1<br>
<br>
Alternatively download the latest release for your ESP32 model from https://github.com/technyon/nuki_hub/releases<br>
Unpack the zip archive and read the included how-to-flash.txt for installation instructions for either "Espressif Flash Download Tools" or "esptool".<br>
@@ -211,7 +211,6 @@ You can check on the info page of the Web configurator if PSRAM is available.
Note that there are two builds of Nuki Hub for the ESP32-S3 available.<br>
One for devices with no or Quad SPI PSRAM and one for devices with Octal SPI PSRAM.<br>
Webflash will automatically flash the no/Quad SPI PSRAM build when an ESP32-S3 is connected.<br>
If your ESP32-S3 device has PSRAM but it is not detected please switch to the other S3 binary.<br>
You can do this by flashing the correct binaries manually or by selecting the option to switch S3 binary build from the Firmware Update page of the Web Configurator.
@@ -225,7 +224,7 @@ In a browser navigate to the IP address assigned to the ESP32.
#### Network Configuration
- Hostname (needs to be unique, "nukihub" is not allowed): Set the hostname for the Nuki Hub ESP, will also be used as the MQTT client ID. Needs to be unique.
- Hostname (needs to be unique): Set the hostname for the Nuki Hub ESP, will also be used as the MQTT client ID. Needs to be unique.
- Network hardware: "Wi-Fi only" by default, set to one of the specified ethernet modules if available, see the "Supported Ethernet devices" and "[Connecting via Ethernet](#connecting-via-ethernet-optional)" section of this README.
- Home Assistant device configuration URL: When using Home Assistant discovery the link to the Nuki Hub Web Configuration will be published to Home Assistant. By default when this setting is left empty this will link to the current IP of the Nuki Hub. When using a reverse proxy to access the Web Configuration you can set a custom URL here.
- RSSI Publish interval: Set to a positive integer to set the amount of seconds between updates to the maintenance/wifiRssi MQTT topic with the current Wi-Fi RSSI, set to -1 to disable, default 60.

View File

@@ -1,37 +1,104 @@
<!DOCTYPE html>
<title>Nuki Hub web installer</title>
<html>
<html lang="en" class="">
<head>
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
<title>Install NukiHub</title>
<style>
div,input,select{padding:5px;font-size:1em;}
input{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;background:#dddddd;color:#000000;}
input[type=checkbox],input[type=radio]{width:1em;margin-right:6px;vertical-align:-1px;}
input[type=range]{width:99%;}
select{width:100%;background:#dddddd;color:#000000;}
body{text-align:center;font-family:verdana,sans-serif;background:#252525;}
button{border:0;border-radius:0.3rem;background:#1fa3ec;color:#faffff;line-height:2.4rem;font-size:1.2rem;width:100%;-webkit-transition-duration:0.4s;transition-duration:0.4s;cursor:pointer;}
button:hover{background:#0e70a4;}
a{color:#1fa3ec;text-decoration:none;}
.pick-variant{margin-bottom:16px;}
</style>
<script type="module" src="https://unpkg.com/esp-web-tools/dist/web/install-button.js?module"></script>
<script>
window.addEventListener("load", function(event) {
const button = document.querySelector("esp-web-install-button");
const selectEl = document.querySelector("#pick-variant-selector");
<body>
<h1>Nuki Hub</h1>
<div id="main" style="display: none;">
<br>
<script
type="module"
src="https://unpkg.com/esp-web-tools/dist/web/install-button.js?module">
</script>
<esp-web-install-button id="installButton" manifest="https://raw.githubusercontent.com/technyon/nuki_hub/binary/webflash/manifest.json"></esp-web-install-button>
<br><br><br><br>
Note: If flashing doesn't work, press and hold the "BOOT" switch, then click "Install".
</div>
<div id="notSupported" style="display: none;">
Your browser does not support the Web Serial API. Try a different browser like Chrome, Opera, Edge.
</div>
<script>
if(navigator.serial){
document.getElementById("notSupported").style.display = 'none';
document.getElementById("main").style.display = 'block';
} else {
document.getElementById("notSupported").style.display = 'block';
document.getElementById("main").style.display = 'none';
}
</script>
</body>
</html>
fetch("https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/dummy.bin").then(function(response) {
if (!response.ok) {
throw new Error("Not 2xx response", {cause: response});
}
else {
for (let i = 0; i < selectEl.options.length; i++) {
const text = selectEl.options[i].value;
if (text == '') {
selectEl.remove(i);
i--;
}
}
}
}).catch(function(err) {
for (let i = 0; i < selectEl.options.length; i++) {
const text = selectEl.options[i].value;
if (text.includes('/beta/')) {
selectEl.remove(i);
i--;
}
}
});
try{
button.manifest = "https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/webflash_manifest.json";
selectEl.addEventListener("change", () => {
button.manifest = selectEl.value;
});
}
catch(e){
console.log(e);
}
},{ once: true });
</script>
</head>
<body>
<div style='display:inline-block;color:#eaeaea;min-width:340px;'>
<h1>Install NukiHub</h1>
<div class='pick-variant'>
<ol style='text-align:left'>
<li>Connect the ESP device to your computer</br>using USB or serial-to-USB adapter</li></br>
<li>Select the firmware variant suitable for</br>your device</li></br>
<li>Click "Connect" and select the correct port</br>or find help if <a href="https://github.com/technyon/nuki_hub" target='_blank' style='color:#aaa;'>no device found</a></li>
</ol>
</br>
</br>
<div id="URL_based_input" class="collapsible">
<select id="pick-variant-selector">
<optgroup label="Release version">
<option label="NukiHub Default (ESP32, ESP32-C3, ESP32-C6, ESP32-S3, ESP32-P4)" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/webflash_manifest.json"></option>
<option label="NukiHub ESP32-S3 OCTAL PSRAM" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/webflash_manifest_s3octal.json"></option>
<option label="NukiHub ESP32-SOLO1" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/webflash_manifest_solo1.json"></option>
<option label="NukiHub GL-S10" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/webflash_manifest_gls10.json"></option>
</optgroup>
<optgroup label="Beta version">
<option class="beta" label="NukiHub Default (ESP32, ESP32-C3, ESP32-C6, ESP32-S3, ESP32-P4)" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/webflash_manifest.json"></option>
<option class="beta" label="NukiHub ESP32-S3 OCTAL PSRAM" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/webflash_manifest_s3octal.json"></option>
<option class="beta" label="NukiHub GL-S10" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/webflash_manifest_gls10.json"></option>
<option class="beta" label="NukiHub ESP32-SOLO1" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/webflash_manifest_solo1.json"></option>
<option class="beta" label="No Beta available" disabled value=""></option>
</optgroup>
<optgroup label="Development version">
<option label="NukiHub Default (ESP32, ESP32-C3, ESP32-C6, ESP32-S3, ESP32-P4)" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/master/webflash_manifest.json"></option>
<option label="NukiHub ESP32-S3 OCTAL PSRAM" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/master/webflash_manifest_s3octal.json"></option>
<option label="NukiHub ESP32-SOLO1" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/master/webflash_manifest_solo1.json"></option>
<option label="NukiHub GL-S10" value="https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/master/webflash_manifest_gls10.json"></option>
</optgroup>
</select>
</div>
</br>
<esp-web-install-button id="inst" style='text-align:center'>
<i slot="unsupported">Your browser does not support Web Serial.</br>Open this page in Google Chrome or</br>Microsoft Edge instead.</i>
</esp-web-install-button>
</div>
<div style='text-align:right;font-size:11px;'>
<hr/>
<a href="https://esphome.github.io/esp-web-tools/" target='_blank' style='color:#aaa;'>NukiHub Installer inspired by Tasmota and ESP Web Tools</a>
</div>
</div>
</body>
</html>

View File

@@ -28,11 +28,13 @@ def copy_files(source, target, env):
project_dir = env.get('PROJECT_DIR')
board = get_board_name(env)
if "partitions.bin" in file.name:
shutil.copy(file, f"{target_dir}/nuki_hub.{file.name}")
elif "firmware" in file.stem:
if "firmware" in file.stem:
shutil.copy(file, f"{target_dir}/nuki_hub_{board}{file.suffix}")
shutil.copy(f"{project_dir}/updater/release/{board}/updater.bin", f"{target_dir}/nuki_hub_updater_{board}{file.suffix}")
elif "bootloader" in file.stem:
shutil.copy(file, f"{target_dir}/nuki_hub_bootloader_{board}{file.suffix}")
elif "partitions" in file.stem:
shutil.copy(file, f"{target_dir}/nuki_hub_partitions_{board}{file.suffix}")
else:
shutil.copy(file, f"{target_dir}/{file.name}")
@@ -79,4 +81,4 @@ env.AddPostAction("$BUILD_DIR/partitions.bin", copy_files)
env.AddPostAction("$BUILD_DIR/bootloader.bin", copy_files)
env.AddPostAction("$BUILD_DIR/firmware.elf", copy_files)
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", merge_bin)
#env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", merge_bin)

View File

@@ -83,6 +83,8 @@ extends = env:esp32
board = nuki-esp32gls10
board_build.cmake_extra_args =
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.defaults.esp32;sdkconfig.gls10.defaults"
build_flags =
${env:esp32.build_flags}
-DNUKI_TARGET_GL_S10=y
[env:esp32-c3]
@@ -164,13 +166,10 @@ build_flags =
extends = env:esp32-gl-s10
custom_build = debug
board_build.cmake_extra_args =
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.defaults.esp32;sdkconfig.gls10.defaults"
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.defaults.esp32;sdkconfig.gls10.defaults"
build_flags =
${env.build_flags}
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
-DCONFIG_NIMBLE_CPP_LOG_LEVEL=0
-DCONFIG_BT_NIMBLE_LOG_LEVEL=0
-DDEBUG_NUKIHUB
${env:esp32_dbg.build_flags}
-DNUKI_TARGET_GL_S10=y
[env:esp32-c3_dbg]
extends = env:esp32-c3

View File

@@ -24,66 +24,66 @@ Howto flash (Espressif Flash Download Tools)
ESP32
e000 boot_app0.bin
1000 bootloader.bin
8000 nuki_hub.partitions.bin
1000 nuki_hub_bootloader_esp32.bin
8000 nuki_hub_partitions_esp32.bin
10000 nuki_hub_esp32.bin
280000 nuki_hub_updater_esp32.bin
270000 nuki_hub_updater_esp32.bin
ESP32-GL-S10
e000 boot_app0.bin
1000 bootloader.bin
8000 nuki_hub.partitions.bin
1000 nuki_hub_bootloader_esp32.bin
8000 nuki_hub_partitions_esp32.bin
10000 nuki_hub_esp32.bin
280000 nuki_hub_updater_esp32.bin
270000 nuki_hub_updater_esp32.bin
ESP32-S3
e000 boot_app0.bin
0 bootloader.bin
8000 nuki_hub.partitions.bin
0 nuki_hub_bootloader_esp32s3.bin
8000 nuki_hub_partitions_esp32s3.bin
10000 nuki_hub_esp32s3.bin
280000 nuki_hub_updater_esp32s3.bin
270000 nuki_hub_updater_esp32s3.bin
ESP32-S3-OCT
e000 boot_app0.bin
0 bootloader.bin
8000 nuki_hub.partitions.bin
0 nuki_hub_bootloader_esp32s3oct.bin
8000 nuki_hub_partitions_esp32s3oct.bin
10000 nuki_hub_esp32s3oct.bin
280000 nuki_hub_updater_esp32s3oct.bin
270000 nuki_hub_updater_esp32s3oct.bin
ESP32-C3
e000 boot_app0.bin
0 bootloader.bin
8000 nuki_hub.partitions.bin
0 nuki_hub_bootloader_esp32c3.bin
8000 nuki_hub_partitions_esp32c3.bin
10000 nuki_hub_esp32c3.bin
280000 nuki_hub_updater_esp32c3.bin
270000 nuki_hub_updater_esp32c3.bin
ESP32-C6
e000 boot_app0.bin
0 bootloader.bin
8000 nuki_hub.partitions.bin
0 nuki_hub_bootloader_esp32c6.bin
8000 nuki_hub_partitions_esp32c6.bin
10000 nuki_hub_esp32c6.bin
280000 nuki_hub_updater_esp32c6.bin
270000 nuki_hub_updater_esp32c6.bin
ESP32-H2
e000 boot_app0.bin
0 bootloader.bin
8000 nuki_hub.partitions.bin
0 nuki_hub_bootloader_esp32h2.bin
8000 nuki_hub_partitions_esp32h2.bin
10000 nuki_hub_esp32h2.bin
280000 nuki_hub_updater_esp32h2.bin
270000 nuki_hub_updater_esp32h2.bin
ESP32-P4
e000 boot_app0.bin
0 bootloader.bin
8000 nuki_hub.partitions.bin
0 nuki_hub_bootloader_esp32p4.bin
8000 nuki_hub_partitions_esp32p4.bin
10000 nuki_hub_esp32p4.bin
280000 nuki_hub_updater_esp32p4.bin
270000 nuki_hub_updater_esp32p4.bin
ESP32-SOLO1
e000 boot_app0.bin
1000 bootloader.bin
8000 nuki_hub.partitions.bin
1000 nuki_hub_bootloader_esp32-solo1.bin
8000 nuki_hub_partitions_esp32-solo1.bin
10000 nuki_hub_esp32-solo1.bin
280000 nuki_hub_updater_esp32-solo1.bin
270000 nuki_hub_updater_esp32-solo1.bin
Make sure the checkmarks for all files are enabled.
@@ -99,38 +99,38 @@ As an alternative to the Download Tools, you can also use the esptool from the E
## 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 0x270000 nuki_hub_updater_esp32.bin 0x8000 nuki_hub.partitions.bin
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 nuki_hub_bootloader_esp32.bin 0x10000 nuki_hub_esp32.bin 0x270000 nuki_hub_updater_esp32.bin 0x8000 nuki_hub_partitions_esp32.bin
## ESP32-GL-S10
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 0x270000 nuki_hub_updater_esp32.bin 0x8000 nuki_hub.partitions.bin
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 nuki_hub_bootloader_esp32.bin 0x10000 nuki_hub_esp32.bin 0x270000 nuki_hub_updater_esp32.bin 0x8000 nuki_hub_partitions_esp32.bin
## ESP32-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 0x270000 nuki_hub_updater_esp32s3.bin 0x8000 nuki_hub.partitions.bin
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 nuki_hub_bootloader_esp32s3.bin 0x10000 nuki_hub_esp32s3.bin 0x270000 nuki_hub_updater_esp32s3.bin 0x8000 nuki_hub_partitions_esp32s3.bin
## ESP32-S3-OCT
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_esp32s3oct.bin 0x270000 nuki_hub_updater_esp32s3oct.bin 0x8000 nuki_hub.partitions.bin
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 nuki_hub_bootloader_esp32s3oct.bin 0x10000 nuki_hub_esp32s3oct.bin 0x270000 nuki_hub_updater_esp32s3oct.bin 0x8000 nuki_hub_partitions_esp32s3oct.bin
## ESP32-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 0x270000 nuki_hub_updater_esp32c3.bin 0x8000 nuki_hub.partitions.bin
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 nuki_hub_bootloader_esp32c3.bin 0x10000 nuki_hub_esp32c3.bin 0x270000 nuki_hub_updater_esp32c3.bin 0x8000 nuki_hub_partitions_esp32c3.bin
## ESP32-C6
esptool.py --chip esp32c6 --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_esp32c6.bin 0x270000 nuki_hub_updater_esp32c6.bin 0x8000 nuki_hub.partitions.bin
esptool.py --chip esp32c6 --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 nuki_hub_bootloader_esp32c6.bin 0x10000 nuki_hub_esp32c6.bin 0x270000 nuki_hub_updater_esp32c6.bin 0x8000 nuki_hub_partitions_esp32c6.bin
## ESP32-H2
esptool.py --chip esp32h2 --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_esp32h2.bin 0x270000 nuki_hub_updater_esp32h2.bin 0x8000 nuki_hub.partitions.bin
esptool.py --chip esp32h2 --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 nuki_hub_bootloader_esp32h2.bin 0x10000 nuki_hub_esp32h2.bin 0x270000 nuki_hub_updater_esp32h2.bin 0x8000 nuki_hub_partitions_esp32h2.bin
## ESP32-P4
esptool.py --chip esp32p4 --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_esp32p4.bin 0x270000 nuki_hub_updater_esp32p4.bin 0x8000 nuki_hub.partitions.bin
esptool.py --chip esp32p4 --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 nuki_hub_bootloader_esp32p4.bin 0x10000 nuki_hub_esp32p4.bin 0x270000 nuki_hub_updater_esp32p4.bin 0x8000 nuki_hub_partitions_esp32p4.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_esp32-solo1.bin 0x270000 nuki_hub_updater_esp32-solo1.bin 0x8000 nuki_hub.partitions.bin
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 nuki_hub_bootloader_esp32-solo1.bin 0x10000 nuki_hub_esp32-solo1.bin 0x270000 nuki_hub_updater_esp32-solo1.bin 0x8000 nuki_hub_partitions_esp32-solo1.bin
Adjust the serial device and path to the binaries if necessary.

View File

@@ -9,7 +9,6 @@ CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=3072
# REDUCE RAM USAGE
CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y
CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH=y
CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=n
CONFIG_ESP32_REV_MIN=3
CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=n
CONFIG_SPI_MASTER_ISR_IN_IRAM=n
@@ -165,4 +164,4 @@ CONFIG_HTTPD_MAX_REQ_HDR_LEN=2048
CONFIG_HTTPD_MAX_URI_LEN=512
CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
CONFIG_HTTPD_PURGE_BUF_LEN=32
CONFIG_HTTPD_WS_SUPPORT=y
CONFIG_HTTPD_WS_SUPPORT=y

View File

@@ -2,10 +2,10 @@
#include "sdkconfig.h"
#define NUKI_HUB_VERSION "9.10"
#define NUKI_HUB_VERSION_INT (uint32_t)910
#define NUKI_HUB_VERSION "9.11"
#define NUKI_HUB_VERSION_INT (uint32_t)911
#define NUKI_HUB_BUILD "unknownbuildnr"
#define NUKI_HUB_DATE "2025-04-04"
#define NUKI_HUB_DATE "2025-04-06"
#define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest"
#define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json"
@@ -109,17 +109,17 @@
#define BOOT_BUTTON_GPIO (gpio_num_t)0
#elif defined(NUKI_TARGET_GL_S10)
#define GITHUB_LATEST_RELEASE_BINARY_URL "https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/nuki_hub_esp32-gl-s10.bin"
#define GITHUB_LATEST_UPDATER_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/nuki_hub_updater_esp32.bin"
#define GITHUB_LATEST_UPDATER_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/nuki_hub_updater_esp32gls10.bin"
#define GITHUB_BETA_RELEASE_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/nuki_hub_esp32-gl-s10.bin"
#define GITHUB_BETA_UPDATER_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/nuki_hub_updater_esp32.bin"
#define GITHUB_BETA_UPDATER_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/beta/nuki_hub_updater_esp32gls10.bin"
#define GITHUB_MASTER_RELEASE_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/master/nuki_hub_esp32-gl-s10.bin"
#define GITHUB_MASTER_UPDATER_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/master/nuki_hub_updater_esp32.bin"
#define GITHUB_MASTER_UPDATER_BINARY_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/master/nuki_hub_updater_esp32gls10.bin"
#define GITHUB_LATEST_RELEASE_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/nuki_hub_esp32-gl-s10.bin"
#define GITHUB_LATEST_UPDATER_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/nuki_hub_updater_esp32.bin"
#define GITHUB_LATEST_UPDATER_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/nuki_hub_updater_esp32gls10.bin"
#define GITHUB_BETA_RELEASE_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/beta/nuki_hub_esp32-gl-s10.bin"
#define GITHUB_BETA_UPDATER_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/beta/nuki_hub_updater_esp32.bin"
#define GITHUB_BETA_UPDATER_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/beta/nuki_hub_updater_esp32gls10.bin"
#define GITHUB_MASTER_RELEASE_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/master/nuki_hub_esp32-gl-s10.bin"
#define GITHUB_MASTER_UPDATER_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/master/nuki_hub_updater_esp32.bin"
#define GITHUB_MASTER_UPDATER_BINARY_URL_DBG (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/debug/master/nuki_hub_updater_esp32gls10.bin"
#define GITHUB_LATEST_RELEASE_BINARY_URL_OTHER (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/nuki_hub_esp32.bin"
#define GITHUB_LATEST_UPDATER_BINARY_URL_OTHER (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/nuki_hub_updater_esp32.bin"
#define NUKI_HUB_HW (char*)"ESP32-GL-S10"

View File

@@ -89,7 +89,7 @@ private:
const std::vector<uint8_t> _availablePins = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 19, 20, 21 };
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
//Based on https://github.com/atomic14/esp32-s3-pinouts?tab=readme-ov-file and https://docs.espressif.com/projects/esp-idf/en/v5.3/esp32s3/api-reference/peripherals/gpio.html and https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf
const std::vector<uint8_t> _availablePins = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 };
const std::vector<uint8_t> _availablePins = { 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 38, 39, 40, 41, 42 };
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
//Based on https://docs.espressif.com/projects/esp-idf/en/v5.3/esp32c6/api-reference/peripherals/gpio.html and https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf
const std::vector<uint8_t> _availablePins = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23 };

View File

@@ -284,7 +284,7 @@ void HomeAssistantDiscovery::publishHASSNukiHubConfig()
"nuki_hub_version",
_nukiHubUidString,
"_nuki_hub_version",
"Nuki Hub version",
"Version",
_hostname.c_str(),
_baseTopic.c_str(),
String("~") + mqtt_topic_info_nuki_hub_version,
@@ -303,7 +303,7 @@ void HomeAssistantDiscovery::publishHASSNukiHubConfig()
"nuki_hub_build",
_nukiHubUidString,
"_nuki_hub_build",
"Nuki Hub build",
"Build",
_hostname.c_str(),
_baseTopic.c_str(),
String("~") + mqtt_topic_info_nuki_hub_build,
@@ -356,7 +356,7 @@ void HomeAssistantDiscovery::publishHASSNukiHubConfig()
"nuki_hub_latest",
_nukiHubUidString,
"_nuki_hub_latest",
"Nuki Hub latest",
"Latest Version",
_hostname.c_str(),
_baseTopic.c_str(),
String("~") + mqtt_topic_info_nuki_hub_latest,
@@ -381,7 +381,7 @@ void HomeAssistantDiscovery::publishHASSNukiHubConfig()
"nuki_hub_update",
_nukiHubUidString,
"_nuki_hub_update",
"Nuki Hub firmware update",
"Firmware update",
_hostname.c_str(),
_baseTopic.c_str(),
String("~") + mqtt_topic_info_nuki_hub_version,
@@ -403,7 +403,7 @@ void HomeAssistantDiscovery::publishHASSNukiHubConfig()
"nuki_hub_update",
_nukiHubUidString,
"_nuki_hub_update",
"Nuki Hub firmware update",
"Firmware update",
_hostname.c_str(),
_baseTopic.c_str(),
String("~") + mqtt_topic_info_nuki_hub_version,

View File

@@ -217,7 +217,7 @@ void NukiNetwork::initialize()
{
_hostname = _preferences->getString(preference_hostname, "");
if(_hostname == "" || _hostname == "nukihub")
if(_hostname == "")
{
char _nukiHubUidString[20];
uint8_t mac[8];
@@ -265,7 +265,7 @@ void NukiNetwork::initialize()
_hostname = _preferences->getString(preference_hostname, "");
if(_hostname == "" || _hostname == "nukihub")
if(_hostname == "")
{
char _nukiHubUidString[20];
uint8_t mac[8];

View File

@@ -563,7 +563,7 @@ private:
};
std::vector<char*> _bytePrefs =
{
preference_acl, preference_conf_info_enabled, preference_conf_lock_basic_acl, preference_conf_lock_advanced_acl, preference_conf_opener_basic_acl,
preference_acl, preference_conf_lock_basic_acl, preference_conf_lock_advanced_acl, preference_conf_opener_basic_acl,
preference_conf_opener_advanced_acl, preference_gpio_configuration
};
std::vector<char*> _intPrefs =

View File

@@ -3174,7 +3174,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
}
else if(key == "HOSTNAME")
{
if(_preferences->getString(preference_hostname, "") != value && value != "nukihub")
if(_preferences->getString(preference_hostname, "") != value)
{
_preferences->putString(preference_hostname, value);
Log->print("Setting changed: ");
@@ -5104,7 +5104,7 @@ esp_err_t WebCfgServer::buildNetworkConfigHtml(PsychicRequest *request, PsychicR
response.print("<input type=\"hidden\" name=\"page\" value=\"savecfg\">");
response.print("<h3>Network Configuration</h3>");
response.print("<table>");
printInputField(&response, "HOSTNAME", "Hostname (needs to be unique, \"nukihub\" is not allowed)", _preferences->getString(preference_hostname).c_str(), 100, "");
printInputField(&response, "HOSTNAME", "Hostname (needs to be unique)", _preferences->getString(preference_hostname).c_str(), 100, "");
printDropDown(&response, "NWHW", "Network hardware", String(_preferences->getInt(preference_network_hardware)), getNetworkDetectionOptions(), "");
printInputField(&response, "HASSCUURL", "Home Assistant device configuration URL (empty to use http://LOCALIP; fill when using a reverse proxy for example)", _preferences->getString(preference_mqtt_hass_cu_url).c_str(), 261, "");
#ifndef CONFIG_IDF_TARGET_ESP32H2

View File

@@ -72,6 +72,8 @@ extends = env:updater_esp32
board = nuki-esp32gls10
board_build.cmake_extra_args =
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.esp32;sdkconfig.gls10.defaults"
build_flags =
${env.build_flags}
-DNUKI_TARGET_GL_S10=y
[env:updater_esp32-c3]