Pregunta:
Fecha: 12-06-2017 17:44:14
(En Español)
Quisiera saber como puedo hacer para limpiar estas variables luego de cargarlas en la base de datos
Desde ya muchas gracias
Votos: 0 - Respuestas: 8 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
Limpiar variables[No resuelta]
Hola gente del foro... tengo una estacion meteorologica conectada y cada 5 minutos envia a una web los datos... el problema es que funciona bien un rato y luego me tira errores como por ejemplo 340km el viento o 200 grados de temperatura..... datos claramente erroneos.. subo el codigo .Quisiera saber como puedo hacer para limpiar estas variables luego de cargarlas en la base de datos
Desde ya muchas gracias
//enlace a BD $enlace = mysqli_connect("localhost"," "," ", " "); if (!$enlace) { echo "Error: No se pudo conectar a MySQL." . PHP_EOL; echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL; echo "error de depuración: " . mysqli_connect_error() . PHP_EOL; exit; } //echo "Éxito: Se realizó una conexión apropiada a MySQL! " . PHP_EOL; //echo "Información del host: " . mysqli_get_host_info($enlace) . PHP_EOL; // Leemos los valores que nos llegan por GET $WindDirection = (isset($_GET["WindDirection"]) ? mysqli_real_escape_string($enlace, $_GET["WindDirection"]) : NULL); $WindSpeedAverage = (isset($_GET["WindSpeedAverage"]) ? mysqli_real_escape_string($enlace, $_GET["WindSpeedAverage"]) : NULL); $WindSpeedMax = (isset($_GET["WindSpeedMax"]) ? mysqli_real_escape_string($enlace, $_GET["WindSpeedMax"]) : NULL); $Temperature = (isset($_GET["Temperature"]) ? mysqli_real_escape_string($enlace, $_GET["Temperature"]) : NULL); $RainfallOneHour = (isset($_GET["RainfallOneHour"]) ? mysqli_real_escape_string($enlace, $_GET["RainfallOneHour"]) : NULL); $BarPressure = (isset($_GET["BarPressure"]) ? mysqli_real_escape_string($enlace, $_GET["BarPressure"]) : NULL); $Humidity = (isset($_GET["Humidity"]) ? mysqli_real_escape_string($enlace, $_GET["Humidity"]) : NULL); //insertamos los datos en la tabla temporal $query = "INSERT INTO temporal(WindDirection,WindSpeedAverage,WindSpeedMax,Temperature,RainfallOneHour,BarPressure,Humidity ) VALUES ('".$WindDirection."','".$WindSpeedAverage."','".$WindSpeedMax."','".$Temperature."','".$RainfallOneHour."','".$BarPressure."','".$Humidity."')"; mysqli_query($enlace, $query); //consulta el id $resultado = mysqli_query($enlace, "SELECT MAX(id) AS 'id' from temporal WHERE estado = 0"); $fila = mysqli_fetch_assoc($resultado); $fila['id']; // Si es igual a 12 inserta los valores en valores If ($fila['id'] == 12) { $Direccion=0; $Velocidad=0; $VelocidadMax=0; $Temperatura=0; $OneHour=0; $Presion=0; $Humedad=0; $i = 1; $resultado = mysqli_query($enlace,'SELECT * from temporal '); if(mysqli_num_rows($resultado)==12){ while($i = mysqli_fetch_array( $resultado)){ $Direccion = $Direccion + $i[1]; $Velocidad = $Velocidad + $i[2]; $VelocidadMax=$VelocidadMax + $i[3]; $Temperatura = $Temperatura + $i[4]; $OneHour = $OneHour + $i[5]; $Presion = $Presion + $i[6]; $Humedad = $Humedad + $i[7]; } $Direccion = $Direccion /12; $Velocidad = $Velocidad /12; $VelocidadMax=$VelocidadMax/12; $Temperatura = $Temperatura /12 ; $OneHour = $OneHour /12 ; $Presion = $Presion /12; $Humedad = $Humedad /12; $query = "INSERT INTO valores (WindDirection,WindSpeedAverage,WindSpeedMax, Temperature,RainfallOneHour,BarPressure,Humidity ) VALUES ($Direccion, $Velocidad,$VelocidadMax, $Temperatura, $OneHour, $Presion, $Humedad)"; mysqli_query($enlace, $query); $query = "UPDATE temporal SET estado = 1"; mysqli_query($enlace, $query); mysqli_query($enlace, "TRUNCATE TABLE temporal"); mysqli_close($enlace); } }
Votos: 0 - Respuestas: 8 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 12-06-2017 18:35:48 Lo primero que tienes que revisar es que esos datos estén llegando "bien" de la estación meteorológica, prueba haciendo un log antes de guardar en la base de datos y compara los resultados Votos: 1 - Link respuesta
-
Fecha: 12-06-2017 21:02:47 Muchas gracias por la rta...por la consola de arduino salen bien los datos
Perdon por la ignorancia..como hago el log?
El arduino recoje 12 datos en 1 hora...luego de enviar varios datos empieza a fallar
Del lado de arduino hay un array del tipo char que me recolecta los datos....
Podra ser eso q junta basura?? De ser asi como lo limpio
Votos: 0 - Link respuesta -
Fecha: 13-06-2017 19:40:43 Hola,
Según veo en el código php estas usando un WHILE y cuando termina recoges el ultimo dato y no solo eso, lo sobre-escribes, para tener un rango me imagino, pero estas llamando solo al MAX(id) esto solo te trae el ultimo id, y la verdad no comprendo tu objetivo en el código, podrías pasar el código de arduino para saber un poco más...
Saludos
Equipo Arduino-PA Votos: 0 - Link respuesta -
Fecha: 14-06-2017 02:45:54 Hola muchas gracias por la respuesta.. te comento que los sensores envian datos cada 5 minutos y se guardan en una tabla temporal, al juntar 12 (1hora) saca el promedio lo envia a otra tabla y limpia la tabla temporal.
El Max(id) es para comparar si llegue al registro numero 12.... no veo lo que decis del while...
subo el codigo arduino
#include <SPI.h> #include <Ethernet.h> char databuffer[35]; double temp; long intervalo =300000; // es el tiempo de nuestro delay 5 minutos long tiempo = 0; long tiempoAnterior = 0; // Mac unica de cada EthernetShield (deben cambiarla) byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 }; IPAddress ip(192,168,0,50); IPAddress myDns(200,58,112,193); // Inicializa la instancia client EthernetClient client; // Direccion del servidor char server[] = "www.*****.com"; // Variable de tiempo de la ultima conexion en milisegundos unsigned long ultimaConexion = 0; // Estado de la ultima conexion boolean ultimoEstado = false; // Intervalo en milisegundos entre conexiones const unsigned long intervaloConexion =1000; //300000; // Datos del sensor int Direccion; float velocidad; float velMax; float temperatura; float OneHour; float OneDay; float presion; int humedad,i; String envioDatos = "GET /captura.php?"; String url = " "; #define parametro1 "&WindDirection=" #define parametro2 "&WindSpeedAverage=" #define parametro7 "&WindSpeedMax=" #define parametro3 "&Temperature=" #define parametro4 "&RainfallOneHour=" #define parametro5 "&BarPressure=" #define parametro6 "&Humidity=" #define parametro8 "&RainfallOneDay=" void setup() { // Inicializa puerto serial Serial.begin(9600); // Espera 1 segundo para que se inicie la tarjeta Ethernet delay(1000); // Si deseas usar un ip fijo y un DNS fijo descomentar esta linea y comentar la linea 39 Ethernet.begin(mac, ip, myDns); // Inicializa la tarjeta ethernet mediante DHCP Ethernet.begin(mac); // Imprime la direccion IP de la tarjeta Serial.print("Direccion IP: "); Serial.println(Ethernet.localIP()); } // Loop principal void loop() { tiempo = millis(); if(tiempo - tiempoAnterior > intervalo) { tiempoAnterior = tiempo; getBuffer(); // toma datos sensores Serial.println("#### Prueba sensores ####"); Serial.print("Wind speed: "); Serial.print(WindSpeedMax()); Serial.print("Wind Direction: "); Serial.print(WindDirection()); Serial.println(" "); Serial.print("Average Wind Speed (One Minute): "); Serial.print(WindSpeedAverage()); Serial.println("m/s "); Serial.print("Rain Fall (One Hour): "); Serial.print(RainfallOneHour()); Serial.println("mm "); Serial.print("Temperature: "); Serial.print(Temperature()); Serial.println("C "); Serial.print("Humidity: "); Serial.print(Humidity()); Serial.println("% "); Serial.print("Barometric Pressure: "); Serial.print(BarPressure()); Serial.println("hPa"); Serial.println(""); Serial.println(""); Direccion = WindDirection(); velocidad=WindSpeedAverage(); temperatura=Temperature(); OneHour=RainfallOneHour(); presion=BarPressure(); humedad = Humidity(); velMax = WindSpeedMax(); OneDay =RainfallOneDay(); // Realiza la conexion http al servidor if (client.available()) { char c = client.read(); Serial.print(c); } // Se conecta al servidor en el puerto 80 (web) if (client.connect(server, 80)) { url = envioDatos + parametro1 + String(Direccion) + parametro2 + String(velocidad)+ parametro3 + String(temperatura) + parametro4 + String(OneHour) + parametro5 + String(presion) + parametro6 + String(humedad) + parametro7 + String(velMax)+ parametro8 + String(OneDay); client.print(url); // Envia el requerimiento al servidor via GET Serial.print(url); Serial.println("Iniciando conexion..."); client.print("GET /carga2.php?"); client.println(" HTTP/1.1"); client.print("Host: "); client.println(server); client.println("User-Agent: Arduino-Ethernet"); Serial.println("Conectado"); client.println("Connection: close"); client.println(); // Actualiza el tiempo en milisegundos de la ultima conexion ultimaConexion = millis(); } else { Serial.println("Fallo en la conexion"); } if (!client.connected()) { Serial.println("Disconnected!"); } client.stop(); client.flush(); //delay(60000); // Espero un minuto antes de tomar otra muestra } memset(databuffer, 0, sizeof(databuffer)); }
Votos: 0 - Link respuesta -
Fecha: 15-06-2017 09:19:14 Yo uso esto
unset($variable1);
unset($variable2); Votos: 1 - Link respuesta -
-
Fecha: 24-06-2017 13:52:24 Hola Anabel:
Estaba siguiendo tu tema ya que hace unos años trabajé en el desarrollo de recogida de datos de varias estaciones meteorológicas (recibíamos archivos .txt y yo tenía que recoger los datos y pasarloa a mapa).
No quise entrar en el tema ya que lo de arduino me sonaba a música celestial.
No lo he examinado ni tengo datos para hacerlo pero te acerco este enlace (caliente, actualizado a fecha de hoy): LEER SENSOR DTH11 CON ARDUINO Y MOSTRARLO EN PAGINA WEB
Espero que te sea de utilidad. Votos: 1 - Link respuesta -
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión