Netatmo Estacion meteorologica.

Hola buenos dias:

Queri fabricar una estacion meteorologica muy parecida a esta:

Y la verdad es que no tengo ni pajolera idea de como manejar el API de netatmo y hacer llegar los datos al arduino, luego no tendria problemas para realizar el resto de programacion, pero la parte de la web se me escapa y no se por donde empezar, alguna idea?

Tengo el arduino con conexion wifi. Pero no se como solicitar mediante la API los datos. :frowning:

Un saludo y gracias por adelantado.

Edito, quiero utilizar la estacion de Netatmo obviamente por que dispongo de una en casa.

Interesante idea.
No encontré como lo hacen pero el tutorial sugiere que usa Arduino con Forecast.io (Arduino TFT Forecast Weather Station with ESP8266) y de hecho presenta la información en una TFT.
Asi que miralo con atención.

Hola buenas de nuevo:

ya he avanzado algo, ahora tengo otro problema, he conseguido los datos pero me llegan en const char*, y no se como puedo pasarlo a un char o string normal para poder separar los valores.

el texto que recivo es el siguiente:

17:56 Temp. 14.7° C, Hum. 58%, Dewp. 5.5° C, Bar. 1013.6 hpa, Rain Today 0 mm, Viento 212° 3.0 km / h

pero al ser cons char* no se como puedo sacar los valores de ahi.

Alguna idea?

Gracias por adelantado.

y el código?

Buenas de nuevo, basicamente queria hacer esto:

    const char* datos = "20:54 Temp. 14.8° C, Hum. 57%, Dewp. 5.4° C, Bar. 1013.9 hpa, Rain Today 0 mm, Viento 212° 6.0 km / h"

    std::string dat;

    dat = datos;

Es lo unico que encontrado por internet de momento pero no funciona, despues de esto iva a aplicar el strtok para separar lo que me interesa, pero no puedo si no lo paso a un string.

Un saludo.

Imposible que los datos que recibes de forecast vengan como const char *
Porque no pones el link de donde encontraste la información.
Obvio que no has visto lo que te puse no?

Buenas de nuevo:

surbyte gracias por tu ayuda, si que mire el enlace pero eso me llevaria mucho tiempo y no dispongo de tanto para esta aficion.

Al final me decante por usar la misma placa que aplicaba en el ejemplo que puse de la estacion, y gracias a meteoware consegui que me llegara un tweet cada hora con los datos de mi estacion, luego gracias a IFTTT, consegui hacer un plublish en el canal de particle al que mi unidad esta suscrito y recive los datos. por eso eran si o si const char*, la funcion suscribe te obliga a que asi sean.

De todas formas ya he conseguido que funcione, muchas gracias. Os dejo el codigo por si lo quereis. No esta acabado pero ya lo que queda es muy sencillo.

Un saludo y gracias de nuevo.

// ESTACION METEROROLOGICA

// Este proyecto es para realizar una estacion meteorologica que recoje los datos de una estacion Netatmo.

int Temperatura = A0;   // Indicador de Temperatura.
int Humedad = A1;       // Indicador de Humedad.
int Presion = A2;       // Indicador de Presion.
int Lluvia = A3;        // Indicador de Lluvia.
int Viento = A4;        // Indicador de viento.

float Temp = 0;           // Valor Temperatura.
int Hum = 0;            // Valor Humedad.
float Pres = 0;           // Valor Presion.
float Llu = 0;            // Valor Lluvia.
int Vien = 0;           // Valor Viento.
float Roci = 0;         // Valor Punto de Rocio.
int Dir = 0;            // Direcion del viento.

int LEDR = D0;          // Led rojo.
int LEDV = D1;          // Led verde.
int Error = 0;          // Verificacion de error.

char datosmet;

int i = 0;








void setup() {
    
    pinMode(Temperatura,OUTPUT);
    pinMode(Humedad,OUTPUT);
    pinMode(Presion,OUTPUT);
    pinMode(Lluvia,OUTPUT);
    pinMode(Viento,OUTPUT);
    pinMode(LEDR, OUTPUT);
    pinMode(LEDV, OUTPUT);
    digitalWrite(LEDV,LOW);
    digitalWrite(LEDR,LOW);
    
//    Particle.unsubscribe();
    
//    delay(5000);
    
    digitalWrite(LEDV,HIGH);
    digitalWrite(LEDR,HIGH);
    delay(1000);
    digitalWrite(LEDV,LOW);
    digitalWrite(LEDR,LOW);

    if(Particle.subscribe("************", misdatos) == true) {      // Canal al que os querais suscribir.
        OK();
    }
    else {
        ER();
    }

    
    Serial.begin(9600);
    while (!Serial.available()) {
        Serial.println("Press any key to start.");
        delay (1000);
    }
}

void loop() {
    
    digitalWrite(LEDV,HIGH);
    delay(500);
    digitalWrite(LEDR,HIGH);
    delay(500);
    digitalWrite(LEDV,LOW);
    delay(500);
    digitalWrite(LEDR,LOW);
    delay(5000);

    
}

void misdatos(const char* event, const char* datos){
    
    
    
    i++;
  Serial.print(i);
  Serial.print(event);
  Serial.print(", datos: ");
  if (datos){
    Serial.println(datos);
  }
  else {
    Serial.println("NULL");
  }
    
    if (datos){
        OK();    
    }
    
    else {
        ER();
    }
    

    String dato = String(datos);

    int s1 = 0;
    int s2 = 0;
    
            // Ejemplo datos: 09:34 Temp. 9.3° C, Hum. 71%, Dewp. 3.2° C, Bar. 1020.1 hpa, Rain Today 3.6360 mm, Viento 181° 7.0 km / h
    s1 = dato.indexOf('p') + 2;
    s2 = dato.indexOf('°');
    String Temperatura = dato.substring(s1, s2);
    Temp =Temperatura.toFloat();
    Serial.print("Temperatura: ");
    Serial.println(Temp);
    
    s1 = dato.indexOf('u') + 3;
    s2 = dato.indexOf('%');
    String Humedad = dato.substring(s1, s2);
    Hum =Humedad.toInt();
    Serial.print("Humedad: ");
    Serial.println(Hum);
    
    s1 = dato.indexOf('w') + 3;
    s2 = dato.indexOf('°',30);
    String Rocio = dato.substring(s1, s2);
    Roci =Rocio.toFloat();
    Serial.print("P. Rocio: ");
    Serial.println(Roci);
    
    s1 = dato.indexOf('r') + 2;
    s2 = dato.indexOf('h',30) - 1;
    String Presion = dato.substring(s1, s2);
    Pres =Presion.toFloat();
    Serial.print("Presion: ");
    Serial.println(Pres);
    
    s1 = dato.indexOf('y') + 1;
    s2 = dato.indexOf('m',30) - 1;
    String Lluvia = dato.substring(s1, s2);
    Llu =Lluvia.toFloat();
    Serial.print("Lluvia: ");
    Serial.println(Llu);
    
    s1 = dato.lastIndexOf('o') + 1;
    s2 = dato.lastIndexOf('°');
    String Direccion = dato.substring(s1, s2);
    Dir =Direccion.toInt();
    Serial.print("Direccion: ");
    Serial.println(Dir);
    
    s1 = dato.lastIndexOf('°') + 1;
    s2 = dato.lastIndexOf('k') - 1;
    String Viento = dato.substring(s1, s2);
    Vien =Viento.toInt();
    Serial.print("Viento: ");
    Serial.println(Vien);
}

void OK(){
    digitalWrite (LEDV, HIGH);
    delay(500);
    digitalWrite (LEDV, LOW);
    delay(500);
    digitalWrite (LEDV, HIGH);
    delay(500);
    digitalWrite (LEDV, LOW);
    delay(500);
    digitalWrite (LEDV, HIGH);
    delay(500);
    digitalWrite (LEDV, LOW);
    delay(500);
    digitalWrite (LEDV, HIGH);
    delay(500);
    digitalWrite (LEDV, LOW);
    delay(500);
    digitalWrite (LEDV, HIGH);
    delay(500);
    digitalWrite (LEDV, LOW);
}

void ER(){
    digitalWrite (LEDR, HIGH);
    delay(500);
    digitalWrite (LEDR, LOW);
    delay(500);
    digitalWrite (LEDR, HIGH);
    delay(500);
    digitalWrite (LEDR, LOW);
    delay(500);
    digitalWrite (LEDR, HIGH);
    delay(500);
    digitalWrite (LEDR, LOW);
    delay(500);
    digitalWrite (LEDR, HIGH);
    delay(500);
    digitalWrite (LEDR, LOW);
    delay(500);
    digitalWrite (LEDR, HIGH);
    delay(500);
    digitalWrite (LEDR, LOW);
}