lower and upper bound

This commit is contained in:
Wolfgang Hottgenroth
2021-03-15 17:16:19 +01:00
parent 1626bd7030
commit cface0d4b2
3 changed files with 42 additions and 26 deletions

View File

@ -41,6 +41,8 @@ typedef struct {
typedef struct {
t_configHandle *configHandle;
uint32_t lowerBound;
uint32_t upperBound;
const char *influxUser;
const char *influxPass;
const char *influxServer;
@ -236,6 +238,14 @@ int initForwarder(t_configHandle *configHandle, t_forwarderHandle *handle) {
}
logmsg(LOG_INFO, "influxUrl is %s", handle->influxUrl);
uint32_t lowerBound = 45000;
config_lookup_int(&(configHandle->cfg), "lowerBound", &lowerBound);
handle->lowerBound = lowerBound;
uint32_t upperBound = 55000;
config_lookup_int(&(configHandle->cfg), "upperBound", &upperBound);
handle->upperBound = upperBound;
logmsg(LOG_INFO, "lowerBound: %u, upperBound: %u", lowerBound, upperBound);
return 0;
}
@ -280,30 +290,34 @@ int forwardMinuteBuffer(t_forwarderHandle *handle, t_minuteBuffer *buf) {
for (uint8_t j = 0; j < SECONDS_PER_MINUTE; j++) {
uint64_t timestamp = buf->s.timestamp + j;
logmsg(LOG_DEBUG, "Time: %lu, Frequency: %u", timestamp, buf->s.frequency[j]);
if ((buf->s.frequency[j] >= handle->lowerBound) && (buf->s.frequency[j] <= handle->upperBound)) {
int frequency_before_point = buf->s.frequency[j] / 1000;
int frequency_behind_point = buf->s.frequency[j] - (frequency_before_point * 1000);
int frequency_before_point = buf->s.frequency[j] / 1000;
int frequency_behind_point = buf->s.frequency[j] - (frequency_before_point * 1000);
char payload[256];
int res = snprintf(payload, sizeof(payload),
"%s,valid=1,location=%s,host=%s freq=%d.%03d"
#ifdef OpenBSD
" %llu"
#else
" %lu"
#endif
"",
handle->influxMeasurement, location, buf->s.deviceId,
frequency_before_point, frequency_behind_point,
timestamp);
if (res > sizeof(payload)) {
logmsg(LOG_ERR, "payload buffer to small");
return -1;
}
logmsg(LOG_DEBUG, "Payload: %s", payload);
res = httpPostRequest(handle->influxUrl, handle->influxUser, handle->influxPass, payload);
if (res == 0) {
logmsg(LOG_DEBUG, "Successfully sent to InfluxDB");
char payload[256];
int res = snprintf(payload, sizeof(payload),
"%s,valid=1,location=%s,host=%s freq=%d.%03d"
#ifdef OpenBSD
" %llu"
#else
" %lu"
#endif
"",
handle->influxMeasurement, location, buf->s.deviceId,
frequency_before_point, frequency_behind_point,
timestamp);
if (res > sizeof(payload)) {
logmsg(LOG_ERR, "payload buffer to small");
return -1;
}
logmsg(LOG_DEBUG, "Payload: %s", payload);
res = httpPostRequest(handle->influxUrl, handle->influxUser, handle->influxPass, payload);
if (res == 0) {
logmsg(LOG_DEBUG, "Successfully sent to InfluxDB");
}
} else {
logmsg(LOG_ERR, "%u out of bound", buf->s.frequency[j]);
}
}

View File

@ -5,6 +5,9 @@ influxPort = 8086;
influxDatabase = "smarthome2";
influxMeasurement = "mainsfrequency";
lowerBound = 45000;
upperBound = 55000;
receivePort = 20169;
devices = (

View File

@ -3,11 +3,10 @@
#include <stdint.h>
#include <sha256.h>
#include <config.h>
#define SECONDS_PER_MINUTE 60
typedef struct __attribute__((__packed__)) {
char deviceId[sizeof(((t_configBlock*)0)->deviceId)];
char deviceId[16];
uint8_t hash[SHA256_BLOCK_SIZE];
uint32_t totalRunningHours;
uint32_t totalPowercycles;
@ -22,4 +21,4 @@ typedef union {
uint8_t b[sizeof(t_minuteStruct)];
} t_minuteBuffer;
#endif // _SINKSTRUCT_H_
#endif // _SINKSTRUCT_H_