cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - Visit the PTCooler (the community lounge) to get to know your fellow community members and check out some of Dale's Friday Humor posts! X

Unable to connect remote thing to thingworkx

rshukla-2
1-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! 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 .

1 REPLY 1
mchehaibi
5-Regular Member
(To:rshukla-2)

Hi Rishi,

You said that you have no confirmation on the connection. Does that mean that you don't know if your Remote Thing is correctly bound ?

if that is the case you could test If you have the same name in the Identifier section, it should be bind to the Thing automatically. In case it doesn't, you can either browse and choose in the Identifier section on the Remote Thing (preferred way) or just type in the Identifier's name in the same section.

Hope this helps

Best Regards,

Amine

Top Tags