Nueva pregunta

Pregunta:

Fecha: 12-06-2017 17:44:14 (En Español)

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);
    		 }
    
 }

Etiquetas: PHP - Pregunta - Variables 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: 15-06-2017 10:14:01 Muchas gracias. Lo voy a probar   Votos: 0 - 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
     
  • Fecha: 24-06-2017 15:41:38 Muchisimas gracias!! Lo voy a mirar y comento.   Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com