This commit is contained in:
2020-11-17 12:01:15 +01:00
parent ccf6982b62
commit 23568db1b5
8 changed files with 137 additions and 165 deletions

View File

@ -32,10 +32,10 @@ static uint32_t watchdogCounter = 0;
void watchdogHandler(void *handle) {
if (watchdogCounter > 0) {
coloredMsg(LOG_GREEN, "Watchdog received in between");
coloredMsg(LOG_GREEN, false, "Watchdog received in between");
watchdogCounter = 0;
} else {
coloredMsg(LOG_RED, "No watchdog received in between, booting the system ...");
coloredMsg(LOG_RED, true, "No watchdog received in between, booting the system ...");
// boot the system
}
}
@ -45,18 +45,18 @@ static void mqttCallback(char *topic, uint8_t *payload, uint16_t payloadLength)
if (0 == strcmp(topic, WatchdogTopic)) {
watchdogCounter++;
} else {
logMsg("mqcb: %s : %.*s", topic, payloadLength, payload);
coloredMsg(LOG_GREEN, false, "mqcb: %s : %.*s", topic, payloadLength, payload);
}
}
static void mqttStatusPublisher(void *handle) {
logMsg("mqsp: publishing status");
coloredMsg(LOG_GREEN, false, "mqsp: publishing status");
t_mbusCommStats *mbusCommStats = mbusCommGetStats();
char buf[64];
snprintf(buf, 128, "{\"uptime\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%d\", \"errors\":\"%d\"}",
HAL_GetTick()/1000, schTaskCnt(), mbusCommStats->requestCnt, mbusCommStats->errorCnt);
bool res = publish(&mqttClient, StatusTopic, (const char*)buf, strlen(buf), false);
coloredMsg(LOG_YELLOW, "mqch, publish returned %d", res);
coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res);
}
@ -67,21 +67,21 @@ void mqttCommHandler(void *handle) {
if (isNetworkAvailable()) {
switch (state) {
case 0:
coloredMsg(LOG_YELLOW, "mqch, initializing mqtt client");
coloredMsg(LOG_GREEN, false, "mqch, initializing mqtt client");
client.sockNum = MQTT_SOCK;
mqttClientInit(&mqttClient, &client, mqttCallback);
coloredMsg(LOG_YELLOW, "mqch: mqtt client initialized");
coloredMsg(LOG_GREEN, false, "mqch: mqtt client initialized");
state = 1;
break;
case 1:
coloredMsg(LOG_YELLOW, "mqch, connecting to broker ");
coloredMsg(LOG_GREEN, false, "mqch, connecting to broker ");
bool res = mqttConnect(&mqttClient, brokerAddress, 1883, "mbv3gw-client", NULL, NULL, NULL, 0, false, NULL, false);
coloredMsg(LOG_YELLOW, "mqch, mqttConnect returns %d", res);
coloredMsg(LOG_GREEN, false, "mqch, mqttConnect returns %d", res);
if (res) {
coloredMsg(LOG_YELLOW, "mqch, ok, connected");
coloredMsg(LOG_GREEN, false, "mqch, ok, connected");
state = 2;
} else {
state = 255;
@ -89,40 +89,39 @@ void mqttCommHandler(void *handle) {
break;
case 2:
coloredMsg(LOG_YELLOW, "mqch, publish start-up");
coloredMsg(LOG_GREEN, false, "mqch, publish start-up");
res = publish(&mqttClient, StartupTopic, (const char*)message, strlen(message), false);
coloredMsg(LOG_YELLOW, "mqch, publish returned %d", res);
coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res);
schAdd(mqttStatusPublisher, NULL, 0, 60000);
coloredMsg(LOG_YELLOW, "mqch, status publisher scheduled");
coloredMsg(LOG_GREEN, false, "mqch, status publisher scheduled");
state = 3;
break;
case 3:
coloredMsg(LOG_YELLOW, "mqch, subscribe watchdog");
coloredMsg(LOG_GREEN, false, "mqch, subscribe watchdog");
res = subscribe(&mqttClient, WatchdogTopic, MQTTQOS0);
coloredMsg(LOG_YELLOW, "mqch, subscribe returned %d", res);
coloredMsg(LOG_GREEN, false, "mqch, subscribe returned %d", res);
schAdd(watchdogHandler, NULL, 60000, 60000);
coloredMsg(LOG_YELLOW, "mqch, watchdogHandler scheduled");
coloredMsg(LOG_GREEN, false, "mqch, watchdogHandler scheduled");
state = 4;
break;
case 4:
coloredMsg(LOG_YELLOW, "mqch, now entering the loop");
coloredMsg(LOG_GREEN, false, "mqch, now entering the loop");
state = 5;
break;
case 5:
// coloredMsg(LOG_YELLOW, "mqch, looping");
if (! mqttLoop(&mqttClient)) {
state = 0;
}
break;
case 255:
coloredMsg(LOG_YELLOW, "mqch, error state, will stop here");
coloredMsg(LOG_RED, true, "mqch, error state, will stop here");
schDel(mqttCommHandler, NULL);
schDel(watchdogHandler, NULL);
coloredMsg(LOG_YELLOW, "mqch, trying again in one minute");
coloredMsg(LOG_RED, true, "mqch, trying again in one minute");
schAdd(mqttCommHandler, NULL, 60000, 100);
break;
}
@ -136,8 +135,8 @@ void mqttCommInit() {
void mqttPublish(char *topic, char *message) {
bool res = publish(&mqttClient, topic, message, strlen(message), false);
if (res) {
coloredMsg(LOG_YELLOW, "mqp: %s -> %s successfully published", message, topic);
coloredMsg(LOG_GREEN, false, "mqp: %s -> %s successfully published", message, topic);
} else {
coloredMsg(LOG_RED, "mqp: %s -> %s failed to publish", message, topic);
coloredMsg(LOG_RED, true, "mqp: %s -> %s failed to publish", message, topic);
}
}