Как подключить устройства и программы к MQTT-брокеру сервиса.
1. Зарегистрируйтесь — /register.
2. Сохраните MQTT-логин и пароль (показываются один раз).
3. Подключите устройство по параметрам ниже и шлите сообщения в свой топик.
| Параметр | Значение |
|---|---|
| Хост | IP машины с сервисом (в локальной сети) или localhost |
| Порт MQTT (TCP) | 1883 |
| Порт MQTTS (TLS) | 8883 |
| Порт WebSocket | 8083 |
| Порт WSS (TLS WebSocket) | 8084 |
| Логин | mqtt_username из регистрации (вида u_XXXX) |
| Пароль | mqtt_password из регистрации |
| Топики | devices/<логин>/... — ваше пространство имён |
devices/<логин>/# (чтение и запись). Внутри него можно
использовать любые вложенные топики, например
devices/<логин>/sensor1/temp.
Подходит для серверов, Raspberry Pi, настольных программ.
pip install paho-mqtt
import paho.mqtt.client as mqtt
import time
HOST = "192.168.0.105" # IP машины с сервисом
PORT = 1883
USER = "u_XXXXXXXX" # ваш mqtt_username
PASS = "XXXXXXXX" # ваш mqtt_password
TOPIC = f"devices/{USER}/test"
def on_connect(client, userdata, flags, reason_code, properties=None):
print("Подключено, код:", reason_code)
client.subscribe(TOPIC)
def on_message(client, userdata, msg):
print(f"{msg.topic}: {msg.payload.decode()}")
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(USER, PASS)
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT, keepalive=60)
client.loop_start()
client.publish(TOPIC, "hello from python", qos=1)
time.sleep(3)
client.loop_stop()
Для ESP32/ESP8266/Raspberry Pi Pico с прошивкой MicroPython.
import network
import time
from umqtt.simple import MQTTClient
# Подключаемся к WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ВАШ_WIFI", "ПАРОЛЬ_WIFI")
while not wlan.isconnected():
time.sleep(0.5)
print("WiFi OK")
HOST = "192.168.0.105"
USER = "u_XXXXXXXX"
PASS = "XXXXXXXX"
TOPIC = "devices/{}/test".format(USER)
client = MQTTClient("my_device", HOST, port=1883, user=USER, password=PASS)
client.connect()
client.publish(TOPIC, "hello from micropython")
client.disconnect()
Для Arduino Uno/Mega с Ethernet-шилдом (W5100/W5500).
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress server(192, 168, 0, 105); // IP сервиса
EthernetClient eth;
PubSubClient client(eth);
const char* USER = "u_XXXXXXXX";
const char* PASS = "XXXXXXXX";
String topic = String("devices/") + USER + "/test";
void setup() {
Ethernet.begin(mac);
delay(1000);
client.setServer(server, 1883);
if (client.connect("arduino", USER, PASS)) {
client.publish(topic.c_str(), "hello from arduino");
}
}
void loop() {
client.loop();
}
Для ESP32 в Arduino IDE: установите библиотеку PubSubClient
через менеджер библиотек.
#include <WiFi.h>
#include <PubSubClient.h>
const char* WIFI_SSID = "ВАШ_WIFI";
const char* WIFI_PASS = "ПАРОЛЬ_WIFI";
const char* HOST = "192.168.0.105";
const char* USER = "u_XXXXXXXX";
const char* PASS = "XXXXXXXX";
String TOPIC = String("devices/") + USER + "/test";
WiFiClient wifi;
PubSubClient client(wifi);
void reconnect() {
while (!client.connected()) {
if (client.connect("esp32", USER, PASS)) {
client.subscribe(TOPIC.c_str());
} else {
delay(3000);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println("WiFi OK");
client.setServer(HOST, 1883);
if (client.connect("esp32", USER, PASS)) {
client.publish(TOPIC.c_str(), "hello from esp32");
}
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
}
sudo apt install mosquitto-clients
# подписка
mosquitto_sub -h 192.168.0.105 -p 1883 -u u_XXXXXXXX -P XXXXXXXX \
-t 'devices/u_XXXXXXXX/test' -v
# публикация
mosquitto_pub -h 192.168.0.105 -p 1883 -u u_XXXXXXXX -P XXXXXXXX \
-t 'devices/u_XXXXXXXX/test' -m 'hello'
Сертификаты выпущены и лежат в mosquitto/certs/:
ca.crt, server.crt, server.key.
Клиентам для защищённого подключения нужен CA-сертификат
(ca.crt) — им проверяется подлинность брокера.
# публикация по MQTTS (порт 8883)
mosquitto_pub -h 192.168.0.105 -p 8883 \
--cafile /путь/до/ca.crt \
-u u_XXXXXXXX -P XXXXXXXX \
-t 'devices/u_XXXXXXXX/test' -m 'hello over tls'
import paho.mqtt.client as mqtt
HOST = "192.168.0.105"
PORT = 8883
USER = "u_XXXXXXXX"
PASS = "XXXXXXXX"
CA_CERT = "/путь/до/ca.crt" # файл из mosquitto/certs/
TOPIC = f"devices/{USER}/test"
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(USER, PASS)
client.tls_set(ca_certs=CA_CERT)
client.connect(HOST, PORT, keepalive=60)
client.publish(TOPIC, "hello over tls", qos=1)
client.loop(2)
from umqtt.simple import MQTTClient
HOST = "192.168.0.105"
USER = "u_XXXXXXXX"
PASS = "XXXXXXXX"
TOPIC = "devices/{}/test".format(USER)
# ssl=True включает TLS. Настройка проверки CA зависит от порта
# MicroPython (см. документацию вашей прошивки).
client = MQTTClient("my_device", HOST, port=8883,
user=USER, password=PASS, ssl=True)
client.connect()
client.publish(TOPIC, "hello over tls")
client.disconnect()
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
const char* WIFI_SSID = "ВАШ_WIFI";
const char* WIFI_PASS = "ПАРОЛЬ_WIFI";
const char* HOST = "192.168.0.105";
const uint16_t PORT = 8883;
const char* USER = "u_XXXXXXXX";
const char* PASS = "XXXXXXXX";
String TOPIC = String("devices/") + USER + "/test";
// Вставьте сюда содержимое файла mosquitto/certs/ca.crt
const char* CA_CERT = R"EOF(
-----BEGIN CERTIFICATE-----
...сюда содержимое ca.crt...
-----END CERTIFICATE-----
)EOF";
WiFiClientSecure wifi;
PubSubClient client(wifi);
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
wifi.setCACert(CA_CERT); // доверяем только нашему CA
client.setServer(HOST, PORT);
if (client.connect("esp32", USER, PASS)) {
client.publish(TOPIC.c_str(), "hello over tls");
}
}
void loop() {
client.loop();
}
| Тариф | Устройства | Сообщений/день | Хранение |
|---|---|---|---|
| Free | 1 | 1 000 | 7 дней |
| Pro | 10 | 100 000 | 90 дней |
| Business | 100 | 1 000 000 | 365 дней |
| Симптом | Причина |
|---|---|
Connection Refused: not authorised |
Неверный логин/пароль либо истёк тариф |
Connection refused (нет ответа) |
Брокер недоступен: не запущен, неверный хост или порт |
Когда у тарифа задан срок действия (plan_expires_at) и он в
прошлом, брокер отклоняет новые MQTT-подключения
(not authorised). Устройства перестают подключаться до
продления тарифа.
При попытке добавить устройство сверх лимита тарифа API возвращает
403 с ошибкой device limit reached — новое
устройство не создаётся, пока не освободится место или не повышен тариф.
Счётчик опубликованных сообщений ведётся в таблице
usage_daily и показывается в кабинете (расход).
Жёсткая блокировка публикации сверх дневного лимита — на следующих
этапах.
| Код | Когда |
|---|---|
400 |
Не переданы email/пароль |
401 |
Неверные креды или нет токена |
409 |
Email уже зарегистрирован |
404 |
Пользователь не найден |
500 |
Внутренняя ошибка сервера |
403),
учёт сообщений (счётчик в кабинете). Блокировка лимита сообщений — на
следующих этапах.