Hi,
I have 2 sensors that reads and after the data is published. After that we use webhook to send the info to our server.
Every reading does a push, but the problem is we make a lot of pushes from the same machine. Is it possible to publish a string of data? for example
Sensor1: 25.6 Sensor2: 22.6 in one event?
Thank’s
Eduard
Yes it is and the prefered way is via snprintf()
and in JSON format.
Just for the records
It's not only possible but publishing strings is the only thing that works even with single values
Hi ScruffR
I did what you suggest but the result (json with event Ulatracker) comes with values completely wrong:
You can see the data with vlues without sense:
See the code below:
Thank’s for your eternal patience
Eduard
sensor.read();
double tempeatureFresh = sensor.celsius();
Particle.publish("tempeatureFresh", String(tempeatureFresh), PRIVATE);
digitalWrite(D4, LOW);
delay(5000);
digitalWrite(D5, HIGH);
//Reading Temperature Frozen
sensor2.read();
double temperatureFrozen = sensor2.celsius();
Particle.publish("temperatureFrozen", String(temperatureFrozen), PRIVATE);
//Particle.publish("temperatureFrozen", String(sensor2.celsius()), PRIVATE);
digitalWrite(D5, LOW);
//Reading battery level
FuelGauge fuel;
//float batt;
float batt = fuel.getVCell();
sprintf(publishString,"{\"tempeatureFresh\": %u, \"temperatureFrozen\": %u, \"batt\": %u}",tempeatureFresh,temperatureFrozen,batt);
Particle.publish("UlaTracker",publishString);
For float
and double
input variables snprintf()
would require you to use something like "%.1f"
instead of "%u"
.
snprintf()
uses the same formatting pattern as printf()
%u
stands for unsigned decimal integer - meaning an integer input type not to be confused with the output format.
ScruffR:
ble
Hi
I did your changes but I did received the same results.... you know why? thank'ssssss
sprintf(publishString,"{"tempeatureFresh": %1f, "temperatureFrozen": %.1f, "batt": %1f}",tempeatureFresh,temperatureFrozen,batt);
You left out the dot (.
) in two cases to start with, but for more I’d have to look a bit closer - stay tuned.
Update:
How about this?
FuelGauge fuel; // have this declarec globally only once
void loop() {
char msg[256]; // max length for publish, shorten to what's required
sensor.read();
double temperatureFresh = sensor.celsius();
Particle.publish("temperatureFresh", String(temperatureFresh), PRIVATE);
digitalWrite(D4, LOW);
delay(5000);
digitalWrite(D5, HIGH);
//Reading Temperature Frozen
sensor2.read();
double temperatureFrozen = sensor2.celsius();
Particle.publish("temperatureFrozen", String(temperatureFrozen), PRIVATE);
//Particle.publish("temperatureFrozen", String(sensor2.celsius()), PRIVATE);
digitalWrite(D5, LOW);
//Reading battery level
//FuelGauge fuel;
//float batt;
float batt = fuel.getVCell();
snprintf(msg, sizeof(msg), "{\"temperatureFresh\":%.1f,\"temperatureFrozen\":%.1f,\"batt\":%.1f}", temperatureFresh, temperatureFrozen, batt);
Particle.publish("UlaTracker_test", msg, PRIVATE);
}
Might want to change tempeatureFresh
to temperatureFresh
. Missing an “r” in the middle.
2 Likes
Done, although that’s only optics as it was written that way at all instances
1 Like