tried to support aliot again(untested)

This commit is contained in:
strawmanbobi
2024-02-12 19:26:03 +08:00
parent c9d70c68c7
commit e96ab56e62
37 changed files with 123 additions and 19 deletions

View File

@@ -1,6 +1,6 @@
/** /**
* *
* Filename: AliyunIoTSDK.cpp * Filename: aliyun_iot_sdk.cpp
* *
* Description: basic SDK for ESP32 * Description: basic SDK for ESP32
* *
@@ -10,10 +10,11 @@
* *
**/ **/
#include "AliyunIoTSDK.h"
#include <PubSubClient.h> #include <PubSubClient.h>
#include <SHA256.h> #include <SHA256.h>
#include "aliyun_iot_sdk.h"
#define CHECK_INTERVAL 30000 #define CHECK_INTERVAL 30000
#define MESSAGE_BUFFER_SIZE 10 #define MESSAGE_BUFFER_SIZE 10
#define MQTT_CONNECT_RETRY_MAX 3 #define MQTT_CONNECT_RETRY_MAX 3
@@ -148,12 +149,12 @@ int AliyunIoTSDK::mqttCheckConnect() {
return mqttStatus; return mqttStatus;
} }
int AliyunIoTSDK::begin(Client &espClient, int AliyunIoTSDK::begin(PubSubClient &mqttClient,
const char *_productKey, const char *_productKey,
const char *_deviceName, const char *_deviceName,
const char *_deviceSecret, const char *_deviceSecret,
const char *_region) { const char *_region) {
client = new PubSubClient(espClient); client = new PubSubClient(mqttClient);
productKey = _productKey; productKey = _productKey;
deviceName = _deviceName; deviceName = _deviceName;
deviceSecret = _deviceSecret; deviceSecret = _deviceSecret;

View File

@@ -1,6 +1,6 @@
/** /**
* *
* Filename: AliyunIoTSDK.h * Filename: aliyun_iot_sdk.h
* *
* Description: header file of basic SDK for ESP32 * Description: header file of basic SDK for ESP32
* *
@@ -58,13 +58,13 @@ public:
/** /**
* Initialize and connect to AliyunIoT * Initialize and connect to AliyunIoT
* @param espClient : WiFi client * @param mqttClient : PubSubClient
* @param _productKey : AliyunIoT product key * @param _productKey : AliyunIoT product key
* @param _deviceName : AliyunIoT device name * @param _deviceName : AliyunIoT device name
* @param _deviceSecret : AliyunIoT device secret * @param _deviceSecret : AliyunIoT device secret
* @param _region : AliyunIoT region * @param _region : AliyunIoT region
*/ */
static int begin(Client &espClient, static int begin(PubSubClient &mqttClient,
const char *_productKey, const char *_productKey,
const char *_deviceName, const char *_deviceName,
const char *_deviceSecret, const char *_deviceSecret,

67
src/aliot_client.cpp Normal file
View File

@@ -0,0 +1,67 @@
/**
*
* Copyright (c) 2020-2024 IRbaby-IRext
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include "defines.h"
#include "serials.h"
#include "iot_hub.h"
#include "ir_baby.h"
#include "aliyun_iot_sdk.h"
#include "aliot_client.h"
// external variable declarations
extern String g_mqtt_server;
extern String g_product_key;
extern String g_device_name;
extern String g_device_secret;
extern String g_mqtt_client_id;
extern String g_mqtt_user_name;
extern String g_mqtt_password;
extern String g_upstream_topic;
extern String g_downstream_topic;
extern int g_mqtt_port;
extern String g_aliot_region;
// private variable definitions
static bool force_disconnected = false;
static AliyunIoTSDK iot;
// public function definitions
int connectToAliyunIoT(PubSubClient &mqtt_client) {
if (0 == iot.begin(mqtt_client, g_product_key.c_str(), g_device_name.c_str(), g_device_secret.c_str(), g_aliot_region.c_str())) {
sendIrisKitConnect();
}
INFOLN("Aliyun IoT connected");
return 0;
}
void aliotKeepAlive() {
iot.loop();
}

35
src/aliot_client.h Normal file
View File

@@ -0,0 +1,35 @@
/**
*
* Copyright (c) 2020-2024 IRbaby-IRext
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <Arduino.h>
#include "aliyun_iot_sdk.h"
#ifndef IRIS_KIT_ALIOT_CLIENT_H
#define IRIS_KIT_ALIOT_CLIENT_H
int connectToAliot(PubSubClient &mqtt_client);
int disconnectFromAliot(PubSubClient &mqtt_client);
#endif // IRIS_KIT_ALIOT_CLIENT_H

View File

@@ -49,6 +49,8 @@ String g_mqtt_user_name = "";
String g_mqtt_password = ""; String g_mqtt_password = "";
String g_upstream_topic = ""; String g_upstream_topic = "";
String g_downstream_topic = ""; String g_downstream_topic = "";
String g_aliot_region = "cn-shanghai";
int g_mqtt_port = 1883; int g_mqtt_port = 1883;
int g_app_id = 0; int g_app_id = 0;

View File

@@ -104,7 +104,7 @@ String getDeviceID() {
return device_id; return device_id;
} }
int registerIrisKit(String credential_token, int authIrisKit(String credential_token,
String password, String password,
String& product_key, String& product_key,
String& device_name, String& device_name,
@@ -160,10 +160,9 @@ int registerIrisKit(String credential_token,
int resultCode = http_response_doc["status"]["code"]; int resultCode = http_response_doc["status"]["code"];
if (0 == resultCode) { if (0 == resultCode) {
INFOLN("response valid, try getting entity"); INFOLN("response valid, try getting entity");
device_secret = (const char*) http_response_doc["entity"]["deviceSecret"]; device_secret = (const char*) http_response_doc["entity"]["deviceToken"];
app_id = (int) http_response_doc["entity"]["appId"]; app_id = (int) http_response_doc["entity"]["appId"];
INFOF("HTTP response deserialized, PK = %s, DN = %s, DS = %s\n", INFOF("HTTP response deserialized, PK = %s, DN = %s, DS = %s\n", product_key.c_str(), device_name.c_str(), device_secret.c_str());
product_key.c_str(), device_name.c_str(), device_secret.c_str());
ret = 0; ret = 0;
} else { } else {
INFOF("response invalid, code = %d\n", resultCode); INFOF("response invalid, code = %d\n", resultCode);

View File

@@ -29,7 +29,7 @@
#define PASSWORD_MAX (64) #define PASSWORD_MAX (64)
// web http call URL list // web http call URL list
#define GET_IRIS_KIT_ACCOUNT_SUFFIX "/irext-collect/credentials/auth_iris_kit_account" #define GET_IRIS_KIT_ACCOUNT_SUFFIX "/irext-collect/credentials/auth_iris_kit"
#define LOAD_ALIOT_ACCOUNT_SUFFIX "/irext-collect/aliot/load_account" #define LOAD_ALIOT_ACCOUNT_SUFFIX "/irext-collect/aliot/load_account"
#define DOWNLOAD_BIN_SUFFIX "/irext-collect/download" #define DOWNLOAD_BIN_SUFFIX "/irext-collect/download"
#define DOWNLOAD_PREFIX "http://irext-debug.oss-cn-hangzhou.aliyuncs.com/irda_" #define DOWNLOAD_PREFIX "http://irext-debug.oss-cn-hangzhou.aliyuncs.com/irda_"
@@ -52,7 +52,7 @@ int getIRISKitVersion(char *buffer, int buffer_size);
String getDeviceID(); String getDeviceID();
int registerIrisKit(String credential_token, int authIrisKit(String credential_token,
String password, String password,
String& product_key, String& product_key,
String& device_name, String& device_name,

View File

@@ -160,12 +160,12 @@ void setup() {
do { do {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
if (0 == registerIrisKit(iris_credential_token, if (0 == authIrisKit(iris_credential_token,
iris_password, iris_password,
g_product_key, g_product_key,
g_device_name, g_device_name,
g_device_secret, g_device_secret,
g_app_id)) { g_app_id)) {
break; break;
} }
} }