mirror of
https://github.com/oopuuu/zTC1.git
synced 2025-12-13 21:48:25 +08:00
add:mqtt连接后自动更新数据
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
#include "mico.h"
|
#include "mico.h"
|
||||||
#include "MQTTClient.h"
|
#include "MQTTClient.h"
|
||||||
#include "user_function.h"
|
#include "user_function.h"
|
||||||
|
#include "cJSON/cJSON.h"
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* Macros
|
* Macros
|
||||||
******************************************************/
|
******************************************************/
|
||||||
@@ -45,7 +46,7 @@
|
|||||||
|
|
||||||
#define MAX_MQTT_TOPIC_SIZE (256)
|
#define MAX_MQTT_TOPIC_SIZE (256)
|
||||||
#define MAX_MQTT_DATA_SIZE (1024)
|
#define MAX_MQTT_DATA_SIZE (1024)
|
||||||
#define MAX_MQTT_SEND_QUEUE_SIZE (5)
|
#define MAX_MQTT_SEND_QUEUE_SIZE (10)
|
||||||
|
|
||||||
#ifdef MQTT_CLIENT_SSL_ENABLE
|
#ifdef MQTT_CLIENT_SSL_ENABLE
|
||||||
|
|
||||||
@@ -108,7 +109,7 @@ OSStatus user_recv_handler( void *arg );
|
|||||||
/******************************************************
|
/******************************************************
|
||||||
* Variables Definitions
|
* Variables Definitions
|
||||||
******************************************************/
|
******************************************************/
|
||||||
bool isconnect=false;
|
bool isconnect = false;
|
||||||
mico_queue_t mqtt_msg_send_queue = NULL;
|
mico_queue_t mqtt_msg_send_queue = NULL;
|
||||||
|
|
||||||
Client c; // mqtt client object
|
Client c; // mqtt client object
|
||||||
@@ -212,7 +213,7 @@ void mqtt_client_thread( mico_thread_arg_t arg )
|
|||||||
{
|
{
|
||||||
OSStatus err = kUnknownErr;
|
OSStatus err = kUnknownErr;
|
||||||
|
|
||||||
int rc = -1;
|
int i,rc = -1;
|
||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
struct timeval t = { 0, MQTT_YIELD_TMIE * 1000 };
|
struct timeval t = { 0, MQTT_YIELD_TMIE * 1000 };
|
||||||
|
|
||||||
@@ -234,7 +235,7 @@ void mqtt_client_thread( mico_thread_arg_t arg )
|
|||||||
|
|
||||||
MQTT_start:
|
MQTT_start:
|
||||||
|
|
||||||
isconnect=false;
|
isconnect = false;
|
||||||
/* 1. create network connection */
|
/* 1. create network connection */
|
||||||
#ifdef MQTT_CLIENT_SSL_ENABLE
|
#ifdef MQTT_CLIENT_SSL_ENABLE
|
||||||
ssl_settings.ssl_enable = true;
|
ssl_settings.ssl_enable = true;
|
||||||
@@ -248,9 +249,9 @@ void mqtt_client_thread( mico_thread_arg_t arg )
|
|||||||
LinkStatusTypeDef LinkStatus;
|
LinkStatusTypeDef LinkStatus;
|
||||||
while ( 1 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
isconnect=false;
|
isconnect = false;
|
||||||
mico_rtos_thread_sleep( 3 );
|
mico_rtos_thread_sleep( 3 );
|
||||||
if(MQTT_SERVER[0]<0x20 ||MQTT_SERVER[0]>0x7f ||MQTT_SERVER_PORT<1) continue; //δ<><CEB4><EFBFBD><EFBFBD>mqtt<74><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if ( MQTT_SERVER[0] < 0x20 || MQTT_SERVER[0] > 0x7f || MQTT_SERVER_PORT < 1 ) continue; //δ<><CEB4><EFBFBD><EFBFBD>mqtt<74><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
micoWlanGetLinkStatus( &LinkStatus );
|
micoWlanGetLinkStatus( &LinkStatus );
|
||||||
if ( LinkStatus.is_connected != 1 )
|
if ( LinkStatus.is_connected != 1 )
|
||||||
@@ -294,10 +295,33 @@ void mqtt_client_thread( mico_thread_arg_t arg )
|
|||||||
require_noerr_string( rc, MQTT_reconnect, "ERROR: MQTT client subscribe err." );
|
require_noerr_string( rc, MQTT_reconnect, "ERROR: MQTT client subscribe err." );
|
||||||
mqtt_log("MQTT client subscribe success! recv_topic=[%s].", MQTT_CLIENT_SUB_TOPIC1);
|
mqtt_log("MQTT client subscribe success! recv_topic=[%s].", MQTT_CLIENT_SUB_TOPIC1);
|
||||||
|
|
||||||
|
/*4.1 <20><><EFBFBD>ӳɹ<D3B3><C9B9><EFBFBD><EFBFBD>ȸ<EFBFBD><C8B8>·<EFBFBD><C2B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||||
|
isconnect = true;
|
||||||
|
uint8_t *buf1 = NULL;
|
||||||
|
buf1 = malloc( 1024 ); //idxΪ1λʱ<CEBB><CAB1><EFBFBD><EFBFBD>Ϊ24
|
||||||
|
if ( buf1 != NULL )
|
||||||
|
{
|
||||||
|
sprintf(
|
||||||
|
buf1,
|
||||||
|
"{\"mac\":\"%s\",\"plug_0\":{\"on\":null,\"setting\":{\"name\":null}},\"plug_1\":{\"on\":null,\"setting\":{\"name\":null}},\"plug_2\":{\"on\":null,\"setting\":{\"name\":null}},\"plug_3\":{\"on\":null,\"setting\":{\"name\":null}},\"plug_4\":{\"on\":null,\"setting\":{\"name\":null}},\"plug_5\":{\"on\":null,\"setting\":{\"name\":null}}}",
|
||||||
|
strMac );
|
||||||
|
user_function_cmd_received( 0, buf1 );
|
||||||
|
|
||||||
|
for ( i = 0; i < PLUG_NUM; i++ )
|
||||||
|
{
|
||||||
|
if ( user_config->plug[i].idx >= 0 )
|
||||||
|
{
|
||||||
|
sprintf( buf1, "{\"idx\":%d,\"nvalue\":%d}", user_config->plug[i].idx, user_config->plug[i].on );
|
||||||
|
user_mqtt_send( buf1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free( buf1 );
|
||||||
|
}
|
||||||
|
|
||||||
/* 5. client loop for recv msg && keepalive */
|
/* 5. client loop for recv msg && keepalive */
|
||||||
while ( 1 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
isconnect=true;
|
isconnect = true;
|
||||||
no_mqtt_msg_exchange = true;
|
no_mqtt_msg_exchange = true;
|
||||||
FD_ZERO( &readfds );
|
FD_ZERO( &readfds );
|
||||||
FD_SET( c.ipstack->my_socket, &readfds );
|
FD_SET( c.ipstack->my_socket, &readfds );
|
||||||
@@ -346,15 +370,15 @@ void mqtt_client_thread( mico_thread_arg_t arg )
|
|||||||
MQTT_reconnect:
|
MQTT_reconnect:
|
||||||
mqtt_log("Disconnect MQTT client, and reconnect after 5s, reason: mqtt_rc = %d, err = %d", rc, err );
|
mqtt_log("Disconnect MQTT client, and reconnect after 5s, reason: mqtt_rc = %d, err = %d", rc, err );
|
||||||
mqtt_client_release( &c, &n );
|
mqtt_client_release( &c, &n );
|
||||||
isconnect=false;
|
isconnect = false;
|
||||||
user_led_set( -1 );
|
user_led_set( -1 );
|
||||||
mico_rtos_thread_msleep(100);
|
mico_rtos_thread_msleep( 100 );
|
||||||
user_led_set( -1 );
|
user_led_set( -1 );
|
||||||
mico_rtos_thread_sleep( 5 );
|
mico_rtos_thread_sleep( 5 );
|
||||||
goto MQTT_start;
|
goto MQTT_start;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
isconnect=false;
|
isconnect = false;
|
||||||
mqtt_log("EXIT: MQTT client exit with err = %d.", err);
|
mqtt_log("EXIT: MQTT client exit with err = %d.", err);
|
||||||
mqtt_client_release( &c, &n );
|
mqtt_client_release( &c, &n );
|
||||||
mico_rtos_delete_thread( NULL );
|
mico_rtos_delete_thread( NULL );
|
||||||
@@ -399,8 +423,8 @@ OSStatus user_recv_handler( void *arg )
|
|||||||
p_mqtt_recv_msg_t p_recv_msg = arg;
|
p_mqtt_recv_msg_t p_recv_msg = arg;
|
||||||
require( p_recv_msg, exit );
|
require( p_recv_msg, exit );
|
||||||
|
|
||||||
app_log("user get data success! from_topic=[%s], msg=[%ld][%s].\r\n", p_recv_msg->topic, p_recv_msg->datalen, p_recv_msg->data);
|
app_log("user get data success! from_topic=[%s], msg=[%ld].\r\n", p_recv_msg->topic, p_recv_msg->datalen);
|
||||||
user_function_cmd_received(0, p_recv_msg->data );
|
user_function_cmd_received( 0, p_recv_msg->data );
|
||||||
free( p_recv_msg );
|
free( p_recv_msg );
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
@@ -444,7 +468,7 @@ OSStatus user_mqtt_send( char *arg )
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool user_mqtt_isconnect()
|
bool user_mqtt_isconnect( )
|
||||||
{
|
{
|
||||||
return isconnect;
|
return isconnect;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user