1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/coloz-blinker-library

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
BlinkerPROAIR202.h 38 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
i3water Отправлено 6 лет назад d2c17dd
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383
#ifndef BLINKER_PRO_AIR202_H
#define BLINKER_PRO_AIR202_H
#if ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
#include "Blinker/BlinkerConfig.h"
#include "Blinker/BlinkerDebug.h"
#include "Blinker/BlinkerStream.h"
#include "Blinker/BlinkerUtility.h"
#include "Functions/BlinkerHTTPAIR202.h"
#include "modules/ArduinoJson/ArduinoJson.h"
#include "Functions/BlinkerMQTTAIR202.h"
#include <EEPROM.h>
char* MQTT_HOST_GPRS;
char* MQTT_ID_GPRS;
char* MQTT_NAME_GPRS;
char* MQTT_KEY_GPRS;
char* MQTT_PRODUCTINFO_GPRS;
char* UUID_GPRS;
char* AUTHKEY_GPRS;
char* MQTT_DEVICEID_GPRS;
// char* DEVICE_NAME_GPRS;
char* BLINKER_PUB_TOPIC_GPRS;
char* BLINKER_SUB_TOPIC_GPRS;
uint16_t MQTT_PORT_GPRS;
BlinkerMQTTAIR202* mqtt_GPRS;
class BlinkerProAIR202 : public BlinkerStream
{
public :
BlinkerProAIR202()
: stream(NULL), isConnect(false)
{}
int connect();
int connected();
int mConnected();
void disconnect();
void ping();
int available();
int aligenieAvail();
int duerAvail();
void subscribe();
// int timedRead();
char * lastRead() { if (isFresh_GPRS) return msgBuf_GPRS; return ""; }
void flush();
// int print(const String & s, bool needCheck = true);
int print(char * data, bool needCheck = true);
int bPrint(char * name, const String & data);
int aliPrint(const String & data);
int duerPrint(const String & data);
// void aliType(const String & type);
// void duerType(const String & type);
void begin(const char* _deviceType, String _imei);
void initStream(Stream& s, bool state, blinker_callback_t func);
int autoPrint(uint32_t id);
char * deviceName();
char * authKey() { return AUTHKEY_GPRS; }
int init() { return isMQTTinit; }
int reRegister() { return connectServer(); }
int deviceRegister() { return connectServer(); }
int authCheck();
void freshAlive() { kaTime = millis(); isAlive = true; }
void sharers(const String & data);
int needFreshShare() {
if (_needCheckShare)
{
BLINKER_LOG_ALL(BLINKER_F("needFreshShare"));
_needCheckShare = false;
return true;
}
else
{
return false;
}
}
private :
bool isMQTTinit = false;
int connectServer();
void checkKA();
int checkAliKA();
int checkDuerKA();
int checkCanPrint();
int checkCanBprint();
int checkPrintSpan();
int checkAliPrintSpan();
int checkDuerPrintSpan();
protected :
BlinkerSharer * _sharers[BLINKER_MQTT_MAX_SHARERS_NUM];
uint8_t _sharerCount = 0;
uint8_t _sharerFrom = BLINKER_MQTT_FROM_AUTHER;
Stream* stream;
// char* streamData;
char* msgBuf_GPRS;
// bool isFresh = false;
bool isFresh_GPRS = false;
bool isConnect;
bool isHWS = false;
char* imei;
// uint8_t respTimes = 0;
// uint32_t respTime = 0;
bool isAvail_GPRS = false;
uint8_t dataFrom_GPRS = BLINKER_MSG_FROM_MQTT;
// uint8_t _sharerFrom = BLINKER_MQTT_FROM_AUTHER;
const char* _deviceType;
// char* _aliType;
// char* _duerType;
bool isAlive = false;
// bool isBavail = false;
bool _needCheckShare = false;
uint32_t latestTime;
uint32_t printTime = 0;
uint32_t bPrintTime = 0;
uint32_t kaTime = 0;
uint32_t linkTime = 0;
uint8_t respTimes = 0;
uint32_t respTime = 0;
uint8_t respAliTimes = 0;
uint32_t respAliTime = 0;
uint8_t respDuerTimes = 0;
uint32_t respDuerTime = 0;
uint32_t aliKaTime = 0;
bool isAliAlive = false;
bool isAliAvail = false;
uint32_t duerKaTime = 0;
bool isDuerAlive = false;
bool isDuerAvail = false;
char* mqtt_broker;
bool isNew = false;
bool isAuth = false;
bool isFirst = false;
int isJson(const String & data);
uint8_t reconnect_time = 0;
blinker_callback_t listenFunc = NULL;
};
int BlinkerProAIR202::connect()
{
if (!isMQTTinit) return false;
if (mqtt_GPRS->connected()) return true;
disconnect();
if ((millis() - latestTime) < BLINKER_MQTT_CONNECT_TIMESLOT && latestTime > 0)
{
yield();
return false;
}
BLINKER_LOG(BLINKER_F("Connecting to MQTT... "));
BLINKER_LOG_FreeHeap_ALL();
if (!mqtt_GPRS->connect())
{
BLINKER_LOG(BLINKER_F("Retrying MQTT connection in "), \
BLINKER_MQTT_CONNECT_TIMESLOT/1000, \
BLINKER_F(" seconds..."));
this->latestTime = millis();
reconnect_time += 1;
if (reconnect_time >= 12)
{
reRegister();
reconnect_time = 0;
}
return false;
}
reconnect_time = 0;
BLINKER_LOG(BLINKER_F("MQTT Connected!"));
BLINKER_LOG_FreeHeap();
this->latestTime = millis();
return true;
}
int BlinkerProAIR202::connected()
{
if (!isMQTTinit) return false;
return mqtt_GPRS->connected();
}
int BlinkerProAIR202::mConnected()
{
if (!isMQTTinit) return false;
else return mqtt_GPRS->connected();
}
void BlinkerProAIR202::disconnect()
{
if (isMQTTinit) mqtt_GPRS->disconnect();
}
void BlinkerProAIR202::ping()
{
BLINKER_LOG_ALL(BLINKER_F("MQTT Ping!"));
BLINKER_LOG_FreeHeap_ALL();
if (!isMQTTinit) return;
if (!mqtt_GPRS->connected())
{
disconnect();
// delay(100);
// connect();
}
else
{
this->latestTime = millis();
}
}
int BlinkerProAIR202::available()
{
if (isMQTTinit) {
checkKA();
// if (!mqtt_PRO->connected() || \
// (millis() - this->latestTime) > BLINKER_MQTT_PING_TIMEOUT)
if ((millis() - this->latestTime) > 30000)
{
ping();
}
else
{
subscribe();
}
}
if (isAvail_GPRS)
{
isAvail_GPRS = false;
return true;
}
else {
return false;
}
}
int BlinkerProAIR202::aligenieAvail()
{
if (!isMQTTinit) return false;
if (isAliAvail)
{
isAliAvail = false;
return true;
}
else {
return false;
}
}
int BlinkerProAIR202::duerAvail()
{
if (!isMQTTinit) return false;
if (isDuerAvail)
{
isDuerAvail = false;
return true;
}
else {
return false;
}
}
void BlinkerProAIR202::subscribe()
{
if (!isMQTTinit) return;
if (mqtt_GPRS->readSubscription())
{
BLINKER_LOG_ALL(BLINKER_F("Got: "), mqtt_GPRS->lastRead);
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(String(mqtt_GPRS->lastRead));
String _uuid = root["fromDevice"];
String dataGet = root["data"];
BLINKER_LOG_ALL(BLINKER_F("data: "), dataGet);
BLINKER_LOG_ALL(BLINKER_F("fromDevice: "), _uuid);
if (strcmp(_uuid.c_str(), UUID_GPRS) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("Authority uuid"));
kaTime = millis();
isAvail_GPRS = true;
isAlive = true;
_sharerFrom = BLINKER_MQTT_FROM_AUTHER;
}
else if (_uuid == BLINKER_CMD_ALIGENIE)
{
BLINKER_LOG_ALL(BLINKER_F("form AliGenie"));
aliKaTime = millis();
isAliAlive = true;
isAliAvail = true;
}
else if (_uuid == BLINKER_CMD_DUEROS)
{
BLINKER_LOG_ALL(BLINKER_F("form DuerOS"));
duerKaTime = millis();
isDuerAlive = true;
isDuerAvail = true;
}
else if (_uuid == BLINKER_CMD_SERVERCLIENT)
{
BLINKER_LOG_ALL(BLINKER_F("form Sever"));
isAvail_GPRS = true;
isAlive = true;
_sharerFrom = BLINKER_MQTT_FROM_AUTHER;
}
else
{
if (_sharerCount)
{
for (uint8_t num = 0; num < _sharerCount; num++)
{
if (strcmp(_uuid.c_str(), _sharers[num]->uuid()) == 0)
{
_sharerFrom = num;
kaTime = millis();
BLINKER_LOG_ALL(BLINKER_F("From sharer: "), _uuid);
BLINKER_LOG_ALL(BLINKER_F("sharer num: "), num);
_needCheckShare = false;
break;
}
else
{
BLINKER_ERR_LOG_ALL(BLINKER_F("No authority uuid, \
check is from bridge/share device, \
data: "), dataGet);
_needCheckShare = true;
}
}
}
root.printTo(dataGet);
isAvail_GPRS = true;
isAlive = true;
}
if (isFresh_GPRS) free(msgBuf_GPRS);
msgBuf_GPRS = (char*)malloc((dataGet.length()+1)*sizeof(char));
strcpy(msgBuf_GPRS, dataGet.c_str());
isFresh_GPRS = true;
this->latestTime = millis();
dataFrom_GPRS = BLINKER_MSG_FROM_MQTT;
}
}
void BlinkerProAIR202::flush()
{
if (isFresh_GPRS)
{
free(msgBuf_GPRS); isFresh_GPRS = false; isAvail_GPRS = false;
isAliAvail = false; //isBavail = false;
}
}
int BlinkerProAIR202::print(char * data, bool needCheck)
{
if (!isMQTTinit) return false;
BLINKER_LOG_ALL(BLINKER_F("data: "), data);
uint16_t num = strlen(data);
data[num+8] = '\0';
for(uint16_t c_num = num; c_num > 0; c_num--)
{
data[c_num+7] = data[c_num-1];
}
// String data_add = BLINKER_F("{\"data\":");
char data_add[20] = "{\"data\":";
for(uint16_t c_num = 0; c_num < 8; c_num++)
{
data[c_num] = data_add[c_num];
}
// data_add = BLINKER_F(",\"fromDevice\":\"");
// strcat(data, data_add.c_str());
strcat(data, ",\"fromDevice\":\"");
strcat(data, MQTT_DEVICEID_GPRS);
// strcat(data, MQTT_DEVICEID_GPRS); //PRO
// data_add = BLINKER_F("\",\"toDevice\":\"");
// strcat(data, data_add.c_str());
strcat(data, "\",\"toDevice\":\"");
if (_sharerFrom < BLINKER_MQTT_MAX_SHARERS_NUM)
{
strcat(data, _sharers[_sharerFrom]->uuid());
}
else
{
strcat(data, UUID_GPRS);
}
// data_add = BLINKER_F("\",\"deviceType\":\"OwnApp\"}");
_sharerFrom = BLINKER_MQTT_FROM_AUTHER;
// strcat(data, data_add.c_str());
strcat(data, "\",\"deviceType\":\"OwnApp\"}");
// data_add = STRING_format(data);
if (!isJson(STRING_format(data))) return false;
// data_add.replace("\"", "\\22");
// strcpy(data, data_add.c_str());
uint16_t d_data_len;
for (uint16_t d_num = 0; d_num < 1024; d_num++)
{
if (data[d_num] == '\"')
{
data[d_num] = '\\';
d_data_len = strlen(data);
// BLINKER_LOG_ALL(BLINKER_F("d_num: "), d_num,
// BLINKER_F(", d_data_len: "), d_data_len);
for(uint16_t c_num = d_data_len; c_num > d_num; c_num--)
{
data[c_num + 2] = data[c_num];
}
data[d_num + 1] = '2';
data[d_num + 2] = '2';
}
}
// #if defined(ESP8266)
// data_add = "";
// #endif
// if (!isJson(STRING_format(data)) return false;
// strcpy(data, STRING_format(data).replace("\"", "\\22").c_str());
// String msg_data = STRING_format(data);
// msg_data.replace("\"", "\\22");
BLINKER_LOG_ALL(BLINKER_F("MQTT Publish..."));
BLINKER_LOG_FreeHeap_ALL();
bool _alive = isAlive;
if (needCheck)
{
if (!checkPrintSpan())
{
return false;
}
respTime = millis();
}
if (mqtt_GPRS->connected())
{
if (needCheck)
{
if (!checkCanPrint())
{
if (!_alive)
{
isAlive = false;
}
return false;
}
}
// if (! mqtt_GPRS->publish(BLINKER_PUB_TOPIC_GPRS, msg_data.c_str()))
if (! mqtt_GPRS->publish(BLINKER_PUB_TOPIC_GPRS, data))
{
BLINKER_LOG_ALL(data);
BLINKER_LOG_ALL(BLINKER_F("...Failed"));
BLINKER_LOG_FreeHeap_ALL();
if (!_alive)
{
isAlive = false;
}
return false;
}
else
{
BLINKER_LOG_ALL(data);
BLINKER_LOG_ALL(BLINKER_F("...OK!"));
BLINKER_LOG_FreeHeap_ALL();
if (needCheck) printTime = millis();
if (!_alive)
{
isAlive = false;
}
this->latestTime = millis();
return true;
}
}
else
{
BLINKER_ERR_LOG(BLINKER_F("MQTT Disconnected"));
isAlive = false;
return false;
}
}
int BlinkerProAIR202::bPrint(char * name, const String & data)
{
if (!isMQTTinit) return false;
char data_add[1024] = { '\0' };
strcpy(data_add, "{\"data\":");
strcat(data_add, data.c_str());
strcat(data_add, ",\"fromDevice\":\"");
strcat(data_add, MQTT_ID_GPRS);
strcat(data_add, ",\"toDevice\":\"");
strcat(data_add, name);
strcat(data_add, "\",\"deviceType\":\"DiyBridge\"}");
// String data_add = BLINKER_F("{\"data\":");
// data_add += data;
// data_add += BLINKER_F(",\"fromDevice\":\"");
// data_add += MQTT_ID_MQTT;
// data_add += BLINKER_F("\",\"toDevice\":\"");
// data_add += name;
// data_add += BLINKER_F("\",\"deviceType\":\"DiyBridge\"}");
if (!isJson(STRING_format(data_add))) return false;
BLINKER_LOG_ALL(BLINKER_F("MQTT Bridge Publish..."));
// bool _alive = isAlive;
// bool state = STRING_contains_string(data, BLINKER_CMD_NOTICE);
// if (!state) {
// state = (STRING_contains_string(data, BLINKER_CMD_STATE)
// && STRING_contains_string(data, BLINKER_CMD_ONLINE));
// }
if (mqtt_GPRS->connected()) {
// if (!state) {
if (!checkCanBprint()) {
// if (!_alive) {
// isAlive = false;
// }
return false;
}
// }
// Adafruit_MQTT_Publish iotPub = Adafruit_MQTT_Publish(mqtt_MQTT, BLINKER_PUB_TOPIC_MQTT);
// if (! iotPub.publish(payload.c_str())) {
// String bPubTopic = BLINKER_F("");
// char bPubTopic[60] = { '\0' };
// if (strcmp(mqtt_broker, BLINKER_MQTT_BORKER_ONENET) == 0)
// {
// // bPubTopic = MQTT_PRODUCTINFO_MQTT;
// // bPubTopic += BLINKER_F("/");
// // bPubTopic += name;
// // bPubTopic += BLINKER_F("/r");
// }
// else
// {
// strcpy(bPubTopic, BLINKER_PUB_TOPIC_MQTT);
// bPubTopic = BLINKER_PUB_TOPIC_MQTT;
// }
if (! mqtt_GPRS->publish(BLINKER_PUB_TOPIC_GPRS, data_add))
{
BLINKER_LOG_ALL(data_add);
BLINKER_LOG_ALL(BLINKER_F("...Failed"));
// if (!_alive) {
// isAlive = false;
// }
return false;
}
else
{
BLINKER_LOG_ALL(data_add);
BLINKER_LOG_ALL(BLINKER_F("...OK!"));
bPrintTime = millis();
// if (!_alive) {
// isAlive = false;
// }
this->latestTime = millis();
return true;
}
}
else
{
BLINKER_ERR_LOG(BLINKER_F("MQTT Disconnected"));
// isAlive = false;
return false;
}
// }
}
int BlinkerProAIR202::aliPrint(const String & data)
{
if (!isMQTTinit) return false;
char data_add[1024] = { '\0' };
strcpy(data_add, "{\"data\":");
strcat(data_add, data.c_str());
strcat(data_add, ",\"fromDevice\":\"");
strcat(data_add, MQTT_DEVICEID_GPRS);
strcat(data_add, "\",\"toDevice\":\"AliGenie_r\"");
strcat(data_add, "\",\"deviceType\":\"vAssistant\"}");
// String data_add = BLINKER_F("{\"data\":");
// data_add += data;
// data_add += BLINKER_F(",\"fromDevice\":\"");
// data_add += MQTT_ID_MQTT;
// data_add += BLINKER_F("\",\"toDevice\":\"AliGenie_r\"");
// data_add += BLINKER_F(",\"deviceType\":\"vAssistant\"}");
if (!isJson(STRING_format(data_add))) return false;
BLINKER_LOG_ALL(BLINKER_F("MQTT AliGenie Publish..."));
BLINKER_LOG_FreeHeap_ALL();
if (mqtt_GPRS->connected())
{
if (!checkAliKA())
{
return false;
}
if (!checkAliPrintSpan())
{
respAliTime = millis();
return false;
}
respAliTime = millis();
if (! mqtt_GPRS->publish(BLINKER_PUB_TOPIC_GPRS, data_add))
{
BLINKER_LOG_ALL(data_add);
BLINKER_LOG_ALL(BLINKER_F("...Failed"));
BLINKER_LOG_FreeHeap_ALL();
isAliAlive = false;
return false;
}
else
{
BLINKER_LOG_ALL(data_add);
BLINKER_LOG_ALL(BLINKER_F("...OK!"));
BLINKER_LOG_FreeHeap_ALL();
isAliAlive = false;
this->latestTime = millis();
return true;
}
}
else
{
BLINKER_ERR_LOG(BLINKER_F("MQTT Disconnected"));
return false;
}
}
int BlinkerProAIR202::duerPrint(const String & data)
{
if (!isMQTTinit) return false;
char data_add[1024] = { '\0' };
strcpy(data_add, "{\"data\":");
strcat(data_add, data.c_str());
strcat(data_add, ",\"fromDevice\":\"");
strcat(data_add, MQTT_DEVICEID_GPRS);
strcat(data_add, "\",\"toDevice\":\"DuerOS_r\"");
strcat(data_add, "\",\"deviceType\":\"vAssistant\"}");
// String data_add = BLINKER_F("{\"data\":");
// data_add += data;
// data_add += BLINKER_F(",\"fromDevice\":\"");
// data_add += MQTT_ID_MQTT;
// data_add += BLINKER_F("\",\"toDevice\":\"DuerOS_r\"");
// data_add += BLINKER_F(",\"deviceType\":\"vAssistant\"}");
if (!isJson(STRING_format(data_add))) return false;
BLINKER_LOG_ALL(BLINKER_F("MQTT DuerOS Publish..."));
BLINKER_LOG_FreeHeap_ALL();
if (mqtt_GPRS->connected())
{
if (!checkDuerKA())
{
return false;
}
if (!checkDuerPrintSpan())
{
respDuerTime = millis();
return false;
}
respDuerTime = millis();
if (! mqtt_GPRS->publish(BLINKER_PUB_TOPIC_GPRS, data_add))
{
BLINKER_LOG_ALL(data_add);
BLINKER_LOG_ALL(BLINKER_F("...Failed"));
BLINKER_LOG_FreeHeap_ALL();
isDuerAlive = false;
return false;
}
else
{
BLINKER_LOG_ALL(data_add);
BLINKER_LOG_ALL(BLINKER_F("...OK!"));
BLINKER_LOG_FreeHeap_ALL();
isDuerAlive = false;
this->latestTime = millis();
return true;
}
}
else
{
BLINKER_ERR_LOG(BLINKER_F("MQTT Disconnected"));
return false;
}
}
// void BlinkerProAIR202::aliType(const String & type)
// {
// _aliType = (char*)malloc((type.length()+1)*sizeof(char));
// strcpy(_aliType, type.c_str());
// BLINKER_LOG_ALL(BLINKER_F("_aliType: "), _aliType);
// }
// void BlinkerProAIR202::duerType(const String & type)
// {
// _duerType = (char*)malloc((type.length()+1)*sizeof(char));
// strcpy(_duerType, type.c_str());
// BLINKER_LOG_ALL(BLINKER_F("_duerType: "), _duerType);
// }
void BlinkerProAIR202::begin(const char* _type, String _imei)
{
_deviceType = _type;
BLINKER_LOG_ALL(BLINKER_F("PRO deviceType: "), _type);
// stream = &s;
// stream->setTimeout(BLINKER_STREAM_TIMEOUT);
// isHWS = state;
imei = (char*)malloc((_imei.length() + 1)*sizeof(char));
strcpy(imei, _imei.c_str());
// AUTHKEY_GPRS = (char*)malloc((strlen(_deviceType) + 1)*sizeof(char));
// strcpy(AUTHKEY_GPRS, _deviceType);
}
void BlinkerProAIR202::initStream(Stream& s, bool state, blinker_callback_t func)
{
// _deviceType = _type;
// BLINKER_LOG_ALL(BLINKER_F("PRO deviceType: "), _type);
stream = &s;
stream->setTimeout(BLINKER_STREAM_TIMEOUT);
isHWS = state;
listenFunc = func;
// _imei = (char*)malloc(imei.length()*sizeof(char));
// strcpy(_imei, imei.c_str());
}
int BlinkerProAIR202::autoPrint(uint32_t id)
{
String payload = BLINKER_F("{\"data\":{\"set\":{");
payload += BLINKER_F("\"trigged\":true,\"autoData\":{");
payload += BLINKER_F("\"autoId\":");
payload += STRING_format(id);
payload += BLINKER_F("}}}");
payload += BLINKER_F(",\"fromDevice\":\"");
payload += STRING_format(MQTT_DEVICEID_GPRS);
payload += BLINKER_F("\",\"toDevice\":\"autoManager\"}");
// "\",\"deviceType\":\"" + "type" + "\"}";
BLINKER_LOG_ALL(BLINKER_F("autoPrint..."));
if (mqtt_GPRS->connected())
{
if ((millis() - linkTime) > BLINKER_LINK_MSG_LIMIT || \
linkTime == 0)
{
// linkTime = millis();
// Adafruit_MQTT_Publish iotPub = Adafruit_MQTT_Publish(mqtt_MQTT, BLINKER_PUB_TOPIC_MQTT);
// if (! iotPub.publish(payload.c_str())) {
if (! mqtt_GPRS->publish(BLINKER_PUB_TOPIC_GPRS, payload.c_str()))
{
BLINKER_LOG_ALL(payload);
BLINKER_LOG_ALL(BLINKER_F("...Failed"));
return false;
}
else
{
BLINKER_LOG_ALL(payload);
BLINKER_LOG_ALL(BLINKER_F("...OK!"));
linkTime = millis();
this->latestTime = millis();
return true;
}
}
else
{
BLINKER_ERR_LOG(BLINKER_F("MQTT NOT ALIVE OR MSG LIMIT "), linkTime);
return false;
}
}
else
{
BLINKER_ERR_LOG(BLINKER_F("MQTT Disconnected"));
return false;
}
}
char * BlinkerProAIR202::deviceName() { return MQTT_DEVICEID_GPRS;/*MQTT_ID_PRO;*/ }
void BlinkerProAIR202::sharers(const String & data)
{
BLINKER_LOG_ALL(BLINKER_F("sharers data: "), data);
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(data);
if (!root.success()) return;
String user_name = "";
if (_sharerCount)
{
for (uint8_t num = _sharerCount; num > 0; num--)
{
delete _sharers[num - 1];
}
}
_sharerCount = 0;
for (uint8_t num = 0; num < BLINKER_MQTT_MAX_SHARERS_NUM; num++)
{
user_name = root["users"][num].as<String>();
if (user_name.length() == BLINKER_MQTT_USER_UUID_SIZE)
{
BLINKER_LOG_ALL(BLINKER_F("sharer uuid: "), user_name, BLINKER_F(", length: "), user_name.length());
_sharerCount++;
_sharers[num] = new BlinkerSharer(user_name);
}
else
{
break;
}
}
}
int BlinkerProAIR202::authCheck()
{
uint8_t _authCheck;
BLINKER_LOG_ALL(BLINKER_F("authCheck start"));
#if defined(ESP8266) || defined(ESP32)
EEPROM.begin(BLINKER_EEP_SIZE);
#endif
EEPROM.get(BLINKER_EEP_ADDR_AUTH_CHECK, _authCheck);
if (_authCheck == BLINKER_AUTH_CHECK_DATA)
{
#if defined(ESP8266) || defined(ESP32)
EEPROM.commit();
EEPROM.end();
#endif
isAuth = true;
BLINKER_LOG_ALL(BLINKER_F("authCheck end"));
return true;
}
#if defined(ESP8266) || defined(ESP32)
EEPROM.commit();
EEPROM.end();
#endif
BLINKER_LOG_ALL(BLINKER_F("authCheck end"));
return false;
}
int BlinkerProAIR202::connectServer()
{
String host = BLINKER_F("https://iotdev.clz.me");
String uri = "";
uri += BLINKER_F("/api/v1/user/device/register?deviceType=");
uri += _deviceType;
uri += BLINKER_F("&deviceName=");
// uri += imei;
if (_deviceType != BLINKER_AIR_STATION)
{
// url_iot += macDeviceName();
uri += imei;
}
else
{
// uri += "TESTA69BA016"; // 1
// uri += "TEST656A2782"; // 2
// uri += "TESTD1C4B294"; // 3
// uri += "TEST687991DC"; // 4
uri += "TEST872B3982"; // 5
}
// uri += BLINKER_F("/api/v1/user/device/diy/auth?authKey=");
// uri += _deviceType;
BLINKER_LOG_ALL(BLINKER_F("HTTPS begin: "), host + uri);
BlinkerHTTPAIR202 http(*stream, isHWS, listenFunc);
http.begin(host, uri);
String payload;
if (http.GET())
{
BLINKER_LOG(BLINKER_F("[HTTP] GET... success"));
payload = http.getString();
// return true;
}
else
{
BLINKER_LOG(BLINKER_F("[HTTP] GET... failed"));
return false;
}
BLINKER_LOG_ALL(BLINKER_F("reply was:"));
BLINKER_LOG_ALL(BLINKER_F("=============================="));
BLINKER_LOG_ALL(payload);
BLINKER_LOG_ALL(BLINKER_F("=============================="));
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(payload);
if (STRING_contains_string(payload, BLINKER_CMD_NOTFOUND) || !root.success() ||
!STRING_contains_string(payload, BLINKER_CMD_IOTID)) {
// while(1) {
BLINKER_ERR_LOG(("Please make sure you have register this device!"));
// ::delay(60000);
return false;
// }
}
String _userID = root[BLINKER_CMD_DETAIL][BLINKER_CMD_DEVICENAME];
String _userName = root[BLINKER_CMD_DETAIL][BLINKER_CMD_IOTID];
String _key = root[BLINKER_CMD_DETAIL][BLINKER_CMD_IOTTOKEN];
String _productInfo = root[BLINKER_CMD_DETAIL][BLINKER_CMD_PRODUCTKEY];
String _broker = root[BLINKER_CMD_DETAIL][BLINKER_CMD_BROKER];
String _uuid = root[BLINKER_CMD_DETAIL][BLINKER_CMD_UUID];
String _authKey = root[BLINKER_CMD_DETAIL][BLINKER_CMD_KEY];
if (isMQTTinit)
{
free(MQTT_HOST_GPRS);
free(MQTT_ID_GPRS);
free(MQTT_NAME_GPRS);
free(MQTT_KEY_GPRS);
free(MQTT_PRODUCTINFO_GPRS);
free(UUID_GPRS);
free(AUTHKEY_GPRS);
// free(DEVICE_NAME_GPRS);
free(BLINKER_PUB_TOPIC_GPRS);
free(BLINKER_SUB_TOPIC_GPRS);
free(mqtt_GPRS);
// free(iotSub_GPRS);
isMQTTinit = false;
}
if (_broker == BLINKER_MQTT_BORKER_ALIYUN) {
// memcpy(DEVICE_NAME_MQTT, _userID.c_str(), 12);
MQTT_DEVICEID_GPRS = (char*)malloc((_userID.length()+1)*sizeof(char));
strcpy(MQTT_DEVICEID_GPRS, _userID.c_str());
MQTT_ID_GPRS = (char*)malloc((_userID.length()+1)*sizeof(char));
strcpy(MQTT_ID_GPRS, _userID.c_str());
MQTT_NAME_GPRS = (char*)malloc((_userName.length()+1)*sizeof(char));
strcpy(MQTT_NAME_GPRS, _userName.c_str());
MQTT_KEY_GPRS = (char*)malloc((_key.length()+1)*sizeof(char));
strcpy(MQTT_KEY_GPRS, _key.c_str());
MQTT_PRODUCTINFO_GPRS = (char*)malloc((_productInfo.length()+1)*sizeof(char));
strcpy(MQTT_PRODUCTINFO_GPRS, _productInfo.c_str());
MQTT_HOST_GPRS = (char*)malloc((strlen(BLINKER_MQTT_ALIYUN_HOST)+1)*sizeof(char));
strcpy(MQTT_HOST_GPRS, BLINKER_MQTT_ALIYUN_HOST);
AUTHKEY_GPRS = (char*)malloc((_authKey.length()+1)*sizeof(char));
strcpy(AUTHKEY_GPRS, _authKey.c_str());
MQTT_PORT_GPRS = BLINKER_MQTT_ALIYUN_PORT;
}
UUID_GPRS = (char*)malloc((_uuid.length()+1)*sizeof(char));
strcpy(UUID_GPRS, _uuid.c_str());
BLINKER_LOG_ALL(BLINKER_F("===================="));
BLINKER_LOG_ALL(BLINKER_F("DEVICE_NAME_GPRS: "), imei);
BLINKER_LOG_ALL(BLINKER_F("MQTT_PRODUCTINFO_GPRS: "), MQTT_PRODUCTINFO_GPRS);
BLINKER_LOG_ALL(BLINKER_F("MQTT_DEVICEID_GPRS: "), MQTT_DEVICEID_GPRS);
BLINKER_LOG_ALL(BLINKER_F("MQTT_ID_GPRS: "), MQTT_ID_GPRS);
BLINKER_LOG_ALL(BLINKER_F("MQTT_NAME_GPRS: "), MQTT_NAME_GPRS);
BLINKER_LOG_ALL(BLINKER_F("MQTT_KEY_GPRS: "), MQTT_KEY_GPRS);
BLINKER_LOG_ALL(BLINKER_F("MQTT_BROKER: "), _broker);
BLINKER_LOG_ALL(BLINKER_F("HOST: "), MQTT_HOST_GPRS);
BLINKER_LOG_ALL(BLINKER_F("PORT: "), MQTT_PORT_GPRS);
BLINKER_LOG_ALL(BLINKER_F("UUID_GPRS: "), UUID_GPRS);
BLINKER_LOG_ALL(BLINKER_F("AUTHKEY_GPRS: "), AUTHKEY_GPRS);
BLINKER_LOG_ALL(BLINKER_F("===================="));
if (_broker == BLINKER_MQTT_BORKER_ALIYUN) {
String PUB_TOPIC_STR = BLINKER_F("/");
PUB_TOPIC_STR += MQTT_PRODUCTINFO_GPRS;
PUB_TOPIC_STR += BLINKER_F("/");
PUB_TOPIC_STR += MQTT_DEVICEID_GPRS;
PUB_TOPIC_STR += BLINKER_F("/s");
BLINKER_PUB_TOPIC_GPRS = (char*)malloc((PUB_TOPIC_STR.length() + 1)*sizeof(char));
// memcpy(BLINKER_PUB_TOPIC_GPRS, PUB_TOPIC_STR.c_str(), str_len);
strcpy(BLINKER_PUB_TOPIC_GPRS, PUB_TOPIC_STR.c_str());
BLINKER_LOG_ALL(BLINKER_F("BLINKER_PUB_TOPIC_GPRS: "), BLINKER_PUB_TOPIC_GPRS);
String SUB_TOPIC_STR = BLINKER_F("/");
SUB_TOPIC_STR += MQTT_PRODUCTINFO_GPRS;
SUB_TOPIC_STR += BLINKER_F("/");
SUB_TOPIC_STR += MQTT_ID_GPRS;
SUB_TOPIC_STR += BLINKER_F("/r");
BLINKER_SUB_TOPIC_GPRS = (char*)malloc((SUB_TOPIC_STR.length() + 1)*sizeof(char));
// memcpy(BLINKER_SUB_TOPIC_GPRS, SUB_TOPIC_STR.c_str(), str_len);
strcpy(BLINKER_SUB_TOPIC_GPRS, SUB_TOPIC_STR.c_str());
BLINKER_LOG_ALL(BLINKER_F("BLINKER_SUB_TOPIC_GPRS: "), BLINKER_SUB_TOPIC_GPRS);
}
// String _userID = root[BLINKER_CMD_DETAIL][BLINKER_CMD_DEVICENAME];
// String _userName = root[BLINKER_CMD_DETAIL][BLINKER_CMD_IOTID];
// String _key = root[BLINKER_CMD_DETAIL][BLINKER_CMD_IOTTOKEN];
// String _productInfo = root[BLINKER_CMD_DETAIL][BLINKER_CMD_PRODUCTKEY];
// String _broker = root[BLINKER_CMD_DETAIL][BLINKER_CMD_BROKER];
// String _uuid = root[BLINKER_CMD_DETAIL][BLINKER_CMD_UUID];
// String _authKey = root[BLINKER_CMD_DETAIL][BLINKER_CMD_KEY];
// if (isMQTTinit)
// {
// free(MQTT_HOST_GPRS);
// free(MQTT_ID_GPRS);
// free(MQTT_NAME_GPRS);
// free(MQTT_KEY_GPRS);
// free(MQTT_PRODUCTINFO_GPRS);
// free(UUID_GPRS);
// free(AUTHKEY_GPRS);
// free(MQTT_DEVICEID_GPRS);
// free(BLINKER_PUB_TOPIC_GPRS);
// free(BLINKER_SUB_TOPIC_GPRS);
// free(mqtt_GPRS);
// isMQTTinit = false;
// }
// BLINKER_LOG_ALL(("===================="));
// // if (_broker == "BLINKER_MQTT_BORKER_ALIYUN") {
// // memcpy(DEVICE_NAME, _userID.c_str(), 12);
// String _deviceName = _userID.substring(12, 36);
// MQTT_DEVICEID_GPRS = (char*)malloc((_deviceName.length()+1)*sizeof(char));
// strcpy(MQTT_DEVICEID_GPRS, _deviceName.c_str());
// MQTT_ID_GPRS = (char*)malloc((_userID.length()+1)*sizeof(char));
// strcpy(MQTT_ID_GPRS, _userID.c_str());
// MQTT_NAME_GPRS = (char*)malloc((_userName.length()+1)*sizeof(char));
// strcpy(MQTT_NAME_GPRS, _userName.c_str());
// MQTT_KEY_GPRS = (char*)malloc((_key.length()+1)*sizeof(char));
// strcpy(MQTT_KEY_GPRS, _key.c_str());
// MQTT_PRODUCTINFO_GPRS = (char*)malloc((_productInfo.length()+1)*sizeof(char));
// strcpy(MQTT_PRODUCTINFO_GPRS, _productInfo.c_str());
// MQTT_HOST_GPRS = (char*)malloc((strlen(BLINKER_MQTT_ALIYUN_HOST)+1)*sizeof(char));
// strcpy(MQTT_HOST_GPRS, BLINKER_MQTT_ALIYUN_HOST);
// AUTHKEY_GPRS = (char*)malloc((_authKey.length()+1)*sizeof(char));
// strcpy(AUTHKEY_GPRS, _authKey.c_str());
// MQTT_PORT_GPRS = BLINKER_MQTT_ALIYUN_PORT;
// BLINKER_LOG_ALL(("===================="));
// // }
// UUID_GPRS = (char*)malloc((_uuid.length()+1)*sizeof(char));
// strcpy(UUID_GPRS, _uuid.c_str());
char uuid_eeprom[BLINKER_AUUID_SIZE];
BLINKER_LOG_ALL(("==========AUTH CHECK=========="));
if (!isFirst)
{
char _authCheck;
#if defined(ESP8266) || defined(ESP32)
EEPROM.begin(BLINKER_EEP_SIZE);
#endif
EEPROM.get(BLINKER_EEP_ADDR_AUUID, uuid_eeprom);
if (strcmp(uuid_eeprom, _uuid.c_str()) != 0) {
// strcpy(UUID_PRO, _uuid.c_str());
strcpy(uuid_eeprom, _uuid.c_str());
EEPROM.put(BLINKER_EEP_ADDR_AUUID, uuid_eeprom);
EEPROM.get(BLINKER_EEP_ADDR_AUUID, uuid_eeprom);
BLINKER_LOG_ALL(BLINKER_F("===================="));
BLINKER_LOG_ALL(BLINKER_F("uuid_eeprom: "), uuid_eeprom);
BLINKER_LOG_ALL(BLINKER_F("_uuid: "), _uuid);
isNew = true;
}
EEPROM.get(BLINKER_EEP_ADDR_AUTH_CHECK, _authCheck);
if (_authCheck != BLINKER_AUTH_CHECK_DATA) {
EEPROM.put(BLINKER_EEP_ADDR_AUTH_CHECK, BLINKER_AUTH_CHECK_DATA);
isAuth = true;
}
#if defined(ESP8266) || defined(ESP32)
EEPROM.commit();
EEPROM.end();
#endif
isFirst = true;
}
// BLINKER_LOG_ALL(BLINKER_F("===================="));
// BLINKER_LOG_ALL(BLINKER_F("DEVICE_NAME: "), imei);
// BLINKER_LOG_ALL(BLINKER_F("MQTT_PRODUCTINFO_GPRS: "), MQTT_PRODUCTINFO_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("MQTT_DEVICEID_GPRS: "), MQTT_DEVICEID_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("MQTT_ID_GPRS: "), MQTT_ID_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("MQTT_NAME_GPRS: "), MQTT_NAME_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("MQTT_KEY_GPRS: "), MQTT_KEY_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("MQTT_BROKER: "), _broker);
// BLINKER_LOG_ALL(BLINKER_F("HOST: "), MQTT_HOST_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("PORT: "), MQTT_PORT_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("UUID_GPRS: "), UUID_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("AUTHKEY_GPRS: "), AUTHKEY_GPRS);
// BLINKER_LOG_ALL(BLINKER_F("===================="));
// // if (_broker == BLINKER_MQTT_BORKER_ALIYUN) {
// String PUB_TOPIC_STR = BLINKER_F("/");
// PUB_TOPIC_STR += MQTT_PRODUCTINFO_GPRS;
// PUB_TOPIC_STR += BLINKER_F("/");
// PUB_TOPIC_STR += MQTT_DEVICEID_GPRS;
// PUB_TOPIC_STR += BLINKER_F("/s");
// BLINKER_PUB_TOPIC_GPRS = (char*)malloc((PUB_TOPIC_STR.length() + 1)*sizeof(char));
// strcpy(BLINKER_PUB_TOPIC_GPRS, PUB_TOPIC_STR.c_str());
// BLINKER_LOG_ALL(BLINKER_F("BLINKER_PUB_TOPIC_GPRS: "), BLINKER_PUB_TOPIC_GPRS);
// String SUB_TOPIC_STR = BLINKER_F("/");
// SUB_TOPIC_STR += MQTT_PRODUCTINFO_GPRS;
// SUB_TOPIC_STR += BLINKER_F("/");
// SUB_TOPIC_STR += MQTT_DEVICEID_GPRS;
// SUB_TOPIC_STR += BLINKER_F("/r");
// BLINKER_SUB_TOPIC_GPRS = (char*)malloc((SUB_TOPIC_STR.length() + 1)*sizeof(char));
// strcpy(BLINKER_SUB_TOPIC_GPRS, SUB_TOPIC_STR.c_str());
// BLINKER_LOG_ALL(BLINKER_F("BLINKER_SUB_TOPIC_GPRS: "), BLINKER_SUB_TOPIC_GPRS);
// // }
// if (_broker == BLINKER_MQTT_BORKER_ALIYUN) {
mqtt_GPRS = new BlinkerMQTTAIR202(*stream, isHWS, MQTT_HOST_GPRS, MQTT_PORT_GPRS,
MQTT_ID_GPRS, MQTT_NAME_GPRS, MQTT_KEY_GPRS, listenFunc);
// }
this->latestTime = millis();
isMQTTinit = true;
mqtt_GPRS->subscribe(BLINKER_SUB_TOPIC_GPRS);
return true;
}
void BlinkerProAIR202::checkKA()
{
if (millis() - kaTime >= BLINKER_MQTT_KEEPALIVE)
isAlive = false;
}
int BlinkerProAIR202::checkAliKA() {
if (millis() - aliKaTime >= 10000)
return false;
else
return true;
}
int BlinkerProAIR202::checkDuerKA() {
if (millis() - duerKaTime >= 10000)
return false;
else
return true;
}
int BlinkerProAIR202::checkCanPrint() {
if ((millis() - printTime >= BLINKER_PRO_MSG_LIMIT && isAlive) || printTime == 0) {
return true;
}
else {
BLINKER_ERR_LOG(BLINKER_F("MQTT NOT ALIVE OR MSG LIMIT"));
checkKA();
return false;
}
}
int BlinkerProAIR202::checkCanBprint() {
if ((millis() - bPrintTime >= BLINKER_BRIDGE_MSG_LIMIT) || bPrintTime == 0) {
return true;
}
else {
BLINKER_ERR_LOG(BLINKER_F("MQTT NOT ALIVE OR MSG LIMIT"));
return false;
}
}
int BlinkerProAIR202::checkPrintSpan()
{
if (millis() - respTime < BLINKER_PRINT_MSG_LIMIT)
{
if (respTimes > BLINKER_PRINT_MSG_LIMIT)
{
BLINKER_ERR_LOG(BLINKER_F("DEVICE NOT CONNECT OR MSG LIMIT"));
return false;
}
else
{
respTimes++;
return true;
}
}
else
{
respTimes = 0;
return true;
}
}
int BlinkerProAIR202::checkAliPrintSpan()
{
if (millis() - respAliTime < BLINKER_PRINT_MSG_LIMIT/2)
{
if (respAliTimes > BLINKER_PRINT_MSG_LIMIT/2)
{
BLINKER_ERR_LOG(BLINKER_F("ALIGENIE NOT ALIVE OR MSG LIMIT"));
return false;
}
else
{
respAliTimes++;
return true;
}
}
else
{
respAliTimes = 0;
return true;
}
}
int BlinkerProAIR202::checkDuerPrintSpan()
{
if (millis() - respDuerTime < BLINKER_PRINT_MSG_LIMIT/2)
{
if (respDuerTimes > BLINKER_PRINT_MSG_LIMIT/2)
{
BLINKER_ERR_LOG(BLINKER_F("DUEROS NOT ALIVE OR MSG LIMIT"));
return false;
}
else
{
respDuerTimes++;
return true;
}
}
else
{
respDuerTimes = 0;
return true;
}
}
int BlinkerProAIR202::isJson(const String & data)
{
BLINKER_LOG_ALL(BLINKER_F("isJson: "), data);
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(data);
if (!root.success())
{
BLINKER_ERR_LOG("Print data is not Json! ", data);
return false;
}
return true;
}
#endif

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/coloz-blinker-library.git
git@gitlife.ru:oschina-mirror/coloz-blinker-library.git
oschina-mirror
coloz-blinker-library
coloz-blinker-library
0.3.1