diff --git a/cube/Makefile b/cube/Makefile index 64ff0fe..f214f03 100644 --- a/cube/Makefile +++ b/cube/Makefile @@ -37,7 +37,7 @@ BUILD_DIR = build ###################################### # C sources C_SOURCES = \ -User/Src/oled.c User/Src/cmdHandler.c User/Src/eeprom.c User/Src/frontend.c User/Src/logger.c User/Src/loopCtrl.c User/Src/main2.c User/Src/mbusComm.c User/Src/mbusParserExt.c User/Src/mqttComm.c User/Src/ports.c User/Src/ringbuffer.c User/Src/show.c User/Src/utils.c User/Src/wizHelper.c hottislib/PontCoopScheduler.c \ +User/Src/config.c User/Src/oled.c User/Src/cmdHandler.c User/Src/eeprom.c User/Src/frontend.c User/Src/logger.c User/Src/loopCtrl.c User/Src/main2.c User/Src/mbusComm.c User/Src/mbusParserExt.c User/Src/mqttComm.c User/Src/ports.c User/Src/ringbuffer.c User/Src/show.c User/Src/utils.c User/Src/wizHelper.c hottislib/PontCoopScheduler.c \ libmbus/mbus/mbus-protocol.c \ Core/Src/main.c \ Core/Src/gpio.c \ diff --git a/cube/User/Inc/config.h b/cube/User/Inc/config.h index ec8464d..1d96cf8 100644 --- a/cube/User/Inc/config.h +++ b/cube/User/Inc/config.h @@ -8,12 +8,15 @@ typedef struct __attribute__((__packed__)) s_configBlock { char deviceName[16]; uint8_t macAddress[6]; + char brokerName[64]; char watchdogTopic[64]; char startupTopic[64]; char statusTopic[64]; char mbusDataTopic[64]; + char syslogServerName[64]; } t_configBlock; void configInit(); +t_configBlock* getConfig(); #endif /* _CONFIG_H_ */ diff --git a/cube/User/Src/config.c b/cube/User/Src/config.c new file mode 100644 index 0000000..80c5f5c --- /dev/null +++ b/cube/User/Src/config.c @@ -0,0 +1,31 @@ +#include + + +/* +typedef struct __attribute__((__packed__)) s_configBlock { + char deviceName[16]; + uint8_t macAddress[6]; + char brokerName[64]; + char watchdogTopic[64]; + char startupTopic[64]; + char statusTopic[64]; + char mbusDataTopic[64]; + char syslogServerName[64]; +} t_configBlock; +*/ + +t_configBlock defaultConfigBlock = { + .deviceName = "MBGW3", + .macAddress = { 0x00, 0xA0, 0x57, 0x05, 0x3E, 0x0D }, + .brokerName = "mqttbroker", + .watchdogTopic = "IoT/Watchdog", + .startupTopic = "IoT/MBGW3/Startup", + .statusTopic = "IoT/MBGW3/Status", + .mbusDataTopic = "IoT/MBGW3/Measurement", + .syslogServerName = "syslogserver", +}; + + +t_configBlock* getConfig() { + return &defaultConfigBlock; +} \ No newline at end of file diff --git a/cube/User/Src/logger.c b/cube/User/Src/logger.c index 261806a..e507af0 100644 --- a/cube/User/Src/logger.c +++ b/cube/User/Src/logger.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -26,14 +27,17 @@ #define MSGBUFFER_SIZE 256 +static t_configBlock *config; + extern const uint8_t SYSLOG_SOCK; -uint8_t syslogAddr[] = { 172, 16, 11, 15 }; +uint8_t syslogAddr[4]; uint8_t singleOctetTXBuffer; static ringbuffer_t logBuffer; -void logInit() { +void logInit() { + config = getConfig(); ringbufferInit(&logBuffer, LOGBUFFER_SIZE); } @@ -81,7 +85,7 @@ void syslog(char *msg) { state = 1; // no break case 1: - if (! wizDnsQuery("syslogserver", syslogAddr)) { + if (! wizDnsQuery(config->syslogServerName, syslogAddr)) { disconnect(SYSLOG_SOCK); state = 0; break; diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index 76bad27..a7541ac 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -17,10 +17,17 @@ #include #include #include +#include #include + +static t_configBlock *config; + +/* static const char MBUS_TOPIC[] = "IoT/MBGW3/Measurement"; +*/ + static const uint8_t MBUS_QUERY_CMD = 0x5b; @@ -130,7 +137,7 @@ static void printError() { coloredMsg(LOG_YELLOW, true, "mbc pe [%d] Error ratio is %.2f", mbusCommHandle.requestId, errorRatio); - mqttPublishf(MBUS_TOPIC, "{\"Status\":\"Error\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\"}", + mqttPublishf(config->mbusDataTopic, "{\"Status\":\"Error\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\"}", mbusCommHandle.requestId, mbusCommHandle.device->deviceName, mbusCommHandle.device->failures, mbusCommHandle.device->requests, errorRatio); oledPrintf(OLED_SCREEN0, "Err:%d/%d %.2f", mbusCommHandle.device->failures, mbusCommHandle.device->requests, errorRatio); @@ -231,25 +238,25 @@ static void parseAndPrintFrame() { mbusCommHandle.requestId, errorRatio); if (numOfConsideredFields == 1) { - mqttPublishf(MBUS_TOPIC, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ + mqttPublishf(config->mbusDataTopic, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ "\"Values\":{\"%s\":\"%.1f\"}}", mbusCommHandle.requestId, mbusCommHandle.device->deviceName, mbusCommHandle.device->failures, mbusCommHandle.device->requests, errorRatio, keys[0], values[0]); } else if (numOfConsideredFields == 2) { - mqttPublishf(MBUS_TOPIC, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ + mqttPublishf(config->mbusDataTopic, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ "\"Values\":{\"%s\":\"%.1f\", \"%s\":\"%.1f\"}}", mbusCommHandle.requestId, mbusCommHandle.device->deviceName, mbusCommHandle.device->failures, mbusCommHandle.device->requests, errorRatio, keys[0], values[0], keys[1], values[1]); } else if (numOfConsideredFields == 3) { - mqttPublishf(MBUS_TOPIC, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ + mqttPublishf(config->mbusDataTopic, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ "\"Values\":{\"%s\":\"%.1f\", \"%s\":\"%.1f\", \"%s\":\"%.1f\"}}", mbusCommHandle.requestId, mbusCommHandle.device->deviceName, mbusCommHandle.device->failures, mbusCommHandle.device->requests, errorRatio, keys[0], values[0], keys[1], values[1], keys[2], values[2]); } else if (numOfConsideredFields == 4) { - mqttPublishf(MBUS_TOPIC, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ + mqttPublishf(config->mbusDataTopic, "{\"Status\":\"Ok\", \"RequestId\":\"%d\", \"Device\":\"%s\", \"Errors\":\"%d\", \"Requests\":\"%d\", \"ErrorRatio\":\"%.2f\", " \ "\"Values\":{\"%s\":\"%.1f\", \"%s\":\"%.1f\", \"%s\":\"%.1f\", \"%s\":\"%.1f\"}}", mbusCommHandle.requestId, mbusCommHandle.device->deviceName, mbusCommHandle.device->failures, mbusCommHandle.device->requests, errorRatio, @@ -775,6 +782,8 @@ static void mbusCommScheduler(void *handle) { } void mbusCommInit() { + config = getConfig(); + coloredMsg(LOG_GREEN, true, "mbc mci initializing Meterbus communication"); // enable receive interrupts diff --git a/cube/User/Src/mqttComm.c b/cube/User/Src/mqttComm.c index 9eb2b05..4078d1a 100644 --- a/cube/User/Src/mqttComm.c +++ b/cube/User/Src/mqttComm.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -19,16 +20,19 @@ extern const uint8_t MQTT_SOCK; +static t_configBlock *config; + client_t client; mqttClient_t mqttClient; -uint8_t brokerAddress[] = { 172, 16, 2, 16 }; +uint8_t brokerAddress[4]; uint16_t brokerPort = 1883; +/* const static char WatchdogTopic[] = "IoT/Watchdog"; const static char StartupTopic[] = "IoT/MBGW3/Startup"; const static char StatusTopic[] = "IoT/MBGW3/Status"; - +*/ static uint32_t watchdogCounter = 0; @@ -44,7 +48,7 @@ void watchdogHandler(void *handle) { // typedef void (*callback_t)(char*, uint8_t*, uint16_t); static void mqttCallback(char *topic, uint8_t *payload, uint16_t payloadLength) { - if (0 == strcmp(topic, WatchdogTopic)) { + if (0 == strcmp(topic, config->watchdogTopic)) { watchdogCounter++; } else { coloredMsg(LOG_GREEN, false, "mqcb: %s : %.*s", topic, payloadLength, payload); @@ -61,7 +65,7 @@ static void mqttStatusPublisher(void *handle) { snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%ld\", \"octets\":\"%ld\", \"overrun\":\"%ld\", \"framing\":\"%ld\", \"parity\":\"%ld\", \"noise\":\"%ld\"}", uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->mbusRequestCnt, mbusCommStats->mbusErrorCnt, mbusCommStats->uartOctetCnt, mbusCommStats->uartOverrunCnt, mbusCommStats->uartFramingErrCnt, mbusCommStats->uartParityErrCnt, mbusCommStats->uartNoiseErrCnt); - bool res = publish(&mqttClient, StatusTopic, (const uint8_t*)buf, strlen(buf), false); + bool res = publish(&mqttClient, config->statusTopic, (const uint8_t*)buf, strlen(buf), false); coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res); oledSetActiveScreen(OLED_SCREEN1); @@ -93,7 +97,7 @@ void mqttCommHandler(void *handle) { case 1: coloredMsg(LOG_GREEN, false, "mqch, resolving broker name"); - if (! wizDnsQuery("mqttbroker", brokerAddress)) { + if (! wizDnsQuery(config->brokerName, brokerAddress)) { coloredMsg(LOG_GREEN, false, "mqch, query for broker address failed, going to error state"); state = 255; } @@ -111,7 +115,7 @@ void mqttCommHandler(void *handle) { case 2: coloredMsg(LOG_GREEN, false, "mqch, publish start-up"); - res = publish(&mqttClient, StartupTopic, (const uint8_t*)message, strlen((char*)message), false); + res = publish(&mqttClient, config->startupTopic, (const uint8_t*)message, strlen((char*)message), false); coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res); schAdd(mqttStatusPublisher, NULL, 0, 60000); coloredMsg(LOG_GREEN, false, "mqch, status publisher scheduled"); @@ -120,7 +124,7 @@ void mqttCommHandler(void *handle) { case 3: coloredMsg(LOG_GREEN, false, "mqch, subscribe watchdog"); - res = subscribe(&mqttClient, WatchdogTopic, MQTTQOS0); + res = subscribe(&mqttClient, config->watchdogTopic, MQTTQOS0); coloredMsg(LOG_GREEN, false, "mqch, subscribe returned %d", res); schAdd(watchdogHandler, NULL, 60000, 60000); coloredMsg(LOG_GREEN, false, "mqch, watchdogHandler scheduled"); @@ -150,6 +154,7 @@ void mqttCommHandler(void *handle) { } void mqttCommInit() { + config = getConfig(); schAdd(mqttCommHandler, NULL, 0, 100); }