Imported calculate, sendmysql to restserver
This commit is contained in:
80
RestServer/calculate.c
Normal file
80
RestServer/calculate.c
Normal file
@@ -0,0 +1,80 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h> /* link against math lib */
|
||||
#include "calculate.h"
|
||||
|
||||
#define R 8314.3 //J/(kmol*K) (universelle Gaskonstante)
|
||||
#define mw 18.016 //kg/kmol (Molekulargewicht des Wasserdampfes)
|
||||
|
||||
/*
|
||||
Bezeichnungen:
|
||||
r = relative Luftfeuchte
|
||||
T = Temperatur in °C
|
||||
TK = Temperatur in Kelvin (TK = T + 273.15)
|
||||
TD = Taupunkttemperatur in °C
|
||||
DD = Dampfdruck in hPa
|
||||
SDD = Sättigungsdampfdruck in hPa
|
||||
|
||||
Parameter:
|
||||
a = 7.5, b = 237.3 für T >= 0
|
||||
a = 7.6, b = 240.7 für T < 0 über Wasser (Taupunkt)
|
||||
a = 9.5, b = 265.5 für T < 0 über Eis (Frostpunkt)
|
||||
|
||||
R* = 8314.3 J/(kmol*K) (universelle Gaskonstante)
|
||||
mw = 18.016 kg/kmol (Molekulargewicht des Wasserdampfes)
|
||||
AF = absolute Feuchte in g Wasserdampf pro m3 Luft
|
||||
|
||||
Formeln:
|
||||
|
||||
SDD(T) = 6.1078 * 10^((a*T)/(b+T))
|
||||
DD(r,T) = r/100 * SDD(T)
|
||||
r(T,TD) = 100 * SDD(TD) / SDD(T)
|
||||
TD(r,T) = b*v/(a-v) mit v(r,T) = log10(DD(r,T)/6.1078)
|
||||
AF(r,TK) = 10^5 * mw/R* * DD(r,T)/TK; AF(TD,TK) = 10^5 * mw/R* * SDD(TD)/TK
|
||||
*/
|
||||
|
||||
static float sdd(float temperature) {
|
||||
//select constant based on input temperature
|
||||
float a = 7.5, b = 237.3;
|
||||
if (temperature >= 0) {
|
||||
a = 7.6;
|
||||
b = 240.7;
|
||||
}
|
||||
return 6.1078 * pow(10, (a * temperature) / (b + temperature));
|
||||
}
|
||||
|
||||
static float dd(float relativeHumidity, float temperature) {
|
||||
return relativeHumidity / 100 * sdd(temperature);
|
||||
}
|
||||
|
||||
/* CURRENTLY UNUSED
|
||||
|
||||
static float r(float temperature, float dewTemperature) {
|
||||
// This is optional. Necessary with dew point measurements.
|
||||
return 100 * sdd(dewTemperature) / sdd(temperature);
|
||||
}
|
||||
|
||||
static float v(float relativeHumidity, float temperature) {
|
||||
log10(dd(relativeHumidity, temperature)/6.1078);
|
||||
}
|
||||
|
||||
static float td(float relativeHumidity, float temperature) {
|
||||
//select constant based on input temperature
|
||||
float a = 7.5, b = 237.3;
|
||||
if (temperature >= 0) {
|
||||
a = 7.6;
|
||||
b = 240.7;
|
||||
}
|
||||
return b * v(relativeHumidity, temperature) / (a - v(relativeHumidity, temperature));
|
||||
}
|
||||
*/
|
||||
static float af(float relativeHumidity, float temperature) {
|
||||
float tk = temperature + 273.15;
|
||||
return pow(10, 5) * mw/R * dd(relativeHumidity, temperature) / tk;
|
||||
}
|
||||
|
||||
float absoluteHumidityFloat(float temperature, float humidity) {
|
||||
return af(humidity, temperature);
|
||||
}
|
||||
|
||||
|
6
RestServer/calculate.h
Normal file
6
RestServer/calculate.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef calculate_H
|
||||
#define calculate_H
|
||||
|
||||
float absoluteHumidityFloat(float temperature, float humidity);
|
||||
|
||||
#endif
|
@@ -1,13 +1,13 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "sendmysql.h"
|
||||
#include "calculate.h"
|
||||
|
||||
#define U_DISABLE_CURL
|
||||
#define U_DISABLE_WEBSOCKET
|
||||
#include <ulfius.h>
|
||||
@@ -76,19 +76,18 @@ char * read_file(const char * filename) {
|
||||
}
|
||||
}
|
||||
|
||||
int callback_all_test_foo (const struct _u_request * request, struct _u_response * response, void * user_data) {
|
||||
//char * url_params = print_map(request->map_url);
|
||||
//char * response_body = msprintf("parameters from the url are \n%s\n\n",
|
||||
//url_params);
|
||||
int callback_absTempHum(const struct _u_request *request, struct _u_response *response, void *user_data) {
|
||||
|
||||
int i;
|
||||
float temphum[2];
|
||||
const char **keys;
|
||||
keys = u_map_enum_keys(request->map_url);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
temphum[i] = atoi(u_map_get(request->map_url, keys[i]));
|
||||
temphum[i] = atof(u_map_get(request->map_url, keys[i]));
|
||||
}
|
||||
char *response_body = msprintf("Temp: %f, Hum: %f",temphum[0], temphum[1]);
|
||||
char *response_body = msprintf("Temp: %f, Hum: %f, absHum: %f",temphum[0], temphum[1], absoluteHumidityFloat(temphum[0], temphum[1]));
|
||||
insertData(1, temphum[0], temphum[1], 0);
|
||||
|
||||
ulfius_set_string_body_response(response, 200, response_body);
|
||||
//o_free(url_params);
|
||||
@@ -99,7 +98,6 @@ int callback_all_test_foo (const struct _u_request * request, struct _u_response
|
||||
|
||||
|
||||
int main(void) {
|
||||
|
||||
struct _u_instance instance;
|
||||
|
||||
// Initialize instance with the port number
|
||||
@@ -108,11 +106,9 @@ int main(void) {
|
||||
return(1);
|
||||
}
|
||||
|
||||
instance.max_post_body_size = 1024;
|
||||
|
||||
// Endpoint list declaration
|
||||
ulfius_add_endpoint_by_val(&instance, "GET", "/welcome", NULL, 0, &callback_welcome, NULL);
|
||||
ulfius_add_endpoint_by_val(&instance, "GET", PREFIX, "/:temp/:hum", 0, &callback_all_test_foo, NULL);
|
||||
ulfius_add_endpoint_by_val(&instance, "GET", PREFIX, "/:temp/:hum", 0, &callback_absTempHum, NULL);
|
||||
|
||||
// Start the framework
|
||||
if (ulfius_start_framework(&instance) == U_OK) {
|
||||
|
@@ -7,7 +7,7 @@ CFLAGS = -Wall -g -D_GNU_SOURCE -D_REENTRANT -DVERSION=\"$(VERSION)\" `mysql_co
|
||||
#LDFLAGS = -lm -lpthread `gtk-config --cflags` `gtk-config --libs` -lgthread
|
||||
LDFLAGS = `mysql_config --libs` -lm -lulfius -lyder -lorcania
|
||||
|
||||
OBJ = main.o
|
||||
OBJ = main.o calculate.o sendmysql.o
|
||||
|
||||
dht22: $(OBJ)
|
||||
$(CC) $(CFLAGS) -o humidityserver $(OBJ) $(LDFLAGS)
|
||||
|
106
RestServer/sendmysql.c
Normal file
106
RestServer/sendmysql.c
Normal file
@@ -0,0 +1,106 @@
|
||||
/* Simple C program that connects to MySQL Database server*/
|
||||
#include <mysql/mysql.h>
|
||||
//#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "calculate.h"
|
||||
#include "sendmysql.h"
|
||||
|
||||
void insertData(int node_id, float temperature, float humidity, int isoutside) {
|
||||
int pin = 0;
|
||||
MYSQL *conn;
|
||||
//MYSQL_RES *res;
|
||||
//MYSQL_ROW row;
|
||||
|
||||
char *server = "localhost";
|
||||
char *user = "dhtuser";
|
||||
char *password = "raspberry"; /* set me first */
|
||||
char *database = "dhtstats";
|
||||
|
||||
conn = mysql_init(NULL);
|
||||
|
||||
/* Connect to database */
|
||||
if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
|
||||
fprintf(stderr, "%s\n", mysql_error(conn));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
char *pquerystring = NULL;
|
||||
|
||||
if (-1 == asprintf(&pquerystring,
|
||||
"INSERT INTO stats (node_id, pin, humidity, temperature, isoutside, gm3) VALUES (%i, %i, %f, %f, %i, %f)", node_id, pin, humidity, temperature, isoutside, absoluteHumidityFloat(temperature, humidity))) {
|
||||
perror("asprintf() failed");
|
||||
} else {
|
||||
if (mysql_query(conn, pquerystring)) {
|
||||
fprintf(stderr, "%s\n", mysql_error(conn));
|
||||
free(pquerystring);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
free(pquerystring);
|
||||
pquerystring = NULL;
|
||||
|
||||
/* close connection */
|
||||
//mysql_free_result(res);
|
||||
mysql_close(conn);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void insertDataAverages(float temperature, float humidity, float gm3, int isoutside) {
|
||||
MYSQL *conn;
|
||||
//MYSQL_RES *res;
|
||||
//MYSQL_ROW row;
|
||||
|
||||
char *server = "localhost";
|
||||
char *user = "dhtuser";
|
||||
char *password = "raspberry"; /* set me first */
|
||||
char *database = "dhtstats";
|
||||
|
||||
conn = mysql_init(NULL);
|
||||
|
||||
/* Connect to database */
|
||||
if (!mysql_real_connect(conn, server,
|
||||
user, password, database, 0, NULL, 0)) {
|
||||
fprintf(stderr, "%s\n", mysql_error(conn));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
// send SQL query
|
||||
if (mysql_query(conn, "show tables")) {
|
||||
fprintf(stderr, "%s\n", mysql_error(conn));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
res = mysql_use_result(conn);
|
||||
|
||||
// output table name
|
||||
printf("MySQL Tables in mysql database:\n");
|
||||
while ((row = mysql_fetch_row(res)) != NULL)
|
||||
printf("%s \n", row[0]);
|
||||
*/
|
||||
|
||||
char *pquerystring = NULL;
|
||||
if (-1 == asprintf(&pquerystring,
|
||||
"INSERT INTO average_stats (humidity, temperature, gm3, isoutside) VALUES (%f, %f, %f, %i)", humidity, temperature, absoluteHumidityFloat(temperature, humidity), isoutside)) {
|
||||
perror("asprintf() failed");
|
||||
} else {
|
||||
if (mysql_query(conn, pquerystring)) {
|
||||
fprintf(stderr, "%s\n", mysql_error(conn));
|
||||
free(pquerystring);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
free(pquerystring);
|
||||
pquerystring = NULL;
|
||||
|
||||
/* close connection */
|
||||
//mysql_free_result(res);
|
||||
mysql_close(conn);
|
||||
}
|
3
RestServer/sendmysql.h
Normal file
3
RestServer/sendmysql.h
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
void insertData(int node_id, float temperature, float humidity, int isoutside);
|
||||
void insertDataAverages(float temperature, float humidity, float gm3, int isoutside);
|
Reference in New Issue
Block a user