Merge pull request #288 from iranl/add-configuration-url
Add configuration url in Home Assistant discovery
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
38
Network.cpp
38
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";
|
||||||
@@ -890,7 +903,7 @@ 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,
|
||||||
@@ -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",
|
||||||
@@ -1379,6 +1409,12 @@ void Network::removeHASSConfig(char* uidString)
|
|||||||
path.concat(uidString);
|
path.concat(uidString);
|
||||||
path.concat("/sound_level/config");
|
path.concat("/sound_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("/nuki_hub_ip/config");
|
||||||
|
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
|
||||||
|
|
||||||
path = discoveryTopic;
|
path = discoveryTopic;
|
||||||
path.concat("/number/");
|
path.concat("/number/");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -159,6 +159,11 @@ int8_t EthLan8720Device::signalStrength()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String EthLan8720Device::localIP()
|
||||||
|
{
|
||||||
|
return ETH.localIP().toString();
|
||||||
|
}
|
||||||
|
|
||||||
void EthLan8720Device::mqttSetClientId(const char *clientId)
|
void EthLan8720Device::mqttSetClientId(const char *clientId)
|
||||||
{
|
{
|
||||||
if(_useEncryption)
|
if(_useEncryption)
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ public:
|
|||||||
virtual bool isConnected();
|
virtual bool isConnected();
|
||||||
|
|
||||||
int8_t signalStrength() override;
|
int8_t signalStrength() override;
|
||||||
|
|
||||||
|
String localIP() override;
|
||||||
|
|
||||||
void mqttSetClientId(const char *clientId) override;
|
void mqttSetClientId(const char *clientId) override;
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,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) = 0;
|
virtual void mqttSetClientId(const char* clientId) = 0;
|
||||||
virtual void mqttSetCleanSession(bool cleanSession) = 0;
|
virtual void mqttSetCleanSession(bool cleanSession) = 0;
|
||||||
|
|||||||
@@ -229,6 +229,11 @@ int8_t W5500Device::signalStrength()
|
|||||||
return 127;
|
return 127;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String W5500Device::localIP()
|
||||||
|
{
|
||||||
|
return Ethernet.localIP().toString();
|
||||||
|
}
|
||||||
|
|
||||||
void W5500Device::mqttSetClientId(const char *clientId)
|
void W5500Device::mqttSetClientId(const char *clientId)
|
||||||
{
|
{
|
||||||
_mqttClient.setClientId(clientId);
|
_mqttClient.setClientId(clientId);
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ public:
|
|||||||
virtual bool isConnected();
|
virtual bool isConnected();
|
||||||
|
|
||||||
int8_t signalStrength() override;
|
int8_t signalStrength() override;
|
||||||
|
|
||||||
|
String localIP() override;
|
||||||
|
|
||||||
void mqttSetClientId(const char *clientId) override;
|
void mqttSetClientId(const char *clientId) override;
|
||||||
|
|
||||||
|
|||||||
@@ -180,6 +180,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);
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ public:
|
|||||||
virtual bool isConnected();
|
virtual bool isConnected();
|
||||||
|
|
||||||
int8_t signalStrength() override;
|
int8_t signalStrength() override;
|
||||||
|
|
||||||
|
String localIP() override;
|
||||||
|
|
||||||
void mqttSetClientId(const char *clientId) override;
|
void mqttSetClientId(const char *clientId) override;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user