0 Replies Latest reply on May 31, 2016 2:44 PM by rshukla-2 RSS
    rshukla-2 Newbie

    Unable to connect remote thing to thingworkx

    I'm trying to connect my Intel Galileo Gen 2 board to thingworkx. I'm following the tutorial  Weather Application with Intel Galileo | ThingWorx  . In the example, they have used the HTU21D sensor . As it wasn't available where I live, I'm performing the tutorial  using  a BMP180 sensor. I'm using it to sense temperature and pressure.

    I have modified the code given for HTU21D , as follow for BMP180:

     

    Note: For security reasons in have modified my API KEY and MAC address.

    include <twApi.h>
    #include <twLogger.h>
    #include <twOSPort.h>
    #include <SFE_BMP180.h>
    #include <Ethernet.h>
    #include <stdio.h>
    #include <string.h>
    #include <Wire.h>
      
    SFE_BMP180 tp;
    /* Mac address of the network adapter */
    byte mac[] = {0x98, 0x4F, 0xEE, 0x01, 0xCB, 0xE9  };
    
    /* Name of your thing */
    char * thingName = "myTestTempPress";
    /* IP/hostname of your TWX server */
    char * serverName = "mitpune66.cloud.thingworx.com";
    /* port */
    int port = 443;
    /* API key */
    char * apiKey = "d9c81d35-5a28-49b0-9ddf-e9193eda3b66";
    /* refresh rate */
    int timeBetweenRefresh = 1000;
    
    /* Hold all the properties */
    struct  {
      double Temperature;
      double Pressure;
    }
    properties;
    
      void sendPropertyUpdate() {
      /* Create the property list */
    propertyList * proplist = twApi_CreatePropertyList("Temperature",twPrimitive_CreateFromNumber(properties.Temperature), 0);
      if (!proplist) {
      TW_LOG(TW_ERROR,"sendPropertyUpdate: Error allocating property list");
      return;
      }
      twApi_AddPropertyToList(proplist,"Pressure",twPrimitive_CreateFromNumber(properties.Pressure), 0);
      twApi_PushProperties(TW_THING, thingName, proplist, -1, FALSE);
      twApi_DeletePropertyList(proplist);
    }
    
    
    void dataCollectionTask()
    {
      char status;
      status = tp.startTemperature();
      status = tp.getTemperature(properties.Temperature);
      status = tp.startPressure(3);
      status = tp.getPressure(properties.Pressure, properties.Temperature);
    
        Serial.print("Time:");
      Serial.print(millis());
      Serial.print(" Temperature:");
      Serial.print(properties.Temperature, 1);
      Serial.print("C");
      Serial.print(" Pressure:");
      Serial.print(properties.Pressure, 1);
      Serial.print("mb");
      Serial.println();
      /* Update the properties on the server */
      sendPropertyUpdate();
    }
    
      /*****************
    * Property Handler Callbacks
    ******************/
    enum msgCodeEnum propertyHandler(const char * entityName, const char * propertyName,  twInfoTable ** value, char isWrite, void * userdata) {
      char * asterisk = "*";
      if (!propertyName) propertyName = asterisk;
      TW_LOG(TW_TRACE,"propertyHandler - Function called for Entity %s, Property %s", entityName, propertyName);
      if (value) {
      
          /* Property Reads */
          if (strcmp(propertyName, "Temperature") == 0) *value = twInfoTable_CreateFromNumber(propertyName, properties.Temperature);
          else if (strcmp(propertyName, "Pressure") == 0) *value = twInfoTable_CreateFromNumber(propertyName, properties.Pressure);    
          else return TWX_NOT_FOUND;
        return TWX_SUCCESS;
      }
      else {
        TW_LOG(TW_ERROR,"propertyHandler - NULL pointer for value");
        return TWX_BAD_REQUEST;
      }
    }
    
    
    void setup() {
      int err=0;
      /* Open serial connection */
      Serial.begin(9600);
      /* Wait for someone to launch the console */
      delay(3000);
    
    
      /* Setup the ethernet connection */
      Serial.println("Attempting to start Ethernet2");
      if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
      }
      else {
        Serial.println("Sucess getting dhcp address");
      }
      /* start adapter */
      system("ifup eth0");
      /* wait for it to start */
      delay(1000);
      Serial.print("Galileo IP address: ");
      Serial.println(Ethernet.localIP());
      system("telnetd -l /bin/sh");
      Serial.println("BMP180 Example!");
      tp.begin();
    
    
      Serial.print("Initialize TWX: ");
      err = twApi_Initialize(serverName, port, TW_URI, apiKey, NULL, MESSAGE_CHUNK_SIZE, MESSAGE_CHUNK_SIZE, TRUE);
      if (err) {
        Serial.println("Error initializing the API");
      }
    
      /* Allow self signed certs */
      twApi_SetSelfSignedOk();
    
    
      /* Regsiter our properties */
       twApi_RegisterProperty(TW_THING, thingName, "Temperature", TW_NUMBER, NULL, "ALWAYS", 0, propertyHandler,NULL);
       twApi_RegisterProperty(TW_THING, thingName, "Pressure", TW_NUMBER, NULL, "ALWAYS", 0, propertyHandler,NULL);
    
      /* Bind our thing */
      twApi_BindThing(thingName);
    
      /* Connect to server */
      if (!twApi_Connect(CONNECT_TIMEOUT, CONNECT_RETRIES)) {
        Serial.println("sucessefully connected to TWX!");
      }
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      dataCollectionTask();
      delay(timeBetweenRefresh);
      Serial.print(".");
    }
    

     

    Every time when I burn the code to my board  the serial monitor waits for a while after printing "Initialize TWX:" and then start printing the temperature and pressure 0 without giving any information regarding the connection! ( In tutorial they have shown a message"successfully connected to TWX!"  when device is connected ) I have attached the screenshot of Serial Monitor and the original as well as modified code .


    Please let me know where I'm going wrong  and quick response to this issue will be really appreciated as I have to give a demo to my fellow classmates on the day after tomorrow on IOT and ThingWorx.