-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Tempo de geração: 11/08/2026 às 19:45
-- Versão do servidor: 10.4.32-MariaDB
-- Versão do PHP: 8.2.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Banco de dados: `projetoguilherme`
--

DELIMITER $$
--
-- Procedimentos
--
CREATE DEFINER=`root`@`localhost` PROCEDURE `validamacguilherme` (IN `$idmac` VARCHAR(17), OUT `$ativo` BOOLEAN, OUT `$contador` INT, OUT `$limite` INT)   BEGIN
SELECT ativo into $ativo
FROM macguilherme
WHERE idmacguilherme=$idmac;
SELECT contador into $contador
FROM macguilherme
WHERE idmacguilherme=$idmac;
SELECT limite into $limite
FROM macguilherme
WHERE idmacguilherme=$idmac;
END$$

DELIMITER ;

-- --------------------------------------------------------

--
-- Estrutura para tabela `leituraguilherme`
--

CREATE TABLE `leituraguilherme` (
  `idleituraguilherme` int(10) UNSIGNED NOT NULL,
  `macguilherme_idmacguilherme` varchar(17) NOT NULL,
  `datahora` datetime DEFAULT NULL,
  `valor` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Acionadores `leituraguilherme`
--
DELIMITER $$
CREATE TRIGGER `tgdeleteleituraguilherme` AFTER DELETE ON `leituraguilherme` FOR EACH ROW BEGIN
UPDATE macguilherme
SET contador=contador-1
WHERE idmacguilherme=old.macguilherme_idmacguilherme;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tginsertleituraguilherme` AFTER INSERT ON `leituraguilherme` FOR EACH ROW BEGIN
UPDATE macguilherme
SET contador=contador+1
WHERE idmacguilherme=new.macguilherme_idmacguilherme;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tgvalidamacguilherme` BEFORE INSERT ON `leituraguilherme` FOR EACH ROW BEGIN
CALL validamacguilherme(new.macguilherme_idmacguilherme, @ativo, @contador, @limite);
if @ativo=0 then SIGNAL SQLSTATE '45000' set MESSAGE_TEXT = 'Mac inativo';
end if;
if @contador>= @limite then SIGNAL SQLSTATE '45000' set MESSAGE_TEXT = 'Limite de leituras atingido';
end if; 
END
$$
DELIMITER ;

-- --------------------------------------------------------

--
-- Estrutura para tabela `macguilherme`
--

CREATE TABLE `macguilherme` (
  `idmacguilherme` varchar(17) NOT NULL,
  `nome` varchar(25) DEFAULT NULL,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `limite` int(10) UNSIGNED DEFAULT 0,
  `ativo` tinyint(1) DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Despejando dados para a tabela `macguilherme`
--

INSERT INTO `macguilherme` (`idmacguilherme`, `nome`, `contador`, `limite`, `ativo`) VALUES
('01:02:03', 'Placa um', 0, 2, 1);

--
-- Índices para tabelas despejadas
--

--
-- Índices de tabela `leituraguilherme`
--
ALTER TABLE `leituraguilherme`
  ADD PRIMARY KEY (`idleituraguilherme`),
  ADD KEY `leituraguilherme_FKIndex1` (`macguilherme_idmacguilherme`);

--
-- Índices de tabela `macguilherme`
--
ALTER TABLE `macguilherme`
  ADD PRIMARY KEY (`idmacguilherme`);

--
-- AUTO_INCREMENT para tabelas despejadas
--
//https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>

const char *ssid = "TP-Link_688A";
const char *password = "debarbamiguel";
const int http_port = 8080;

int httpCode;
String payload;

WiFiClient client;

void setup() {
  delay(1000);
  Serial.begin(115200);
  WiFi.mode(WIFI_OFF);
  delay(1000);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println(".");
  Serial.print("Conectando...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Conectado a ");
  Serial.println(ssid);
  Serial.print("Endereço IP: ");
  Serial.println(WiFi.localIP());
  Serial.print("MAC: ");
  Serial.println(WiFi.macAddress());    
}

void envia(String postData){
    HTTPClient http;

    // Lista de servidores de destino (Atualizada para 3 servidores)
    String servidores[3] = {
        "http://modulo8.migueldebarba.com.br/grupoa/guilherme/insertleitura.php",
        "http://modulo8.migueldebarba.com.br/grupoc/luis/insertleitura.php",
        "http://modulo8.migueldebarba.com.br/miguel/insertleitura.php" 
    };

    // Loop ajustado para percorrer os 3 servidores
    for (int i = 0; i < 3; i++) {
        http.begin(client, servidores[i]);
        http.addHeader("Content-Type", "application/x-www-form-urlencoded");
        int httpCode = http.POST(postData);
        String payload = http.getString();
        Serial.println("Servidor: " + servidores[i]);
        Serial.println("httpCode: " + String(httpCode));
        Serial.println("payload: " + payload);
        http.end();
    }
}

void loop() {
  String mac_idmac = WiFi.macAddress();    
  float valor = random(0, 1024);
  String from = "ESP8266";
  String nome = "Guilherme e Luis"; // Nome da dupla
  
  // Três novos atributos exigidos na prova
  float pressao_bar = random(10, 50) / 10.0;
  float velocidade_ms = random(0, 100) / 10.0;
  float consumo_l = random(1, 20);

  // Montagem do corpo da requisição POST
  String postData = 
    "idmac=" + String(mac_idmac)
    + "&nome=" + String(nome)
    + "&valor=" + String(valor)
    + "&pressao_bar=" + String(pressao_bar)
    + "&velocidade_ms=" + String(velocidade_ms)
    + "&consumo_l=" + String(consumo_l)
    + "&from=" + String(from);

  envia(postData); 
  
  delay(random(10, 15) * 1000);
}
--
-- AUTO_INCREMENT de tabela `leituraguilherme`
--
ALTER TABLE `leituraguilherme`
  MODIFY `idleituraguilherme` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- Restrições para tabelas despejadas
--

--
-- Restrições para tabelas `leituraguilherme`
--
ALTER TABLE `leituraguilherme`
  ADD CONSTRAINT `leituraguilherme_ibfk_1` FOREIGN KEY (`macguilherme_idmacguilherme`) REFERENCES `macguilherme` (`idmacguilherme`) ON DELETE NO ACTION ON UPDATE NO ACTION;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
