mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-28 13:46:36 +00:00
Add discovery
This commit is contained in:
parent
50c1e83fa9
commit
9015d6620f
@ -882,6 +882,41 @@ void dispatch_current_state()
|
|||||||
|
|
||||||
/******************************************* Command Wrapper Functions *********************************/
|
/******************************************* Command Wrapper Functions *********************************/
|
||||||
|
|
||||||
|
// Periodically publish a JSON string indicating system status
|
||||||
|
void dispatch_send_discovery(const char*, const char*)
|
||||||
|
{
|
||||||
|
#if HASP_USE_MQTT > 0
|
||||||
|
|
||||||
|
char data[512];
|
||||||
|
{
|
||||||
|
char buffer[128];
|
||||||
|
|
||||||
|
haspGetVersion(buffer, sizeof(buffer));
|
||||||
|
snprintf_P(data, sizeof(data),
|
||||||
|
PSTR("{\"node\":\"%s\",\"manufacturer\":\"" D_MANUFACTURER
|
||||||
|
"\",\"model\":\"%s\",\"hwid\":\"%s\",\"version\":\"%s\",\"numPages\":%u}"),
|
||||||
|
haspDevice.get_hostname(), haspDevice.get_model(), haspDevice.get_hardware_id(), buffer,
|
||||||
|
haspPages.count());
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(mqtt_send_discovery(data)) {
|
||||||
|
case MQTT_ERR_OK:
|
||||||
|
LOG_TRACE(TAG_MQTT_PUB, F("discovery => %s"), data);
|
||||||
|
break;
|
||||||
|
case MQTT_ERR_PUB_FAIL:
|
||||||
|
LOG_ERROR(TAG_MQTT_PUB, F(D_MQTT_FAILED " discovery => %s"), data);
|
||||||
|
break;
|
||||||
|
case MQTT_ERR_NO_CONN:
|
||||||
|
LOG_ERROR(TAG_MQTT, F(D_MQTT_NOT_CONNECTED));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_ERROR(TAG_MQTT, F(D_ERROR_UNKNOWN));
|
||||||
|
}
|
||||||
|
dispatchLastMillis = millis();
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// Periodically publish a JSON string indicating system status
|
// Periodically publish a JSON string indicating system status
|
||||||
void dispatch_output_statusupdate(const char*, const char*)
|
void dispatch_output_statusupdate(const char*, const char*)
|
||||||
{
|
{
|
||||||
@ -1016,6 +1051,7 @@ void dispatchEverySecond()
|
|||||||
if(dispatch_setings.teleperiod > 0 && (millis() - dispatchLastMillis) >= dispatch_setings.teleperiod * 1000) {
|
if(dispatch_setings.teleperiod > 0 && (millis() - dispatchLastMillis) >= dispatch_setings.teleperiod * 1000) {
|
||||||
dispatchLastMillis += dispatch_setings.teleperiod * 1000;
|
dispatchLastMillis += dispatch_setings.teleperiod * 1000;
|
||||||
dispatch_output_statusupdate(NULL, NULL);
|
dispatch_output_statusupdate(NULL, NULL);
|
||||||
|
dispatch_send_discovery(NULL, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -30,6 +30,7 @@ void mqttStop();
|
|||||||
|
|
||||||
int mqtt_send_object_state(uint8_t pageid, uint8_t btnid, const char* payload);
|
int mqtt_send_object_state(uint8_t pageid, uint8_t btnid, const char* payload);
|
||||||
int mqtt_send_state(const char* subtopic, const char* payload);
|
int mqtt_send_state(const char* subtopic, const char* payload);
|
||||||
|
int mqtt_send_discovery(const char* payload);
|
||||||
int mqttPublish(const char* topic, const char* payload, size_t len, bool retain);
|
int mqttPublish(const char* topic, const char* payload, size_t len, bool retain);
|
||||||
|
|
||||||
bool mqttIsConnected();
|
bool mqttIsConnected();
|
||||||
|
@ -148,6 +148,13 @@ int mqtt_send_state(const char* subtopic, const char* payload)
|
|||||||
return mqttPublish(tmp_topic, payload, false);
|
return mqttPublish(tmp_topic, payload, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mqtt_send_discovery(const char* payload)
|
||||||
|
{
|
||||||
|
char tmp_topic[20];
|
||||||
|
snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR(MQTT_PREFIX "/discovery"));
|
||||||
|
return mqttPublish(tmp_topic, payload, false);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Receive incoming messages
|
// Receive incoming messages
|
||||||
static void mqtt_message_cb(char* topic, byte* payload, unsigned int length)
|
static void mqtt_message_cb(char* topic, byte* payload, unsigned int length)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user