Skip to content

Commit

Permalink
log mininize, F strings
Browse files Browse the repository at this point in the history
  • Loading branch information
dontsovcmc committed Nov 28, 2019
1 parent 98b13b8 commit d4573dd
Show file tree
Hide file tree
Showing 11 changed files with 147 additions and 213 deletions.
78 changes: 6 additions & 72 deletions ESP8266/src/Logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,49 +22,6 @@ const char S_I2C[] PROGMEM = "I2C";
const char S_SND[] PROGMEM = "SND";
const char S_RQT[] PROGMEM = "RQT";

const char S_STATE_BAD[] PROGMEM = "\"Не подключен\"";
const char S_STATE_CONNECTED[] PROGMEM = "\"Подключен\"";
const char S_STATE_NULL[] PROGMEM = "\"\"";

const char HTTP_TEXT_PLAIN[] PROGMEM = "text/plain";
const char S_STATES[] PROGMEM = "/states";
const char S_CAPTIVE_PORTAL[] PROGMEM = "User requested captive portal";
const char S_GENERATE_WATERIUS_KEY[] PROGMEM = "Generate waterius key";
const char S_START_CONFIG_PORTAL[] PROGMEM = "start config portal";
const char S_CONNECTED_TO_WIFI[] PROGMEM = "Connected to wifi. Save settings, go to sleep";
const char S_STARTING[] PROGMEM = "Starting";
const char S_SEND_OK[] PROGMEM = "send ok";
const char S_GOING_SLEEP[] PROGMEM = "Going to sleep";
const char S_ERROR_LOAD_CFG[] PROGMEM = "error loading config";
const char S_BOOTED[] PROGMEM = "Booted";
const char S_DATA_FAILED[] PROGMEM = "data failed";
const char S_I2C_FAILED[] PROGMEM = "get mode failed. Check i2c line.";
const char S_I2C_REQ_FAILED[] PROGMEM = "requestFrom failed";
const char S_I2C_WR_FAILED[] PROGMEM = "write cmd failed";
const char S_SKIP[] PROGMEM = "SKIP";
const char S_RUN[] PROGMEM = "run";
const char S_VIRT_OK[] PROGMEM = "virtualWrite OK";
const char S_EMAIL_SEND[] PROGMEM = "email was send";
const char S_DISCONNECTED[] PROGMEM = "disconnected";
const char S_CONNECT_ERROR[] PROGMEM = "connect error";
const char S_CRC_OK[] PROGMEM = "CRC ok";

const char S_WATERIUS[] PROGMEM = "WATERIUS.RU";
const char S_BLYNK[] PROGMEM = "BLYNK.CC";
const char S_MQTT[] PROGMEM = "MQTT";
const char S_COUNTERS[] PROGMEM = "COUNTERS";

const char S_V0[] PROGMEM = "{V0}";
const char S_V1[] PROGMEM = "{V1}";
const char S_V2[] PROGMEM = "{V2}";
const char S_V3[] PROGMEM = "{V3}";
const char S_V4[] PROGMEM = "{V4}";
const char S_V5[] PROGMEM = "{V5}";
const char S_V6[] PROGMEM = "{V6}";
const char S_V7[] PROGMEM = "{V7}";
const char S_V8[] PROGMEM = "{V8}";



/* Generate and print the trailing log timestamp.
1 = (1234), showing time in seconds since boot. Generates lightweight inline code.
Expand Down Expand Up @@ -94,12 +51,7 @@ const char S_V8[] PROGMEM = "{V8}";
// Default do no logging...
#define LOG_BEGIN(baud) do {} while (0)
#define LOG_END() do {} while (0)
#define LOG_EMERGENCY(svc, content) do {} while (0)
#define LOG_ALERT(svc, content) do {} while (0)
#define LOG_CRITICAL(svc, content) do {} while (0)
#define LOG_ERROR(svc, content) do {} while (0)
#define LOG_WARNING(svc, content) do {} while (0)
#define LOG_NOTICE(svc, content) do {} while (0)
#define LOG_INFO(svc, content) do {} while (0)
#define LOG_DEBUG(svc, content) do {} while (0)

Expand All @@ -109,32 +61,14 @@ const char S_V8[] PROGMEM = "{V8}";
#define LOG_BEGIN(baud) do { Serial.begin( baud ,SERIAL_8N1, SERIAL_TX_ONLY); } while(0)
#undef LOG_END
#define LOG_END() do { Serial.flush(); Serial.end(); } while(0)
#undef LOG_EMERGENCY
#define LOG_EMERGENCY(svc, content) do { LOG_FORMAT_TIME; Serial << " EMERGENCY (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >=1
#undef LOG_ALERT
#define LOG_ALERT(svc, content) do { LOG_FORMAT_TIME; Serial << " ALERT (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >= 1
#undef LOG_ERROR
#define LOG_ERROR(svc, content) do { LOG_FORMAT_TIME; Serial << " ERROR (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >= 2
#undef LOG_CRITICAL
#define LOG_CRITICAL(svc, content) do { LOG_FORMAT_TIME; Serial << " CRITICAL (" << svc << ") : " << content << endl; } while(0)
#undef LOG_INFO
#define LOG_INFO(svc, content) do { LOG_FORMAT_TIME; Serial << " INFO (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >= 3
#undef LOG_ERROR
#define LOG_ERROR(svc, content) do { LOG_FORMAT_TIME; Serial << " ERROR (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >= 4
#undef LOG_WARNING
#define LOG_WARNING(svc, content) do { LOG_FORMAT_TIME; Serial << " WARNING (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >= 5
#undef LOG_NOTICE
#define LOG_NOTICE(svc, content) do { LOG_FORMAT_TIME; Serial << " NOTICE (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >= 6
#undef LOG_INFO
#define LOG_INFO(svc, content) do { LOG_FORMAT_TIME; Serial << " INFO (" << svc << ") : " << content << endl; } while(0)
#if LOGLEVEL >= 7
#define LOG_DEBUG(svc, content) do { LOG_FORMAT_TIME; Serial << " DEBUG (" << svc << ") : " << content << endl; } while(0)
#endif // LOGLEVEL >= 7
#endif // LOGLEVEL >= 6
#endif // LOGLEVEL >= 5
#endif // LOGLEVEL >= 4
#define LOG_DEBUG(svc, content) do { LOG_FORMAT_TIME; Serial << " DEBUG (" << svc << ") : " << content << endl; } while(0)
#endif // LOGLEVEL >= 3
#endif // LOGLEVEL >= 2
#endif // LOGLEVEL >= 1
Expand Down
8 changes: 4 additions & 4 deletions ESP8266/src/UserClass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
bool UserClass::sendNewData(const Settings &settings, const SlaveData &data, const CalculatedData &cdata)
{
constexpr char THIS_FUNC_DESCRIPTION[] = "Send new data";
LOG_NOTICE(FPSTR(S_SND), "-- START -- " << THIS_FUNC_DESCRIPTION);
LOG_INFO(FPSTR(S_SND), "-- START -- " << THIS_FUNC_DESCRIPTION);

if (strnlen(settings.waterius_key, WATERIUS_KEY_LEN) == 0) {
LOG_NOTICE(FPSTR(S_SND), FPSTR(S_SKIP));
LOG_INFO(FPSTR(S_SND), F("SKIP"));
return false;
};
if (strnlen(settings.waterius_host, WATERIUS_HOST_LEN) == 0) {
LOG_NOTICE(FPSTR(S_SND), FPSTR(S_SKIP));
LOG_INFO(FPSTR(S_SND), F("SKIP"));
return false;
}

Expand Down Expand Up @@ -53,7 +53,7 @@ bool UserClass::sendNewData(const Settings &settings, const SlaveData &data, con

LOG_INFO(FPSTR(S_SND), "Send HTTP code:\t" << responseData.code);
LOG_INFO(FPSTR(S_SND), "Send result:\t" << (send_result ? "Success" : "Error"));
LOG_NOTICE(FPSTR(S_SND), "-- END --");
LOG_INFO(FPSTR(S_SND), "-- END --");

return send_result;
}
41 changes: 20 additions & 21 deletions ESP8266/src/WateriusHttps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ BearSSL::WiFiClientSecure wifiTlsClient;
WateriusHttps::ResponseData WateriusHttps::sendJsonPostRequest(const String &url, const char *key, const char *email, const String &body)
{
constexpr char THIS_FUNC_DESCRIPTION[] = "Send JSON POST request";
LOG_NOTICE(FPSTR(S_RQT), "-- START -- " << THIS_FUNC_DESCRIPTION);
LOG_INFO(FPSTR(S_RQT), "-- START -- " << THIS_FUNC_DESCRIPTION);
LOG_INFO(FPSTR(S_RQT), "URL:\t" << url);
LOG_INFO(FPSTR(S_RQT), "Body:\t" << body);

Expand All @@ -32,7 +32,7 @@ WateriusHttps::ResponseData WateriusHttps::sendJsonPostRequest(const String &url
wifiTlsClient.setTrustAnchors(&certs);

if (!setClock()) {
LOG_WARNING(FPSTR(S_RQT), "SetClock fail ???");
LOG_ERROR(FPSTR(S_RQT), "SetClock fail ???");
return WateriusHttps::ResponseData();
}
} else {
Expand All @@ -47,68 +47,67 @@ WateriusHttps::ResponseData WateriusHttps::sendJsonPostRequest(const String &url

// Check input data
if (url.substring(0, 4) != "http") {
LOG_WARNING(FPSTR(S_RQT), "URL \"" << url << "\" has not 'http' ('https')");
LOG_ERROR(FPSTR(S_RQT), F("URL \"") << url << F("\" has not 'http' ('https')"));
}
if (wc->available()) {
LOG_WARNING(FPSTR(S_RQT), "Wi-Fi client is not available");
LOG_ERROR(FPSTR(S_RQT), F("Wi-Fi client is not available"));
}


LOG_INFO(FPSTR(S_RQT), "Begin client");
LOG_INFO(FPSTR(S_RQT), F("Begin client"));
// Request
bool responseResult = false;
int responseCode = 0;
String responseBody;
if (hc->begin(*wc, url)) {
hc->addHeader("Content-Type", "application/json");
hc->addHeader(F("Content-Type"), F("application/json"));
if (strnlen(key, WATERIUS_KEY_LEN)) {
hc->addHeader("Waterius-Token", key);
hc->addHeader(F("Waterius-Token"), key);
}
if (strnlen(email, EMAIL_LEN)) {
hc->addHeader("Waterius-Email", email);
hc->addHeader(F("Waterius-Email"), email);
}
responseCode = hc->POST(body);
LOG_INFO(FPSTR(S_RQT), "Response code:\t" << responseCode);
LOG_INFO(FPSTR(S_RQT), F("Response code:\t") << responseCode);
responseBody = hc->getString();
LOG_INFO(FPSTR(S_RQT), "Response body:\t" << responseBody);
LOG_INFO(FPSTR(S_RQT), F("Response body:\t") << responseBody);
hc->end();
wc->stop();
responseResult = true;
} else {
LOG_ERROR(FPSTR(S_RQT), "Cannot begin HTTP client");
LOG_ERROR(FPSTR(S_RQT), F("Cannot begin HTTP client"));
}

LOG_INFO(FPSTR(S_RQT), "Result:\t" << (responseResult ? "Success" : "Error"));
LOG_NOTICE(FPSTR(S_RQT), "-- END --");
LOG_INFO(FPSTR(S_RQT), F("Result:\t") << (responseResult ? "Success" : "Error"));
LOG_INFO(FPSTR(S_RQT), F("-- END --"));
return WateriusHttps::ResponseData(responseResult, responseCode, responseBody);
}


void WateriusHttps::generateSha256Token(char *token, const int token_len,
const char *email)
{
constexpr char THIS_FUNC_DESCRIPTION[] = "Generate SHA256 token from email";
constexpr char THIS_FUNC_SVC[] = "TKN";
LOG_NOTICE(THIS_FUNC_SVC, "-- START -- " << THIS_FUNC_DESCRIPTION);
LOG_INFO(THIS_FUNC_SVC, F("-- START -- ") << F("Generate SHA256 token from email"));

auto x = BearSSL::HashSHA256();
if (email != nullptr && strlen(email)) {
LOG_INFO(THIS_FUNC_SVC, "E-mail:\t" << email);
LOG_INFO(THIS_FUNC_SVC, F("E-mail:\t") << email);
x.add(email, strlen(email));
}

randomSeed(micros());
uint32_t salt = rand();
LOG_INFO(THIS_FUNC_SVC, "salt:\t" << salt);
LOG_INFO(THIS_FUNC_SVC, F("salt:\t") << salt);
x.add(&salt, sizeof(salt));

salt = ESP.getChipId();
x.add(&salt, sizeof(salt));
LOG_NOTICE(THIS_FUNC_SVC, "chip id: " << salt);
LOG_INFO(THIS_FUNC_SVC, F("chip id: ") << salt);

salt = ESP.getFlashChipId();
x.add(&salt, sizeof(salt));
LOG_NOTICE(THIS_FUNC_SVC, "flash id: " << salt);
LOG_INFO(THIS_FUNC_SVC, F("flash id: ") << salt);
x.end();
unsigned char *hash = (unsigned char *)x.hash();

Expand All @@ -119,6 +118,6 @@ void WateriusHttps::generateSha256Token(char *token, const int token_len,
token[i+1] = digits[*hash & 0xF];
}

LOG_INFO(THIS_FUNC_SVC, "SHA256 token: " << token);
LOG_NOTICE(THIS_FUNC_SVC, "-- END --");
LOG_INFO(THIS_FUNC_SVC, F("SHA256 token: ") << token);
LOG_INFO(THIS_FUNC_SVC, F("-- END --"));
}
25 changes: 13 additions & 12 deletions ESP8266/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void setup()
memset(&cdata, 0, sizeof(cdata));
memset(&data, 0, sizeof(data)); // На всякий случай
LOG_BEGIN(115200); //Включаем логгирование на пине TX, 115200 8N1
LOG_NOTICE(FPSTR(S_ESP), FPSTR(S_BOOTED));
LOG_INFO(FPSTR(S_ESP), F("Booted"));
masterI2C.begin(); //Включаем i2c master
}

Expand All @@ -38,16 +38,16 @@ void setup()
*/
void calculate_values(const Settings &sett, const SlaveData &data, CalculatedData &cdata)
{
LOG_NOTICE(FPSTR(S_ESP), "new impulses=" << data.impulses0 << " " << data.impulses1);
LOG_INFO(FPSTR(S_ESP), F("new impulses=") << data.impulses0 << " " << data.impulses1);

if (sett.liters_per_impuls > 0) {
cdata.channel0 = sett.channel0_start + (data.impulses0 - sett.impulses0_start) / 1000.0 * sett.liters_per_impuls;
cdata.channel1 = sett.channel1_start + (data.impulses1 - sett.impulses1_start) / 1000.0 * sett.liters_per_impuls;
LOG_NOTICE(FPSTR(S_ESP), "new value0=" << cdata.channel0 << " value1=" << cdata.channel1);
LOG_INFO(FPSTR(S_ESP), F("new value0=") << cdata.channel0 << F(" value1=") << cdata.channel1);

cdata.delta0 = (data.impulses0 - sett.impulses0_previous)*sett.liters_per_impuls;
cdata.delta1 = (data.impulses1 - sett.impulses1_previous)*sett.liters_per_impuls;
LOG_NOTICE(FPSTR(S_ESP), "delta0=" << cdata.delta0 << " delta1=" << cdata.delta1);
LOG_INFO(FPSTR(S_ESP), F("delta0=") << cdata.delta0 << F(" delta1=") << cdata.delta1);
}
}

Expand Down Expand Up @@ -79,7 +79,7 @@ void loop()
//Загружаем конфигурацию из EEPROM
bool success = loadConfig(sett);
if (!success) {
LOG_ERROR(FPSTR(S_ESP), FPSTR(S_ERROR_LOAD_CFG));
LOG_ERROR(FPSTR(S_ESP), F("Error loading config"));
}

//Вычисляем текущие показания
Expand All @@ -101,15 +101,15 @@ void loop()
if (success) {
if (mode == TRANSMIT_MODE) {
//Проснулись для передачи показаний
LOG_NOTICE(FPSTR(S_WIF), FPSTR(S_STARTING));
LOG_INFO(FPSTR(S_WIF), F("Starting"));

//WifiManager уже записал ssid & pass в Wifi, поэтому не надо самому заполнять
WiFi.begin();

//Ожидаем подключения к точке доступа
uint32_t start = millis();
while (WiFi.status() != WL_CONNECTED && millis() - start < ESP_CONNECT_TIMEOUT) {
LOG_NOTICE(FPSTR(S_WIF), "Status: " << WiFi.status());
LOG_INFO(FPSTR(S_WIF), F("Status: ") << WiFi.status());
delay(200);

check_voltage(data, cdata);
Expand All @@ -121,17 +121,17 @@ void loop()
if (WiFi.status() == WL_CONNECTED
&& masterI2C.getSlaveData(data)) { //тут надо достоверно прочитать i2c

LOG_NOTICE(FPSTR(S_WIF), "Connected, IP: " << WiFi.localIP().toString());
LOG_INFO(FPSTR(S_WIF), F("Connected, IP: ") << WiFi.localIP().toString());

cdata.rssi = WiFi.RSSI();
LOG_DEBUG(FPSTR(S_WIF), "RSSI: " << cdata.rssi);
LOG_DEBUG(FPSTR(S_WIF), F("RSSI: ") << cdata.rssi);

if (send_blynk(sett, data, cdata)) {
LOG_NOTICE(FPSTR(S_BLK), FPSTR(S_SEND_OK));
LOG_INFO(FPSTR(S_BLK), F("Send OK"));
}

if (send_mqtt(sett, data, cdata)) {
LOG_NOTICE(FPSTR(S_MQT), FPSTR(S_SEND_OK));
LOG_INFO(FPSTR(S_MQT), F("Send OK"));
}

UserClass::sendNewData(sett, data, cdata);
Expand All @@ -144,7 +144,8 @@ void loop()
}
}

LOG_NOTICE(FPSTR(S_ESP), FPSTR(S_GOING_SLEEP));
LOG_INFO(FPSTR(S_ESP), F("Going to sleep"));

masterI2C.sendCmd('Z'); // "Можешь идти спать, attiny"
LOG_END();

Expand Down
26 changes: 13 additions & 13 deletions ESP8266/src/master_i2c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ bool MasterI2C::sendCmd(const char cmd ) {

Wire.beginTransmission( I2C_SLAVE_ADDR );
if (Wire.write(cmd) != 1){
LOG_ERROR(FPSTR(S_I2C), FPSTR(S_I2C_WR_FAILED));
LOG_ERROR(FPSTR(S_I2C), F("Write cmd failed"));
return false;
}
int err = Wire.endTransmission(true);
Expand All @@ -33,7 +33,7 @@ bool MasterI2C::sendCmd(const char cmd ) {
bool MasterI2C::getByte(uint8_t &value) {

if (Wire.requestFrom( I2C_SLAVE_ADDR, 1 ) != 1) {
LOG_ERROR(FPSTR(S_I2C), FPSTR(S_I2C_REQ_FAILED));
LOG_ERROR(FPSTR(S_I2C), F("RequestFrom failed"));
return false;
}
value = Wire.read();
Expand Down Expand Up @@ -68,10 +68,10 @@ bool MasterI2C::getMode(uint8_t &mode) {

mode = TRANSMIT_MODE;
if (!sendCmd('M') || !getByte(mode)) {
LOG_ERROR(FPSTR(S_I2C), FPSTR(S_I2C_FAILED));
LOG_ERROR(FPSTR(S_I2C), F("GetMode failed. Check i2c line."));
return false;
}
LOG_NOTICE(FPSTR(S_I2C), "mode=" << mode);
LOG_INFO(FPSTR(S_I2C), "mode=" << mode);
return true;
}

Expand All @@ -96,17 +96,17 @@ bool MasterI2C::getSlaveData(SlaveData &data) {
data.diagnostic = good;

if (good) {
LOG_NOTICE(FPSTR(S_I2C), "version: " << data.version);
LOG_NOTICE(FPSTR(S_I2C), "service: " << data.service);
LOG_NOTICE(FPSTR(S_I2C), "voltage: " << data.voltage);
LOG_NOTICE(FPSTR(S_I2C), "resets: " << data.resets);
LOG_NOTICE(FPSTR(S_I2C), "state0: " << data.state0);
LOG_NOTICE(FPSTR(S_I2C), "state1: " << data.state1);
LOG_NOTICE(FPSTR(S_I2C), "impulses0: " << data.impulses0);
LOG_NOTICE(FPSTR(S_I2C), "impulses1: " << data.impulses1);
LOG_INFO(FPSTR(S_I2C), F("version: ") << data.version);
LOG_INFO(FPSTR(S_I2C), F("service: ") << data.service);
LOG_INFO(FPSTR(S_I2C), F("voltage: ") << data.voltage);
LOG_INFO(FPSTR(S_I2C), F("resets: ") << data.resets);
LOG_INFO(FPSTR(S_I2C), F("state0: ") << data.state0);
LOG_INFO(FPSTR(S_I2C), F("state1: ") << data.state1);
LOG_INFO(FPSTR(S_I2C), F("impulses0: ") << data.impulses0);
LOG_INFO(FPSTR(S_I2C), F("impulses1: ") << data.impulses1);

} else {
LOG_ERROR(FPSTR(S_I2C), FPSTR(S_DATA_FAILED));
LOG_ERROR(FPSTR(S_I2C), F("Data failed"));
}
return good;
}
Expand Down
Loading

0 comments on commit d4573dd

Please sign in to comment.