/** * @file debugMqtt.cpp * @author Alexander Klein (alex@kleiax.de) * @brief Implemention of the class debugMqtt.h * @see debugMqtt.h * @version 0.1 * @date 2021-12-13 * * @copyright Copyright (c) 2021 * */ #include "debugMqtt.h" PubSubClient* DebugMqtt::client; Loglevel DebugMqtt::loglevel; bool DebugMqtt::isInit = false; char DebugMqtt::msg[MQTT_BUFFER_SIZE]; char DebugMqtt::topic[MQTT_BUFFER_SIZE]; DebugMqtt::DebugMqtt(const char* name, uint8_t bufSize) { this->name = name; if (bufSize != 0) this->bufSize = bufSize; this->buf = new char[this->bufSize]; } DebugMqtt::~DebugMqtt() { delete this->buf; } void DebugMqtt::sendMsg(Loglevel loglevel, String topic, String msg) { snprintf (DebugMqtt::msg, MQTT_BUFFER_SIZE, "%s: %s",this->name ,msg.c_str()); this->sendData(loglevel, topic, DebugMqtt::msg); } void DebugMqtt::sendMsg(Loglevel loglevel, String msg) { this->sendMsg(loglevel, "", msg); } void DebugMqtt::sendData(Loglevel loglevel, String topic, String data) { if (!DebugMqtt::isInit) { return; } if (loglevel <= DebugMqtt::loglevel && loglevel > Loglevel::none) { snprintf (DebugMqtt::topic, MQTT_BUFFER_SIZE, "%s%s", DebugMqtt::enum_to_string(loglevel).c_str(), topic.c_str()); snprintf (DebugMqtt::msg, MQTT_BUFFER_SIZE, "%s", data.c_str()); client->publish(DebugMqtt::topic, DebugMqtt::msg); } } void DebugMqtt::sendData(Loglevel loglevel, String data){ this->sendData(loglevel, "", data); } void DebugMqtt::writeToInflux(String measurement_name, String field_set, float measurement, uint64_t nanos) { // Example String: "weather temperature=82 1465839830100400200"; snprintf(DebugMqtt::msg, MQTT_BUFFER_SIZE, "%s %s=%f %llu", measurement_name.c_str(), field_set.c_str(), measurement, nanos); this->sendData(Loglevel::influx, DebugMqtt::msg); } void DebugMqtt::addCharacter(char c) { this->buf[this->bufPos] = c; this->bufPos++; if (c == '\n' || this->bufPos >= this->bufSize - 1) { this->buf[this->bufPos - 1] = '\0'; this->sendMsg(Loglevel::info, buf); this->bufPos = 0; } } void DebugMqtt::init(PubSubClient *client, Loglevel max_loglevel) { DebugMqtt::client = client; DebugMqtt::loglevel = max_loglevel; DebugMqtt::isInit = true; } void DebugMqtt::changeLoglevel(Loglevel loglevel) { DebugMqtt::loglevel = loglevel; } String DebugMqtt::enum_to_string(Loglevel loglevel) { String topic = ""; topic += MQTT_DEBUG_TOPIC; switch(loglevel){ case Loglevel::error : topic += "/Error"; break; case Loglevel::warn : topic += "/Warn"; break; case Loglevel::info : topic += "/Info"; break; case Loglevel::debug : topic += "/Debug"; break; case Loglevel::influx : topic += "/Influx"; break; default: topic += "/NoLoglovel"; break; } return topic; }