diff --git a/backend/src/main/java/net/miarma/contaminus/common/Constants.java b/backend/src/main/java/net/miarma/contaminus/common/Constants.java index 3f26a39..55891fe 100644 --- a/backend/src/main/java/net/miarma/contaminus/common/Constants.java +++ b/backend/src/main/java/net/miarma/contaminus/common/Constants.java @@ -6,34 +6,35 @@ import io.vertx.core.impl.logging.LoggerFactory; public class Constants { public static final String APP_NAME = "ContaminUS"; public static final String API_PREFIX = "/api/v1"; + public static final String RAW_API_PREFIX = "/api/raw/v1"; public static Logger LOGGER = LoggerFactory.getLogger(Constants.APP_NAME); /* API Endpoints */ - public static final String GET_GROUPS = API_PREFIX + "/groups"; - public static final String POST_GROUPS = API_PREFIX + "/groups"; - public static final String PUT_GROUP_BY_ID = API_PREFIX + "/groups/:groupId"; + public static final String GET_GROUPS = RAW_API_PREFIX + "/groups"; + public static final String POST_GROUPS = RAW_API_PREFIX + "/groups"; + public static final String PUT_GROUP_BY_ID = RAW_API_PREFIX + "/groups/:groupId"; - public static final String GET_DEVICES = API_PREFIX + "/devices"; - public static final String POST_DEVICES = API_PREFIX + "/devices"; - public static final String PUT_DEVICE_BY_ID = API_PREFIX + "/devices/:deviceId"; + public static final String GET_DEVICES = RAW_API_PREFIX + "/devices"; + public static final String POST_DEVICES = RAW_API_PREFIX + "/devices"; + public static final String PUT_DEVICE_BY_ID = RAW_API_PREFIX + "/devices/:deviceId"; - public static final String GET_SENSORS = API_PREFIX + "/sensors"; - public static final String POST_SENSORS = API_PREFIX + "/sensors"; - public static final String PUT_SENSOR_BY_ID = API_PREFIX + "/sensors/:sensorId"; + public static final String GET_SENSORS = RAW_API_PREFIX + "/sensors"; + public static final String POST_SENSORS = RAW_API_PREFIX + "/sensors"; + public static final String PUT_SENSOR_BY_ID = RAW_API_PREFIX + "/sensors/:sensorId"; - public static final String GET_ACTUATORS = API_PREFIX + "/actuators"; - public static final String POST_ACTUATORS = API_PREFIX + "/actuators"; - public static final String PUT_ACTUATOR_BY_ID = API_PREFIX + "/actuators/:actuatorId"; + public static final String GET_ACTUATORS = RAW_API_PREFIX + "/actuators"; + public static final String POST_ACTUATORS = RAW_API_PREFIX + "/actuators"; + public static final String PUT_ACTUATOR_BY_ID = RAW_API_PREFIX + "/actuators/:actuatorId"; - public static final String GET_CO_BY_DEVICE_VIEW = API_PREFIX + "/v_co_by_device"; + public static final String GET_CO_BY_DEVICE_VIEW = RAW_API_PREFIX + "/v_co_by_device"; - public static final String GET_GPS_BY_DEVICE_VIEW = API_PREFIX + "/v_gps_by_device"; - public static final String GET_LATEST_VALUES_VIEW = API_PREFIX + "/v_latest_values"; - public static final String GET_POLLUTION_MAP_VIEW = API_PREFIX + "/v_pollution_map"; - public static final String GET_SENSOR_HISTORY_BY_DEVICE_VIEW = API_PREFIX + "/v_sensor_history_by_device"; - public static final String GET_SENSOR_VALUES_VIEW = API_PREFIX + "/v_sensor_values"; - public static final String GET_WEATHER_BY_DEVICE_VIEW = API_PREFIX + "/v_weather_by_device"; + public static final String GET_GPS_BY_DEVICE_VIEW = RAW_API_PREFIX + "/v_gps_by_device"; + public static final String GET_LATEST_VALUES_VIEW = RAW_API_PREFIX + "/v_latest_values"; + public static final String GET_POLLUTION_MAP_VIEW = RAW_API_PREFIX + "/v_pollution_map"; + public static final String GET_SENSOR_HISTORY_BY_DEVICE_VIEW = RAW_API_PREFIX + "/v_sensor_history_by_device"; + public static final String GET_SENSOR_VALUES_VIEW = RAW_API_PREFIX + "/v_sensor_values"; + public static final String GET_WEATHER_BY_DEVICE_VIEW = RAW_API_PREFIX + "/v_weather_by_device"; /* Bussiness Logic API */ public static final String GET_GROUP_BY_ID = API_PREFIX + "/groups/:groupId"; diff --git a/hardware/.vscode/settings.json b/hardware/.vscode/settings.json new file mode 100644 index 0000000..cb0b621 --- /dev/null +++ b/hardware/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.associations": { + "array": "cpp", + "*.tcc": "cpp", + "memory": "cpp", + "istream": "cpp", + "functional": "cpp", + "tuple": "cpp", + "utility": "cpp" + } +} \ No newline at end of file diff --git a/hardware/include/JsonTools.hpp b/hardware/include/JsonTools.hpp new file mode 100644 index 0000000..da7c053 --- /dev/null +++ b/hardware/include/JsonTools.hpp @@ -0,0 +1,46 @@ +#include +#include + +String serializeSensorValue ( + int sensorId, + int deviceId, + String sensorType, + String unit, + int sensorStatus, + float temperature, + float humidity, + float carbonMonoxide, + float lat, + float lon, + long timestamp +); + +String serializeActuatorStatus ( + int actuatorId, + int deviceId, + int status, + long timestamp +); + +String serializeDevice ( + int sensorId, + int deviceId, + String sensorType, + int status, + long timestamp +); + +void deserializeSensorValue ( + HTTPClient &http, + int httpResponseCode +); + +void deserializeActuatorStatus ( + HTTPClient &http, + int httpResponseCode +); + +void deserializeDevice ( + HTTPClient &http, + int httpResponseCode +); \ No newline at end of file diff --git a/hardware/include/json.hpp b/hardware/include/MqttClient.hpp similarity index 100% rename from hardware/include/json.hpp rename to hardware/include/MqttClient.hpp diff --git a/hardware/include/RestClient.hpp b/hardware/include/RestClient.hpp new file mode 100644 index 0000000..5304d8c --- /dev/null +++ b/hardware/include/RestClient.hpp @@ -0,0 +1,4 @@ +#include + +void getRequest(HTTPClient &httpClient, const String url, String &response); +void postRequest(HTTPClient &httpClient, const String url, const String &payload, String &response); \ No newline at end of file diff --git a/hardware/include/WifiConnection.hpp b/hardware/include/WifiConnection.hpp new file mode 100644 index 0000000..93ff3b2 --- /dev/null +++ b/hardware/include/WifiConnection.hpp @@ -0,0 +1,7 @@ +#include +#include + +#define SSID "iPhone de Álvaro" +#define PASSWORD "alvarito123" + +int setupWifi(); \ No newline at end of file diff --git a/hardware/include/main.hpp b/hardware/include/main.hpp index 135801d..f556608 100644 --- a/hardware/include/main.hpp +++ b/hardware/include/main.hpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD #include #include "json.hpp" @@ -9,4 +10,14 @@ #define LED 2 #define SERVER_IP "192.168.1.178" #define REST_PORT 80 -#define MQTT_PORT 1883 \ No newline at end of file +#define MQTT_PORT 1883 +======= +#include + +#include "JsonTools.hpp" +#include "RestClient.hpp" +#include "WifiConnection.hpp" +#include "MqttClient.hpp" + +uint32_t getChipID(); +>>>>>>> main diff --git a/hardware/include/rest.hpp b/hardware/include/rest.hpp deleted file mode 100644 index 2617b4f..0000000 --- a/hardware/include/rest.hpp +++ /dev/null @@ -1 +0,0 @@ -#include \ No newline at end of file diff --git a/hardware/include/test.hpp b/hardware/include/test.hpp deleted file mode 100644 index e69de29..0000000 diff --git a/hardware/src/JsonTools.cpp b/hardware/src/JsonTools.cpp new file mode 100644 index 0000000..02b7989 --- /dev/null +++ b/hardware/src/JsonTools.cpp @@ -0,0 +1,179 @@ +#include "JsonTools.hpp" + +String serializeSensorValue(int sensorId, int deviceId, String sensorType, String unit, int sensorStatus, float temperature, float humidity, float carbonMonoxide, float lat, float lon, long timestamp) +{ + DynamicJsonDocument doc(2048); + + doc["sensorId"] = sensorId; + doc["deviceId"] = deviceId; + doc["sensorType"] = sensorType; + doc["unit"] = unit; + doc["sesnsorStatuts"] = sensorStatus; + doc["temperature"] = temperature; + doc["humidity"] = humidity; + doc["carbonMonoxide"] = carbonMonoxide; + doc["lat"] = lat; + doc["lon"] = lon; + doc["timestamp"] = timestamp; + + String output; + serializeJson(doc, output); + Serial.println(output); + + return output; +} + +String serializeActuatorStatus (int actuatorId, int deviceId, int status, long timestamp) +{ + DynamicJsonDocument doc(2048); + + doc["actuatorId"] = actuatorId; + doc["deviceId"] = deviceId; + doc["status"] = status; + doc["timestamp"] = timestamp; + + String output; + serializeJson(doc, output); + Serial.println(output); + + return output; +} + +String serializeDevice(int sensorId, int deviceId, String sensorType, int status, long timestamp) +{ + DynamicJsonDocument doc(2048); + + doc["sensorId"] = sensorId; + doc["deviceId"] = deviceId; + doc["sensorType"] = sensorType; + doc["status"] = status; + doc["timestamp"] = timestamp; + + String output; + serializeJson(doc, output); + Serial.println(output); + + return output; +} + +void deserializeSensorValue (HTTPClient &http, int httpResponseCode) +{ + + if (httpResponseCode > 0) + { + Serial.print("HTTP Response code: "); + Serial.println(httpResponseCode); + String responseJson = http.getString(); + DynamicJsonDocument doc(ESP.getMaxAllocHeap()); + DeserializationError error = deserializeJson(doc, responseJson); + + if (error) + { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + return; + } + + JsonArray array = doc.as(); + for (JsonObject sensor : array) + { + int sensorId = sensor["sensorId"]; + int deviceId = sensor["deviceId"]; + String sensorType = sensor["sensorType"]; + String unit = sensor["unit"]; + int sesnsorStatuts = sensor["sesnsorStatuts"]; + float temperature = sensor["temperature"]; + float humidity = sensor["humidity"]; + float carbonMonoxide = sensor["carbonMonoxide"]; + float lat = sensor["lat"]; + float lon = sensor["lon"]; + long timestamp = sensor["timestamp"]; + + Serial.println(("Sensor deserialized: [sensorId: " + String(sensorId) + ", deviceId: " + String(deviceId) + ", sensorType: " + sensorType + ", unit: " + unit +", sesnsorStatuts: " + String(sesnsorStatuts) +", temperature: " + String(temperature) +", humidity: " + String(humidity) +", carbonMonoxide: " + String(carbonMonoxide) +", lat: " + String(lat) +", lon: " + String(lon) +", timestamp: " + String(timestamp) + "]").c_str()); + } + } + else + { + Serial.print("Error code: "); + Serial.println(httpResponseCode); + } +} + +void deserializeActuatorStatus (HTTPClient &http, int httpResponseCode) +{ + + if (httpResponseCode > 0) + { + Serial.print("HTTP Response code: "); + Serial.println(httpResponseCode); + String responseJson = http.getString(); + DynamicJsonDocument doc(ESP.getMaxAllocHeap()); + DeserializationError error = deserializeJson(doc, responseJson); + + if (error) + { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + return; + } + + JsonArray array = doc.as(); + for (JsonObject actuator : array) + { + int actuadorId = actuator["actuadorId"]; + int deviceId = actuator["deviceId"]; + int statuts = actuator["statuts"]; + long timestamp = actuator["timestamp"]; + + Serial.println(("Actuador deserialized: [actuadorId: " + String(actuadorId) + + ", deviceId: " + String(deviceId) + + ", statuts: " + String(statuts) + + ", timestamp: " + String(timestamp) + "]").c_str()); + } + } + else + { + Serial.print("Error code: "); + Serial.println(httpResponseCode); + } +} + +void deserializeDevice (HTTPClient &http, int httpResponseCode) +{ + + if (httpResponseCode > 0) + { + Serial.print("HTTP Response code: "); + Serial.println(httpResponseCode); + String responseJson = http.getString(); + DynamicJsonDocument doc(ESP.getMaxAllocHeap()); + DeserializationError error = deserializeJson(doc, responseJson); + + if (error) + { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + return; + } + + JsonArray array = doc.as(); + for (JsonObject device : array) + { + int sensorId = device["sensorId"]; + int deviceId = device["deviceId"]; + String sensorType = device["sensorType"]; + long timestamp = device["timestamp"]; + + Serial.println(("Sensor deserialized: [sensorId: " + String(sensorId) + + ", deviceId: " + String(deviceId) + + ", sensorType: " + sensorType + + ", timestamp: " + String(timestamp) + "]").c_str()); + + } + } + else + { + Serial.print("Error code: "); + Serial.println(httpResponseCode); + } +} \ No newline at end of file diff --git a/hardware/src/MqttClient.cpp b/hardware/src/MqttClient.cpp new file mode 100644 index 0000000..c09ca64 --- /dev/null +++ b/hardware/src/MqttClient.cpp @@ -0,0 +1 @@ +#include "MqttClient.hpp" \ No newline at end of file diff --git a/hardware/src/RestClient.cpp b/hardware/src/RestClient.cpp new file mode 100644 index 0000000..171b041 --- /dev/null +++ b/hardware/src/RestClient.cpp @@ -0,0 +1,27 @@ +#include "RestClient.hpp" + + +void getRequest(HTTPClient &httpClient, const String url, String &response) +{ + httpClient.begin(url); + int httpCode = httpClient.GET(); + if (httpCode > 0) { + response = httpClient.getString(); + } else { + response = "Error: " + String(httpCode); + } + httpClient.end(); +} + +void postRequest(HTTPClient &httpClient, const String url, String &payload, String &response) +{ + httpClient.begin(url); + httpClient.addHeader("Content-Type", "application/json"); + int httpCode = httpClient.POST(payload); + if (httpCode > 0) { + response = httpClient.getString(); + } else { + response = "Error: " + String(httpCode); + } + httpClient.end(); +} \ No newline at end of file diff --git a/hardware/src/wifi.cpp b/hardware/src/WifiConnection.cpp similarity index 82% rename from hardware/src/wifi.cpp rename to hardware/src/WifiConnection.cpp index 7f54b49..accbbad 100644 --- a/hardware/src/wifi.cpp +++ b/hardware/src/WifiConnection.cpp @@ -1,35 +1,33 @@ -#include - -WiFiClient espClient; -PubSubClient client(espClient); - -int setup_wifi() -{ - Serial.println(); - Serial.print("Connecting to "); - Serial.println(SSID); - - WiFi.mode(WIFI_STA); - WiFi.begin(SSID, PASSWORD); - - while (WiFi.status() != WL_CONNECTED) - { - delay(500); - Serial.print("."); - } - - Serial.println(""); - Serial.println("WiFi connected"); - Serial.println("IP address: "); - Serial.println(WiFi.localIP()); - Serial.println("Setup!"); - - if(WiFi.status() == WL_CONNECTED) - { - return 0; - } - else - { - return 1; - } -} +#include + +WiFiClient wifiClient; + +int setupWifi() +{ + Serial.println(); + Serial.print("Connecting to "); + Serial.println(SSID); + WiFi.mode(WIFI_STA); + WiFi.begin(SSID, PASSWORD); + + while (WiFi.status() != WL_CONNECTED) + { + delay(500); + Serial.print("."); + } + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + Serial.println("Setup!"); + + if(WiFi.status() == WL_CONNECTED) + { + return 0; + } + else + { + return 1; + } +} diff --git a/hardware/src/json.cpp b/hardware/src/json.cpp deleted file mode 100644 index df2ffdf..0000000 --- a/hardware/src/json.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "json.hpp" \ No newline at end of file diff --git a/hardware/src/main.cpp b/hardware/src/main.cpp index 1554bd2..fb27a34 100644 --- a/hardware/src/main.cpp +++ b/hardware/src/main.cpp @@ -1,14 +1,32 @@ -#include "main.hpp" - -void setup() { - Serial.begin(9600); - - if(setup_wifi() != 0) - { - Serial.print("Error connecting to WiFI"); - } -} - -void loop() { - +#include "main.hpp" + +const uint32_t deviceId = getChipID(); +String response; +HTTPClient httpClient; + +uint32_t getChipID() +{ + uint32_t chipId; + for (int i = 0; i < 17; i = i + 8) { + chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i; + } + return chipId; +} + +void setup() { + Serial.begin(9600); + + // WiFi Connection + if(setupWifi() != 0) + { + Serial.print("Error connecting to WiFi"); + } + + // test get + getRequest(httpClient, "http://172.20.10.7:8082/api/v1/sensors/1/values", response); + deserializeSensorValue(httpClient, httpClient.GET()); +} + +void loop() { + } \ No newline at end of file diff --git a/hardware/src/test.cpp b/hardware/src/test.cpp deleted file mode 100644 index ac97f27..0000000 --- a/hardware/src/test.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "test.hpp" \ No newline at end of file