Альтернатива Blynk.
примерно такой тест я проводил. Переподключение происходит примерно через минуту и в последующем все работает без вмешательста. правда не помню как ведет себя во время переподключения основная программа.
К сожалению у меня и через 5 минут не стартанула основная программа. Согласен что тут либо самим на базе команд MQTT делать библиотеку либо ковырять родную. Вариантов нет. Проблема сидит именно в библиотеке CayenneMQTT... она гасит wifipvorobei писал(а): ↑20.02.2019{, 23:27}Timmy101,примерно такой тест я проводил. Переподключение происходит примерно через минуту и в последующем все работает без вмешательста. правда не помню как ведет себя во время переподключения основная программа.
Думается мне чтоб нае..ать судьбу нужно таки курить их форум и копать библу. Но это не точно.
pvorobei писал(а): ↑20.02.2019{, 23:27}Timmy101,примерно такой тест я проводил. Переподключение происходит примерно через минуту и в последующем все работает без вмешательста. правда не помню как ведет себя во время переподключения основная программа.
Думается мне чтоб нае..ать судьбу нужно таки курить их форум и копать библу. Но это не точно.
Надо как-то побольше людей привлечь к проблеме. Меня из всех бесплтных сервисов IOT для ESP Cayenne устраивает больше всех. Конечно есть что хотелось бы еще, но и на этом спасибо.
Добрый день.
KaScada писал(а): ↑25.02.2019{, 16:50}Добрый день.
У нас есть своё облако, но пока под преобразователи протоколов USR\RAK, можно еще подключить КаСкаду как slave и датчик температуры ODTEMP(OPEN DEV).
Так же у пользователей есть возможность из КаСкады выгружать данные к нам на сервер и хранить их.
Что касается ESP, то мы разговаривали с Сергеем о добавлении этой функции и она у нас есть в будущем в любом случае.
Rovki писал(а): ↑25.02.2019{, 17:08}Вся надежда на автора Сергея ,но он куда то пропал с форума (заработался) .Нужно по аналогии с ремоут ху сделать для Kascada cloud , как сделали ребята с датчиком температуры odtemp-2 - у них ESP соединяется с нашим облаком и все летает без зависаний ...Но они пишут код на микро питоне (вроде).
Сергей обешал еще до нового года ,но мы все же ждем и надеемся
В точку.
Rovki писал(а): ↑25.02.2019{, 20:39}Можно без двух HMI через облако ,но пока только если это модули вайфай или езернет от команий RAK или USR у них все нужные настройки делаются через их веб страницу ... и они работают как прозрачные мосты.
Если не получится с флпрог (Сергей не сделает) ,то сами сделаем прошивку ESP - прозрачныйй мост+ настройки для Kascada cloud .
Актуальное пожелание для пользователей FLProg
Anydy писал(а): ↑26.02.2019{, 23:26}А если написать в loop (отдельно от основного цикла) - - if mqtt connected - выполняем отправку данных ....else -иначе продолжает выполнятся основная программа ( на орфографию не смотрите...это пример)
Ребята, начинайте уже изучать язык (диалект) Wirning это намного проще языка C++
А мне кажется нужно действовать вот так (Почти как вы написали )pvorobei писал(а): ↑27.02.2019{, 10:10}Timmy101,
По поводу зависания - есть идея, но на это нужно время поковыряться в библиотеке. Здесь Anydy, мыслит в верном направлении, мне кажется, работать нужно примерно так - каждые n сек проверка подключения если нет - вызываем reconnect. Если соединение есть - запускаем cayenne.loop. Это не избавит от мелких подвисаний во время реконекта, но, должно помочь с зависанием наглухо.
Со временем сейчас напряг, как появится - попробую побороть.
Но если у кого-то есть время и желание.
Вот нашёл на вскидку решение аналогичной проблемы с blynk.
https://electronic-crafts.blogspot.com/ ... t.html?m=1
Можно попробовать по аналогии запилить.
Код: Выделить всё
#include <ESP8266WiFi.h>
#include <CayenneMQTTESP8266.h>
extern "C" {
#include "user_interface.h";
}
char username[] = "USERNAME_MQTT" ;
char password[] = "PASS_MQTT" ;
char clientID[] = "APKEY_MQTT" ;
int in_230823610_1;
bool ESP8266ControllerWifiClient_HRD = 0;
bool ESP8266ControllerWifiClient_status = 1;
bool ESP8266ControllerWifiClient_isDHCP = 1;
bool ESP8266ControllerWifiClient_IsNeedReconect = 0;
bool ESP8266ControllerWifiClient_workStatus = 1;
char ESP8266ControllerWifiClient_SSID[40] = "TEST";
char ESP8266ControllerWifiClient_password[40] = "123456789";
IPAddress ESP8266ControllerWifiClient_ip(0, 0, 0, 0);
IPAddress ESP8266ControllerWifiClient_dns (0, 0, 0, 1);
IPAddress ESP8266ControllerWifiClient_gateway (0, 0, 0, 1);
IPAddress ESP8266ControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESP8266ControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
int _gtv1 = 25; //Temp
void setup()
{
WiFi.mode(WIFI_STA);
_esp8266WifiModuleClientReconnect();
Cayenne.begin(username, password, clientID);
}
void loop()
{if(ESP8266ControllerWifiClient_IsNeedReconect) {_esp8266WifiModuleClientReconnect(); ESP8266ControllerWifiClient_IsNeedReconect = 0; }
ESP8266ControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESP8266ControllerWifiClient_status) { if ( ! ESP8266ControllerWifiClient_HRD) { ESP8266ControllerWifiClient_ip = WiFi.localIP();
ESP8266ControllerWifiClient_subnet = WiFi.subnetMask();
ESP8266ControllerWifiClient_gateway = WiFi.gatewayIP();
ESP8266ControllerWifiClient_dns = WiFi.dnsIP();
WiFi.macAddress(ESP8266ControllerWifiClient_mac);
ESP8266ControllerWifiClient_HRD = 1;
}} else {ESP8266ControllerWifiClient_HRD = 0;}
//Плата:1
Cayenne.loop();
//Плата:2
in_230823610_1 = _gtv1;
}
CAYENNE_OUT(0)
{
Cayenne.virtualWrite(0, in_230823610_1);
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
int hexStrToInt(String instring)
{
byte len = instring.length();
if (len == 0) return 0;
int result = 0;
for (byte i = 0; i < 8; i++) // только первые 8 цыфар влезуть в uint32
{
char ch = instring[i];
if (ch == 0) break;
result <<= 4;
if (isdigit(ch))
result = result | (ch - '0');
else result = result | (ch - 'A' + 10);
}
return result;
}
void _esp8266WifiModuleClientReconnect()
{
if( _checkMacAddres(ESP8266ControllerWifiClient_mac)) { wifi_set_macaddr(0, const_cast<uint8*>(ESP8266ControllerWifiClient_mac));}
if( ESP8266ControllerWifiClient_isDHCP) { WiFi.config(0U, 0U, 0U, 0U, 0U); } else {
WiFi.config(ESP8266ControllerWifiClient_ip, ESP8266ControllerWifiClient_gateway, ESP8266ControllerWifiClient_subnet, ESP8266ControllerWifiClient_dns , ESP8266ControllerWifiClient_dns );
}
WiFi.begin(ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
}
bool _checkMacAddres(byte array[])
{
bool result = 0;
for (byte i = 0; i < 6; i++)
{
if (array[i] == 255) {
return 0;
}
if (array[i] > 0 ) {
result = 1;
}
}
return result;
}
Код: Выделить всё
CAYENNE_OUT(0)
{
Cayenne.virtualWrite(0, in_230823610_1);
}
Код: Выделить всё
CAYENNE_OUT(0)
{
if (ENABLE=true){Cayenne.virtualWrite(0, in_230823610_1);}
}
Код: Выделить всё
/Плата:2
if (_gtv2 == 1) {
in_230823610_1 = _gtv1;
}
CAYENNE_OUT(0)
{
Cayenne.virtualWrite(0, in_230823610_1);
}