OpenMarine

Full Version: Humidity Sensor -> MQTT -> SignalK (data conversion)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have a sensor collecting humidity data and using the following to send to MQTT.

      pubString = String(dht.getHumidity()/100); 
      memset(msg, 0, sizeof(msg));
      pubString.toCharArray(msg, pubString.length()+1); 
      client.publish("SensorHumidity",msg);

I am trying to display the humidity data in Wilhelm but it is being recognized, correctly as a string in Wilhelm rather than a float. How do I send the data so it ends up as being float in SignalK and hence Wilhelm as well? I have data getting on to Wilhelm, I suspect I am just not doing it the right way. I am NOT familiar with a whole JSON structure but do I need to go to that extent to accomplish what I am trying?  A shove in right direction would be appreciated. Signed Newbie, but learning
(2018-09-29, 03:15 PM)awwbaker@yahoo.com Wrote: [ -> ]I have a sensor collecting humidity data and using the following to send to MQTT.

      pubString = String(dht.getHumidity()/100); 
      memset(msg, 0, sizeof(msg));
      pubString.toCharArray(msg, pubString.length()+1); 
      client.publish("SensorHumidity",msg);

I am trying to display the humidity data in Wilhelm but it is being recognized, correctly as a string in Wilhelm rather than a float. How do I send the data so it ends up as being float in SignalK and hence Wilhelm as well? I have data getting on to Wilhelm, I suspect I am just not doing it the right way. I am NOT familiar with a whole JSON structure but do I need to go to that extent to accomplish what I am trying?  A shove in right direction would be appreciated. Signed Newbie, but learning

What are you using to send the data? If it's an esp then this library might help , I stole some of it and send signalk direct so no problems with the data. Had the same issues with mqtt sending the data as a string.

https://github.com/mxtommy/EspSigK
(2018-09-29, 05:22 PM)PaddyB Wrote: [ -> ]
(2018-09-29, 03:15 PM)awwbaker@yahoo.com Wrote: [ -> ]I have a sensor collecting humidity data and using the following to send to MQTT.

      pubString = String(dht.getHumidity()/100); 
      memset(msg, 0, sizeof(msg));
      pubString.toCharArray(msg, pubString.length()+1); 
      client.publish("SensorHumidity",msg);

I am trying to display the humidity data in Wilhelm but it is being recognized, correctly as a string in Wilhelm rather than a float. How do I send the data so it ends up as being float in SignalK and hence Wilhelm as well? I have data getting on to Wilhelm, I suspect I am just not doing it the right way. I am NOT familiar with a whole JSON structure but do I need to go to that extent to accomplish what I am trying?  A shove in right direction would be appreciated. Signed Newbie, but learning

What are you using to send the data? If it's an esp then this library might help , I stole some of it and send signalk direct so no problems with the data. Had the same issues with mqtt sending the data as a string.

https://github.com/mxtommy/EspSigK

------------------------------------------------------------------------------
First of all....complete NUBE!!! That said, I have put together an Mega 2560 Arduino based board which is measuring solar panel current, voltage as well as a temperature and humidity sensor. I am using

WiFiEspClient espClient;
PubSubClient client(espClient);

to send the data to MQTT broker on OpenPlotter running on a RPi. Using the interface there I mapped MQTT messages to SignalK. I then started up Wilhelm used generic controls to display....all working and very cool. Then tried to use Temperature and Ratio Controls. The Wilhelm author Mr Bender discovered I was sending strings rather than numerical values through MQTT. 

I tried building the EspSigK example but I suspect because of the Mega 2560 getting build errors that are currently beyond my skill level to resolve. (error on some includes in EspSigK.h) At this point not sure if I should abandon the MQTT and go after the EspSigK? Any suggestions GREATLY appreciated. VR Anthony
(2018-09-29, 08:42 PM)awwbaker@yahoo.com Wrote: [ -> ]------------------------------------------------------------------------------
First of all....complete NUBE!!! That said, I have put together an Mega 2560 Arduino based board which is measuring solar panel current, voltage as well as a temperature and humidity sensor. I am using

WiFiEspClient espClient;
PubSubClient client(espClient);

to send the data to MQTT broker on OpenPlotter running on a RPi. Using the interface there I mapped MQTT messages to SignalK. I then started up Wilhelm used generic controls to display....all working and very cool. Then tried to use Temperature and Ratio Controls. The Wilhelm author Mr Bender discovered I was sending strings rather than numerical values through MQTT. 

I tried building the EspSigK example but I suspect because of the Mega 2560 getting build errors that are currently beyond my skill level to resolve. (error on some includes in EspSigK.h) At this point not sure if I should abandon the MQTT and go after the EspSigK? Any suggestions GREATLY appreciated. VR Anthony

So is it sending over Wifi or serial? Either way there'll be a way to send as signalk intead of mqtt - you could maybe try this function I pinched and tweaked, think it was from espsigk.  Not sure if that will work but worth a try, #include.... goes at the top then the WifiUDP above the setup. 
So to send just go >

"sendSigK("mytest.test", 12345 );"

You might need to add the json library, in the arduino IDE go into Sketch|include Library|manage libraries and search fo arduinojson, might be better not to add a beta librry, but go for an earlier one. 

Good luck, for a nube you seem to have hit the ground running!!! :Cool



Code:
#include <ArduinoJson.h>
#include <WiFiUdp.h>


WiFiUDP Udp;        // A UDP instance to let us send and receive packets over UDP



void sendSigK(String sigKey, float data) {    //    send SigK via UDP *****************************************


 DynamicJsonBuffer jsonBuffer;
 //String deltaText;

 //  build delta message
 JsonObject& delta = jsonBuffer.createObject();

 //updated array
 JsonArray& updatesArr = delta.createNestedArray("updates");
 JsonObject& thisUpdate = updatesArr.createNestedObject();   //Json Object nested inside delta [...
 JsonArray& values = thisUpdate.createNestedArray("values"); // Values array nested in delta[ values....
 JsonObject& thisValue = values.createNestedObject();
 thisValue["path"] = sigKey;
 thisValue["value"] = data;

 thisUpdate["Source"] = "ESP11";

 // Send UDP packet
 Udp.beginPacket(remoteIp, remotePort);
 delta.printTo(Udp);
 delta.printTo(Serial);
 Serial.println();
 Udp.println();
 Udp.endPacket();
 delay(10);

 Serial.print("UDP sent. remoteIP = ");
 Serial.println(remoteIp);
 Serial.print("remote port = ");
 Serial.println(remotePort);
 Serial.print("Wifi mode = ");
 Serial.println(WiFi.getMode());


}