Cooking Hacks Forum
https://www.cooking-hacks.com/forum/

Problema con subida de datos a Xively
https://www.cooking-hacks.com/forum/viewtopic.php?f=36&t=10317
Page 1 of 1

Author:  Aitorto8 [ Thu Jun 29, 2017 2:51 pm ]
Post subject:  Problema con subida de datos a Xively

Buenos dias, Tengo un problema a la hora de subir datos a Xively con el modulo SIM908. Ya no se si es problema del modulo o del codigo.

Code:
int8_t answer;
int onModulePin= 2;

char aux_str[50];

String humedad="0";

String TCP_message ="{\"method\": \"put\",\"resource\": \"/feeds/1827207496/\",\"params\": {},\"headers\": {\"X-ApiKey\":  \"f1qLvQ1Piw1FPJbUVpT7qkLUrlyHOjbPjlQSLwGcMGmHxfuD\"},\"body\": {\"version\": \"1.0.0\",\"datastreams\": [{\"id\": \"Humedad\",\"current_value\": \"" + humedad + "\"}]}}";

void setup(){
   
    pinMode(onModulePin, OUTPUT);
    Serial.begin(115200);   
   
    Serial.println("Starting...");
    power_on();
   
    delay(3000);
   
    // sets the PIN code
    sendATcommand2("AT+CPIN=3765", "OK", "ERROR", 2000);
   
    delay(3000);
   
    while (sendATcommand2("AT+CREG?", "+CREG: 0,1", "+CREG: 0,5", 1000)==0);
   
}
void loop(){

  humedad = "7";

  TCP_message ="{\"method\": \"put\",\"resource\": \"/feeds/1827207496/\",\"params\": {},\"headers\": {\"X-ApiKey\":  \"f1qLvQ1Piw1FPJbUVpT7qkLUrlyHOjbPjlQSLwGcMGmHxfuD\"},\"body\": {\"version\": \"1.0.0\",\"datastreams\": [{\"id\": \"Humedad\",\"current_value\": \"" + humedad + "\"}]}}";
   
  char message_TCP [300];
  TCP_message.toCharArray(message_TCP, 300); // converting TCP_message to char inorder for it to pass through AT command

  if(sendATcommand2("AT+CIPMUX=0","OK","ERROR",1000)==1)
  {
    while(sendATcommand2("AT+CIPSTATUS","INITIAL","",500)==0);
    delay(5000);

    if(sendATcommand2("AT+CSTT=\"gprs-service.com\",\"\",\"\"","OK","ERROR",30000)==1)
    {
      while(sendATcommand2("AT+CIPSTATUS","START","",500)==0);
      delay(5000);

      if(sendATcommand2("AT+CIICR","OK","ERROR",30000)==1)
      {
        while(sendATcommand2("AT+CIPSTATUS","GPRSACT","",500)==0);
        delay(5000);

        if(sendATcommand2("AT+CIFSR",".","ERROR",10000)==1)
        {
          while(sendATcommand2("AT+CIPSTATUS","IP STATUS","",500)==0);
          delay(5000);
          Serial.println("Openning TCP");

          if(sendATcommand2("AT+CIPSTART=\"TCP\",\"api.xively.com\",\"8081\"","CONNECT OK", "CONNECT FAIL", 30000)==1)
          {
            Serial.println("Konektatua");

            sprintf(aux_str,"AT+CIPSEND=%d", strlen(message_TCP));
            if(sendATcommand2(aux_str,">","ERROR",10000)==1)
          {
          sendATcommand2(message_TCP,"","ERROR",20000);
          Serial.println("Mensaje mandado!");
        }
        sendATcommand2("AT+CIPCLOSE","CLOSE OK","ERROR",10000);
          }
        else
        {
          Serial.println("Errorea konexioa irekitzen");
        }
      }
      else
      {
        Serial.println("Errorea IP helbidea lortzen");
      }
    }
    else
    {
      Serial.println("Errorea hari gabeko konexioa irekitzen");
    }
  }
  else
  {
    Serial.println("Errorea APN-a konfigurazioarekin");
  }
}
else
{
  Serial.println("Errorea konexioa ezartzen");
}
sendATcommand2("AT+CIPSHUT","OK","ERROR",10000);

delay (4000);

}
         
     
   
 
 
void power_on(){

    uint8_t answer=0;
   
    // checks if the module is started
    answer = sendATcommand2("AT", "OK", "OK", 2000);
    if (answer == 0)
    {
        // power on pulse
        digitalWrite(onModulePin,HIGH);
        delay(3000);
        digitalWrite(onModulePin,LOW);
   
        // waits for an answer from the module
        while(answer == 0){   
            // Send AT every two seconds and wait for the answer
            answer = sendATcommand2("AT", "OK", "OK", 2000);   
        }
    }   
}

int8_t sendATcommand2(char* ATcommand, char* expected_answer1,
        char* expected_answer2, unsigned int timeout)
{

    uint8_t x=0,  answer=0;
    char response[100];
    unsigned long previous;

    memset(response, '\0', 100);    // Initialize the string
   
    delay(100);
   
    while( Serial.available() > 0) Serial.read();    // Clean the input buffer
   
    Serial.println(ATcommand);    // Send the AT command


    x = 0;
    previous = millis();

    // this loop waits for the answer
    do{

        if(Serial.available() != 0){   
            response[x] = Serial.read();
            x++;
            // check if the desired answer is in the response of the module
            if (strstr(response, expected_answer1) != NULL)   
            {
                answer = 1;
            }
            else if(strstr(response, expected_answer2) !=NULL)
            {
              answer=2;
            }
            }
           
        }
        // Waits for the asnwer with time out
    while((answer == 0) && ((millis() - previous) < timeout));   

    return answer;
}

Todo parece ir bien, pero en Xivel no recibo ningun dato.
El Feed y el API Key estan bien puestos.

Author:  libelium-dev [ Fri Jun 30, 2017 7:22 am ]
Post subject:  Re: Problema con subida de datos a Xively

Hola Aitorto8,

Nunca hemos probado subir datos a Xively con el modulo sim908. Los ejemplos para testear el modulo son los que puedes encontrar en el tutorial, si estos te funcionan correctamente, no hay ningún problema hardware y deberás repasar tú código para hacerlo funcionar.

Un saludo.

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/