mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-27 05:06:44 +00:00
Add source tag to commands
This commit is contained in:
parent
a996004a7e
commit
3ec4f70260
@ -258,7 +258,7 @@ static void dispatch_output(const char* topic, const char* payload)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// objectattribute=value
|
// objectattribute=value
|
||||||
void dispatch_command(const char* topic, const char* payload, bool update)
|
void dispatch_command(const char* topic, const char* payload, bool update, uint8_t source)
|
||||||
{
|
{
|
||||||
/* ================================= Standard payload commands ======================================= */
|
/* ================================= Standard payload commands ======================================= */
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ void dispatch_command(const char* topic, const char* payload, bool update)
|
|||||||
for(int i = 0; i < nCommands; i++) {
|
for(int i = 0; i < nCommands; i++) {
|
||||||
if(!strcasecmp_P(topic, commands[i].p_cmdstr)) {
|
if(!strcasecmp_P(topic, commands[i].p_cmdstr)) {
|
||||||
// LOG_DEBUG(TAG_MSGR, F("Command %d found in array !!!"), i);
|
// LOG_DEBUG(TAG_MSGR, F("Command %d found in array !!!"), i);
|
||||||
commands[i].func(topic, payload); /* execute command */
|
commands[i].func(topic, payload, source); /* execute command */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,32 +316,32 @@ void dispatch_command(const char* topic, const char* payload, bool update)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Strip command/config prefix from the topic and process the payload
|
// Strip command/config prefix from the topic and process the payload
|
||||||
void dispatch_topic_payload(const char* topic, const char* payload, bool update)
|
void dispatch_topic_payload(const char* topic, const char* payload, bool update, uint8_t source)
|
||||||
{
|
{
|
||||||
if(!strcmp_P(topic, PSTR(MQTT_TOPIC_COMMAND))) {
|
if(!strcmp_P(topic, PSTR(MQTT_TOPIC_COMMAND))) {
|
||||||
dispatch_text_line((char*)payload);
|
dispatch_text_line((char*)payload, source);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(topic == strstr_P(topic, PSTR(MQTT_TOPIC_COMMAND "/"))) { // startsWith command/
|
if(topic == strstr_P(topic, PSTR(MQTT_TOPIC_COMMAND "/"))) { // startsWith command/
|
||||||
topic += 8u;
|
topic += 8u;
|
||||||
dispatch_command(topic, (char*)payload, update);
|
dispatch_command(topic, (char*)payload, update, source);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HASP_USE_CONFIG > 0
|
#if HASP_USE_CONFIG > 0
|
||||||
if(topic == strstr_P(topic, PSTR("config/"))) { // startsWith config/
|
if(topic == strstr_P(topic, PSTR("config/"))) { // startsWith config/
|
||||||
topic += 7u;
|
topic += 7u;
|
||||||
dispatch_config(topic, (char*)payload);
|
dispatch_config(topic, (char*)payload, source);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dispatch_command(topic, (char*)payload, update); // dispatch as is
|
dispatch_command(topic, (char*)payload, update, source); // dispatch as is
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse one line of text and execute the command
|
// Parse one line of text and execute the command
|
||||||
void dispatch_text_line(const char* cmnd)
|
void dispatch_text_line(const char* cmnd, uint8_t source)
|
||||||
{
|
{
|
||||||
if(cmnd[0] == '/' && cmnd[1] == '/') return; // comment
|
if(cmnd[0] == '/' && cmnd[1] == '/') return; // comment
|
||||||
|
|
||||||
@ -350,16 +350,16 @@ void dispatch_text_line(const char* cmnd)
|
|||||||
break; // comment
|
break; // comment
|
||||||
|
|
||||||
case '{':
|
case '{':
|
||||||
dispatch_command("jsonl", cmnd, false);
|
dispatch_command("jsonl", cmnd, false, source);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '[':
|
case '[':
|
||||||
dispatch_command("json", cmnd, false);
|
dispatch_command("json", cmnd, false, source);
|
||||||
break; // comment
|
break; // comment
|
||||||
|
|
||||||
case ' ':
|
case ' ':
|
||||||
while(cmnd[0] == ' ') cmnd++; // skip leading spaces
|
while(cmnd[0] == ' ') cmnd++; // skip leading spaces
|
||||||
dispatch_text_line(cmnd);
|
dispatch_text_line(cmnd, source);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
@ -392,11 +392,11 @@ void dispatch_text_line(const char* cmnd)
|
|||||||
// topic is before '=', payload is after '=' position
|
// topic is before '=', payload is after '=' position
|
||||||
update |= strlen(cmnd + pos + 1) > 0; // equal sign OR space with payload
|
update |= strlen(cmnd + pos + 1) > 0; // equal sign OR space with payload
|
||||||
LOG_TRACE(TAG_MSGR, update ? F("%s=%s") : F("%s%s"), topic, cmnd + pos + 1);
|
LOG_TRACE(TAG_MSGR, update ? F("%s=%s") : F("%s%s"), topic, cmnd + pos + 1);
|
||||||
dispatch_topic_payload(topic, cmnd + pos + 1, update);
|
dispatch_topic_payload(topic, cmnd + pos + 1, update, source);
|
||||||
} else {
|
} else {
|
||||||
char empty_payload[1] = {0};
|
char empty_payload[1] = {0};
|
||||||
LOG_TRACE(TAG_MSGR, cmnd);
|
LOG_TRACE(TAG_MSGR, cmnd);
|
||||||
dispatch_topic_payload(cmnd, empty_payload, false);
|
dispatch_topic_payload(cmnd, empty_payload, false, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -416,7 +416,7 @@ void dispatch_text_line(const char* cmnd)
|
|||||||
|
|
||||||
#if HASP_USE_CONFIG > 0
|
#if HASP_USE_CONFIG > 0
|
||||||
// Get or Set a part of the config.json file
|
// Get or Set a part of the config.json file
|
||||||
void dispatch_config(const char* topic, const char* payload)
|
void dispatch_config(const char* topic, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
DynamicJsonDocument doc(128 * 3);
|
DynamicJsonDocument doc(128 * 3);
|
||||||
char buffer[128 * 3];
|
char buffer[128 * 3];
|
||||||
@ -536,7 +536,7 @@ void dispatch_normalized_group_values(hasp_update_value_t& value)
|
|||||||
|
|
||||||
/********************************************** Native Commands ****************************************/
|
/********************************************** Native Commands ****************************************/
|
||||||
|
|
||||||
void dispatch_screenshot(const char*, const char* filename)
|
void dispatch_screenshot(const char*, const char* filename, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0
|
#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0
|
||||||
|
|
||||||
@ -555,7 +555,7 @@ void dispatch_screenshot(const char*, const char* filename)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_parse_json(const char*, const char* payload)
|
void dispatch_parse_json(const char*, const char* payload, uint8_t source)
|
||||||
{ // Parse an incoming JSON array into individual commands
|
{ // Parse an incoming JSON array into individual commands
|
||||||
/* if(strPayload.endsWith(",]")) {
|
/* if(strPayload.endsWith(",]")) {
|
||||||
// Trailing null array elements are an artifact of older Home Assistant automations
|
// Trailing null array elements are an artifact of older Home Assistant automations
|
||||||
@ -578,7 +578,7 @@ void dispatch_parse_json(const char*, const char* payload)
|
|||||||
JsonArray arr = json.as<JsonArray>();
|
JsonArray arr = json.as<JsonArray>();
|
||||||
// guiStop();
|
// guiStop();
|
||||||
for(JsonVariant command : arr) {
|
for(JsonVariant command : arr) {
|
||||||
dispatch_text_line(command.as<const char*>());
|
dispatch_text_line(command.as<const char*>(), source);
|
||||||
}
|
}
|
||||||
// guiStart();
|
// guiStart();
|
||||||
} else if(json.is<JsonObject>()) { // handle json as a jsonl
|
} else if(json.is<JsonObject>()) { // handle json as a jsonl
|
||||||
@ -590,11 +590,11 @@ void dispatch_parse_json(const char*, const char* payload)
|
|||||||
// dispatch_text_line(json.as<String>().c_str());
|
// dispatch_text_line(json.as<String>().c_str());
|
||||||
// #else
|
// #else
|
||||||
} else if(json.is<std::string>()) { // handle json as a single command
|
} else if(json.is<std::string>()) { // handle json as a single command
|
||||||
dispatch_text_line(json.as<std::string>().c_str());
|
dispatch_text_line(json.as<std::string>().c_str(), source);
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
} else if(json.is<const char*>()) { // handle json as a single command
|
} else if(json.is<const char*>()) { // handle json as a single command
|
||||||
dispatch_text_line(json.as<const char*>());
|
dispatch_text_line(json.as<const char*>(), source);
|
||||||
|
|
||||||
// } else if(json.is<char*>()) { // handle json as a single command
|
// } else if(json.is<char*>()) { // handle json as a single command
|
||||||
// dispatch_text_line(json.as<char*>());
|
// dispatch_text_line(json.as<char*>());
|
||||||
@ -636,7 +636,7 @@ void dispatch_parse_jsonl(std::istream& stream)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_parse_jsonl(const char*, const char* payload)
|
void dispatch_parse_jsonl(const char*, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_CONFIG > 0
|
#if HASP_USE_CONFIG > 0
|
||||||
CharStream stream((char*)payload);
|
CharStream stream((char*)payload);
|
||||||
@ -688,7 +688,7 @@ void dispatch_set_page(uint8_t pageid, lv_scr_load_anim_t animation)
|
|||||||
dispatch_current_page();
|
dispatch_current_page();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_page(const char*, const char* page)
|
void dispatch_page(const char*, const char* page, uint8_t source)
|
||||||
{
|
{
|
||||||
if(strlen(page) == 0) {
|
if(strlen(page) == 0) {
|
||||||
dispatch_current_page(); // No payload, send current page
|
dispatch_current_page(); // No payload, send current page
|
||||||
@ -711,7 +711,7 @@ void dispatch_page(const char*, const char* page)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clears a page id or the current page if empty
|
// Clears a page id or the current page if empty
|
||||||
void dispatch_clear_page(const char*, const char* page)
|
void dispatch_clear_page(const char*, const char* page, uint8_t source)
|
||||||
{
|
{
|
||||||
uint8_t pageid;
|
uint8_t pageid;
|
||||||
if(strlen(page) > 0) {
|
if(strlen(page) > 0) {
|
||||||
@ -739,7 +739,7 @@ void dispatch_dim(const char*, const char* level)
|
|||||||
dispatch_state_subtopic(topic, payload);
|
dispatch_state_subtopic(topic, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_moodlight(const char* topic, const char* payload)
|
void dispatch_moodlight(const char* topic, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
// Set the current state
|
// Set the current state
|
||||||
if(strlen(payload) != 0) {
|
if(strlen(payload) != 0) {
|
||||||
@ -790,14 +790,14 @@ void dispatch_moodlight(const char* topic, const char* payload)
|
|||||||
dispatch_state_subtopic(out_topic, buffer);
|
dispatch_state_subtopic(out_topic, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_backlight_obsolete(const char* topic, const char* payload)
|
void dispatch_backlight_obsolete(const char* topic, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
LOG_WARNING(TAG_MSGR, F(D_ATTRIBUTE_OBSOLETE D_ATTRIBUTE_INSTEAD), topic,
|
LOG_WARNING(TAG_MSGR, F(D_ATTRIBUTE_OBSOLETE D_ATTRIBUTE_INSTEAD), topic,
|
||||||
"backlight"); // TODO: obsolete dim, light and brightness
|
"backlight"); // TODO: obsolete dim, light and brightness
|
||||||
dispatch_backlight(topic, payload);
|
dispatch_backlight(topic, payload, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_backlight(const char*, const char* payload)
|
void dispatch_backlight(const char*, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
bool power = haspDevice.get_backlight_power();
|
bool power = haspDevice.get_backlight_power();
|
||||||
|
|
||||||
@ -852,7 +852,7 @@ void dispatch_backlight(const char*, const char* payload)
|
|||||||
dispatch_state_brightness(topic, (hasp_event_t)haspDevice.get_backlight_power(), haspDevice.get_backlight_level());
|
dispatch_state_brightness(topic, (hasp_event_t)haspDevice.get_backlight_power(), haspDevice.get_backlight_level());
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_web_update(const char*, const char* espOtaUrl)
|
void dispatch_web_update(const char*, const char* espOtaUrl, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_OTA > 0
|
#if HASP_USE_OTA > 0
|
||||||
LOG_TRACE(TAG_MSGR, F(D_OTA_CHECK_UPDATE), espOtaUrl);
|
LOG_TRACE(TAG_MSGR, F(D_OTA_CHECK_UPDATE), espOtaUrl);
|
||||||
@ -894,7 +894,7 @@ void dispatch_reboot(bool saveConfig)
|
|||||||
/******************************************* Command Wrapper Functions *********************************/
|
/******************************************* Command Wrapper Functions *********************************/
|
||||||
|
|
||||||
// Periodically publish a JSON string indicating system status
|
// Periodically publish a JSON string indicating system status
|
||||||
void dispatch_send_sensordata(const char*, const char*)
|
void dispatch_send_sensordata(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_MQTT > 0
|
#if HASP_USE_MQTT > 0
|
||||||
|
|
||||||
@ -956,7 +956,7 @@ void dispatch_send_sensordata(const char*, const char*)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Periodically publish a JSON string indicating system status
|
// Periodically publish a JSON string indicating system status
|
||||||
void dispatch_send_discovery(const char*, const char*)
|
void dispatch_send_discovery(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_MQTT > 0
|
#if HASP_USE_MQTT > 0
|
||||||
|
|
||||||
@ -1000,7 +1000,7 @@ void dispatch_send_discovery(const char*, const char*)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Periodically publish a JSON string indicating system status
|
// Periodically publish a JSON string indicating system status
|
||||||
void dispatch_statusupdate(const char*, const char*)
|
void dispatch_statusupdate(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_MQTT > 0
|
#if HASP_USE_MQTT > 0
|
||||||
|
|
||||||
@ -1054,12 +1054,12 @@ void dispatch_statusupdate(const char*, const char*)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_current_state()
|
void dispatch_current_state(uint8_t source)
|
||||||
{
|
{
|
||||||
dispatch_statusupdate(NULL, NULL);
|
dispatch_statusupdate(NULL, NULL, source);
|
||||||
dispatch_idle(NULL, NULL);
|
dispatch_idle(NULL, NULL, source);
|
||||||
dispatch_current_page();
|
dispatch_current_page();
|
||||||
dispatch_send_discovery(NULL, NULL);
|
dispatch_send_discovery(NULL, NULL, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Format filesystem and erase EEPROM
|
// Format filesystem and erase EEPROM
|
||||||
@ -1079,12 +1079,12 @@ bool dispatch_factory_reset()
|
|||||||
return formated && erased;
|
return formated && erased;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_calibrate(const char*, const char*)
|
void dispatch_calibrate(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
guiCalibrate();
|
guiCalibrate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_wakeup_obsolete(const char* topic, const char*)
|
void dispatch_wakeup_obsolete(const char* topic, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
LOG_WARNING(TAG_MSGR, F(D_ATTRIBUTE_OBSOLETE D_ATTRIBUTE_INSTEAD), topic,
|
LOG_WARNING(TAG_MSGR, F(D_ATTRIBUTE_OBSOLETE D_ATTRIBUTE_INSTEAD), topic,
|
||||||
"idle=off"); // TODO: obsolete dim, light and brightness
|
"idle=off"); // TODO: obsolete dim, light and brightness
|
||||||
@ -1092,12 +1092,12 @@ void dispatch_wakeup_obsolete(const char* topic, const char*)
|
|||||||
hasp_disable_wakeup_touch();
|
hasp_disable_wakeup_touch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_sleep(const char*, const char*)
|
void dispatch_sleep(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
hasp_enable_wakeup_touch();
|
hasp_enable_wakeup_touch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_idle(const char*, const char* payload)
|
void dispatch_idle(const char*, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
char topic[6];
|
char topic[6];
|
||||||
char buffer[6];
|
char buffer[6];
|
||||||
@ -1115,24 +1115,24 @@ void dispatch_idle(const char*, const char* payload)
|
|||||||
dispatch_state_subtopic(topic, buffer);
|
dispatch_state_subtopic(topic, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_reboot(const char*, const char*)
|
void dispatch_reboot(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
dispatch_reboot(true);
|
dispatch_reboot(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_factory_reset(const char*, const char*)
|
void dispatch_factory_reset(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
dispatch_factory_reset();
|
dispatch_factory_reset();
|
||||||
delay(500);
|
delay(500);
|
||||||
dispatch_reboot(false); // don't save running config
|
dispatch_reboot(false); // don't save running config
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_theme(const char*, const char* themeid)
|
void dispatch_theme(const char*, const char* themeid, uint8_t source)
|
||||||
{
|
{
|
||||||
hasp_set_theme(atoi(themeid));
|
hasp_set_theme(atoi(themeid));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_service(const char*, const char* payload)
|
void dispatch_service(const char*, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_TELNET > 0
|
#if HASP_USE_TELNET > 0
|
||||||
if(!strcmp_P(payload, "start telnet")) {
|
if(!strcmp_P(payload, "start telnet")) {
|
||||||
@ -1159,7 +1159,7 @@ void dispatch_service(const char*, const char* payload)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatch_exec(const char*, const char* payload)
|
void dispatch_exec(const char*, const char* payload, uint8_t source)
|
||||||
{
|
{
|
||||||
#if ARDUINO
|
#if ARDUINO
|
||||||
if(!HASP_FS.exists(payload)) {
|
if(!HASP_FS.exists(payload)) {
|
||||||
@ -1192,7 +1192,7 @@ void dispatch_exec(const char*, const char* payload)
|
|||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
buffer[index] = 0; // terminate string
|
buffer[index] = 0; // terminate string
|
||||||
if(index > 0 && buffer[0] != '#') dispatch_text_line(buffer); // # for comments
|
if(index > 0 && buffer[0] != '#') dispatch_text_line(buffer, TAG_FILE); // # for comments
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdfile.close();
|
cmdfile.close();
|
||||||
@ -1202,7 +1202,7 @@ void dispatch_exec(const char*, const char* payload)
|
|||||||
|
|
||||||
/******************************************* Commands builder *******************************************/
|
/******************************************* Commands builder *******************************************/
|
||||||
|
|
||||||
static void dispatch_add_command(const char* p_cmdstr, void (*func)(const char*, const char*))
|
static void dispatch_add_command(const char* p_cmdstr, void (*func)(const char*, const char*, uint8_t))
|
||||||
{
|
{
|
||||||
if(nCommands >= sizeof(commands) / sizeof(haspCommand_t)) {
|
if(nCommands >= sizeof(commands) / sizeof(haspCommand_t)) {
|
||||||
LOG_FATAL(TAG_MSGR, F("CMD_OVERFLOW %d"), nCommands);
|
LOG_FATAL(TAG_MSGR, F("CMD_OVERFLOW %d"), nCommands);
|
||||||
@ -1269,9 +1269,9 @@ void dispatchEverySecond()
|
|||||||
dispatchSecondsToNextTeleperiod--;
|
dispatchSecondsToNextTeleperiod--;
|
||||||
|
|
||||||
} else if(dispatch_setings.teleperiod > 0 && mqttIsConnected()) {
|
} else if(dispatch_setings.teleperiod > 0 && mqttIsConnected()) {
|
||||||
dispatch_statusupdate(NULL, NULL);
|
dispatch_statusupdate(NULL, NULL, TAG_MSGR);
|
||||||
dispatch_send_discovery(NULL, NULL);
|
dispatch_send_discovery(NULL, NULL, TAG_MSGR);
|
||||||
dispatch_send_sensordata(NULL, NULL);
|
dispatch_send_sensordata(NULL, NULL, TAG_MSGR);
|
||||||
dispatchSecondsToNextTeleperiod = dispatch_setings.teleperiod;
|
dispatchSecondsToNextTeleperiod = dispatch_setings.teleperiod;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,8 +46,8 @@ void dispatchStart(void);
|
|||||||
void dispatchStop(void);
|
void dispatchStop(void);
|
||||||
|
|
||||||
/* ===== Special Event Processors ===== */
|
/* ===== Special Event Processors ===== */
|
||||||
void dispatch_topic_payload(const char* topic, const char* payload, bool update);
|
void dispatch_topic_payload(const char* topic, const char* payload, bool update, uint8_t source);
|
||||||
void dispatch_text_line(const char* cmnd);
|
void dispatch_text_line(const char* cmnd, uint8_t source);
|
||||||
|
|
||||||
#ifdef ARDUINO
|
#ifdef ARDUINO
|
||||||
void dispatch_parse_jsonl(Stream& stream);
|
void dispatch_parse_jsonl(Stream& stream);
|
||||||
@ -64,15 +64,17 @@ void dispatch_page_prev(lv_scr_load_anim_t effectid);
|
|||||||
void dispatch_page_back(lv_scr_load_anim_t effectid);
|
void dispatch_page_back(lv_scr_load_anim_t effectid);
|
||||||
|
|
||||||
void dispatch_reboot(bool saveConfig);
|
void dispatch_reboot(bool saveConfig);
|
||||||
void dispatch_current_state();
|
void dispatch_current_state(uint8_t source);
|
||||||
void dispatch_current_page();
|
void dispatch_current_page();
|
||||||
void dispatch_backlight(const char*, const char* payload);
|
void dispatch_backlight(const char*, const char* payload, uint8_t source);
|
||||||
void dispatch_web_update(const char*, const char* espOtaUrl);
|
void dispatch_web_update(const char*, const char* espOtaUrl, uint8_t source);
|
||||||
void dispatch_statusupdate(const char*, const char*);
|
void dispatch_statusupdate(const char*, const char*, uint8_t source);
|
||||||
void dispatch_send_discovery(const char*, const char*);
|
void dispatch_send_discovery(const char*, const char*, uint8_t source);
|
||||||
void dispatch_idle(const char*, const char*);
|
void dispatch_idle(const char*, const char*, uint8_t source);
|
||||||
void dispatch_calibrate(const char*, const char*);
|
void dispatch_calibrate(const char*, const char*, uint8_t source);
|
||||||
void dispatch_wakeup(const char*, const char*);
|
void dispatch_wakeup(const char*, const char*, uint8_t source);
|
||||||
|
void dispatch_exec(const char*, const char* payload, uint8_t source);
|
||||||
|
void dispatch_config(const char* topic, const char* payload, uint8_t source);
|
||||||
|
|
||||||
void dispatch_normalized_group_values(hasp_update_value_t& value);
|
void dispatch_normalized_group_values(hasp_update_value_t& value);
|
||||||
|
|
||||||
@ -81,8 +83,6 @@ void dispatch_state_eventid(const char* topic, hasp_event_t eventid);
|
|||||||
void dispatch_state_brightness(const char* topic, hasp_event_t eventid, int32_t val);
|
void dispatch_state_brightness(const char* topic, hasp_event_t eventid, int32_t val);
|
||||||
void dispatch_state_val(const char* topic, hasp_event_t eventid, int32_t val);
|
void dispatch_state_val(const char* topic, hasp_event_t eventid, int32_t val);
|
||||||
|
|
||||||
void dispatch_config(const char* topic, const char* payload);
|
|
||||||
|
|
||||||
/* ===== Getter and Setter Functions ===== */
|
/* ===== Getter and Setter Functions ===== */
|
||||||
|
|
||||||
/* ===== Read/Write Configuration ===== */
|
/* ===== Read/Write Configuration ===== */
|
||||||
@ -91,7 +91,7 @@ void dispatch_config(const char* topic, const char* payload);
|
|||||||
struct haspCommand_t
|
struct haspCommand_t
|
||||||
{
|
{
|
||||||
const char* p_cmdstr;
|
const char* p_cmdstr;
|
||||||
void (*func)(const char*, const char*);
|
void (*func)(const char*, const char*, uint8_t);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -316,7 +316,7 @@ void wakeup_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
if(event == LV_EVENT_RELEASED && obj == lv_disp_get_layer_sys(NULL)) {
|
if(event == LV_EVENT_RELEASED && obj == lv_disp_get_layer_sys(NULL)) {
|
||||||
hasp_update_sleep_state(); // wakeup?
|
hasp_update_sleep_state(); // wakeup?
|
||||||
if(!haspDevice.get_backlight_power()) {
|
if(!haspDevice.get_backlight_power()) {
|
||||||
dispatch_backlight(NULL, "on"); // backlight on and also disable wakeup touch
|
dispatch_backlight(NULL, "on", TAG_EVENT); // backlight on and also disable wakeup touch
|
||||||
}
|
}
|
||||||
hasp_disable_wakeup_touch(); // only disable wakeup touch
|
hasp_disable_wakeup_touch(); // only disable wakeup touch
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#if defined(ARDUINO_ARCH_ESP32)
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
#include "rom/crc.h"
|
#include "rom/crc.h"
|
||||||
|
|
||||||
void filesystemUnzip(const char*, const char* filename)
|
void filesystemUnzip(const char*, const char* filename, uint8_t source)
|
||||||
{
|
{
|
||||||
File zipfile = HASP_FS.open(filename, FILE_READ);
|
File zipfile = HASP_FS.open(filename, FILE_READ);
|
||||||
if(!zipfile) {
|
if(!zipfile) {
|
||||||
|
@ -12,7 +12,7 @@ void filesystemList();
|
|||||||
void filesystemInfo();
|
void filesystemInfo();
|
||||||
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
void filesystemUnzip(const char*, const char* filename);
|
void filesystemUnzip(const char*, const char* filename, uint8_t source);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum { ZIP_NO_COMPRESSION = 0, ZIP_DEFLTATE = 8 };
|
enum { ZIP_NO_COMPRESSION = 0, ZIP_DEFLTATE = 8 };
|
||||||
|
@ -334,7 +334,7 @@ bool oobeSetup()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Thist is used for testing only !!
|
// Thist is used for testing only !!
|
||||||
void oobeFakeSetup(const char*, const char*)
|
void oobeFakeSetup(const char*, const char*, uint8_t source)
|
||||||
{
|
{
|
||||||
#if HASP_USE_WIFI > 0
|
#if HASP_USE_WIFI > 0
|
||||||
char ssid[32] = "HASP-ABCDEF";
|
char ssid[32] = "HASP-ABCDEF";
|
||||||
|
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
void oobeSetAutoCalibrate(bool cal);
|
void oobeSetAutoCalibrate(bool cal);
|
||||||
bool oobeSetup();
|
bool oobeSetup();
|
||||||
void oobeFakeSetup(const char*, const char*); // for testing purposes only
|
void oobeFakeSetup(const char*, const char*, uint8_t source); // for testing purposes only
|
||||||
|
|
||||||
#endif // HASP_USE_CONFIG
|
#endif // HASP_USE_CONFIG
|
||||||
|
@ -155,7 +155,7 @@ static void mqtt_message_cb(char* topic, byte* payload, unsigned int length)
|
|||||||
|
|
||||||
// Group topic
|
// Group topic
|
||||||
topic += strlen(mqttGroupTopic); // shorten topic
|
topic += strlen(mqttGroupTopic); // shorten topic
|
||||||
dispatch_topic_payload(topic, (const char*)payload, length > 0);
|
dispatch_topic_payload(topic, (const char*)payload, length > 0, TAG_MQTT);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef HASP_USE_BROADCAST
|
#ifdef HASP_USE_BROADCAST
|
||||||
@ -163,7 +163,7 @@ static void mqtt_message_cb(char* topic, byte* payload, unsigned int length)
|
|||||||
|
|
||||||
// Broadcast topic
|
// Broadcast topic
|
||||||
topic += strlen_P(PSTR(MQTT_PREFIX "/" MQTT_TOPIC_BROADCAST "/")); // shorten topic
|
topic += strlen_P(PSTR(MQTT_PREFIX "/" MQTT_TOPIC_BROADCAST "/")); // shorten topic
|
||||||
dispatch_topic_payload(topic, (const char*)payload, length > 0);
|
dispatch_topic_payload(topic, (const char*)payload, length > 0, TAG_MQTT);
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ static void mqtt_message_cb(char* topic, byte* payload, unsigned int length)
|
|||||||
}
|
}
|
||||||
else */
|
else */
|
||||||
{
|
{
|
||||||
dispatch_topic_payload(topic, (const char*)payload, length > 0);
|
dispatch_topic_payload(topic, (const char*)payload, length > 0, TAG_MQTT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -322,7 +322,7 @@ void mqttStart()
|
|||||||
haspReconnect();
|
haspReconnect();
|
||||||
haspProgressVal(255);
|
haspProgressVal(255);
|
||||||
|
|
||||||
dispatch_current_state();
|
dispatch_current_state(TAG_MQTT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mqttSetup()
|
void mqttSetup()
|
||||||
|
@ -98,7 +98,7 @@ static void console_process_line(const char* input)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
dispatch_text_line(input);
|
dispatch_text_line(input, TAG_CONS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,9 +131,9 @@ const char HTTP_CSS[] PROGMEM =
|
|||||||
// const char HTTP_SCRIPT[] PROGMEM = "<script>function "
|
// const char HTTP_SCRIPT[] PROGMEM = "<script>function "
|
||||||
// "c(l){document.getElementById('s').value=l.innerText||l.textContent;document."
|
// "c(l){document.getElementById('s').value=l.innerText||l.textContent;document."
|
||||||
// "getElementById('p').focus();}</script>";
|
// "getElementById('p').focus();}</script>";
|
||||||
const char HTTP_HEADER_END[] PROGMEM =
|
const char HTTP_HEADER_END[] PROGMEM = "</head><body><div id='doc'>";
|
||||||
"</head><body><div id='doc'>";
|
const char HTTP_FOOTER[] PROGMEM =
|
||||||
const char HTTP_FOOTER[] PROGMEM = "<div style='text-align:right;font-size:11px;'><hr/><a href='/about'>" D_MANUFACTURER " ";
|
"<div style='text-align:right;font-size:11px;'><hr/><a href='/about'>" D_MANUFACTURER " ";
|
||||||
const char HTTP_END[] PROGMEM = " " D_HTTP_FOOTER "</div></body></html>";
|
const char HTTP_END[] PROGMEM = " " D_HTTP_FOOTER "</div></body></html>";
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1091,16 +1091,16 @@ void handleFileCreate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(webServer.hasArg(F("init"))) {
|
if(webServer.hasArg(F("init"))) {
|
||||||
dispatch_idle(NULL, "0");
|
dispatch_idle(NULL, "0", TAG_HTTP);
|
||||||
hasp_init();
|
hasp_init();
|
||||||
}
|
}
|
||||||
if(webServer.hasArg(F("load"))) {
|
if(webServer.hasArg(F("load"))) {
|
||||||
dispatch_idle(NULL, "0");
|
dispatch_idle(NULL, "0", TAG_HTTP);
|
||||||
hasp_load_json();
|
hasp_load_json();
|
||||||
}
|
}
|
||||||
if(webServer.hasArg(F("page"))) {
|
if(webServer.hasArg(F("page"))) {
|
||||||
uint8_t pageid = atoi(webServer.arg(F("page")).c_str());
|
uint8_t pageid = atoi(webServer.arg(F("page")).c_str());
|
||||||
dispatch_idle(NULL, "0");
|
dispatch_idle(NULL, "0", TAG_HTTP);
|
||||||
dispatch_set_page(pageid, LV_SCR_LOAD_ANIM_NONE);
|
dispatch_set_page(pageid, LV_SCR_LOAD_ANIM_NONE);
|
||||||
}
|
}
|
||||||
webServer.send(200, PSTR("text/plain"), "");
|
webServer.send(200, PSTR("text/plain"), "");
|
||||||
@ -1366,7 +1366,7 @@ void webHandleGuiConfig()
|
|||||||
}
|
}
|
||||||
webSendFooter();
|
webSendFooter();
|
||||||
|
|
||||||
if(webServer.hasArg(F("cal"))) dispatch_calibrate(NULL, NULL);
|
if(webServer.hasArg(F("cal"))) dispatch_calibrate(NULL, NULL, TAG_HTTP);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -2155,7 +2155,7 @@ void httpHandleEspFirmware()
|
|||||||
webSendFooter();
|
webSendFooter();
|
||||||
|
|
||||||
LOG_TRACE(TAG_HTTP, F("Updating ESP firmware from: %s"), webServer.arg(url).c_str());
|
LOG_TRACE(TAG_HTTP, F("Updating ESP firmware from: %s"), webServer.arg(url).c_str());
|
||||||
dispatch_web_update(NULL, webServer.arg(url).c_str());
|
dispatch_web_update(NULL, webServer.arg(url).c_str(), TAG_HTTP);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -248,7 +248,7 @@ static void telnetProcessLine(const char* input)
|
|||||||
telnetClientDisconnect();
|
telnetClientDisconnect();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dispatch_text_line(input);
|
dispatch_text_line(input, TAG_TELN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user