Files
rainsensor2/sketch/application.cpp
2020-07-29 15:11:49 +02:00

111 lines
2.1 KiB
C++

/*
* productionMode.cpp
*
* Created on: Jul 26, 2020
* Author: wn
*/
#include "defines.h"
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <mqttHandling.h>
#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;
uint32_t rainCnt = 0;
if (currentMillis > (lastValuesMillis + (configBlock.valuesPeriod * 1000))) {
lastValuesMillis = currentMillis;
// rain sensor
noInterrupts();
rainCnt = cnt;
cnt = 0;
interrupts();
#ifdef DEBUG
Serial.print(rainCnt);
Serial.println();
#endif
totalCnt += rainCnt;
// MQTT publishing
char buf[VALUES_BUF_SIZE];
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, "{\"lastValues\":{\"raincnt\":%ld, \"totalCnt\":%ld}, \"uptime\":%ld}", rainCnt, totalCnt, uptime);
mqttClient.publish(configBlock.mqttHeartbeatTopic, heartbeatBuf);
}
}