Презентация от БургасКонф 2016 на тема: "Как Internet of Things си говорят чрез MQTT и софтуер с отворен код?"
Темата включва общи разсъждения за Internet of Things, информация за протокола MQTT, open source имплементации на MQTT брокери и библиотеки за създаване на MQTT клиенти.
Как Internet of Things си говорят чрез MQTT и софтуер с отворен код?
1. Как Internet of Things си
говорят чрез MQTT и софтуер с
отворен код?
Леон Анави
leon.anavi@konsulko.com
leon@anavi.org
2. Меню за деня
Общи приказки за Internet of Things
Суха теория за протокола MQTT
Open source MQTT брокери и клиенти
Неуспешни демонстрации
За десерт: трудни въпроси
4. Предизвикателства за IoT
Комуникация в реално време
Консумация и работа на батерии
Ниска цена за производство
Софтуер, който да е съвместим с устройства с
ограничен хардуер
6. MQTT
MQTT е съкращение от MQ Telemetry Transport
Съществува от 1999г
От 2013г започва процедура по създаване на
стандарт към международния консорциум с
нестопанска дейност OASIS
7. MQTT
Лек протокол от типа publish/subscribe за
комуникация между машини, изграден върху
TCP/IP
Комуникация в реално време
Брокер, който да разпределя съобщенията
между клиентите
Лесна имплементация и съществуващи open
source библиотеки на много програмни езици
8. OSI Модел
7. Приложен слой
MQTT, HTTP, SMTP, SSH, Telnet и други
6. Представителен слой
TSL, SSL и други
5. Сесиен слой
4. Транспортен слой
TCP, UDP и други
3. Мрежов слой
IP, ICMP, IGPM и други
2. Канален слой
1. Физически слой
9. MQTT TCP/IP портове
Порт 1883 е резервиран за MQTT
Порт 8883 е резервиран за MQTT върху SSL
10. MQTT
MQTT клиенти – софтуерни приложения, които
се свързват към MQTT брокер. Могат да
изпращат и да получават съобщения.
MQTT брокер – софтуер, които се изпълнява
като демон и се грижи за разпределянето на
съобщенията между клиентите.
12. Пример
MQTT
Broker
PC
(MQTT client)
Smart Phone
(MQTT client)
Sensor
(MQTT client)
Publish
Subscribe
Publish
Publish
Subscribe
MQTT клиент се свързва с брокер и се абонира за
дадена тема
Данни от сензор се изпращат по MQTT и брокерът
ги доставя до заинтересуваните клиенти
14. MQTT Quality of Service (QoS)
0 – съобщението ще бъде доставено най-
много веднъж
1 – съобщението ще бъде доставено поне
веднъж
2 – съобщението ще бъде доставено точно
един единствен път
15. MQTT заглавия
Примерно заглавие
home / kitchen / temperature
Wildcards на едно ниво
home / + / temperature
Wildcards на много нива
home / #
16. Last Will & Testament (LWT)
Завещание от МQTT клиент, което другите
заинтересувани MQTT клиенти получават, ако
връзката със завещаващия бъде прекъсната
неочаквано.
17. MQTT Сигурност
Възможност за криптиране на предаваните
данни с TLS/SSL
Автентификация с потребителско име и
парола
Авторизация с Access Control Lists (ACL)
19. MQTT брокери с отворен код
Mosquitto
HiveMQ
Mosca
emqttd
VerneMQ
ActiveMQ
20. 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
21. 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/
22. Скалиране на MQTT брокери
При високи натоварвания се използва
стратегия за създаване на мостове (bridges)
между няколко MQTT брокера
По този начин може да се намали броя
клиенти свързани към един брокер
24. 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/
25. Java
Python
JavaScript
GoLang
C
.Net (C#)
Android service
Embedded C/C++
26. За JavaScript и Node.js феновете...
Инсталация:
npm install mqtt --save
Пример: