• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

mqtt как он в обще работает

Melanolik

New member
Народ, конечно понимаю что звучит глупо, но все же хочу понять как эта штука работает.

В сети вижу различные broker которые работают с mqtt.
Но как выглядит в логической схеме это все?

Заливаем скетч на nodemcu c ds18b20 к примеру.
Заливаем скрипт для подключения к wifi
Заливаем скрипт где происходит обработка и отправка данных по протоколу mqtt на сервер.

Не понимаю как перевязываются вот эти файлы с mqtt
nodemcu-firmware/ds18b20.lua at master · nodemcu/nodemcu-firmware · GitHub
 

guinpin

New member
Но как выглядит в логической схеме это все?
Заливаем скрипт где происходит обработка и отправка данных по протоколу mqtt на сервер.
Не понимаю как перевязываются вот эти файлы с mqtt
Вполне очевидно, что вы должны взять данные с термометра и отправить их брокеру.
Если вы заливаете "скрипт где происходит обработка и отправка данных", будет логично предположить, что вы знаете, что именно этот скрипт делает. Если нет, тогда начните изыскания именно с этого.
mqtt, это протокол, обеспечивающий доставку сообщений подписчикам. Откуда берутся данные и в какой "раздел" их отправлять ему пофигу.
Ваш вопрос слишком размытый. Если хотите помощи, давате больше конкретики - что хотите сделать, как именно и что не получается.
 

nikolz

Well-known member
Народ, конечно понимаю что звучит глупо, но все же хочу понять как эта штука работает.

В сети вижу различные broker которые работают с mqtt.
Но как выглядит в логической схеме это все?

Заливаем скетч на nodemcu c ds18b20 к примеру.
Заливаем скрипт для подключения к wifi
Заливаем скрипт где происходит обработка и отправка данных по протоколу mqtt на сервер.

Не понимаю как перевязываются вот эти файлы с mqtt
nodemcu-firmware/ds18b20.lua at master · nodemcu/nodemcu-firmware · GitHub
-----------------
Чтобы ответить Вам на вопрос "Почему Вы не понимаете как перевязываются эти файлы"
желательно знать что же Вы знаете в этой области знаний.
-----------------------------------------------------------------------
Полагаю, что лишь лень не позволяет Вам найти ответ на Ваш вопрос в интернете.
Но возможно, что ошибаюсь, кроме лени есть еще какие-то причины.
 

Archii

New member
Дабы не создавать новые темы, да может и помогут сопутствующие ответы автору данной темы, хочу продолжить разбор полетов по MQTT mosquitto. Есть ESP NodeMCU V3.
В ARDUINO IDE при установке библиотеки (BubSubClient) в примерах есть скетч для ESP. С отправкой брокеру сообщений от ESP ввиде переменных и дальнешей их обработкой вопросов нет.
В скетче для ESP мы подписывается на топик (например для переключения реле). Есп исправно передпет в ком порт информацию, о том, что по подписке на "InTopic" принято сообщение XXXX ну или 1 или 0 для реле (допустим от mqttSPY).
Вопрос: Как конкретно это значение XXXX присвоить параметру для дальнейшей работы с ним. Т.е. там есть конструкция for, которая посимвольно выводит в Serial.print это значение. Например на ESP две релюхи и в скетче оформлена подписка на InTopc/relay1 и InTopc/relay2. Как присвоить значение relay1 и relay2?
Вот пример отправки сообщения:
Код:
client.publish(LightSensorData, String(lightSensor).c_str(), true);
client.publish(PIR_topic, String(val).c_str(), true);
Помогите с конструкцией сборки (получения) сообщения.
 

Сергей_Ф

Moderator
Команда форума
@Archii можете разобрать ответ с помощью strtok, например. Дальше либо сравниваете строки, либо копируете их куда надо. Если только цифры 0 и 1 нужны, то всё проще некуда, можете сами разобрать строку. И присвоить значение принятого символа минус символ '0'.
Код:
relay1 = charFromMQTT-'0';
Код:
  void mqttMessageReceiver(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0'; // добавляем нормальный конец строки в payload

  char *args[7];
  byte i = 0;
  args[i] = strtok(topic, "/");
  do {  args[++i] = strtok(NULL, " /");
     } while (args[i] != NULL);
   fromMqttMessage.code = strtoul((char *)payload , NULL, 10);           // возвращаем в ответ код карты
   fromMqttMessage.way =  strcmp(args[2], eepromData.camera[wayIn] ) ? strcmp(args[2], eepromData.camera[wayOut] ) ? noWay : wayOut : wayIn;

  if ( topic[0] == REQUEST_Verification ) { // verification respond
     fromMqttMessage.req = args[4][0];                     // возвращаем результат проверки (s=success, t=timeout, u=unknown key)

      DEBUG_LEVEL(FULL) { Serial.printf(F("%s:"), args[4]); }

      }

}
 
Последнее редактирование:
Сверху Снизу