Arduino and JSON

float humidity, temp_c,temp_f;  // Values read from sensor

Why do these need to be global?

  String message = (char*)payload;

That was stupid. Just process the payload.

  StaticJsonBuffer<1000> JSONbuffer;

WTF? 1000 bytes?

  char JSONmessageBuffer[1000];
  root.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));

And make a copy of it.

Just which Arduino did you say you were using?

How much data does printTo() actually copy into the array?