I made a bug fix on my Library M2Mqtt (MQTT client) that allows you to better manage the case where the client does not transmit anything for a time equal to the "keep alive period " and the keep alive thread, whose task is to ping the broker to keep the connection alive, does not receive anything within the timeout period (ex. broker shutdown, network disconnection, ...).
The update is already available on CodePlex and Nuget !
After releasing the new version of my M2Mqtt library with support for SSL / TLS with server-side authentication, the time has come to show you an example of use.
Choose and install the broker: Mosquitto
First we have to choose an MQTT broker among those available but unfortunately no one is developed using the .Net Framework . Discarding more complex solutions , especially with regard to the installation and configuration , such as IBM Websphere , we can take into account to brokers like RabbitMQ , HiveMQ or Mosquitto. In this case , my choice was Mosquitto that we can download from the official web site for various operating systems based on Linux , as well as there is a convenient installer for the Windows environment . In fact, for Windows there are two installation modes: the first uses an installer in which the broker is compiled natively while in the second case is based on the Cygwin provides a Linux-like environment for Windows. It 'obvious that the first mode is the most simple and immediate . Afte ...
Read the rest of entry »
I just updated only on CodePlex (for now) M2Mqtt library (version 188.8.131.52), adding the automatic detection of any IPv6 address to connect.
To determine the address class (AddressFamily), I implemented the '"Extension Method" GetAddressFamily() for the IPAddress class through the static class IPAddressUtility, necessary only because the. NET Micro Framework does not itself provide the property AddressFamily the IPAddress class. In fact, in the case of full / compact. Net Framework is returned that property while in the case of. NET Micro Framework is done by a simple search of the ":" character (separator in IPv6 addresses).
1: public static AddressFamily GetAddressFamily(this IPAddress ipAddress)
3: #if (!MF_FRAMEWORK_VERSION_V4_2 && !MF_FRAMEWORK_VERSION_V4_3)
4: return ipAddress.AddressFamily;
6: return (ipAddress.ToString().IndexOf(':') != -1) ?
7: AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork;
I finally got what I wanted to add some time to my Library M2Mqtt : support for the SSL / TLS protocol !
With this new feature , you can now connect to a MQTT broker also using SSL / TLS (for .NET Micro Framework only up to TLS1.0 ) to take advantage of its key features: data encryption and server authentication through an X509 certificate (client authentication is not supported) .
To leave free choice to the developer wanted to or not to include this feature in his project ,I tied everything to the compilation symbol "SSL" which must be defined to add such support. In this way, for some platforms with less memory (see Netduino or FEZ Cerberus in the case of .NET Micro Framework ), you can exclude it , remembering to remove all references to assemblies that run the SSL / TLS.
Of course , as well as on CodePlex, the update is also available on Nuget !
As soon as possible, I will write a new post in which I describe an example of using secure connection with an MQTT broker like Mosquitto !
Today I published my M2Mqtt library on Nuget, besides being already available for some time on CodePlex.
I've included the compiled assemblies for the. Net Framework 4.0 and 4.5 and for the. NET Micro Framework 4.2 and 4.3.
I hope I have done something pleasing for those who until now have used it by downloading the source files directly from CodePlex.
Despite my M2Mqtt is written in C #, so it is guaranteed to work on .Net Framework versions in a Microsoft Windows environment, it is absolutely possible to use it on Linux through the Mono Project.
First, I prepared the environment with a Linux distribution using the most famous and widely used in desktop environment: Ubuntu (12.04 LTS). The operating system does not provide native support for Mono, which you need to download and install through the Synaptic package manager or through the terminal using the following command:
sudo apt-get install mono-complete
The package mono-complete installs pretty much everything, both the runtime libraries for developing applications based on that framework.
Next, I chose the MonoDevelop IDE to compile the M2Mqtt library with the Mono compiler and to be able to create a simple console application to test. Even in this case, we can make use of Synaptic or the command:
sudo apt-get install monodevelop
Taking advantage of this IDE, I created a new solution an ...
I have made a "small" update on my MQTT client (now at version 184.108.40.206), adding an additional constructor on MqttClient class which has the host name of the broker as parameter (adding to the constructor that provides only the address IP). Such a constructor may be useful in all those cases in which you use a MQTT public broker , such as the Mosquitto test server that is at test.mosquitto.org.
1: public static void Main()
3: MqttClient client = new MqttClient("test.mosquitto.org");
This is the time of a project completely dedicated to Cloud but always with the goal of providing additional functionality and capabilities to an embedded system.
uCloudy is a library that aims to provide a variety of clients for. NET Micro Framework to connect to the main cloud services. The first and for now only service supported in this first release is Windows Azure Mobile Services.
As we all know, Microsoft provides a set of SDK to take advantage of this service in Windows applications store, Windows Phone, iOS, Android and the Web I have tried to bring this functionality in embedded systems with. NET Micro Framework. All this has been made possible thanks to the RESTful interface that the mobile services provide for interfacing to them. Thanks to the HTTP client that I recently integrated into uPLibrary, I made a series of classes through which you can perform the four basic operations on the tables of mobile services: insert, update, delete, and query.
The client is implemented through th ...
I never stop and even now that I'm on vacation I still .... develop!
This time it's up to my uPLibrary I upgraded to version 2.0 (of course also on Nuget with support for three versions of the. NET Micro Framework 4.1 from 4.1 to the current 4.3) with a new component: an HTTP client.
All you're probably asking questions about why the need to rewrite an HTTP client whereas there are already thoroughly tested the HttpWebRequest and HttpWebResponse directly included. Net Micro Framework. The reason is that in some boards with low memory (see Netduino), the assemblies for these two classes are too large and working with streams they are under-performing. For this reason, I decided to create a simple client (any advice for its improvement is welcome) that uses directly the socket without any intermediate layer of abstraction (a concept that many times in embedded systems must be limited to improve performance).
The programming model is quite simple, as it involves the use of the HttpClient class that provides t ...
The MQTT client, which I released on CodePlex that can be used with all versions of the. Net Framework specially with NET Micro Framework, was published with a blog post on Coding4Fun on Channel9 by Greg Duncan.
View this page in another language: