Community Tip - Want the oppurtunity to discuss enhancements to PTC products? Join a working group! X
Hi,
I wish to know more about the current available MQTT support in ThingWorx. I understand it is available through MQTT extension, but it doesn't seems to have a detailed documentation on it in this community.
Can you please explain the level of integration of MQTT support in ThingWorx, and how does it communicate to the MQTT device through ThingWorx, and if any message broker involved etc.?
Also, it is much appreciated if you could point me to any available detailed documentation/link and if there is any sample demo ThingWorx application that could be referred to.
Thanks in advance.
Same request,
Wondering why MQTT_Conenction and MQTT_subscriber dont have services...
A quick start quide/video would help
I'll add this as a third request for some samples of an MQTT connectivity subscribe and publish event. How do you accomplish this from Thingworx? A sample or video would be very much appreciated. Thanks, Rob
Hi,
Here's a steps by steps:
Installing an MQTT broker
The MQTT ThingWorx extension acts as an MQTT client, so in order to test it we need to install a local broker.
One such open-source broker can be downloaded from http://mosquitto.org/download/
Download the binary Windows installation: mosquitto-X.Y.Z-install-win32.exe from the download page and install it locally.
Mosquitto depends on PThreads and OpenSSL, but does not redistribute them, so you need to download them following the instructions in the readme-windows.txt included in the package.
Please note that the Mosquitto build is 32-bit, so you must download 32-bit versions of both PThreads and OpenSSL DLL’s.
After downloading and installing those two dependencies, you’ll maybe notice the famous DLL hell come true: your Windows system is already spammed with all sorts of OpenSSL libraries, dropped in the PATH by various applications that you might have been installed in the past: some of them are 32-bit, some 64-bit. Since we want to be sure that we use a 32-bit version (and probably the one we have just downloaded), you have to adjust the PATH as seen by Mosquitto, remove all directories from the path that have nothing to share with mosquitto, and add the new one. While you might think you can copy the new DLL’s to the Mosquitto folder, you’ll soon realize that adjusting the PATH is a much better and resilient option.
This is the PATH that I’ve set in the Command Prompt before running Mosquitto:
Set PATH=C:\Windows\system32;C:\Windows;D:\opt\OpenSSL-Win32;D:\opt\OpenSSL-Win32\bin;D:\opt\pthreads-w32-2-9-1-release\Pre-built.2\dll\x86
Testing Mosquitto
Before configuring the MQTT extension, test your local Mosquitto instance, as follows.
Open three command prompts and set the PATH in them according to the previous section:
- Command Prompt for the broker:
o Run mosquitto –v to start the broker in verbose mode
- Command Prompt for the client that subscribes to a topic
o Run mosquitto_sub -v -i subclient-q 2 -t random/temp to start the subscriber client in verbose mode, using the subclient ID, quality of service 2, and topic random/temp
o You will see that the broker logs a subscription request in its standard output
- Command Prompt for the client that publishes a message to a topic
o Run mosquitto_pub -q 2 -t random/temp -m 33 to start the publisher client with quality of service 2, topic random/temp, and message 33
o You will see that the broker logs a publish request in its standard output, as well as the subscriber client
Testing the MQTT extension in Thingworx
Here’s the result:
If you want to get more information about the Mosquitto client please check the following website:
http://mosquitto.org/
To test the extension without installing a MQTT broker please check the following website:
http://test.mosquitto.org/
I hope this information helps you.
Please let me knowif you have question or need more information about this topic.
Regards,
Franck Bailleux
Thank you!
I've finally got a Thing running with 2-way communication to a public MQTT broker thanks to this walkthrough!
BTW, I could not get the MQTT ThingTemplate method to work -- my Thing failed to initialize. Instead, I used the pair of MQTTConnection and MQTTSubcriber and that alternate method worked quite easily. If I learn more about the initialization issue, I'll post it here.
For a public MQTT broker, I'm using:
broker.mqttdashboard.com
And I'm monitoring/testing with this very nice web-based client:
http://www.hivemq.com/demos/websocket-client/
I'll be working with MQTT I/O a lot more in the next few days. Thanks for getting me off the ground.
Dan Thornton
ThingWorx Newbie
hello Franck,
I tried the steps given but after publishing in mosquitto command promt I am not able view the temperature in thingworx. the isConnected service value is also false. I have given same serverName (test.mosquitto.org) and the serverPort (1883).
Can you suggest where I went wrong
while publishing itself i am getting error saying "unable to connect(lookup error)". can anyone help how to proceed further
Hi Franck,
i tried the same thing which you mentioned, but i am facing problem in thingworx running on (windows8) and the mosquito broker on ubantu
i am able to get the (isConnected=true) but when publishing message i am unable to get it in the thing and gives connection refused in ubantu terminal
where given the ip and "Thingworx" as Topic and MQTT as a message to send..
error..
can you tell me, am i missing something??
unable to set value of temperature property
Hi,
Could anyone tell that how much messages can thingworx MQTT client handled simultaneously. I mean for example there are 2 million connected devices to thingworx and all are communicating to thingworx and sending messages at same time. Could thingworx MQTT client can handle this scenario?
Thanks
Hello, how to publish json message to a multiple properties on a single topic ? please help me to achieve this asap.
Thanks
Hello, how to publish json message to a multiple properties on a single topic ? please help me to achieve this asap.
The mqtt extention maps mqtt topics to thing properties. After installing the extension you can choose between two different solutions for the connection and two different types of binding.
Connection:
1. Use the mqtt template in a new thing and configure your broker right in the things configuration
2. Create a thing that uses mqttConnection template and configure your broker + Create a thing that inherits from mqttSubscriber and configure it to use the mqttConnection thing.
Binding:
1. Automapping: Check "Enable" in automapping section. Define a topic format for the binding. Here {s} is the servername from the federation, {t} is the thingname and {p} is the property name. For example your thingname is "MyFirstMqttThing" and that one has a property named "MyProp" and you use "/tw/{t}/{p}" as format, than every new value on the property gets published to the topic /tw/MyFirstMqttThing/MyProp, every external publish to that topic is used as the new value. Automapping seems to be bidirectional!
2. manual Mapping: Add a new line to "Property to MQTT topic mappings". Set topic to a mqtt topic and name to a property name. If you check the publish check mark every change in thingworks gets published to the mqtt topic and if you check subscribe every published value on that topic gets copied to the property. Here you can bind one thing to different topic structures.
Pitfalls:
If you change something that changes subscriptions, call restartThing after that or restart tomcat. There is an initialization problem otherwise.
Use:
For a more Event driven approach simply subscribe to the data change events.
Regards,
Mario Wolff
Solution Architect
________________________________________
exceet Secure Solutions AG
Rethelstraße 47
40237 Düsseldorf
www.exceet-secure-solutions.de
________________________________________
Vorstand: Christian Methe
Aufsichtsratsvorsitzender: Wolf-Günter Freese
Amtsgericht Düsseldorf HRB: 44361
Hi,
I am trying to set one sample thing with mqtt,
It connects to mosquitto and also subscribes to the topic, but I always get "Socket error on client" when mosquitto is trying to push the message to Thingworx mqtt thing.
I am using thingworx 6.5.0 on tomcat 7.
This mosquitto server works well with eclipse paho based application on the same tomcat.
Any pointers would really of a great help.
Many Thanks
Amit
Update:
I could get MQTT Thing based solution working with 2 changes.
1. Adding an auto refresh widget
http://www.thingworx.com/~/media/Files/PDFs/Academics/41RPHowtocreateaMashupforRPIstep1.ashx?la=en
2. getting the latest MQTT extension for Thingworx 6.5. The one on market place is old.
(download link worked for me was http://support.ptc.com/appserver/wcms/standards/freefull_cs.jsp?&im_dbkey=162654&icg_dbkey=893)
Hope it may provide hints for others who might be facing challenge
Hi Mario,
Now I got into another problem.
After the value of a property is updated as per mqtt subscription, I want to trigger some action.
e.g. Say if temperature is above 35 degrees, I want to send an email.
I coded required snippet.
If I manually set the property of the temperature, it sends an email.
However if same property is update from mqtt, the email subscription code does run.
How can it be fixed?
Any work around/pointers?
Need help badly as I already spent couple of days, but did not get a clue.
Thanks much
Amit
Finally I got this too working.
What I learnt is we need to change the runtime permission for services those need to be executed from the snippet.
e.g. if I am using
Things["EmailServ1"].SendMessage(params);
The runtime permissions must be allowed for Thing - EmailServ1. Please refer the image below.
Very happy having completed as this was the basis of one my imp PoC.
May be these settings are available by default and it is just me who missed them.
Nevertheless if someone is stuck like me, hope this would help them.
And of course thanks for the information in above thread.
Best Regards,
Amit Teli
Has anyone been able to configure TW5 to use RabbitMQ 3.5.6?
When I try to connect to the server I get an error
=ERROR REPORT==== 9-Nov-2015::11:15:49 ===
closing AMQP connection <0.298.0> (127.0.0.1:49887 -> 127.0.0.1:5672):
{bad_header,<<22,3,1,0,149,1,0,0>>}
Hi Graham,
AMQP is a different protocol than MQTT.... the log message doesn't mention anything about MQTT or related ports.
You should verify your client configuration, addresses, ports, as well as the server side that it is allowing MQTT connections.
To verify the MQTT connection, try using the HiveMQ online MQTT web-client posted above in order to be sure that your broker is visible and working on the Internet.
Cheers,
Greg
Can someone help me with the setup , I followed the exact steps and still it's not showing its as Connected.
What could have been wrong.
When i am testing through chrome mqttlens, its working fine. what am i doing wrong
Hi,
1 - Could you check if the MQTT extension has been correctly installed.
Go to Monitor (from the composer) and choose extension item and search for MQTT extension
If something goes wrong during MQTT installation you 'll be able to find some information.
2 - What is your operating system ? and the MQTT extension release ?
Hi Frank,
I have the same issue that the MQTT extension is not able to connect to my public mosquitto server.
MQTT_spy can connect without problem.
MQTT extension is also imported fine. I could not find any errors.
Any idea what I´m missing ?
Have been able to figure out the issue.
Seems the extension on the marketplace is not working and as per the comment on other thread , need to download the below extension for which suppor tis requried.
http://support.ptc.com/appserver/wcms/standards/freefull_cs.jsp?&im_dbkey=162654&icg_dbkey=893
Can someone help if the above extension is available in public domain.
Hello, In the meantime we understood that the MQTT extension was giving problems under Linux. MQTT extension on Thingworx Server running on Windows does not have any problems.
PTC offered a new MQTT extension begin of October and now the MQTT issue on Linux based Thingworx server is solved.
Solution: Use the latest MQTT extension from the marketplace.
Hello
I have put the extension in place, everything is working fine from the device To Thingworks (subscribe MQTT)
(remark from Amit Teli about system user rigth is very important and I loose some time before to understand that my problems were coming from that)
My Question : how to publish ?
I have created a property with the publish topic (auto mapped) but how to activate it and how to publish a message ?
EDIT :
the solution was in the explanations and it works fine (and very simple !)
"If you check the publish check mark every change in thingworks gets published to the mqtt topic and if you check subscribe every published value on that topic gets copied to the property. Here you can bind one thing to different topic structures."
Regards