Community Tip - Did you get an answer that solved your problem? Please mark it as an Accepted Solution so others with the same problem can find the answer easily. X
Good day,
I am trying to update a location property using MQTT. I am able to update a json property using MQTT with the message body looking like this:
{"latitude":-25.82,"longitude":28.176,"elevation":0,"units":"WGS84"}
I get the error message: [Unable To Convert From java.lang.String to LOCATION]. When I create a subscription on data change of the json property that looks like this it works:
me.Location = me.JSONLocation;
The location property updates correctly, which I am assuming means my format is correct.
Has anybody been able to update a location property using MQTT? It seems like it is not supported in the MQTT extension.
Thank you,
Johan Bester
Solved! Go to Solution.
Hi Johan,
Try to send the MQTT message in the following format: "-25.82,28.176,-10" (not JSON format) to the Location property from Thingworx.
Thank you,
Raluca Edu
Since MQTT is text and Location is a Location Object, I think you will need to parse the location information and create the location object to assign to the property.
Hi @PaiChung,
Thank you for the reply.
As I understand it the Location property is just a json type property with a specific format right? It makes sense that the parsing is the issue, but other property types do not have an issue to be parsed. Is the issue then on the location type property in Thingworx core that does not parse the string to json correctly except if you do it through a service?
At the moment I am using the workaround, but I would prefer to not have the unnecessary properties if it can be avoided.
Maybe you are missing:
me.Location = JSON.parse(yourMQTTLocationValue);
I don't get the point where you are updating it, but for the error you are getting it points out to the solution I've mentioned and you need an explicit JSON parse as written.
Hi Carles,
That might be one reason in a different circumstance that the error message can occur. It is not the case in this scenario and the misconception is probably my fault because maybe I did not provide all of the necessary information.
My scenario:
I have an edge device using MQTT to publish information. My Thingworx "Thing" with a MQTT template using automapping subscription on the topics receives the information. One of the properties it receives is a location json in the following format: {"latitude":-25.82,"longitude":28.176,"elevation":0,"units":"WGS84"}.
When the location value is received from the subscribe on the topic I receive the following error message: [Unable To Convert From java.lang.String to LOCATION]. Which as you mentioned is because of a parsing error.
Workaround:
I create a json property that subscribes on the location from the edge device. I then run a data change subscription that is only: me.Location = me.JSONLocation;
This works (without explicitly parsing it) without an error an error message.
The problem:
The format of the json is not the problem I am assuming because it is the same format I use for updating using REST calls in a different project and because the service takes the format as is.
It does however then point to the parsing issue where the json message is published as string over MQTT and then the location property does not automatically parse it to json as with the other property types (string to integer, number, json or datetime).
My question if the assumptions above are correct:
Is the issue in the Thingworx core in how location properties are updated. Is the issue in the MQTT extension and if there is a way to solve it without a workaround of additional properties.
I have opened a support case with PTC, but I appreciate the input that I could better understand the issue.
Now it's more clear :)
Then yes you are right, you have to open a support case ( or you can decompile MQTT extension and see it the error it's there ;) )
Hi Johan,
Try to send the MQTT message in the following format: "-25.82,28.176,-10" (not JSON format) to the Location property from Thingworx.
Thank you,
Raluca Edu