6 Replies Latest reply on Dec 21, 2015 8:24 AM by veronicamih RSS
    vignesh Explorer

    Arduino weather app not updating the property values

    Dear all,

     

    I have this issue while implementing my first arduino IOT program. after completion of all the steps successfully i haven't get the values in my thingworx server.

     

    connected

    POST /Thingworx/Things/AWAPP/Services/setTempAndHumid?appKey=4c294d42-d7b1-40f9-99da-7ae631143fd9&method=post&x-thingworx-session=true<&Temp=48.00&Humid=178.00> HTTP/1.1

    Host: http://sona.cloud.thingworx.com

    Content-Type: text/html

     

    i am using thingworx 5.2.0.437.

     

    I don't have anything in subsystem configurations

      • Re: Arduino weather app not updating the property values
        veronicamih Creator

        Hi,

         

        Your Rest call is correct. I have tested it in the browser and the properties were set correctly. You don't need any additional configuration on ThingWorx 5.2 to allow rest calls. Are you connecting your board through an Ethernet shield or a WiFi shield? What code are you using for making the rest call?

         

        Veronica

        • Re: Arduino weather app not updating the property values
          vignesh Explorer

          Hi Veronica,

           

          I am using Arduino Ethernet Shield only.

           

          this is my code

          #include <Wire.h>

          #include <SPI.h>

          #include <Ethernet.h>

           

          //How many values you will be pushing to ThingWorx

          #define propertyCount 2

           

          // Enter a MAC address and IP address for your controller below.

          // The IP address will be dependent on your local network:

           

          byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

           

          char server[] = "http://sona.cloud.thingworx.com";

           

          EthernetClient client;

           

          //ThingWorx App key which replaces login credentials)

          char appKey[] = "4c294d42-d7b1-40f9-99da-***********";

          // ThingWorx Thing name for which you want to set properties values

          char thingName[] = "AWAPP";

          //Interval of time at which you want the properties values to be sent to TWX server

          int timeBetweenRefresh = 5000;

          // ThingWorx service that will set values for the properties you need

          // See the documentation for this tutorial for more information

          char serviceName[] = "setTempAndHumid";

           

          //Initialize Properties Names and Values Arrays

          char* propertyNames[] = {"Temp", "Humid"};

          double propertyValues[propertyCount];

           

          // last time you connected to the server, in milliseconds

          unsigned long lastConnectionTime = 0;

          // state of the connection last time through the main loop

          boolean lastConnected = false;

           

          //Initialize an HTU21D library object to read

          // temperature and humidity data from your connected sensor

          //HTU21D myHumidity;

           

          void setup() {

            //shut down the SD Card pins

            pinMode(4, OUTPUT);

            digitalWrite(4, HIGH);

           

            // start serial port:

           

            Serial.begin(9600);

            while (!Serial) {

              ; // wait for serial port to connect. Needed for Leonardo only

            }

            //initialize HTU21D object to read values from sensors

            //   myHumidity.begin();

            // start the Ethernet connection:

            Serial.println("Trying to get an IP address using DHCP");

            Ethernet.begin(mac);

            Serial.print("My IP address: ");

            Serial.print(Ethernet.localIP());

            Serial.println();

          }

           

          void loop() {

           

            // Aquire sensor values

            propertyValues[0] = analogRead(A0);

            propertyValues[1] = analogRead(A1);

           

            // wait the established interval of time before

            // reading values from the sensor

            // and sending them to the TWX server again

            // delay(timeBetweenRefresh);

            if (millis() - lastConnectionTime > timeBetweenRefresh) {

              updateValues(propertyValues, client, server, appKey, thingName, serviceName, propertyNames);

            }

          }

           

          void updateValues(double values[] , EthernetClient &client, char server[], char appKey[], char thingName[], char serviceName[], char* sensorNames[])

          {

            //build the String with the data that you will send

            //through REST calls to your TWX server

            char data[80];

            strcpy(data, "?appKey=");

            strcat(data, appKey);

            strcat(data, "&method=post&x-thingworx-session=true");

            // if you get a connection, report back via serial:

            if (client.connect(server, 80)) {

              Serial.println("connected");

              // send the HTTP POST request:

              client.print("POST /Thingworx/Things/");

              client.print(thingName);

              client.print("/Services/");

              client.print(serviceName);

              client.print(data);

              client.print("<");

              for (int idx = 0; idx < propertyCount; idx++)

              {

                client.print("&");

                client.print(propertyNames[idx]);

                client.print("=");

                client.print(propertyValues[idx]);

              }

              client.print(">");

              client.println(" HTTP/1.1");

              client.print("Host: ");

              client.println(server);

              client.println("Content-Type: text/html");

              client.println();

           

              client.stop();

              lastConnectionTime = millis();

           

              // print the request out

              Serial.print("POST /Thingworx/Things/");

              Serial.print(thingName);

              Serial.print("/Services/");

              Serial.print(serviceName);

              Serial.print(data);

              Serial.print("<");

              for (int idx = 0; idx < propertyCount; idx++)

              {

                Serial.print("&");

                Serial.print(propertyNames[idx]);

                Serial.print("=");

                Serial.print(propertyValues[idx]);

              }

              Serial.print(">");

              Serial.println(" HTTP/1.1");

              Serial.print("Host: ");

              Serial.println(server);

              Serial.println("Content-Type: text/html");

              Serial.println();

           

           

            }

            else {

              // kf you didn't get a connection to the server:

              Serial.println("the connection could not be established");

              client.stop();

            }

          }

           

           

          And this is the Serial Output

           

          screenshot.PNG

           

          It shows that the values were constantly updating to the Server.

           

          But I can't See any updates in property values.

           

          Please help me.

           

           

          With regards,

           

          Gopi