Страница 4 из 5
Наш сервер MQTT
Добавлено: 02.01.2021{, 16:33}
kramar
возможно потому чтоброкер общается стрингами поэтому каскаду не соединить друг с другом.
на beebotte.com также: делаешь кнопку-булеан, но приходит с брокера on-off, или тру-фолс. А каскада ждет 0-1 именно в числовом значении. а там стринг)))
Отправлено спустя 3 минуты 9 секунд:
щас все новые mqtt брокеры везде продвигают каждый свой api.
а мы то привкли к cloud.mqtt....
Наш сервер MQTT
Добавлено: 02.01.2021{, 16:58}
Anydy
kramar писал(а): ↑02.01.2021{, 16:36}
щас все новые mqtt брокеры везде продвигают каждый свой api.
как это? есть стандарт 3 ....есть 5 как это свой?
Наш сервер MQTT
Добавлено: 02.01.2021{, 17:12}
Rovki
Anydy писал(а): ↑02.01.2021{, 16:25}
Rovki писал(а): ↑27.12.2020{, 13:47}
У меня один аккаунт на яндексе
А что у яндекса есть MQTT брокер?
Я про регистрацию ,а не брокера
Отправлено спустя 5 минут 3 секунды:
А где в семантике топика прописывается пользователь
https://ipc2u.ru/articles/prostye-reshe ... akoe-mqtt/
То же самое касается и выбора метода защиты " Защита передачи данных
Для обеспечения безопасности в MQTT протоколе реализованы следующие методы защиты:
Аутентификация клиентов. Пакет CONNECT может содержать в себе поля USERNAME и PASSWORD. При реализации брокера можно использовать эти поля для аутентификации клиента
Контроль доступа клиентов через Client ID
Подключение к брокеру через TLS/SSL"
Отправлено спустя 6 минут 51 секунду:
kramar писал(а): ↑02.01.2021{, 16:36}
возможно потому чтоброкер общается стрингами поэтому каскаду не соединить друг с другом.
на beebotte.com также: делаешь кнопку-булеан, но приходит с брокера on-off, или тру-фолс. А каскада ждет 0-1 именно в числовом значении. а там стринг)))
Отправлено спустя 3 минуты 9 секунд:
щас все новые mqtt брокеры везде продвигают каждый свой api.
а мы то привкли к cloud.mqtt....
так вроде пробовали работу каскады с есп через beebotte.com , работает ... А через наш брокер , ни как ,странно...ФЛпрог поддерживает каскаду , а брокер нет ...,значит он не совсем наш,имхо
Наш сервер MQTT
Добавлено: 02.01.2021{, 17:47}
Anydy
я про то что яндекс никаким боком к нам не относится....регистрация и аутентификация только на нашем сервере --- а вот с проблемами нужно обращаться к его создателю))))
Наш сервер MQTT
Добавлено: 02.01.2021{, 17:58}
Rovki
Anydy писал(а): ↑02.01.2021{, 17:47}
я про то что яндекс никаким боком к нам не относится....регистрация и аутентификация только на нашем сервере --- а вот с проблемами нужно обращаться к его создателю))))
Так я вроде описал проблему в соответствующей ветке ... или что еще нужно для обращения к создателю ?
Наш сервер MQTT
Добавлено: 02.01.2021{, 18:27}
Evgesha
С нашим сервером связка с каскада работала, приема правда не добился
viewtopic.php?f=112&t=4141&p=94269&hili ... 800#p94269
Тут описывал
Наш сервер MQTT
Добавлено: 02.01.2021{, 18:38}
Rovki
Спасибо ,гляну
Отправлено спустя 20 минут 3 секунды:
Вы наверное про сим800?. В каскаде же у вас работает и издатель и подписчик (сам на себя)
Странно только как то ,с защитой (логин ,пароль) - запустил ваш проект,с вашем именем и паролем и работает!!!
Отправлено спустя 39 минут 44 секунды:
Как делать со стороны каскады понятно , осталось понять какие блоки мктт использовать для есп лучше
Наш сервер MQTT
Добавлено: 02.01.2021{, 20:18}
kramar
Rovki писал(а): ↑02.01.2021{, 19:37}
работу каскады с есп через beebotte.com , работает ..
так там вроде с брокером работала есп а не каскада.
Наш сервер MQTT
Добавлено: 02.01.2021{, 20:51}
Rovki
kramar писал(а): ↑02.01.2021{, 20:18}
Rovki писал(а): ↑02.01.2021{, 19:37}
работу каскады с есп через beebotte.com , работает ..
так там вроде с брокером работала есп а не каскада.
C брокером всегда работают и издатель и подписчик . В том посте шел разговор про работу сим800 и каскада ,вроде
Отправлено спустя 2 минуты 28 секунд:
Нужно что бы блоки могли работать с разными типами данных в сообщениях Даже если брокер работает только со стрингом ,то блок должен внутри себя делать эти преобразования ,имхо , было бы замечательно
Наш сервер MQTT
Добавлено: 03.01.2021{, 10:31}
Rovki
Похоже примеров работы с данным брокером нет на ФЛ
Меня интересует работа между любым приложением и есп
Наш сервер MQTT
Добавлено: 03.01.2021{, 10:53}
Anydy
Вот набросок делал -- там есть функции преобразования ....пробуйте ... надеюсь блок создать с одним маленьким преобразованием не проблема?
Код: Выделить всё
/**************************************************************
*
* For this example, you need to install PubSubClient library:
* https://github.com/knolleary/pubsubclient/releases/latest
* or from http://librarymanager/all#PubSubClient
*
* TinyGSM Getting Started guide:
* http://tiny.cc/tiny-gsm-readme
*
**************************************************************
* Use Mosquitto client tools to work with MQTT
* Ubuntu/Linux: sudo apt-get install mosquitto-clients
* Windows: https://mosquitto.org/download/
*
* Subscribe for messages:
* mosquitto_sub -h test.mosquitto.org -t GsmClientTest/init -t GsmClientTest/ledStatus -q 1
* Toggle led:
* mosquitto_pub -h test.mosquitto.org -t GsmClientTest/led -q 1 -m "toggle"
*
* You can use Node-RED for wiring together MQTT-enabled devices
* https://nodered.org/
* Also, take a look at these additional Node-RED modules:
* node-red-contrib-blynk-websockets
* node-red-dashboard
*
**************************************************************/
// Select your modem:
#define TINY_GSM_MODEM_SIM800
//#define TINY_GSM_MODEM_SIM900
//#define TINY_GSM_MODEM_A6
//#define TINY_GSM_MODEM_M590
#define ONE_WIRE_BUS 9
#include <TinyGsmClient.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
String MQTT_inputtext; //сообщение
// Your GPRS credentials
// Leave empty, if missing user or pass
int counter = 0;
const char apn[] = "internet.tele2.ru";
const char user[] = "";
const char pass[] = "";
const char cluser[] = "gmnSMc2uDHIjO8CCvf2IeY9UFtT4i0F8";
const char clpass[] = "";
const char clid[] = "fadaf737bb3e4b1f3a09878471b";
// Use Hardware Serial on Mega, Leonardo, Micro
//#define SerialAT Serial1
// or Software Serial on Uno, Nano
#include <SoftwareSerial.h>
SoftwareSerial SerialAT(7, 8); // RX, TX
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
PubSubClient mqtt(client);
const char* broker = "mqtt.beebotte.com";
const char* topicLed = "Led";
const char* topicInit = "Init";
const char* topicLedStatus = "LedStatus";
const char* temperature = "Temp/Data";
#define LED_PIN1 13
#define LED_PIN2 12
char* ledStatus1 ="Reset1";
char* ledStatus2 ="Reset2";
long lastReconnectAttempt = 0;
const long interval = 30000;
unsigned long previousMillis = 0;
char tempchar[6];
float temp;
void setup() {
sensors.begin();
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
// Set console baud rate
Serial.begin(115200);
delay(10);
// Set GSM module baud rate
SerialAT.begin(19200);
delay(3000);
// Restart takes quite some time
// To skip it, call init() instead of restart()
Serial.println("Initializing modem...");
modem.restart();
// Unlock your SIM card with a PIN
//modem.simUnlock("1234");
Serial.print("Waiting for network...");
if (!modem.waitForNetwork()) {
Serial.println(" fail");
while (true);
}
Serial.println(" OK");
Serial.print("Connecting to ");
Serial.print(apn);
if (!modem.gprsConnect(apn, user, pass)) {
Serial.println(" fail");
while (true);
}
Serial.println(" OK");
// MQTT Broker setup
mqtt.setServer(broker, 1883);
mqtt.setCallback(mqttCallback);
}
boolean mqttConnect() {
Serial.print("Connecting to ");
Serial.print(broker);
if (!mqtt.connect(clid, cluser, clpass)) {
Serial.println(" fail");
return false;
}
Serial.println(" OK");
mqtt.publish(topicInit, "GsmClient started");
mqtt.subscribe(topicLed);
return mqtt.connected();
}
void loop() {
if (mqtt.connected()) {
mqtt.loop();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
dtostrf(temp, 3, 2, tempchar);//преобразуем float - char
String payload = "{\"data\":";
payload += tempchar;
payload += ",\"write\":true";
//payload += counter;
payload += "}";
Serial.println(payload);
mqtt.publish(temperature, (char*) payload.c_str());
}
} else {
// Reconnect every 10 seconds
unsigned long t = millis();
if (t - lastReconnectAttempt > 10000L) {
lastReconnectAttempt = t;
}
if (mqttConnect()) {
lastReconnectAttempt = 0;
}
else if (!modem.gprsConnect(apn, user, pass)) {
while (true);
}
}
}
void mqttCallback(char* topic, byte* payload, unsigned int len) {
MQTT_inputtext = "";
for (int i=0;i<len;i++) {
MQTT_inputtext += (char)payload[i]; // составляем строку из байтов, которая пришла в параметрах топика
}
if (String(topic) == topicLed) {
if ((MQTT_inputtext) == "1on" ) {
digitalWrite(LED_PIN1, HIGH);
ledStatus1 = "Led 1 On";
mqtt.publish(topicLedStatus, ledStatus1 );
}
if ((MQTT_inputtext) == "1off" ) {
digitalWrite(LED_PIN1, LOW);
ledStatus1 = "Led 1 Off";
mqtt.publish(topicLedStatus, ledStatus1 );
}
//----------------------
if ((MQTT_inputtext) == "2on" ) {
digitalWrite(LED_PIN2, HIGH);
ledStatus2 = "Led 2 On";
mqtt.publish(topicLedStatus, ledStatus2 );
}
if ((MQTT_inputtext) == "2off" ) {
digitalWrite(LED_PIN2, LOW);
ledStatus2 = "Led 2 Off";
mqtt.publish(topicLedStatus, ledStatus2 );
}
//------------------
if ((MQTT_inputtext) == "stat" ) {
mqtt.publish(topicLedStatus, ledStatus1);
mqtt.publish(topicLedStatus, ledStatus2);
}
}
}
Наш сервер MQTT
Добавлено: 03.01.2021{, 12:00}
Rovki
Anydy писал(а): ↑03.01.2021{, 10:53}
Вот набросок делал -- там есть функции преобразования ....пробуйте ... надеюсь блок создать с одним маленьким преобразованием не проблема?
Код: Выделить всё
/**************************************************************
*
* For this example, you need to install PubSubClient library:
* https://github.com/knolleary/pubsubclient/releases/latest
* or from http://librarymanager/all#PubSubClient
*
* TinyGSM Getting Started guide:
* http://tiny.cc/tiny-gsm-readme
*
**************************************************************
* Use Mosquitto client tools to work with MQTT
* Ubuntu/Linux: sudo apt-get install mosquitto-clients
* Windows: https://mosquitto.org/download/
*
* Subscribe for messages:
* mosquitto_sub -h test.mosquitto.org -t GsmClientTest/init -t GsmClientTest/ledStatus -q 1
* Toggle led:
* mosquitto_pub -h test.mosquitto.org -t GsmClientTest/led -q 1 -m "toggle"
*
* You can use Node-RED for wiring together MQTT-enabled devices
* https://nodered.org/
* Also, take a look at these additional Node-RED modules:
* node-red-contrib-blynk-websockets
* node-red-dashboard
*
**************************************************************/
// Select your modem:
#define TINY_GSM_MODEM_SIM800
//#define TINY_GSM_MODEM_SIM900
//#define TINY_GSM_MODEM_A6
//#define TINY_GSM_MODEM_M590
#define ONE_WIRE_BUS 9
#include <TinyGsmClient.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
String MQTT_inputtext; //сообщение
// Your GPRS credentials
// Leave empty, if missing user or pass
int counter = 0;
const char apn[] = "internet.tele2.ru";
const char user[] = "";
const char pass[] = "";
const char cluser[] = "gmnSMc2uDHIjO8CCvf2IeY9UFtT4i0F8";
const char clpass[] = "";
const char clid[] = "fadaf737bb3e4b1f3a09878471b";
// Use Hardware Serial on Mega, Leonardo, Micro
//#define SerialAT Serial1
// or Software Serial on Uno, Nano
#include <SoftwareSerial.h>
SoftwareSerial SerialAT(7, 8); // RX, TX
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
PubSubClient mqtt(client);
const char* broker = "mqtt.beebotte.com";
const char* topicLed = "Led";
const char* topicInit = "Init";
const char* topicLedStatus = "LedStatus";
const char* temperature = "Temp/Data";
#define LED_PIN1 13
#define LED_PIN2 12
char* ledStatus1 ="Reset1";
char* ledStatus2 ="Reset2";
long lastReconnectAttempt = 0;
const long interval = 30000;
unsigned long previousMillis = 0;
char tempchar[6];
float temp;
void setup() {
sensors.begin();
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
// Set console baud rate
Serial.begin(115200);
delay(10);
// Set GSM module baud rate
SerialAT.begin(19200);
delay(3000);
// Restart takes quite some time
// To skip it, call init() instead of restart()
Serial.println("Initializing modem...");
modem.restart();
// Unlock your SIM card with a PIN
//modem.simUnlock("1234");
Serial.print("Waiting for network...");
if (!modem.waitForNetwork()) {
Serial.println(" fail");
while (true);
}
Serial.println(" OK");
Serial.print("Connecting to ");
Serial.print(apn);
if (!modem.gprsConnect(apn, user, pass)) {
Serial.println(" fail");
while (true);
}
Serial.println(" OK");
// MQTT Broker setup
mqtt.setServer(broker, 1883);
mqtt.setCallback(mqttCallback);
}
boolean mqttConnect() {
Serial.print("Connecting to ");
Serial.print(broker);
if (!mqtt.connect(clid, cluser, clpass)) {
Serial.println(" fail");
return false;
}
Serial.println(" OK");
mqtt.publish(topicInit, "GsmClient started");
mqtt.subscribe(topicLed);
return mqtt.connected();
}
void loop() {
if (mqtt.connected()) {
mqtt.loop();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
dtostrf(temp, 3, 2, tempchar);//преобразуем float - char
String payload = "{\"data\":";
payload += tempchar;
payload += ",\"write\":true";
//payload += counter;
payload += "}";
Serial.println(payload);
mqtt.publish(temperature, (char*) payload.c_str());
}
} else {
// Reconnect every 10 seconds
unsigned long t = millis();
if (t - lastReconnectAttempt > 10000L) {
lastReconnectAttempt = t;
}
if (mqttConnect()) {
lastReconnectAttempt = 0;
}
else if (!modem.gprsConnect(apn, user, pass)) {
while (true);
}
}
}
void mqttCallback(char* topic, byte* payload, unsigned int len) {
MQTT_inputtext = "";
for (int i=0;i<len;i++) {
MQTT_inputtext += (char)payload[i]; // составляем строку из байтов, которая пришла в параметрах топика
}
if (String(topic) == topicLed) {
if ((MQTT_inputtext) == "1on" ) {
digitalWrite(LED_PIN1, HIGH);
ledStatus1 = "Led 1 On";
mqtt.publish(topicLedStatus, ledStatus1 );
}
if ((MQTT_inputtext) == "1off" ) {
digitalWrite(LED_PIN1, LOW);
ledStatus1 = "Led 1 Off";
mqtt.publish(topicLedStatus, ledStatus1 );
}
//----------------------
if ((MQTT_inputtext) == "2on" ) {
digitalWrite(LED_PIN2, HIGH);
ledStatus2 = "Led 2 On";
mqtt.publish(topicLedStatus, ledStatus2 );
}
if ((MQTT_inputtext) == "2off" ) {
digitalWrite(LED_PIN2, LOW);
ledStatus2 = "Led 2 Off";
mqtt.publish(topicLedStatus, ledStatus2 );
}
//------------------
if ((MQTT_inputtext) == "stat" ) {
mqtt.publish(topicLedStatus, ledStatus1);
mqtt.publish(topicLedStatus, ledStatus2);
}
}
}
Да преобразования типов я уже сделал ...с помощью блоков Анатолия из Сургута . И прием данных из каскады(издатель) в есп(подписчик) сделал. А вот передача (издатель) есп и подписчик каскада ни как не идет .
Наш сервер MQTT
Добавлено: 04.01.2021{, 23:48}
kramar
Rovki писал(а): ↑03.01.2021{, 12:00}
передача (издатель) есп и подписчик каскада никак не идет
и не пойдет: там же стринг с брокера выходит.
цифры, но в стринге!
а каскада не работает со стрингами.
Наш сервер MQTT
Добавлено: 04.01.2021{, 23:54}
Rovki
kramar писал(а): ↑04.01.2021{, 23:48}
Rovki писал(а): ↑03.01.2021{, 12:00}
передача (издатель) есп и подписчик каскада никак не идет
и не пойдет: там же стринг с брокера выходит.
цифры, но в стринге!
а каскада не работает со стрингами.
Вы ошибаетесь ,в блоках MQTT каскады все конвертации стрингов делаются внутри . Нужно только отправлять(принимать) значения boolean ,int, float в есп через штатный конвертер строк SConv
Уже разобрался с издателем в есп ,все работает ,снял видео , через два брокера
Наш сервер MQTT
Добавлено: 02.06.2021{, 07:17}
brig62
Работает сервер? Пробую отправить и получить данные. Подключение к серверу вроде бы проходит. А топики нет. Или к нему исключительно через MQTT Explorer можно подключиться? Можно пример топика для отправки и получения?
Сейчас пытаюсь протестировать серез MQTT.fx Version 1.7.1
Наш сервер MQTT
Добавлено: 02.06.2021{, 13:40}
zhulen820
Сервер работает. В топике первым идёт Ваш логин. Например логин при регистрации : trs. ,Значит топик будет trs/..... , А после косой черты уже Ваши значения. Любой программой подключаюсь без проблем
Наш сервер MQTT
Добавлено: 02.06.2021{, 17:50}
brig62
Подключаться я тоже подключаюсь. Посылаю Brig62/test/1 Его же и получить пытаюсь. Порт 1883. И с паролем пробовал. И без.
- 2021-06-02_17-48-59.png (11.08 КБ) 921 просмотр
Наш сервер MQTT
Добавлено: 02.06.2021{, 18:24}
zhulen820
Может дело в заглавной букве, логин из букв какого регистра?
Наш сервер MQTT
Добавлено: 02.06.2021{, 19:05}
brig62
Попробовал с прописной. То же самое
Наш сервер MQTT
Добавлено: 04.06.2021{, 07:21}
brig62
Работает))