Как internet of things си говорят чрез mqtt и софтуер с отворен...
TRANSCRIPT
Как Internet of Things си говорят чрез MQTT и софтуер с отворен код?Леон Анави[email protected] [email protected]
Меню за деня
Общи приказки за Internet of Things
Суха теория за протокола MQTT
Open source MQTT брокери и клиенти
Неуспешни демонстрации
За десерт: трудни въпроси
Internet of Things (IoT)
Вградени устройства, свързани към Интернeт
Предизвикателства за IoT
Комуникация в реално време
Консумация и работа на батерии
Ниска цена за производство
Софтуер, който да е съвместим с устройства с ограничен хардуер
Комуникация
MQTT
MQTT е съкращение от MQ Telemetry Transport
Съществува от 1999г
От 2013г започва процедура по създаване на стандарт към международния консорциум с нестопанска дейност OASIS
MQTT
Лек протокол от типа publish/subscribe за комуникация между машини, изграден върху TCP/IP
Комуникация в реално време
Брокер, който да разпределя съобщенията между клиентите
Лесна имплементация и съществуващи open source библиотеки на много програмни езици
OSI Модел
7. Приложен слойMQTT, HTTP, SMTP, SSH, Telnet и други
6. Представителен слойTSL, SSL и други
5. Сесиен слой
4. Транспортен слойTCP, UDP и други
3. Мрежов слойIP, ICMP, IGPM и други
2. Канален слой
1. Физически слой
MQTT TCP/IP портове
Порт 1883 е резервиран за MQTT
Порт 8883 е резервиран за MQTT върху SSL
MQTT
MQTT клиенти – софтуерни приложения, които се свързват към MQTT брокер. Могат да изпращат и да получават съобщения.
MQTT брокер – софтуер, които се изпълнява като демон и се грижи за разпределянето на съобщенията между клиентите.
MQTT операции
Connect
Disconnect
Subscribe
Unsubscribe
Publish
Пример
MQTTBroker
PC(MQTT client)
Smart Phone(MQTT client)
Sensor(MQTT client)
Publish
Subscribe
PublishPublish
Subscribe
MQTT клиент се свързва с брокер и се абонира за дадена тема
Данни от сензор се изпращат по MQTT и брокерът ги доставя до заинтересуваните клиенти
MQTT Publish
Topic
Payload
QoS
Retain
"hello/1"
{ "temperature": 20 }
2
false
Пример
MQTT Quality of Service (QoS)
0 – съобщението ще бъде доставено най-много веднъж
1 – съобщението ще бъде доставено поне веднъж
2 – съобщението ще бъде доставено точно един единствен път
MQTT заглавия
Примерно заглавие
home / kitchen / temperature Wildcards на едно ниво
home / + / temperature Wildcards на много нива
home / #
Last Will & Testament (LWT)
Завещание от МQTT клиент, което другите заинтересувани MQTT клиенти получават, ако връзката със завещаващия бъде прекъсната неочаквано.
MQTT Сигурност
Възможност за криптиране на предаваните данни с TLS/SSL
Автентификация с потребителско име и парола
Авторизация с Access Control Lists (ACL)
Free and Open Source Software
MQTT брокери с отворен код
Mosquitto
HiveMQ
Mosca
emqttd
VerneMQ
ActiveMQ
Mosquitto
MQTT брокер с отворен код, написан на програмния език C
Поддържа версии на MQTT протокола 3.1 и 3.1.1
Наличен за всички популярни GNU/Linux дистрибуции: Debian,Ubuntu, Fedora, RedHat Enterprise Linux, openSUSE, CentOS, ArchLinux, Slackware и други
Наличен също за Windows, FreeBSD и Mac
Проект на iot.eclipse.com
Web Socket
Функционалност, която позволява всеки модерен уеб браузър да се свързва към MQTT брокер чрез web socket
Web socket се поддържат от Mosquitto (след v1.4), HiveMQ (след v1.4), Mosca (след v0.13.0)
JavaScript имплементация на MQTT клиент с WebSocket се предоставя от open source проекта Paho:
https://www.eclipse.org/paho/clients/js/
Скалиране на MQTT брокери
При високи натоварвания се използва стратегия за създаване на мостове (bridges) между няколко MQTT брокера
По този начин може да се намали броя клиенти свързани към един брокер
Публични MQTT брокери
Server Broker Port Websocket
iot.eclipse.org Mosquitto 1883 / 8883 80 / 443
test.mosquitto.org Mosquitto 1883 / 8883 / 8884 8080 / 8081
test.mosca.io Mosca 1883 80
broker.hivemq.com HiveMQ 1883 8000
broker.mqttdashboard.com HiveMQ 1883 8000
cloudmqtt.com Mosquitto 1xxxx 3xxxx
MQTT клиенти
Paho предоставя имплементации на MQTT клиенти на C/C++, Java, JavaScript, Python and C#
http://www.eclipse.org/paho/
Node.js библиотека за MQTT клиенти:
https://www.npmjs.com/package/mqtt
MQTT библиотека за Arduino:
http://pubsubclient.knolleary.net/
Java
Python
JavaScript
GoLang
C
.Net (C#)
Android service
Embedded C/C++
За JavaScript и Node.js феновете...
Инсталация:
npm install mqtt --save
Пример:
Демо
Demo 1: Total game changer forInternet of Things ;)
Демо 2: Проклятието на демото
Не работи точно, когато ти трябва!
Демо 3: Терминалът
Въпроси?