Найти тему
Kamnetanker

Сборка, подключение и использование M2Mqtt для C#

Оглавление
mqtt
mqtt

Подключение ##

Как и в статье про PostgreSQL CSharp есть два пути для подключения новой библиотеки.

  1. Скачивание библиотеки через NuGet, она называется там M2Mqtt
  2. Путь скачивания репозитория и установки из исходников.
    Используем, ясен-красен, второй путь. Идём по ссылке
    paho M2Mqtt и скачиваем.
Реппозиторий github
Реппозиторий github

Проекты для MQTT обновляются не так часто, как обновляются проекты для баз данных, поэтому скачиваем исходный код, распаковываем, куда нам удобно и открываем paho.mqtt.m2mqtt-master\M2Mqtt.sln
Тут же нам вылезет пара сообщений об ошибке, нам сообщет о том, что для .NetCompact и .NetMicro мы ничего собрать не можем, потому что у нас что-то не установлено и вообще мы куда полезли, нам ща компьюетр руки отгрызёт.
Мы соглашаемся с вижлом во всём, что она хочет, после чего откроется инсталлер вижлы. С ним мы тоже соглашаемся, у меня он доустановил пакеты для WinRT.
В любом случае у нас будет доступен пакет для самого простого .Net Framework версии 4.5, если я не путаю. Замечательно, нам это подходит.
Выбираем release сверху, после чего правой кнопкой мыши по M2Mqtt.Net и нажимаем "собрать"

Процесс сборки библиотеки
Процесс сборки библиотеки

После чего произойдёт успешная сборка и по пути: paho.mqtt.m2mqtt-master\bin\Release\M2Mqtt.Net окажется интересующая нас библиотека M2Mqtt.Net.dll

Собранная библиотека
Собранная библиотека

Копируем M2Mqtt.Net.dll в папку с нашим проектом, в котором будет использоваться MQTT и подключаем по ссылке.
Тыкаем на ссылки->добавить ссылку. В открывшемся окне нажимаем "обзор" и выбираем нашу dll'ку
Наслаждаемся результатом проделанной работы.

Использование

Подключаем в нужном нам месте заголовок:
using uPLibrary.Networking.M2Mqtt;
В этот момент у некоторых, как и у меня мог произойти некоторый диссонанс. Как так? собирали paho.mqtt.M2mqtt, а подключаем какую-то левую uPlibrary. Всё очень просто. 6 лет назад библиотека uPlibrary де юре перестала существовать и обновлятся и перешла под крыло Eclipse. А они решили не менять заголовки. Видимо, для сохранения совместимости с легаси кодом.
Для демонстрации работы этой библиотеки можно сходить по
ссылке на гитхаб и почитать буржуйский READMI.md, а можно остаться со мной и получить перевод этого ридми сейчас же.
Библиотека M2Mqtt содержит в себе главный класс MqttClient используемый для получения сообщений от брокера и публикации сообщений в топики. Что такое брокеры, топики и сабсы читать
здесь . Делая отсылки на гитхаб и хабр, чувствую себя настоящим эникейщиком. Ну да ладно. Погнали дальше.
При помощи библиотеки M2Mqtt вы можете подписываться на топики и получать сообщения от брокеров.
После подключения к топику вы можете публиковать в него сообщения и получать сообщения от туда.
Ну примерно такой получился вольный перевод. Теперь к боевой практике.

  1. Создаём объект, который будет клиентом для Mqtt:

// create client instance
MqttClient client = new MqttClient(IPAddress.Parse(MQTT_SERVER_ADRESS));

Для того, чтобы локально разрабатывать, можете скачать, установить и запустить mosquito - это бесплатный mqtt сервер. Ну и указать вмето MQTT_SERVER_ADRESS его адрес.

2. Регистрируем обработчик получения сообщений

// register to message received
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
...
static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
// handle message received
}

3. Заполняем свой айдишник.

string clientId = Guid.NewGuid().ToString();
client.Connect(clientId);

4. Подписываемся на некоторый топик(если надо)

// subscribe to the topic "/home/temperature" with QoS 2
client.Subscribe(new string[] { "/home/temperature" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });

MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE - это QoS(Quality of Service), дословно "Качество обслуживания" или "Качество сервиса", задаёт гарантированность доставки сообщения подписчикам топика. В данном случае QOS_LEVEL_EXACTLY_ONCE переводится примерно как "минимум один раз", что обеспечит нам гарантированную доставку сообщений.

5. Публикуем некоторое сообщение

// publish a message on "/home/temperature" topic with QoS 2
client.Publish("/home/temperature", Encoding.UTF8.GetBytes(strValue), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);

Тут мы отправляем в топик /home/temperature сообщение strValue с гарантированной доставкой.
За сим откланиваюсь, дальше сами.

MQTT

M2Mqtt

Add a tag…