Improve device ID for HA discovery
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
#define NUKI_HUB_VERSION "9.07"
|
||||
#define NUKI_HUB_VERSION_INT (uint32_t)907
|
||||
#define NUKI_HUB_BUILD "unknownbuildnr"
|
||||
#define NUKI_HUB_DATE "2024-12-27"
|
||||
#define NUKI_HUB_DATE "2024-12-30"
|
||||
|
||||
#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"
|
||||
|
||||
@@ -16,7 +16,35 @@ HomeAssistantDiscovery::HomeAssistantDiscovery(NetworkDevice* device, Preference
|
||||
_checkUpdates = _preferences->getBool(preference_check_updates, false);
|
||||
_updateFromMQTT = _preferences->getBool(preference_update_from_mqtt, false);
|
||||
_hostname = _preferences->getString(preference_hostname, "");
|
||||
sprintf(_nukiHubUidString, "%u", _preferences->getUInt(preference_device_id_lock, 0));
|
||||
uint32_t savedDevId = _preferences->getUInt(preference_nukihub_id, 0);
|
||||
uint32_t curDevId = ESP.getEfuseMac() & 0xFFFFFFFF;
|
||||
|
||||
if (savedDevId == 0)
|
||||
{
|
||||
_preferences->putUInt(preference_nukihub_id, curDevId);
|
||||
char uidString[20];
|
||||
itoa(_preferences->getUInt(preference_device_id_lock, 0), uidString, 10);
|
||||
removeHASSConfig(uidString);
|
||||
delay(3000);
|
||||
}
|
||||
else if(savedDevId != curDevId)
|
||||
{
|
||||
_preferences->putUInt(preference_nukihub_id, curDevId);
|
||||
Log->print("Efuse ID: ");
|
||||
Log->println(curDevId);
|
||||
Log->print("Saved ID: ");
|
||||
Log->println(savedDevId);
|
||||
Log->println("Efuse ID and NukiHub device ID do not match, removing HASS setup for incorrect NukiHub device ID.");
|
||||
char uidString[20];
|
||||
itoa(_preferences->getUInt(preference_device_id_lock, 0), uidString, 10);
|
||||
removeHASSConfig(uidString);
|
||||
delay(3000);
|
||||
itoa(savedDevId, uidString, 10);
|
||||
removeHASSConfig(uidString);
|
||||
delay(3000);
|
||||
}
|
||||
|
||||
sprintf(_nukiHubUidString, "%u", curDevId);
|
||||
}
|
||||
|
||||
void HomeAssistantDiscovery::setupHASS(int type, uint32_t nukiId, char* nukiName, const char* firmwareVersion, const char* hardwareVersion, bool hasDoorSensor, bool hasKeypad)
|
||||
@@ -65,6 +93,7 @@ void HomeAssistantDiscovery::setupHASS(int type, uint32_t nukiId, char* nukiName
|
||||
void HomeAssistantDiscovery::disableHASS()
|
||||
{
|
||||
removeHASSConfig(_nukiHubUidString);
|
||||
delay(3000);
|
||||
|
||||
char uidString[20];
|
||||
|
||||
@@ -72,11 +101,13 @@ void HomeAssistantDiscovery::disableHASS()
|
||||
{
|
||||
itoa(_preferences->getUInt(preference_nuki_id_lock, 0), uidString, 16);
|
||||
removeHASSConfig(uidString);
|
||||
delay(3000);
|
||||
}
|
||||
if(_preferences->getUInt(preference_nuki_id_opener, 0) != 0)
|
||||
{
|
||||
itoa(_preferences->getUInt(preference_nuki_id_opener, 0), uidString, 16);
|
||||
removeHASSConfig(uidString);
|
||||
delay(3000);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -592,7 +623,7 @@ void HomeAssistantDiscovery::publishHASSDeviceConfig(char* deviceType, const cha
|
||||
{(char*)"pl_off", (char*)"0"},
|
||||
{(char*)"val_tpl", (char*)"{{value_json.charging}}" }
|
||||
});
|
||||
|
||||
|
||||
// Battery voltage
|
||||
publishHassTopic("sensor",
|
||||
"battery_voltage",
|
||||
@@ -2973,9 +3004,12 @@ void HomeAssistantDiscovery::removeHassTopic(const String& mqttDeviceType, const
|
||||
|
||||
void HomeAssistantDiscovery::removeHASSConfig(char* uidString)
|
||||
{
|
||||
Log->println("Removing HASS entities with ID:");
|
||||
Log->println(uidString);
|
||||
|
||||
removeHassTopic((char*)"lock", (char*)"smartlock", uidString);
|
||||
removeHassTopic((char*)"binary_sensor", (char*)"battery_low", uidString);
|
||||
removeHassTopic((char*)"binary_sensor", (char*)"battery_charging", uidString);
|
||||
removeHassTopic((char*)"binary_sensor", (char*)"battery_charging", uidString);
|
||||
removeHassTopic((char*)"binary_sensor", (char*)"keypad_battery_low", uidString);
|
||||
removeHassTopic((char*)"sensor", (char*)"battery_voltage", uidString);
|
||||
removeHassTopic((char*)"sensor", (char*)"trigger", uidString);
|
||||
|
||||
@@ -138,8 +138,8 @@
|
||||
#define preference_lock_max_timecontrol_entry_count (char*)"maxtc"
|
||||
#define preference_opener_max_timecontrol_entry_count (char*)"opmaxtc"
|
||||
#define preference_latest_version (char*)"latest"
|
||||
#define preference_wifi_converted (char*)"wifiConv"
|
||||
#define preference_reset_mqtt_topics (char*)"rstMqtt"
|
||||
#define preference_nukihub_id (char*)"nukihubId"
|
||||
|
||||
//OBSOLETE
|
||||
#define preference_access_level (char*)"accLvl"
|
||||
@@ -386,7 +386,7 @@ private:
|
||||
preference_auth_control_enabled, preference_auth_topic_per_entry, preference_auth_info_enabled, preference_auth_max_entries, preference_wifi_ssid, preference_wifi_pass,
|
||||
preference_keypad_check_code_enabled, preference_disable_network_not_connected, preference_mqtt_hass_enabled, preference_hass_device_discovery, preference_retain_gpio,
|
||||
preference_debug_connect, preference_debug_communication, preference_debug_readable_data, preference_debug_hex_data, preference_debug_command, preference_connect_mode,
|
||||
preference_lock_force_id, preference_lock_force_doorsensor, preference_lock_force_keypad, preference_opener_force_id, preference_opener_force_keypad
|
||||
preference_lock_force_id, preference_lock_force_doorsensor, preference_lock_force_keypad, preference_opener_force_id, preference_opener_force_keypad, preference_nukihub_id
|
||||
};
|
||||
std::vector<char*> _redact =
|
||||
{
|
||||
|
||||
@@ -1265,14 +1265,6 @@ esp_err_t WebCfgServer::sendSettings(PsychicRequest *request)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(strcmp(key, preference_device_id_lock) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(strcmp(key, preference_device_id_opener) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(!redacted) if(std::find(redactedPrefs.begin(), redactedPrefs.end(), key) != redactedPrefs.end())
|
||||
{
|
||||
continue;
|
||||
@@ -4475,6 +4467,8 @@ esp_err_t WebCfgServer::buildInfoHtml(PsychicRequest *request)
|
||||
response.print(_preferences->getString(preference_mqtt_hass_discovery, "") + "/");
|
||||
response.print("\nNuki Hub configuration URL for HA: ");
|
||||
response.print(_preferences->getString(preference_mqtt_hass_cu_url, "").length() > 0 ? _preferences->getString(preference_mqtt_hass_cu_url, "") : "http://" + _network->localIP());
|
||||
response.print("\nNuki Hub ID: ");
|
||||
response.print(_preferences->getUInt(preference_nukihub_id, 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user