Commit 622bcc0b authored by Vladislav Rykov's avatar Vladislav Rykov
Browse files

db + data_send added

parent 9a0c0023
CC = gcc
INCLUDES = -Ilib/gateway_protocol
INCLUDES = -I/usr/include/postgresql
LFLAGS = -Llib
LDIR = lib
LIBS = $(LDIR)/gateway_protocol/gateway_protocol
LIBD = -pthread
LIBD = -pthread -lpq
SRC = src/gateway.c
......@@ -18,7 +18,7 @@ MAIN = gateway
$(LDIR)/gateway_protocol/gateway_protocol.o:
$(CC) -c $(LIBS)/gateway_protocol.c -o $(OBJ)/gateway_protocol.o -I$(LIBS)
$(CC) $(SRC) $(OBJ)/gateway_protocol.o -o $(MAIN) -I$(LIBS) $(LIBD)
$(CC) $(SRC) $(OBJ)/gateway_protocol.o -o $(MAIN) -I$(LIBS) $(LIBD) $(INCLUDES)
all: $(MAIN)
......
No preview for this file type
DROP DATABASE IF EXISTS gateway;
CREATE DATABASE gateway;
\c gateway
ALTER DATABASE gateway OWNER TO root;
CREATE TABLE esp32 (
utc numeric(10,0),
timedate character varying(100),
dht22_t_esp real,
dht22_h_esp real,
sht85_t_esp real,
sht85_h_esp real,
hih8121_t_esp real,
hih8121_h_esp real,
tmp36_0_esp real,
tmp36_1_esp real,
tmp36_2_esp real,
hih4030_esp real,
hh10d_esp real,
dht22_t_wis real,
dht22_h_wis real,
sht85_t_wis real,
sht85_h_wis real,
hih8121_t_wis real,
hih8121_h_wis real,
tmp102_wis real,
hh10d_wis real,
dht22_t_mkr real,
dht22_h_mkr real,
sht85_t_mkr real,
sht85_h_mkr real,
hih8121_t_mkr real,
hih8121_h_mkr real,
hh10d_mkr real
);
ALTER TABLE esp32 OWNER TO root;
--
-- Name: pend_msgs; Type: TABLE; Schema: public; Owner: root
--
CREATE TABLE pend_msgs (
dev_id numeric(3,0) NOT NULL,
msg bytea
);
ALTER TABLE pend_msgs OWNER TO root;
......@@ -12,7 +12,44 @@
#include<sys/time.h>
#include<libpq-fe.h>
typedef struct {
uint32_t utc;
char timedate[32];
float dht22_t_esp;
float dht22_h_esp;
float sht85_t_esp;
float sht85_h_esp;
float hih8121_t_esp;
float hih8121_h_esp;
float tmp36_0_esp;
float tmp36_1_esp;
float tmp36_2_esp;
float hih4030_esp;
float hh10d_esp;
float dht22_t_mkr;
float dht22_h_mkr;
float sht85_t_mkr;
float sht85_h_mkr;
float hih8121_t_mkr;
float hih8121_h_mkr;
float hh10d_mkr;
float dht22_t_wis;
float dht22_h_wis;
float sht85_t_wis;
float sht85_h_wis;
float hih8121_t_wis;
float hih8121_h_wis;
float tmp102_wis;
float hh10d_wis;
} sensor_data_t;
void * connection_handler (void *args);
uint8_t gateway_protocol_data_send_payload_decode(sensor_data_t *sensor_data, const uint8_t *payload, const uint8_t payload_length);
int main (int argc, char **argv) {
int server_desc, client_desc;
......@@ -24,6 +61,12 @@ int main (int argc, char **argv) {
uint8_t payload_length = 0;
int sock_len;
PGconn *conn = PQconnectdb("user=root dbname=gateway");
if (PQstatus(conn) == CONNECTION_BAD) {
printf("connection to db error: %s\n", PQerrorMessage(conn));
return EXIT_FAILURE;
}
if ((server_desc = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
perror("socket creation error");
return EXIT_FAILURE;
......@@ -39,6 +82,7 @@ int main (int argc, char **argv) {
}
while (1) {
buf_len = 0;
printf("listenninig...\n");
if ((buf_len = recvfrom(server_desc, (char *)buf, 1024, MSG_WAITALL, (struct sockaddr *)&client, &sock_len)) < 0) {
perror("socket receive error");
......@@ -74,8 +118,53 @@ int main (int argc, char **argv) {
gettimeofday(&tv, NULL);
memcpy(&buf[buf_len], &tv.tv_sec, sizeof(uint32_t));
buf_len += sizeof(uint32_t);
} else if (packet_type == GATEWAY_PROTOCOL_PACKET_TYPE_DATA_SEND) {
sensor_data_t sensor_data;
printf("DATA SEND received\n");
if (gateway_protocol_data_send_payload_decode(&sensor_data, payload, payload_length)) {
snprintf(buf, sizeof(buf), "INSERT INTO esp32 VALUES("
"%lu, %s, "
"%.2f, %.2f, " // esp
"%.2f, %.2f, "
"%.2f, %.2f, "
"%.2f, %.2f, %.2f, "
"%.2f, "
"%.2f, "
"%.2f, %.2f, " // mkr
"%.2f, %.2f, "
"%.2f, %.2f, "
"%.2f, "
"%.2f, %.2f, " // wis
"%.2f, %.2f, "
"%.2f, %.2f, "
"%.2f, "
"%.2f)",
sensor_data.utc, sensor_data.timedate,
sensor_data.dht22_t_esp, sensor_data.dht22_h_esp,
sensor_data.sht85_t_esp, sensor_data.sht85_h_esp,
sensor_data.hih8121_t_esp, sensor_data.hih8121_h_esp,
sensor_data.tmp36_0_esp, sensor_data.tmp36_1_esp, sensor_data.tmp36_2_esp,
sensor_data.hih4030_esp,
sensor_data.hh10d_esp,
sensor_data.dht22_t_mkr, sensor_data.dht22_h_mkr,
sensor_data.sht85_t_mkr, sensor_data.sht85_h_mkr,
sensor_data.hih8121_t_mkr, sensor_data.hih8121_h_mkr,
sensor_data.hh10d_mkr,
sensor_data.dht22_t_wis, sensor_data.dht22_h_wis,
sensor_data.sht85_t_wis, sensor_data.sht85_h_wis,
sensor_data.hih8121_t_wis, sensor_data.hih8121_h_wis,
sensor_data.tmp102_wis,
sensor_data.hh10d_wis
);
printf("%.2f, %.2f, %.2f\n", sensor_data.hih8121_h_wis, sensor_data.tmp102_wis, sensor_data.hh10d_wis);
printf("%s\n", buf);
} else {
perror("packet type error");
printf("payload decode error\n");
}
} else if (packet_type == GATEWAY_PROTOCOL_PACKET_TYPE_PEND_REQ) {
} else {
printf("packet type error\n");
}
if (sendto(server_desc, (char *) buf, buf_len, 0, (struct sockaddr *)&client, sock_len) < 0) {
......@@ -87,10 +176,107 @@ int main (int argc, char **argv) {
}
close(server_desc);
PQfinish(conn);
return EXIT_SUCCESS;
}
uint8_t gateway_protocol_data_send_payload_decode(sensor_data_t *sensor_data, const uint8_t *payload, const uint8_t payload_length) {
uint8_t p_len = 0;
memcpy(&sensor_data->utc, &payload[p_len], sizeof(sensor_data->utc));
p_len += sizeof(sensor_data->utc);
memcpy(&sensor_data->timedate, &payload[p_len], sizeof(sensor_data->timedate));
//p_len += sizeof(sensor_data->timedate);
p_len += 32;
memcpy(&sensor_data->dht22_t_esp, &payload[p_len], sizeof(sensor_data->dht22_t_esp));
p_len += sizeof(sensor_data->dht22_t_esp);
memcpy(&sensor_data->dht22_h_esp, &payload[p_len], sizeof(sensor_data->dht22_h_esp));
p_len += sizeof(sensor_data->dht22_h_esp);
memcpy(&sensor_data->sht85_t_esp, &payload[p_len], sizeof(sensor_data->sht85_t_esp));
p_len += sizeof(sensor_data->sht85_t_esp);
memcpy(&sensor_data->sht85_h_esp, &payload[p_len], sizeof(sensor_data->sht85_h_esp));
p_len += sizeof(sensor_data->sht85_h_esp);
memcpy(&sensor_data->hih8121_t_esp, &payload[p_len], sizeof(sensor_data->hih8121_t_esp));
p_len += sizeof(sensor_data->hih8121_t_esp);
memcpy(&sensor_data->hih8121_h_esp, &payload[p_len], sizeof(sensor_data->hih8121_h_esp));
p_len += sizeof(sensor_data->hih8121_h_esp);
memcpy(&sensor_data->tmp36_0_esp, &payload[p_len], sizeof(sensor_data->tmp36_0_esp));
p_len += sizeof(sensor_data->tmp36_0_esp);
memcpy(&sensor_data->tmp36_1_esp, &payload[p_len], sizeof(sensor_data->tmp36_1_esp));
p_len += sizeof(sensor_data->tmp36_1_esp);
memcpy(&sensor_data->tmp36_2_esp, &payload[p_len], sizeof(sensor_data->tmp36_2_esp));
p_len += sizeof(sensor_data->tmp36_2_esp);
memcpy(&sensor_data->hih4030_esp, &payload[p_len], sizeof(sensor_data->hih4030_esp));
p_len += sizeof(sensor_data->hih4030_esp);
memcpy(&sensor_data->hh10d_esp, &payload[p_len], sizeof(sensor_data->hh10d_esp));
p_len += sizeof(sensor_data->hh10d_esp);
memcpy(&sensor_data->dht22_t_mkr, &payload[p_len], sizeof(sensor_data->dht22_t_mkr));
p_len += sizeof(sensor_data->dht22_t_mkr);
memcpy(&sensor_data->dht22_h_mkr, &payload[p_len], sizeof(sensor_data->dht22_h_mkr));
p_len += sizeof(sensor_data->dht22_h_mkr);
memcpy(&sensor_data->sht85_t_mkr, &payload[p_len], sizeof(sensor_data->sht85_t_mkr));
p_len += sizeof(sensor_data->sht85_t_mkr);
memcpy(&sensor_data->sht85_h_mkr, &payload[p_len], sizeof(sensor_data->sht85_h_mkr));
p_len += sizeof(sensor_data->sht85_h_esp);
memcpy(&sensor_data->hih8121_t_mkr, &payload[p_len], sizeof(sensor_data->hih8121_t_mkr));
p_len += sizeof(sensor_data->hih8121_t_mkr);
memcpy(&sensor_data->hih8121_h_mkr, &payload[p_len], sizeof(sensor_data->hih8121_h_mkr));
p_len += sizeof(sensor_data->hih8121_h_mkr);
memcpy(&sensor_data->hh10d_mkr, &payload[p_len], sizeof(sensor_data->hh10d_mkr));
p_len += sizeof(sensor_data->hh10d_mkr);
memcpy(&sensor_data->dht22_t_wis, &payload[p_len], sizeof(sensor_data->dht22_t_wis));
p_len += sizeof(sensor_data->dht22_t_wis);
memcpy(&sensor_data->dht22_h_wis, &payload[p_len], sizeof(sensor_data->dht22_h_wis));
p_len += sizeof(sensor_data->dht22_h_wis);
memcpy(&sensor_data->sht85_t_wis, &payload[p_len], sizeof(sensor_data->sht85_t_wis));
p_len += sizeof(sensor_data->sht85_t_wis);
memcpy(&sensor_data->sht85_h_wis, &payload[p_len], sizeof(sensor_data->sht85_h_wis));
p_len += sizeof(sensor_data->sht85_h_wis);
memcpy(&sensor_data->hih8121_t_wis, &payload[p_len], sizeof(sensor_data->hih8121_t_wis));
p_len += sizeof(sensor_data->hih8121_t_wis);
memcpy(&sensor_data->hih8121_h_wis, &payload[p_len], sizeof(sensor_data->hih8121_h_wis));
p_len += sizeof(sensor_data->hih8121_h_wis);
memcpy(&sensor_data->tmp102_wis, &payload[p_len], sizeof(sensor_data->tmp102_wis));
p_len += sizeof(sensor_data->tmp102_wis);
memcpy(&sensor_data->hh10d_wis, &payload[p_len], sizeof(sensor_data->hh10d_wis));
p_len += sizeof(sensor_data->hh10d_wis);
printf("p_len = %d, payload_length = %d (float size %d)\n", p_len, payload_length, sizeof(float));
return (p_len == payload_length);
}
void *connection_handler(void *args) {
int client_desc = *(int *)args;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment