208 lines
6.4 KiB
Markdown
208 lines
6.4 KiB
Markdown
# ⚠ REQUISITOS PREVIOS (SÓLO DAD)
|
|
- Descargar [MariaDB 10.6.21](https://mariadb.org/download/?t=mariadb&p=mariadb&r=10.6.21&os=windows&cpu=x86_64&pkg=msi&mirror=raiolanetworks)
|
|
- Descargar [DBeaver](https://dbeaver.io/download/)
|
|
- Descargar [Postman](https://www.postman.com/downloads/)
|
|
|
|
## Para lanzar la API con Vert.X
|
|
1. Run -> Run Configurations -> Java Application
|
|
2. Como clase principal: `io.vertx.core.Launcher`
|
|
3. Como argumentos: `net.miarma.contaminus.server.MainVerticle`
|
|
|
|
# ⚠ REQUISITOS PREVIOS (DAD + Hack4Change)
|
|
- Descargar Node.js
|
|
- Para descargar Node recomiendo fnm (Fast Node Manager) que lo podéis descargar [aquí](https://miarma.net/descargas)
|
|
- Para instalarlo: `fnm install 23.7.0`
|
|
-
|
|
## Para lanzar la web en modo desarrollador
|
|
1. Abrir terminal (normalmente en VSCode) en la carpeta ContaminUS/frontend
|
|
2. `npm install`
|
|
3. `npm run dev`
|
|
|
|
## Para transpilar la web de React a HTML/CSS/JS Vanilla
|
|
`npm run build` <br>
|
|
La encontraréis en `dist/`
|
|
|
|
# ⚙️ Script para crear la BD
|
|
```sql
|
|
USE dad;
|
|
|
|
DROP TABLE IF EXISTS gps_values;
|
|
DROP TABLE IF EXISTS air_values;
|
|
DROP TABLE IF EXISTS actuators;
|
|
DROP TABLE IF EXISTS sensors;
|
|
DROP TABLE IF EXISTS devices;
|
|
DROP TABLE IF EXISTS groups;
|
|
|
|
CREATE TABLE IF NOT EXISTS groups(
|
|
groupId INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
groupName VARCHAR(64) DEFAULT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS devices(
|
|
deviceId INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
groupId INT NOT NULL,
|
|
deviceName VARCHAR(64) DEFAULT NULL,
|
|
FOREIGN KEY (groupId) REFERENCES groups(groupId)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS sensors(
|
|
sensorId INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
deviceId INT NOT NULL,
|
|
sensorType VARCHAR(64) NOT NULL,
|
|
unit VARCHAR(8) NOT NULL,
|
|
status INT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
|
|
FOREIGN KEY (deviceId) REFERENCES devices(deviceId)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS actuators (
|
|
actuatorId INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
deviceId INT NOT NULL,
|
|
status INT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
|
|
FOREIGN KEY (deviceId) REFERENCES devices(deviceId)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS gps_values(
|
|
valueId INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
sensorId INT NOT NULL,
|
|
lat FLOAT NOT NULL,
|
|
lon FLOAT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
|
|
FOREIGN KEY (sensorId) REFERENCES sensors(sensorId)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS weather_values (
|
|
valueId INT PRIMARY KEY AUTO_INCREMENT NOT NULL ,
|
|
sensorId INT NOT NULL,
|
|
temperature FLOAT NOT NULL,
|
|
humidity FLOAT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
|
|
FOREIGN KEY (sensorId) REFERENCES sensors(sensorId)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS co_values (
|
|
valueId INT PRIMARY KEY AUTO_INCREMENT NOT NULL ,
|
|
sensorId INT NOT NULL,
|
|
value FLOAT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
|
|
FOREIGN KEY (sensorId) REFERENCES sensors(sensorId)
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW v_sensor_values AS
|
|
SELECT
|
|
s.sensorId,
|
|
s.deviceId,
|
|
s.sensorType,
|
|
s.unit,
|
|
s.status AS sensorStatus,
|
|
s.timestamp AS sensorTimestamp,
|
|
av.temperature,
|
|
av.humidity,
|
|
av.carbonMonoxide,
|
|
av.timestamp AS airValuesTimestamp,
|
|
gv.lat,
|
|
gv.lon,
|
|
gv.timestamp AS gpsTimestamp
|
|
FROM sensors s
|
|
LEFT JOIN air_values av ON s.sensorId = av.sensorId
|
|
LEFT JOIN gps_values gv ON s.sensorId = gv.sensorId;
|
|
|
|
CREATE OR REPLACE VIEW v_latest_values AS
|
|
SELECT
|
|
s.deviceId,
|
|
s.sensorId,
|
|
s.sensorType,
|
|
s.unit,
|
|
s.status AS sensorStatus,
|
|
s.timestamp AS sensorTimestamp,
|
|
av.temperature,
|
|
av.humidity,
|
|
av.carbonMonoxide,
|
|
av.timestamp AS airValuesTimestamp
|
|
FROM sensors s
|
|
LEFT JOIN air_values av
|
|
ON s.sensorId = av.sensorId
|
|
AND av.timestamp = (
|
|
SELECT MAX(timestamp)
|
|
FROM air_values
|
|
WHERE sensorId = s.sensorId
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW v_pollution_map AS
|
|
SELECT
|
|
g.lat,
|
|
g.lon,
|
|
a.carbonMonoxide,
|
|
d.deviceId,
|
|
d.deviceName
|
|
FROM
|
|
gps_values g
|
|
JOIN
|
|
air_values a ON g.sensorId = a.sensorId
|
|
JOIN
|
|
sensors s ON a.sensorId = s.sensorId
|
|
JOIN
|
|
devices d ON s.deviceId = d.deviceId
|
|
WHERE
|
|
(g.sensorId, g.timestamp) IN (
|
|
SELECT sensorId, MAX(timestamp)
|
|
FROM gps_values
|
|
GROUP BY sensorId
|
|
)
|
|
AND
|
|
(a.sensorId, a.timestamp) IN (
|
|
SELECT sensorId, MAX(timestamp)
|
|
FROM air_values
|
|
GROUP BY sensorId
|
|
);
|
|
|
|
|
|
-- Insertar grupos
|
|
INSERT INTO groups (groupName) VALUES ('Grupo 1');
|
|
|
|
-- Insertar dispositivos
|
|
INSERT INTO devices (groupId, deviceName) VALUES
|
|
(1, 'Dispositivo 1'),
|
|
(1, 'Dispositivo 2'),
|
|
(1, 'Dispositivo 3');
|
|
|
|
-- Sensores para el Dispositivo 1
|
|
-- Cada dispositivo tiene un único sensor de cada tipo (GPS, Temperature & Humidity, CO)
|
|
INSERT INTO sensors (deviceId, sensorType, unit, status) VALUES
|
|
(1, 'GPS', 'N/A', 1), -- Sensor de GPS para Dispositivo 1
|
|
(1, 'Temperature & Humidity', '°C/%', 1), -- Sensor de Temp/Humidity para Dispositivo 1
|
|
(1, 'CO', 'ppm', 1); -- Sensor de CO para Dispositivo 1
|
|
|
|
-- Sensores para el Dispositivo 2
|
|
INSERT INTO sensors (deviceId, sensorType, unit, status) VALUES
|
|
(2, 'GPS', 'N/A', 1), -- Sensor de GPS para Dispositivo 2
|
|
(2, 'Temperature & Humidity', '°C/%', 1), -- Sensor de Temp/Humidity para Dispositivo 2
|
|
(2, 'CO', 'ppm', 1); -- Sensor de CO para Dispositivo 2
|
|
|
|
-- Sensores para el Dispositivo 3
|
|
INSERT INTO sensors (deviceId, sensorType, unit, status) VALUES
|
|
(3, 'GPS', 'N/A', 1), -- Sensor de GPS para Dispositivo 3
|
|
(3, 'Temperature & Humidity', '°C/%', 1), -- Sensor de Temp/Humidity para Dispositivo 3
|
|
(3, 'CO', 'ppm', 1); -- Sensor de CO para Dispositivo 3
|
|
|
|
-- Valores de GPS para los Dispositivos
|
|
-- Cada dispositivo tiene un único sensor de GPS con latitud y longitud asociada
|
|
INSERT INTO gps_values (sensorId, lat, lon) VALUES
|
|
(1, 37.3861, -5.9921), -- GPS para Dispositivo 1
|
|
(4, 37.3850, -5.9910), -- GPS para Dispositivo 2
|
|
(7, 37.3860, -5.9920); -- GPS para Dispositivo 3
|
|
|
|
-- Valores de Temperatura, Humedad y CO para los Dispositivos
|
|
-- Cada dispositivo tiene un único sensor de aire (temperatura, humedad, CO) con valores asociados
|
|
INSERT INTO weather_values (sensorId, temperature, humidity) VALUES
|
|
(2, 22.5, 45.0), -- Temperatura, Humedad para Dispositivo 1
|
|
(5, 24.5, 50.0), -- Temperatura, Humedad para Dispositivo 2
|
|
(8, 21.0, 44.0); -- Temperatura, Humedad para Dispositivo 3
|
|
|
|
INSERT INTO co_values (sensorId, value) VALUES
|
|
(3, 0.02), -- CO para Dispositivo 1
|
|
(6, 0.04), -- CO para Dispositivo 2
|
|
(9, 0.01); -- CO para Dispositivo 3
|
|
```
|