Merge branch 'master' into refactor_network_devices
# Conflicts: # networkDevices/EthLan8720Device.cpp # networkDevices/W5500Device.cpp
This commit is contained in:
48
Docker/Dockerfile
Normal file
48
Docker/Dockerfile
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
FROM eclipse-temurin:11-jdk-jammy AS builder
|
||||||
|
|
||||||
|
RUN set -ex && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y git cmake xz-utils python3 python3-serial
|
||||||
|
|
||||||
|
RUN curl -L "https://downloads.arduino.cc/arduino-1.8.19-linux64.tar.xz" -o /tmp/arduino-ide.tar.xz
|
||||||
|
RUN tar -xf /tmp/arduino-ide.tar.xz --directory ~/
|
||||||
|
|
||||||
|
RUN cd ~/arduino* && \
|
||||||
|
./install.sh && \
|
||||||
|
./arduino --pref "boardsmanager.additional.urls=https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" --save-prefs && \
|
||||||
|
./arduino --install-boards esp32:esp32:2.0.9
|
||||||
|
|
||||||
|
RUN git clone --recurse-submodules https://github.com/technyon/Arduino-CMake-Toolchain.git ~/Arduino-CMake-Toolchain
|
||||||
|
|
||||||
|
COPY icon /usr/src/nuki_hub/icon
|
||||||
|
COPY include /usr/src/nuki_hub/include
|
||||||
|
COPY lib /usr/src/nuki_hub/lib
|
||||||
|
COPY networkDevices /usr/src/nuki_hub/networkDevices
|
||||||
|
COPY CMakeLists.txt /usr/src/nuki_hub
|
||||||
|
COPY index.html /usr/src/nuki_hub
|
||||||
|
COPY *.h /usr/src/nuki_hub
|
||||||
|
COPY *.cpp /usr/src/nuki_hub
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/nuki_hub/build
|
||||||
|
|
||||||
|
RUN cd /usr/src/nuki_hub/build && \
|
||||||
|
echo "# Espressif ESP32 Partition Table" > partitions.csv && \
|
||||||
|
echo "# Name, Type, SubType, Offset, Size, Flags" >> partitions.csv && \
|
||||||
|
echo "nvs, data, nvs, 0x9000, 0x5000," >> partitions.csv && \
|
||||||
|
echo "otadata, data, ota, 0xe000, 0x2000," >> partitions.csv && \
|
||||||
|
echo "app0, app, ota_0, 0x10000, 0x1E0000," >> partitions.csv && \
|
||||||
|
echo "app1, app, ota_1, 0x1F0000,0x1E0000," >> partitions.csv && \
|
||||||
|
echo "spiffs, data, spiffs, 0x3D0000,0x30000," >> partitions.csv
|
||||||
|
|
||||||
|
RUN set -ex && \
|
||||||
|
cd /usr/src/nuki_hub/build && \
|
||||||
|
cmake -D CMAKE_TOOLCHAIN_FILE=~/Arduino-CMake-Toolchain/Arduino-toolchain.cmake .. && \
|
||||||
|
make
|
||||||
|
|
||||||
|
FROM builder AS runtime
|
||||||
|
|
||||||
|
COPY --from=builder /usr/src/nuki_hub/build/nuki_hub.bin /usr/src/nuki_hub/build/release/nuki_hub.bin
|
||||||
|
COPY --from=builder /usr/src/nuki_hub/build/nuki_hub.partitions.bin /usr/src/nuki_hub/build/release/nuki_hub.partitions.bin
|
||||||
|
COPY --from=builder /root/.arduino15/packages/esp32/hardware/esp32/2.0.9/tools/partitions/boot_app0.bin /usr/src/nuki_hub/build/release/boot_app0.bin
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
||||||
10
Docker/README.md
Normal file
10
Docker/README.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# Build with Docker
|
||||||
|
|
||||||
|
You can build this project using Docker. Just run the following commands in the console:
|
||||||
|
|
||||||
|
```console
|
||||||
|
cd Docker
|
||||||
|
./build_with_docker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
once the script is complete you will find the nuki_nub binary in the `nuki_hub/build/release` folder.
|
||||||
6
Docker/build_with_docker.sh
Executable file
6
Docker/build_with_docker.sh
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
set -ex
|
||||||
|
docker build -f ./Dockerfile -t nuki_hub ..
|
||||||
|
docker create --name nuki_hub nuki_hub
|
||||||
|
rm -rf ../build
|
||||||
|
docker cp nuki_hub:/usr/src/nuki_hub/build/ ../
|
||||||
|
docker rm -f nuki_hub
|
||||||
@@ -41,6 +41,7 @@
|
|||||||
#define mqtt_topic_info_hardware_version "/info/hardwareVersion"
|
#define mqtt_topic_info_hardware_version "/info/hardwareVersion"
|
||||||
#define mqtt_topic_info_firmware_version "/info/firmwareVersion"
|
#define mqtt_topic_info_firmware_version "/info/firmwareVersion"
|
||||||
#define mqtt_topic_info_nuki_hub_version "/info/nukiHubVersion"
|
#define mqtt_topic_info_nuki_hub_version "/info/nukiHubVersion"
|
||||||
|
#define mqtt_topic_info_nuki_hub_ip "/info/nukiHubIp"
|
||||||
|
|
||||||
#define mqtt_topic_keypad "/keypad"
|
#define mqtt_topic_keypad "/keypad"
|
||||||
#define mqtt_topic_keypad_command_action "/keypad/command/action"
|
#define mqtt_topic_keypad_command_action "/keypad/command/action"
|
||||||
|
|||||||
152
Network.cpp
152
Network.cpp
@@ -491,6 +491,7 @@ bool Network::reconnect()
|
|||||||
}
|
}
|
||||||
|
|
||||||
publishString(_maintenancePathPrefix, mqtt_topic_mqtt_connection_state, "online");
|
publishString(_maintenancePathPrefix, mqtt_topic_mqtt_connection_state, "online");
|
||||||
|
publishString(_maintenancePathPrefix, mqtt_topic_info_nuki_hub_ip, _device->localIP().c_str());
|
||||||
|
|
||||||
_mqttConnectionState = 2;
|
_mqttConnectionState = 2;
|
||||||
for(const auto& callback : _reconnectedCallbacks)
|
for(const auto& callback : _reconnectedCallbacks)
|
||||||
@@ -719,6 +720,18 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
json["dev"]["mf"] = "Nuki";
|
json["dev"]["mf"] = "Nuki";
|
||||||
json["dev"]["mdl"] = deviceType;
|
json["dev"]["mdl"] = deviceType;
|
||||||
json["dev"]["name"] = name;
|
json["dev"]["name"] = name;
|
||||||
|
|
||||||
|
String cuUrl = _preferences->getString(preference_mqtt_hass_cu_url);
|
||||||
|
|
||||||
|
if (cuUrl != "")
|
||||||
|
{
|
||||||
|
json["dev"]["cu"] = cuUrl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
json["dev"]["cu"] = "http://" + _device->localIP();
|
||||||
|
}
|
||||||
|
|
||||||
json["~"] = baseTopic;
|
json["~"] = baseTopic;
|
||||||
json["name"] = nullptr;
|
json["name"] = nullptr;
|
||||||
json["unique_id"] = String(uidString) + "_lock";
|
json["unique_id"] = String(uidString) + "_lock";
|
||||||
@@ -746,10 +759,10 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"battery_low",
|
"battery_low",
|
||||||
uidString,
|
uidString,
|
||||||
"_battery_low",
|
"_battery_low",
|
||||||
"battery low",
|
"Battery low",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_battery_critical,
|
String("~") + mqtt_topic_battery_critical,
|
||||||
deviceType,
|
deviceType,
|
||||||
"battery",
|
"battery",
|
||||||
"",
|
"",
|
||||||
@@ -765,10 +778,10 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"keypad_battery_low",
|
"keypad_battery_low",
|
||||||
uidString,
|
uidString,
|
||||||
"_keypad_battery_low",
|
"_keypad_battery_low",
|
||||||
"keypad battery low",
|
"Keypad battery low",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_battery_keypad_critical,
|
String("~") + mqtt_topic_battery_keypad_critical,
|
||||||
deviceType,
|
deviceType,
|
||||||
"battery",
|
"battery",
|
||||||
"",
|
"",
|
||||||
@@ -787,10 +800,10 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"battery_voltage",
|
"battery_voltage",
|
||||||
uidString,
|
uidString,
|
||||||
"_battery_voltage",
|
"_battery_voltage",
|
||||||
"battery voltage",
|
"Battery voltage",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_battery_voltage,
|
String("~") + mqtt_topic_battery_voltage,
|
||||||
deviceType,
|
deviceType,
|
||||||
"voltage",
|
"voltage",
|
||||||
"measurement",
|
"measurement",
|
||||||
@@ -803,10 +816,10 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"trigger",
|
"trigger",
|
||||||
uidString,
|
uidString,
|
||||||
"_trigger",
|
"_trigger",
|
||||||
"trigger",
|
"Trigger",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_lock_trigger,
|
String("~") + mqtt_topic_lock_trigger,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -822,7 +835,7 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"MQTT connected",
|
"MQTT connected",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_mqtt_connection_state,
|
_lockPath + mqtt_topic_mqtt_connection_state,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -837,15 +850,15 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"reset",
|
"reset",
|
||||||
uidString,
|
uidString,
|
||||||
"_reset",
|
"_reset",
|
||||||
"Restart NUKI Hub",
|
"Restart Nuki Hub",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_reset,
|
String("~") + mqtt_topic_reset,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"diagnostic",
|
"diagnostic",
|
||||||
mqtt_topic_reset,
|
String("~") + mqtt_topic_reset,
|
||||||
{ { "ic", "mdi:restart" },
|
{ { "ic", "mdi:restart" },
|
||||||
{ "pl_on", "1" },
|
{ "pl_on", "1" },
|
||||||
{ "pl_off", "0" },
|
{ "pl_off", "0" },
|
||||||
@@ -860,7 +873,7 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"Firmware version",
|
"Firmware version",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_info_firmware_version,
|
String("~") + mqtt_topic_info_firmware_version,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -877,7 +890,7 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"Hardware version",
|
"Hardware version",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_info_hardware_version,
|
String("~") + mqtt_topic_info_hardware_version,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -890,11 +903,11 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
publishHassTopic("sensor",
|
publishHassTopic("sensor",
|
||||||
"nuki_hub_version",
|
"nuki_hub_version",
|
||||||
uidString,
|
uidString,
|
||||||
"_nuki_hub__version",
|
"_nuki_hub_version",
|
||||||
"NUKI Hub version",
|
"Nuki Hub version",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_info_nuki_hub_version,
|
_lockPath + mqtt_topic_info_nuki_hub_version,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -903,6 +916,23 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
{ { "enabled_by_default", "true" },
|
{ { "enabled_by_default", "true" },
|
||||||
{"ic", "mdi:counter"}});
|
{"ic", "mdi:counter"}});
|
||||||
|
|
||||||
|
// NUKI Hub IP Address
|
||||||
|
publishHassTopic("sensor",
|
||||||
|
"nuki_hub_ip",
|
||||||
|
uidString,
|
||||||
|
"_nuki_hub_ip",
|
||||||
|
"Nuki Hub IP",
|
||||||
|
name,
|
||||||
|
baseTopic,
|
||||||
|
_lockPath + mqtt_topic_info_nuki_hub_ip,
|
||||||
|
deviceType,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"diagnostic",
|
||||||
|
"",
|
||||||
|
{ { "enabled_by_default", "true" },
|
||||||
|
{"ic", "mdi:ip"}});
|
||||||
|
|
||||||
// LED enabled
|
// LED enabled
|
||||||
publishHassTopic("switch",
|
publishHassTopic("switch",
|
||||||
"led_enabled",
|
"led_enabled",
|
||||||
@@ -911,12 +941,12 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"LED enabled",
|
"LED enabled",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_config_led_enabled,
|
String("~") + mqtt_topic_config_led_enabled,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"config",
|
"config",
|
||||||
mqtt_topic_config_led_enabled,
|
String("~") + mqtt_topic_config_led_enabled,
|
||||||
{ { "ic", "mdi:led-variant-on" },
|
{ { "ic", "mdi:led-variant-on" },
|
||||||
{ "pl_on", "1" },
|
{ "pl_on", "1" },
|
||||||
{ "pl_off", "0" },
|
{ "pl_off", "0" },
|
||||||
@@ -931,12 +961,12 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"Button enabled",
|
"Button enabled",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_config_button_enabled,
|
String("~") + mqtt_topic_config_button_enabled,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"config",
|
"config",
|
||||||
mqtt_topic_config_button_enabled,
|
String("~") + mqtt_topic_config_button_enabled,
|
||||||
{ { "ic", "mdi:radiobox-marked" },
|
{ { "ic", "mdi:radiobox-marked" },
|
||||||
{ "pl_on", "1" },
|
{ "pl_on", "1" },
|
||||||
{ "pl_off", "0" },
|
{ "pl_off", "0" },
|
||||||
@@ -951,12 +981,12 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
"Unlatch",
|
"Unlatch",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_mqtt_connection_state,
|
"",
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
mqtt_topic_lock_action,
|
String("~") + mqtt_topic_lock_action,
|
||||||
{ { "enabled_by_default", "false" },
|
{ { "enabled_by_default", "false" },
|
||||||
{ "pl_prs", "unlatch" }});
|
{ "pl_prs", "unlatch" }});
|
||||||
|
|
||||||
@@ -974,12 +1004,12 @@ void Network::publishHASSConfigAdditionalButtons(char *deviceType, const char *b
|
|||||||
"Lock 'n' Go",
|
"Lock 'n' Go",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_mqtt_connection_state,
|
"",
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
mqtt_topic_lock_action,
|
String("~") + mqtt_topic_lock_action,
|
||||||
{ { "enabled_by_default", "false" },
|
{ { "enabled_by_default", "false" },
|
||||||
{ "pl_prs", "lockNgo" }});
|
{ "pl_prs", "lockNgo" }});
|
||||||
|
|
||||||
@@ -991,12 +1021,12 @@ void Network::publishHASSConfigAdditionalButtons(char *deviceType, const char *b
|
|||||||
"Lock 'n' Go with unlatch",
|
"Lock 'n' Go with unlatch",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_mqtt_connection_state,
|
"",
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
mqtt_topic_lock_action,
|
String("~") + mqtt_topic_lock_action,
|
||||||
{ { "enabled_by_default", "false" },
|
{ { "enabled_by_default", "false" },
|
||||||
{ "pl_prs", "lockNgoUnlatch" }});
|
{ "pl_prs", "lockNgoUnlatch" }});
|
||||||
}
|
}
|
||||||
@@ -1013,10 +1043,10 @@ void Network::publishHASSConfigBatLevel(char *deviceType, const char *baseTopic,
|
|||||||
"battery_level",
|
"battery_level",
|
||||||
uidString,
|
uidString,
|
||||||
"_battery_level",
|
"_battery_level",
|
||||||
"battery level",
|
"Battery level",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_battery_level,
|
String("~") + mqtt_topic_battery_level,
|
||||||
deviceType,
|
deviceType,
|
||||||
"battery",
|
"battery",
|
||||||
"measurement",
|
"measurement",
|
||||||
@@ -1038,10 +1068,10 @@ void Network::publishHASSConfigDoorSensor(char *deviceType, const char *baseTopi
|
|||||||
"door_sensor",
|
"door_sensor",
|
||||||
uidString,
|
uidString,
|
||||||
"_door_sensor",
|
"_door_sensor",
|
||||||
"door sensor",
|
"Door sensor",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_lock_door_sensor_state,
|
String("~") + mqtt_topic_lock_door_sensor_state,
|
||||||
deviceType,
|
deviceType,
|
||||||
"door",
|
"door",
|
||||||
"",
|
"",
|
||||||
@@ -1063,10 +1093,10 @@ void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopi
|
|||||||
"ring",
|
"ring",
|
||||||
uidString,
|
uidString,
|
||||||
"_ring_detect",
|
"_ring_detect",
|
||||||
"ring detect",
|
"Ring detect",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_lock_state,
|
String("~") + mqtt_topic_lock_state,
|
||||||
deviceType,
|
deviceType,
|
||||||
"sound",
|
"sound",
|
||||||
"",
|
"",
|
||||||
@@ -1087,12 +1117,12 @@ void Network::publishHASSConfigLedBrightness(char *deviceType, const char *baseT
|
|||||||
"LED brightness",
|
"LED brightness",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_config_led_brightness,
|
String("~") + mqtt_topic_config_led_brightness,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"config",
|
"config",
|
||||||
mqtt_topic_config_led_brightness,
|
String("~") + mqtt_topic_config_led_brightness,
|
||||||
{ { "ic", "mdi:brightness-6" },
|
{ { "ic", "mdi:brightness-6" },
|
||||||
{ "min", "0" },
|
{ "min", "0" },
|
||||||
{ "max", "5" }});
|
{ "max", "5" }});
|
||||||
@@ -1100,22 +1130,24 @@ void Network::publishHASSConfigLedBrightness(char *deviceType, const char *baseT
|
|||||||
|
|
||||||
void Network::publishHASSConfigSoundLevel(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
void Network::publishHASSConfigSoundLevel(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
||||||
{
|
{
|
||||||
publishHassTopic("sensor",
|
publishHassTopic("number",
|
||||||
"sound_level",
|
"sound_level",
|
||||||
uidString,
|
uidString,
|
||||||
"_sound_level",
|
"_sound_level",
|
||||||
"Sound level",
|
"Sound level",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_config_sound_level,
|
String("~") + mqtt_topic_config_sound_level,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"diagnostic",
|
"config",
|
||||||
mqtt_topic_config_sound_level,
|
String("~") + mqtt_topic_config_sound_level,
|
||||||
{ { "ic", "mdi:volume-source" },
|
{ { "ic", "mdi:volume-source" },
|
||||||
{ "min", "0" },
|
{ "min", "0" },
|
||||||
{ "max", "255" }});
|
{ "max", "255" },
|
||||||
|
{ "mode", "slider" },
|
||||||
|
{ "step", "25.5" }});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1128,7 +1160,7 @@ void Network::publishHASSConfigAccessLog(char *deviceType, const char *baseTopic
|
|||||||
"Last action authorization",
|
"Last action authorization",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_lock_log,
|
String("~") + mqtt_topic_lock_log,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -1147,7 +1179,7 @@ void Network::publishHASSConfigKeypadAttemptInfo(char *deviceType, const char *b
|
|||||||
"Keypad status",
|
"Keypad status",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_lock_log,
|
String("~") + mqtt_topic_lock_log,
|
||||||
deviceType,
|
deviceType,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -1172,10 +1204,10 @@ void Network::publishHASSWifiRssiConfig(char *deviceType, const char *baseTopic,
|
|||||||
"wifi_signal_strength",
|
"wifi_signal_strength",
|
||||||
uidString,
|
uidString,
|
||||||
"_wifi_signal_strength",
|
"_wifi_signal_strength",
|
||||||
"wifi signal strength",
|
"WIFI signal strength",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_wifi_rssi,
|
_lockPath + mqtt_topic_wifi_rssi,
|
||||||
deviceType,
|
deviceType,
|
||||||
"signal_strength",
|
"signal_strength",
|
||||||
"measurement",
|
"measurement",
|
||||||
@@ -1195,10 +1227,10 @@ void Network::publishHASSBleRssiConfig(char *deviceType, const char *baseTopic,
|
|||||||
"bluetooth_signal_strength",
|
"bluetooth_signal_strength",
|
||||||
uidString,
|
uidString,
|
||||||
"_bluetooth_signal_strength",
|
"_bluetooth_signal_strength",
|
||||||
"bluetooth signal strength",
|
"Bluetooth signal strength",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
mqtt_topic_lock_rssi,
|
String("~") + mqtt_topic_lock_rssi,
|
||||||
deviceType,
|
deviceType,
|
||||||
"signal_strength",
|
"signal_strength",
|
||||||
"measurement",
|
"measurement",
|
||||||
@@ -1245,7 +1277,11 @@ void Network::publishHassTopic(const String& mqttDeviceType,
|
|||||||
{
|
{
|
||||||
json["dev_cla"] = deviceClass;
|
json["dev_cla"] = deviceClass;
|
||||||
}
|
}
|
||||||
json["stat_t"] = String("~") + stateTopic;
|
|
||||||
|
if(stateTopic != "")
|
||||||
|
{
|
||||||
|
json["stat_t"] = stateTopic;
|
||||||
|
}
|
||||||
|
|
||||||
if(stateClass != "")
|
if(stateClass != "")
|
||||||
{
|
{
|
||||||
@@ -1257,9 +1293,11 @@ void Network::publishHassTopic(const String& mqttDeviceType,
|
|||||||
}
|
}
|
||||||
if(commandTopic != "")
|
if(commandTopic != "")
|
||||||
{
|
{
|
||||||
json["cmd_t"] = String("~") + commandTopic;
|
json["cmd_t"] = commandTopic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json["avty"]["t"] = _lockPath + mqtt_topic_mqtt_connection_state;
|
||||||
|
|
||||||
for(const auto& entry : additionalEntries)
|
for(const auto& entry : additionalEntries)
|
||||||
{
|
{
|
||||||
if(strcmp(entry.second, "true") == 0)
|
if(strcmp(entry.second, "true") == 0)
|
||||||
@@ -1366,6 +1404,24 @@ void Network::removeHASSConfig(char* uidString)
|
|||||||
path.concat("/battery_level/config");
|
path.concat("/battery_level/config");
|
||||||
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
|
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
|
||||||
|
|
||||||
|
path = discoveryTopic;
|
||||||
|
path.concat("/sensor/");
|
||||||
|
path.concat(uidString);
|
||||||
|
path.concat("/sound_level/config");
|
||||||
|
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
|
||||||
|
|
||||||
|
path = discoveryTopic;
|
||||||
|
path.concat("/sensor/");
|
||||||
|
path.concat(uidString);
|
||||||
|
path.concat("/nuki_hub_ip/config");
|
||||||
|
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
|
||||||
|
|
||||||
|
path = discoveryTopic;
|
||||||
|
path.concat("/number/");
|
||||||
|
path.concat(uidString);
|
||||||
|
path.concat("/sound_level/config");
|
||||||
|
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
|
||||||
|
|
||||||
path = discoveryTopic;
|
path = discoveryTopic;
|
||||||
path.concat("/binary_sensor/");
|
path.concat("/binary_sensor/");
|
||||||
path.concat(uidString);
|
path.concat(uidString);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#define preference_mqtt_crt "mqttcrt"
|
#define preference_mqtt_crt "mqttcrt"
|
||||||
#define preference_mqtt_key "mqttkey"
|
#define preference_mqtt_key "mqttkey"
|
||||||
#define preference_mqtt_hass_discovery "hassdiscovery"
|
#define preference_mqtt_hass_discovery "hassdiscovery"
|
||||||
|
#define preference_mqtt_hass_cu_url "hassConfigUrl"
|
||||||
#define preference_ip_dhcp_enabled "dhcpena"
|
#define preference_ip_dhcp_enabled "dhcpena"
|
||||||
#define preference_ip_address "ipaddr"
|
#define preference_ip_address "ipaddr"
|
||||||
#define preference_ip_subnet "ipsub"
|
#define preference_ip_subnet "ipsub"
|
||||||
@@ -64,7 +65,7 @@ private:
|
|||||||
preference_mqtt_user, preference_mqtt_password, preference_mqtt_log_enabled, preference_lock_enabled,
|
preference_mqtt_user, preference_mqtt_password, preference_mqtt_log_enabled, preference_lock_enabled,
|
||||||
preference_mqtt_lock_path, preference_opener_enabled, preference_mqtt_opener_path,
|
preference_mqtt_lock_path, preference_opener_enabled, preference_mqtt_opener_path,
|
||||||
preference_lock_max_keypad_code_count, preference_opener_max_keypad_code_count, preference_mqtt_ca,
|
preference_lock_max_keypad_code_count, preference_opener_max_keypad_code_count, preference_mqtt_ca,
|
||||||
preference_mqtt_crt, preference_mqtt_key, preference_mqtt_hass_discovery,
|
preference_mqtt_crt, preference_mqtt_key, preference_mqtt_hass_discovery, preference_mqtt_hass_cu_url,
|
||||||
preference_ip_dhcp_enabled, preference_ip_address, preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server,
|
preference_ip_dhcp_enabled, preference_ip_address, preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server,
|
||||||
preference_network_hardware, preference_network_wifi_fallback_disabled, preference_rssi_publish_interval,
|
preference_network_hardware, preference_network_wifi_fallback_disabled, preference_rssi_publish_interval,
|
||||||
preference_hostname, preference_network_timeout, preference_restart_on_disconnect,
|
preference_hostname, preference_network_timeout, preference_restart_on_disconnect,
|
||||||
|
|||||||
@@ -352,6 +352,11 @@ bool WebCfgServer::processArgs(String& message)
|
|||||||
configChanged = true;
|
configChanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(key == "HASSCUURL")
|
||||||
|
{
|
||||||
|
_preferences->putString(preference_mqtt_hass_cu_url, value);
|
||||||
|
configChanged = true;
|
||||||
|
}
|
||||||
else if(key == "HOSTNAME")
|
else if(key == "HOSTNAME")
|
||||||
{
|
{
|
||||||
_preferences->putString(preference_hostname, value);
|
_preferences->putString(preference_hostname, value);
|
||||||
@@ -764,6 +769,7 @@ void WebCfgServer::buildMqttConfigHtml(String &response)
|
|||||||
response.concat("<h3>Advanced MQTT and Network Configuration</h3>");
|
response.concat("<h3>Advanced MQTT and Network Configuration</h3>");
|
||||||
response.concat("<table>");
|
response.concat("<table>");
|
||||||
printInputField(response, "HASSDISCOVERY", "Home Assistant discovery topic (empty to disable; usually homeassistant)", _preferences->getString(preference_mqtt_hass_discovery).c_str(), 30);
|
printInputField(response, "HASSDISCOVERY", "Home Assistant discovery topic (empty to disable; usually homeassistant)", _preferences->getString(preference_mqtt_hass_discovery).c_str(), 30);
|
||||||
|
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);
|
||||||
printTextarea(response, "MQTTCA", "MQTT SSL CA Certificate (*, optional)", _preferences->getString(preference_mqtt_ca).c_str(), TLS_CA_MAX_SIZE, _network->encryptionSupported(), true);
|
printTextarea(response, "MQTTCA", "MQTT SSL CA Certificate (*, optional)", _preferences->getString(preference_mqtt_ca).c_str(), TLS_CA_MAX_SIZE, _network->encryptionSupported(), true);
|
||||||
printTextarea(response, "MQTTCRT", "MQTT SSL Client Certificate (*, optional)", _preferences->getString(preference_mqtt_crt).c_str(), TLS_CERT_MAX_SIZE, _network->encryptionSupported(), true);
|
printTextarea(response, "MQTTCRT", "MQTT SSL Client Certificate (*, optional)", _preferences->getString(preference_mqtt_crt).c_str(), TLS_CERT_MAX_SIZE, _network->encryptionSupported(), true);
|
||||||
printTextarea(response, "MQTTKEY", "MQTT SSL Client Key (*, optional)", _preferences->getString(preference_mqtt_key).c_str(), TLS_KEY_MAX_SIZE, _network->encryptionSupported(), true);
|
printTextarea(response, "MQTTKEY", "MQTT SSL Client Key (*, optional)", _preferences->getString(preference_mqtt_key).c_str(), TLS_KEY_MAX_SIZE, _network->encryptionSupported(), true);
|
||||||
|
|||||||
@@ -138,3 +138,8 @@ int8_t EthLan8720Device::signalStrength()
|
|||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String EthLan8720Device::localIP()
|
||||||
|
{
|
||||||
|
return ETH.localIP().toString();
|
||||||
|
}
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ public:
|
|||||||
|
|
||||||
int8_t signalStrength() override;
|
int8_t signalStrength() override;
|
||||||
|
|
||||||
|
String localIP() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void onDisconnected();
|
void onDisconnected();
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ public:
|
|||||||
virtual bool isConnected() = 0;
|
virtual bool isConnected() = 0;
|
||||||
virtual int8_t signalStrength() = 0;
|
virtual int8_t signalStrength() = 0;
|
||||||
|
|
||||||
|
virtual String localIP() = 0;
|
||||||
|
|
||||||
virtual void mqttSetClientId(const char* clientId);
|
virtual void mqttSetClientId(const char* clientId);
|
||||||
virtual void mqttSetCleanSession(bool cleanSession);
|
virtual void mqttSetCleanSession(bool cleanSession);
|
||||||
virtual uint16_t mqttPublish(const char* topic, uint8_t qos, bool retain, const char* payload);
|
virtual uint16_t mqttPublish(const char* topic, uint8_t qos, bool retain, const char* payload);
|
||||||
|
|||||||
@@ -220,3 +220,8 @@ int8_t W5500Device::signalStrength()
|
|||||||
{
|
{
|
||||||
return 127;
|
return 127;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String W5500Device::localIP()
|
||||||
|
{
|
||||||
|
return Ethernet.localIP().toString();
|
||||||
|
}
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ public:
|
|||||||
|
|
||||||
int8_t signalStrength() override;
|
int8_t signalStrength() override;
|
||||||
|
|
||||||
|
String localIP() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void resetDevice();
|
void resetDevice();
|
||||||
void initializeMacAddress(byte* mac);
|
void initializeMacAddress(byte* mac);
|
||||||
|
|||||||
@@ -154,6 +154,11 @@ int8_t WifiDevice::signalStrength()
|
|||||||
return WiFi.RSSI();
|
return WiFi.RSSI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String WifiDevice::localIP()
|
||||||
|
{
|
||||||
|
return WiFi.localIP().toString();
|
||||||
|
}
|
||||||
|
|
||||||
void WifiDevice::clearRtcInitVar(WiFiManager *)
|
void WifiDevice::clearRtcInitVar(WiFiManager *)
|
||||||
{
|
{
|
||||||
memset(WiFiDevice_reconfdetect, 0, sizeof WiFiDevice_reconfdetect);
|
memset(WiFiDevice_reconfdetect, 0, sizeof WiFiDevice_reconfdetect);
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ public:
|
|||||||
|
|
||||||
int8_t signalStrength() override;
|
int8_t signalStrength() override;
|
||||||
|
|
||||||
|
String localIP() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void clearRtcInitVar(WiFiManager*);
|
static void clearRtcInitVar(WiFiManager*);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user