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?