/* * productionMode.cpp * * Created on: Jul 26, 2020 * Author: wn */ #include "defines.h" #include #include #include #include #include #include "configuration.h" volatile uint32_t cnt = 0; uint32_t uptime = 0; void count() { static uint32_t lastEvent = 0; uint32_t currentEvent = micros(); if (currentEvent > (lastEvent + configBlock.debounce)) { lastEvent = currentEvent; cnt++; } } // void subscribeApplication() { // } // void callbackApplication(char *topic, uint8_t tokenCnt, char **tokens) { // } void setupApplication() { mqttSetup(); pinMode(REED_PIN, INPUT_PULLUP); attachInterrupt(REED_PIN, count, FALLING); } void loopApplication() { mqttLoop(); uint32_t currentMillis = millis(); static uint32_t lastUptimeMillis = 0; if (currentMillis > (lastUptimeMillis + 1000)) { lastUptimeMillis = currentMillis; uptime++; } static uint32_t totalCnt = 0; static uint32_t lastValuesMillis = 0; static uint32_t lastHeartbeatMillis = 0; char buf[VALUES_BUF_SIZE]; if (currentMillis > (lastValuesMillis + (configBlock.valuesPeriod * 1000))) { lastValuesMillis = currentMillis; // rain sensor uint32_t rainCnt = 0; noInterrupts(); rainCnt = cnt; cnt = 0; interrupts(); #ifdef DEBUG Serial.print(rainCnt); Serial.println(); #endif totalCnt += rainCnt; // MQTT publishing memset(buf, 0, VALUES_BUF_SIZE); snprintf(buf, VALUES_BUF_SIZE-1, "{\"raincnt\":%ld, \"totalCnt\":%ld, \"uptime\":%ld}", rainCnt, totalCnt, uptime); mqttClient.publish(configBlock.mqttValuesTopic, buf); } if (currentMillis > (lastHeartbeatMillis + (configBlock.heartbeatPeriod * 1000))) { lastHeartbeatMillis = currentMillis; #ifdef DEBUG Serial.println("Publishing heartbeat"); #endif // MQTT publishing char heartbeatBuf[HEARTBEAT_BUF_SIZE]; memset(heartbeatBuf, 0, HEARTBEAT_BUF_SIZE); snprintf(heartbeatBuf, HEARTBEAT_BUF_SIZE-1, "{\"lastMessage\":%s, \"uptime\":%ld}", buf, uptime); mqttClient.publish(configBlock.mqttHeartbeatTopic, heartbeatBuf); } }