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

Community Tip - Learn all about PTC Community Badges. Engage with PTC and see how many you can earn! X

[POST request] Client got end of stream


[POST request] Client got end of stream

I want to send sensor value from a arduino mega to Thingworx.
I have a thing and a service created however I got an Client got end of stream when I execute my processing program.When I am using HTTPIE (that I have found on REST API tutorial) to make a single post request it is working however when i use my processing program. I am not able to make it work.
Is there conditions to make multiple post request each time I get my data ?

Is there a way to see what happen on thingworx when I make a POST request ? Thanks in advance

I have follow this tutorial.

My code :

import http.requests.*;
import*; //librarie for post request to the server
import processing.serial.*; //serial connexion to arduino
//import; //add for client end of stream (socket)

Client myClient;                     // Client object

Serial myPort;                       // The serial port

final int SENSORCOUNT = 12;           // This value must match SENSORCOUNT in your Arduino Code

String sensorValues[] = new String[SENSORCOUNT];
String junk;
String beginString = "begin";
//String myServer = "localhost";
String myServer = "";//server IP, warning don't put port number here
String appKey = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; // xxxx are remplace in my code by my application key for admin that you have created on thingworx
String thingName = "myArduinoThing";
String serviceName = "myArduinoService";
String myURI = "http -v -j POST :8080/Thingworx/Things/" + thingName + "/Services/" + serviceName + " appKey:" + appKey;
//meme erreur 
//String myURI = "POST/Thingworx/Things/" + thingName + "/Services/" + serviceName + " appKey:" + appKey;
String myHost = "Host: " + myServer;
//String myContent = "Content-type: text/html\n"; we need to send json type
String myContent = "Content-type: application/json\n";
String sensorNames[] = {
  "value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8", "value9", "value10", "value11", "value12"
};  //Enter your variable names (these must match the inputs in your Service)

void setup() {

  // Print a list of the serial ports, for debugging purposes:

  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  //myPort = new Serial(this, "COM14", 9600); //Port number for serial to arduino

  myClient = new Client(this, myServer, 8080);
  print("my client: ",myClient);

int idx = SENSORCOUNT + 2;

void draw() {

  if (myPort.available() > 0)
    junk = null;
    junk = myPort.readStringUntil('\n');

    // look for the initial “begin” string that Arduino sends
    if (junk != null)
      if (beginString.equals(trim(junk)))
        junk = null;
    //Read each sensor value
    if ((junk != null) && (idx < SENSORCOUNT))
      sensorValues[idx] = junk;
      junk = null;

    //When all sensor values have been read, send the info to ThingWorx
    if (idx == SENSORCOUNT)
      // myURI=trim(myURI);// ajout
      print("my URI : ",myURI);

      for (int index = 0; index < SENSORCOUNT; index++)
        //myClient.write("" + sensorNames[index] + "=" + trim(sensorValues[index] + " "));
        myClient.write(sensorNames[index] + "=" + trim(sensorValues[index])+"");
      //myClient.write(" HTTP/1.1\r\n");
      print("send http");
      myClient.write(myHost + "\r\n");
      myClient.write(myContent + "\r\n");

      println("Sending this REST call:");
      for (int index = 0; index < SENSORCOUNT; index++)
        print(" " + sensorNames[index] + "=" + trim(sensorValues[index] + " "));
      print(" HTTP/1.1\n");
      print(myHost + '\n');
      print(myContent + '\n');

      idx = SENSORCOUNT + 2;


22-Sapphire I

Have you tried looking at the application log and adding some logger statements to the services you are calling to help with the troubleshooting?

Yes, I am looking for some help to troubleshoot my POST request.

I am new to API and post request.
When I check my application log I have only log about my thingworx metrics that i have used for some test but I no longer need it.
Is there a way to see all the request POST that happen on my server ? I didn't find how I sould use logger. Is this something I had to put on my service in the javascript code ?



When I add; on my code I have this error :

Error executing service myArduinoService. Message :: La méthode '' est introuvable - See Script Error Log for more details.

Is there a way to enable the logger ? Or is there an error on my code.

22-Sapphire I

Are you putting this in the Thingworx service?

I'm not familiar with the edge agent code so I'm not sure how to enable that.


I wasn't very clear the code that I posted is for my API on processing.
And I try to put the logger on my service code below.



me.value12=parseFloat(value12);; var result = me.value1+me.value2+me.value3+me.value4+me.value5+me.value6+me.value7+me.value8+me.value9+me.value10+me.value11+me.value12 ;


Top Tags