mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-25 20:26:41 +00:00
Switch haspGetVersion to char* instead of String
This commit is contained in:
parent
9e282457ca
commit
99cdf25810
@ -395,6 +395,7 @@ void haspSetup()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(th) {
|
if(th) {
|
||||||
|
lv_theme_set_act(th);
|
||||||
Log.trace(TAG_HASP, F("Custom theme loaded"));
|
Log.trace(TAG_HASP, F("Custom theme loaded"));
|
||||||
} else {
|
} else {
|
||||||
Log.error(TAG_HASP, F("No theme could be loaded"));
|
Log.error(TAG_HASP, F("No theme could be loaded"));
|
||||||
@ -495,11 +496,11 @@ void hasp_background(uint16_t pageid, uint16_t imageid)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
String haspGetVersion()
|
void haspGetVersion(char * version, size_t len)
|
||||||
{
|
{
|
||||||
char buffer[16];
|
// char buffer[16];
|
||||||
snprintf_P(buffer, sizeof(buffer), "%u.%u.%u", HASP_VERSION_MAJOR, HASP_VERSION_MINOR, HASP_VERSION_REVISION);
|
snprintf_P(version, len, "%u.%u.%u", HASP_VERSION_MAJOR, HASP_VERSION_MINOR, HASP_VERSION_REVISION);
|
||||||
return buffer;
|
// return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void haspClearPage(uint16_t pageid)
|
void haspClearPage(uint16_t pageid)
|
||||||
|
@ -60,7 +60,7 @@ uint8_t haspGetPage();
|
|||||||
void haspClearPage(uint16_t pageid);
|
void haspClearPage(uint16_t pageid);
|
||||||
|
|
||||||
String haspGetNodename();
|
String haspGetNodename();
|
||||||
String haspGetVersion();
|
void haspGetVersion(char* version,size_t len);
|
||||||
void haspBackground(uint16_t pageid, uint16_t imageid);
|
void haspBackground(uint16_t pageid, uint16_t imageid);
|
||||||
|
|
||||||
void hasp_set_group_objects(uint8_t groupid, uint8_t eventid, lv_obj_t * src_obj);
|
void hasp_set_group_objects(uint8_t groupid, uint8_t eventid, lv_obj_t * src_obj);
|
||||||
|
@ -400,7 +400,11 @@ void webHandleInfo()
|
|||||||
|
|
||||||
/* HASP Stats */
|
/* HASP Stats */
|
||||||
httpMessage += F("<b>HASP Version: </b>");
|
httpMessage += F("<b>HASP Version: </b>");
|
||||||
httpMessage += String(haspGetVersion());
|
{
|
||||||
|
char version[32];
|
||||||
|
haspGetVersion(version, sizeof(version));
|
||||||
|
httpMessage += version;
|
||||||
|
}
|
||||||
httpMessage += F("<br/><b>Build DateTime: </b>");
|
httpMessage += F("<br/><b>Build DateTime: </b>");
|
||||||
httpMessage += __DATE__;
|
httpMessage += __DATE__;
|
||||||
httpMessage += F(" ");
|
httpMessage += F(" ");
|
||||||
|
@ -214,9 +214,10 @@ void mqtt_send_statusupdate()
|
|||||||
{
|
{
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
|
|
||||||
snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"),
|
haspGetVersion(buffer, sizeof(buffer));
|
||||||
haspGetVersion().c_str(), long(millis() / 1000));
|
snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"), buffer,
|
||||||
strcat(buffer, data);
|
long(millis() / 1000));
|
||||||
|
|
||||||
#if HASP_USE_WIFI > 0
|
#if HASP_USE_WIFI > 0
|
||||||
#if defined(STM32F4xx)
|
#if defined(STM32F4xx)
|
||||||
IPAddress ip;
|
IPAddress ip;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* MIT License - Copyright (c) 2020 Francis Van Roie
|
/* MIT License - Copyright (c) 2020 Francis Van Roie
|
||||||
For full license information read the LICENSE file in the project folder */
|
For full license information read the LICENSE file in the project folder */
|
||||||
|
|
||||||
#if HASP_USE_TASMOTA_SLAVE>0
|
#if HASP_USE_TASMOTA_SLAVE > 0
|
||||||
|
|
||||||
#include "hasp_slave.h"
|
#include "hasp_slave.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
@ -21,145 +21,147 @@ TasmotaSlave slave(&Serial2);
|
|||||||
|
|
||||||
#define slaveNodeTopic "hasp/"
|
#define slaveNodeTopic "hasp/"
|
||||||
|
|
||||||
unsigned long updateLedTimer = 0; // timer in msec for tele mqtt send
|
unsigned long updateLedTimer = 0; // timer in msec for tele mqtt send
|
||||||
unsigned long updatLedPeriod = 1000; // timer in msec for tele mqtt send
|
unsigned long updatLedPeriod = 1000; // timer in msec for tele mqtt send
|
||||||
|
|
||||||
bool ledstate = false;
|
bool ledstate = false;
|
||||||
|
|
||||||
|
|
||||||
void slave_send_state(const __FlashStringHelper * subtopic, const char * payload)
|
void slave_send_state(const __FlashStringHelper * subtopic, const char * payload)
|
||||||
{
|
{
|
||||||
// page = 0
|
// page = 0
|
||||||
// p[0].b[0].attr = abc
|
// p[0].b[0].attr = abc
|
||||||
// dim = 100
|
// dim = 100
|
||||||
// idle = 0/1
|
// idle = 0/1
|
||||||
// light = 0/1
|
// light = 0/1
|
||||||
// brightness = 100
|
// brightness = 100
|
||||||
|
|
||||||
char cBuffer[strlen(payload) + 64];
|
char cBuffer[strlen(payload) + 64];
|
||||||
memset(cBuffer, 0 ,sizeof(cBuffer));
|
memset(cBuffer, 0, sizeof(cBuffer));
|
||||||
snprintf(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/%s %s"), slaveNodeTopic ,subtopic, payload);
|
snprintf(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/%s %s"), slaveNodeTopic, subtopic, payload);
|
||||||
slave.ExecuteCommand((char*)cBuffer);
|
slave.ExecuteCommand((char *)cBuffer);
|
||||||
|
|
||||||
// Log after char buffers are cleared
|
// Log after char buffers are cleared
|
||||||
Log.notice(TAG_TASM,F("TAS PUB: %sstate/%S = %s"), slaveNodeTopic, subtopic, payload);
|
Log.notice(TAG_TASM, F("TAS PUB: %sstate/%S = %s"), slaveNodeTopic, subtopic, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
void slave_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data)
|
void slave_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data)
|
||||||
{
|
{
|
||||||
char cBuffer[192];
|
char cBuffer[192];
|
||||||
memset(cBuffer, 0 ,sizeof(cBuffer));
|
memset(cBuffer, 0, sizeof(cBuffer));
|
||||||
snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/json {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic, pageid, btnid, attribute, data);
|
snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/json {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic,
|
||||||
slave.ExecuteCommand((char*)cBuffer);
|
pageid, btnid, attribute, data);
|
||||||
// Log after char buffers are cleared
|
slave.ExecuteCommand((char *)cBuffer);
|
||||||
Log.notice(TAG_TASM,F("TAS PUB: %sstate/json = {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic, pageid, btnid, attribute, data);
|
// Log after char buffers are cleared
|
||||||
|
Log.notice(TAG_TASM, F("TAS PUB: %sstate/json = {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic, pageid, btnid,
|
||||||
|
attribute, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void slave_send_input(uint8_t id, const char * payload)
|
void slave_send_input(uint8_t id, const char * payload)
|
||||||
{
|
{
|
||||||
// Log.verbose(TAG_TASM,F("MQTT TST: %sstate/input%u = %s"), mqttNodeTopic, id, payload); // to be removed
|
// Log.verbose(TAG_TASM,F("MQTT TST: %sstate/input%u = %s"), mqttNodeTopic, id, payload); // to be removed
|
||||||
|
|
||||||
char cBuffer[strlen(payload) + 64];
|
char cBuffer[strlen(payload) + 64];
|
||||||
memset(cBuffer, 0 ,sizeof(cBuffer));
|
memset(cBuffer, 0, sizeof(cBuffer));
|
||||||
snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/input%u %s"), slaveNodeTopic, id, payload);
|
snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/input%u %s"), slaveNodeTopic, id, payload);
|
||||||
slave.ExecuteCommand((char*)cBuffer);
|
slave.ExecuteCommand((char *)cBuffer);
|
||||||
|
|
||||||
// Log after char buffers are cleared
|
// Log after char buffers are cleared
|
||||||
Log.notice(TAG_TASM,F("TAS PUB: %sstate/input%u = %s"), slaveNodeTopic, id, payload);
|
Log.notice(TAG_TASM, F("TAS PUB: %sstate/input%u = %s"), slaveNodeTopic, id, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TASMO_TELE_JSON()
|
void TASMO_TELE_JSON()
|
||||||
{ // Periodically publish a JSON string indicating system status
|
{ // Periodically publish a JSON string indicating system status
|
||||||
char data[3 * 128];
|
char data[3 * 128];
|
||||||
{
|
{
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"),
|
haspGetVersion(buffer, sizeof(buffer));
|
||||||
haspGetVersion().c_str(), long(millis() / 1000));
|
|
||||||
strcat(buffer, data);
|
snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"), buffer,
|
||||||
snprintf_P(buffer, sizeof(buffer), PSTR("\"espCanUpdate\":\"false\",\"page\":%u,\"numPages\":%u,"),
|
long(millis() / 1000));
|
||||||
haspGetPage(), (HASP_NUM_PAGES));
|
|
||||||
strcat(data, buffer);
|
snprintf_P(buffer, sizeof(buffer), PSTR("\"espCanUpdate\":\"false\",\"page\":%u,\"numPages\":%u,"),
|
||||||
snprintf_P(buffer, sizeof(buffer), PSTR("\"tftDriver\":\"%s\",\"tftWidth\":%u,\"tftHeight\":%u}"),
|
haspGetPage(), (HASP_NUM_PAGES));
|
||||||
halDisplayDriverName().c_str(), (TFT_WIDTH), (TFT_HEIGHT));
|
strcat(data, buffer);
|
||||||
strcat(data, buffer);
|
snprintf_P(buffer, sizeof(buffer), PSTR("\"tftDriver\":\"%s\",\"tftWidth\":%u,\"tftHeight\":%u}"),
|
||||||
}
|
halDisplayDriverName().c_str(), (TFT_WIDTH), (TFT_HEIGHT));
|
||||||
slave.sendJSON((char*)data);
|
strcat(data, buffer);
|
||||||
|
}
|
||||||
|
slave.sendJSON((char *)data);
|
||||||
// slave_send_state(F("statusupdate"), data);
|
// slave_send_state(F("statusupdate"), data);
|
||||||
// debugLastMillis = millis();
|
// debugLastMillis = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TASMO_DATA_RECEIVE(char *data)
|
void TASMO_DATA_RECEIVE(char * data)
|
||||||
{
|
{
|
||||||
Log.trace(TAG_TASM,F("Slave IN [%s]"), data);
|
Log.trace(TAG_TASM, F("Slave IN [%s]"), data);
|
||||||
|
|
||||||
char dataType[3];
|
char dataType[3];
|
||||||
memset(dataType, 0 ,sizeof(dataType));
|
memset(dataType, 0, sizeof(dataType));
|
||||||
snprintf_P(dataType, sizeof(dataType), data);
|
snprintf_P(dataType, sizeof(dataType), data);
|
||||||
Log.trace(TAG_TASM,F("dataType [%s]"), dataType);
|
Log.trace(TAG_TASM, F("dataType [%s]"), dataType);
|
||||||
|
|
||||||
if (!strcmp(dataType, "p[")){ //
|
if(!strcmp(dataType, "p[")) { //
|
||||||
dispatchTextLine(data);
|
dispatchTextLine(data);
|
||||||
} else if (!strcmp(dataType, "[\"")) {
|
} else if(!strcmp(dataType, "[\"")) {
|
||||||
dispatchJson(data);
|
dispatchJson(data);
|
||||||
} else {
|
|
||||||
char slvCmd[20],slvVal[60];
|
|
||||||
memset(slvCmd, 0 ,sizeof(slvCmd));
|
|
||||||
memset(slvVal, 0 ,sizeof(slvVal));
|
|
||||||
sscanf(data,"%[^=] =%s", slvCmd, slvVal);
|
|
||||||
|
|
||||||
Log.trace(TAG_TASM,F("Cmd[%s] Val[%s]"), slvCmd, slvVal);
|
|
||||||
|
|
||||||
if (!strcmp(slvCmd, "calData")){
|
|
||||||
if (strlen(slvVal) != 0) {
|
|
||||||
char cBuffer[strlen(slvVal) + 24];
|
|
||||||
memset(cBuffer, 0 ,sizeof(cBuffer));
|
|
||||||
snprintf_P(cBuffer, sizeof(cBuffer), PSTR("{'calibration':[%s]}"), slvVal);
|
|
||||||
dispatchConfig("gui",cBuffer);
|
|
||||||
} else {
|
|
||||||
dispatchConfig("gui","");
|
|
||||||
}
|
|
||||||
} else if (!strcmp(slvCmd, "jsonl")) {
|
|
||||||
dispatchJsonl(slvVal);
|
|
||||||
} else if (!strcmp(slvCmd, "clearpage")) {
|
|
||||||
dispatchClearPage(slvVal);
|
|
||||||
} else {
|
} else {
|
||||||
dispatchTextLine(data);
|
char slvCmd[20], slvVal[60];
|
||||||
|
memset(slvCmd, 0, sizeof(slvCmd));
|
||||||
|
memset(slvVal, 0, sizeof(slvVal));
|
||||||
|
sscanf(data, "%[^=] =%s", slvCmd, slvVal);
|
||||||
|
|
||||||
|
Log.trace(TAG_TASM, F("Cmd[%s] Val[%s]"), slvCmd, slvVal);
|
||||||
|
|
||||||
|
if(!strcmp(slvCmd, "calData")) {
|
||||||
|
if(strlen(slvVal) != 0) {
|
||||||
|
char cBuffer[strlen(slvVal) + 24];
|
||||||
|
memset(cBuffer, 0, sizeof(cBuffer));
|
||||||
|
snprintf_P(cBuffer, sizeof(cBuffer), PSTR("{'calibration':[%s]}"), slvVal);
|
||||||
|
dispatchConfig("gui", cBuffer);
|
||||||
|
} else {
|
||||||
|
dispatchConfig("gui", "");
|
||||||
|
}
|
||||||
|
} else if(!strcmp(slvCmd, "jsonl")) {
|
||||||
|
dispatchJsonl(slvVal);
|
||||||
|
} else if(!strcmp(slvCmd, "clearpage")) {
|
||||||
|
dispatchClearPage(slvVal);
|
||||||
|
} else {
|
||||||
|
dispatchTextLine(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TASMO_EVERY_SECOND(void)
|
void TASMO_EVERY_SECOND(void)
|
||||||
{
|
{
|
||||||
if (ledstate) {
|
if(ledstate) {
|
||||||
ledstate = false;
|
ledstate = false;
|
||||||
//digitalWrite(HASP_OUTPUT_PIN, 1);
|
// digitalWrite(HASP_OUTPUT_PIN, 1);
|
||||||
// Log.trace(TAG_TASM,F("LED OFF"));
|
// Log.trace(TAG_TASM,F("LED OFF"));
|
||||||
} else {
|
} else {
|
||||||
ledstate = true;
|
ledstate = true;
|
||||||
//digitalWrite(HASP_OUTPUT_PIN, 0);
|
// digitalWrite(HASP_OUTPUT_PIN, 0);
|
||||||
// Log.trace(TAG_TASM,F("LED ON"));
|
// Log.trace(TAG_TASM,F("LED ON"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void slaveSetup()
|
void slaveSetup()
|
||||||
{
|
{
|
||||||
Serial2.begin(HASP_SLAVE_SPEED);
|
Serial2.begin(HASP_SLAVE_SPEED);
|
||||||
// slave.attach_FUNC_EVERY_SECOND(TASMO_EVERY_SECOND);
|
// slave.attach_FUNC_EVERY_SECOND(TASMO_EVERY_SECOND);
|
||||||
slave.attach_FUNC_JSON(TASMO_TELE_JSON);
|
slave.attach_FUNC_JSON(TASMO_TELE_JSON);
|
||||||
slave.attach_FUNC_COMMAND_SEND(TASMO_DATA_RECEIVE);
|
slave.attach_FUNC_COMMAND_SEND(TASMO_DATA_RECEIVE);
|
||||||
|
|
||||||
Log.notice(TAG_TASM,F("HASP SLAVE LOADED"));
|
Log.notice(TAG_TASM, F("HASP SLAVE LOADED"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR slaveLoop(void)
|
void IRAM_ATTR slaveLoop(void)
|
||||||
{
|
{
|
||||||
slave.loop();
|
slave.loop();
|
||||||
// demo code to run the led without tasmota
|
// demo code to run the led without tasmota
|
||||||
// if ((millis() - updateLedTimer) >= updatLedPeriod) {
|
// if ((millis() - updateLedTimer) >= updatLedPeriod) {
|
||||||
// updateLedTimer = millis();
|
// updateLedTimer = millis();
|
||||||
// TASMO_EVERY_SECOND();
|
// TASMO_EVERY_SECOND();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
x
Reference in New Issue
Block a user