@@ -8,11 +8,13 @@ typedef struct _user_json_context_t
{
int8_t idx ;
char name [ maxNameLen ] ;
int8_t val ;
} user_json_context_t ;
void user_send ( int udp_flag , uint8_t * s )
bool json_plug_analysis ( int udp_flag , char x , cJSON * pJsonRoot , cJSON * pJsonSend ) ;
bool json_plug_task_analysis ( char x , char y , cJSON * pJsonRoot , cJSON * pJsonSend ) ;
void user_send ( int udp_flag , char * s )
{
if ( udp_flag )
user_udp_send ( s ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@ -23,6 +25,9 @@ void user_send( int udp_flag, uint8_t *s )
void user_function_cmd_received ( int udp_flag , uint8_t * pusrdata )
{
OSStatus err = kNoErr ;
char i ;
bool update_user_config_flag = false ; //<2F> <> ־λ,<2C> <> ¼<EFBFBD> <C2BC> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <C7B7> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> ´ <EFBFBD> <C2B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
bool return_flag = true ; //Ϊtrueʱ<65> <CAB1> <EFBFBD> <EFBFBD> json<6F> <6E> <EFBFBD> <EFBFBD> ,<2C> <> <EFBFBD> <EFBFBD> <F2B2BBB7> <EFBFBD>
cJSON * pJsonRoot = cJSON_Parse ( pusrdata ) ;
if ( ! pJsonRoot )
@@ -31,7 +36,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
return ;
}
//<2F> <> <EFBFBD> <EFBFBD> device report
//<2F> <> <EFBFBD> <EFBFBD> UDP<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> device report(MQTTͬ<54> <CDAC> <EFBFBD> ظ<EFBFBD> <D8B8> <EFBFBD> <EFBFBD> <EFBFBD> )
cJSON * p_cmd = cJSON_GetObjectItem ( pJsonRoot , " cmd " ) ;
if ( p_cmd & & cJSON_IsString ( p_cmd ) & & strcmp ( p_cmd - > valuestring , " device report " ) = = 0 )
{
@@ -50,44 +55,68 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
// cJSON_Delete(p_cmd);
}
//<2F> <> <EFBFBD> <EFBFBD>
//<2F> <> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cJSON * p_idx = cJSON_GetObjectItem ( pJsonRoot , " idx " ) ;
cJSON * p_description = cJSON_GetObjectItem ( pJsonRoot , " description " ) ;
cJSON * p_name = cJSON_GetObjectItem ( pJsonRoot , " name " ) ;
cJSON * p_mac = cJSON_GetObjectItem ( pJsonRoot , " mac " ) ;
//
//<EFBFBD> ж<EFBFBD> p_idx,ʹ <> <CAB9> "idx"<22> <> Ϊ<EFBFBD> <CEAA> Ҫ<EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> ʱ
for ( i = 0 ; i < PLUG_NUM ; i + + )
{
//<2F> <> <EFBFBD> Ӳ<EFBFBD> <D3B2> <EFBFBD> <EFBFBD> <EFBFBD> idxֵ<78> ж<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,<2C> <> <EFBFBD> ı <EFBFBD> <C4B1> <EFBFBD> <EFBFBD> <EFBFBD> ״̬
if ( p_idx & & cJSON_IsNumber ( p_idx ) & & p_idx - > valueint > = 0 & & p_idx - > valueint = = user_config - > plug [ i ] . idx )
{
cJSON * p_nvalue = cJSON_GetObjectItem ( pJsonRoot , " nvalue " ) ;
if ( p_nvalue & & cJSON_IsNumber ( p_nvalue ) )
{
if ( p_nvalue - > valueint ! = user_config - > plug [ i ] . on )
{
user_relay_set ( i , p_nvalue - > valueint ) ;
mico_system_context_update ( sys_config ) ; //<2F> <> <EFBFBD> 浱ǰ<E6B5B1> <C7B0> <EFBFBD> <EFBFBD> ״̬
cJSON * json_send = cJSON_CreateObject ( ) ;
cJSON_AddNumberToObject ( json_send , " idx " , user_config - > plug [ i ] . idx ) ;
cJSON_AddNumberToObject ( json_send , " nvalue " , user_config - > plug [ i ] . on ) ;
char * json_str = cJSON_Print ( json_send ) ;
user_send ( udp_flag , json_str ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
free ( json_str ) ;
cJSON_Delete ( json_send ) ;
}
}
cJSON_Delete ( pJsonRoot ) ;
return ;
}
}
//<2F> <> ʼ <EFBFBD> <CABC> ʽ <EFBFBD> <CABD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( ( p_idx & & cJSON_IsNumber ( p_idx ) & & p_idx - > valueint = = user_config - > idx ) //idx
| | ( p_description & & cJSON_IsString ( p_description ) & & strcmp ( p_description - > valuestring , sys_config - > micoSystemConfig . name ) = = 0 ) //p_description name
| | ( p_name & & cJSON_IsString ( p_name ) & & strcmp ( p_name - > valuestring , sys_config - > micoSystemConfig . name ) = = 0 ) //name
| | ( p_mac & & cJSON_IsString ( p_mac ) & & strcmp ( p_mac - > valuestring , strMac ) = = 0 ) //mac
)
{
// os_log("device enter\r\n");
cJSON * json_send = cJSON_CreateObject ( ) ;
cJSON_AddStringToObject ( json_send , " mac " , strMac ) ;
cJSON * p_nvalue = cJSON_GetObjectItem ( pJsonRoot , " nvalue " ) ;
// if ( p_nvalue && cJSON_IsNumber( p_nvalue ) )
if ( p_nvalue & & cJSON_IsNumber( p_nvalue ) )
{
// uint32 now_time = system_get_time( );
// os_log( "system_get_time:%d,%d = %09d\r\n", last_time, now_time, now_time - last_time );
// if ( now_time - last_time < 1500000 && p_idx && p_nvalue->valueint == user_rudder_get_direction( ) )
// {
//// uint32 now_time = system_get_time( ) ;
//// os_log( "system_get_time:%d,%d = %09d\r\n", last_time, now_time, now_time - last_time );
//// if ( now_time - last_time < 1500000 && p_idx && p_nvalue->valueint == user_rudder_get_direction( ) )
//// {
//// return_flag = false;
//// } else
//// {
//// user_rudder_press( p_nvalue->valueint );
//// }
//// user_json_set_last_time( );
// }
//
// if ( p_nvalue )
// {
// cJSON_AddNumberToObject( json_send, "nvalue", user_rudder_get_direction( ) );
// return_flag = false ;
// } else
// last_time = 0;
// {
if ( p_nvalue - > valueint ! = user_config - > plug [ i ] . on )
{
user_relay_set_all ( p_nvalue - > valueint ) ;
}
// }
// user_json_set_last_time( );
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> setting-----------------------------------------------------------------
cJSON * p_setting = cJSON_GetObjectItem ( pJsonRoot , " setting " ) ;
if ( p_setting )
{
@@ -96,6 +125,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
cJSON * p_setting_name = cJSON_GetObjectItem ( p_setting , " name " ) ;
if ( p_setting_name & & cJSON_IsString ( p_setting_name ) )
{
update_user_config_flag = true ;
sprintf ( sys_config - > micoSystemConfig . name , p_setting_name - > valuestring ) ;
}
@@ -103,6 +133,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
cJSON * p_mqtt_ip = cJSON_GetObjectItem ( p_setting , " mqtt_uri " ) ;
if ( p_mqtt_ip & & cJSON_IsString ( p_mqtt_ip ) )
{
update_user_config_flag = true ;
sprintf ( user_config - > mqtt_ip , p_mqtt_ip - > valuestring ) ;
}
@@ -110,6 +141,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
cJSON * p_mqtt_port = cJSON_GetObjectItem ( p_setting , " mqtt_port " ) ;
if ( p_mqtt_port & & cJSON_IsNumber ( p_mqtt_port ) )
{
update_user_config_flag = true ;
user_config - > mqtt_port = p_mqtt_port - > valueint ;
}
@@ -117,6 +149,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
cJSON * p_mqtt_user = cJSON_GetObjectItem ( p_setting , " mqtt_user " ) ;
if ( p_mqtt_user & & cJSON_IsString ( p_mqtt_user ) )
{
update_user_config_flag = true ;
sprintf ( user_config - > mqtt_user , p_mqtt_user - > valuestring ) ;
}
@@ -124,6 +157,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
cJSON * p_mqtt_password = cJSON_GetObjectItem ( p_setting , " mqtt_password " ) ;
if ( p_mqtt_password & & cJSON_IsString ( p_mqtt_password ) )
{
update_user_config_flag = true ;
sprintf ( user_config - > mqtt_password , p_mqtt_password - > valuestring ) ;
}
@@ -131,58 +165,37 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
cJSON * p_setting_idx = cJSON_GetObjectItem ( p_setting , " idx " ) ;
if ( p_setting_idx & & cJSON_IsNumber ( p_setting_idx ) )
{
update_user_config_flag = true ;
user_config - > idx = p_setting_idx - > valueint ;
os_log ( " idx:%d " , user_config - > idx ) ;
mico_system_context_update ( sys_config ) ;
}
if ( p_setting_name | | p_mqtt_ip | | p_mqtt_port | | p_mqtt_user | | p_mqtt_password | | p_setting_idx )
{
os_log ( " mico_system_context_update " ) ;
err = mico_system_context_update ( sys_config ) ;
require_noerr ( err , exit ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> 豸<EFBFBD> <E8B1B8> <EFBFBD> <EFBFBD> /deviceid
if ( p_setting_name )
{
cJSON_AddStringToObject ( json_setting_send , " name " , sys _config- > micoSystemConfig . name ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> mqtt ip
if ( p_mqtt_ip )
{
cJSON_AddStringToObject ( json_setting_send , " mqtt_uri " , user_config - > mqtt_i p ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> mqtt port
if ( p_mqtt_port )
{
cJSON_AddNumberToObject ( json_setting_send , " mqtt_port " , user_config - > mqtt_port ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> mqtt user
if ( p_mqtt_user )
{
cJSON_AddStringToObject ( json_setting_send , " mqtt_user " , user_config - > mqtt_user ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> mqtt password
if ( p_mqtt_password )
{
cJSON_AddStringToObject ( json_setting_send , " mqtt_password " , user_config - > mqtt_password ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> domoticz idx
if ( p_setting_idx )
{
cJSON_AddNumberToObject ( json_setting_send , " idx " , user_config - > idx ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> 豸<EFBFBD> <E8B1B8> <EFBFBD> <EFBFBD> /deviceid
if ( p_setting_name ) cJSON_AddStringToObject ( json_setting_send , " name " , sys_config - > micoSystemConfig . name ) ;
//<2F> <> <EFBFBD> <EFBFBD> mqtt ip
if ( p_mqtt_ip ) cJSON_AddStringToObject ( json_setting_send , " mqtt_uri " , user _config- > mqtt_ip ) ;
//<2F> <> <EFBFBD> <EFBFBD> mqtt port
if ( p_mqtt_port ) cJSON_AddNumberToObject ( json_setting_send , " mqtt_port " , user_config - > mqtt_port ) ;
//<2F> <> <EFBFBD> <EFBFBD> mqtt user
if ( p_mqtt_user ) cJSON_AddStringToObject ( json_setting_send , " mqtt_user " , user_config - > mqtt_user ) ;
//<2F> <> <EFBFBD> <EFBFBD> mqtt password
if ( p_mqtt_password ) cJSON_AddStringToObject ( json_setting_send , " mqtt_password " , user_config - > mqtt_password ) ;
//<2F> <> <EFBFBD> <EFBFBD> domoticz idx
if ( p_setting_idx ) cJSON_AddNumberToObject ( json_setting_send , " idx " , user_config - > idx ) ;
cJSON_AddItemToObject ( json_send , " setting " , json_setting_send ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> plug-----------------------------------------------------------------
char plug_str [ ] = " plug_X " ;
for ( i = 0 ; i < PLUG_NUM ; i + + )
{
if ( json_plug_analysis ( udp_flag , i , pJsonRoot , json_send ) )
update_user_config_flag = true ;
}
cJSON_AddStringToObject ( json_send , " name " , sys_config - > micoSystemConfig . name ) ;
//if (p_idx)
@@ -199,6 +212,12 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
cJSON_Delete ( json_send ) ;
}
// if ( update_user_config_flag )
// {
// mico_system_context_update( sys_config );
// update_user_config_flag = false;
// }
cJSON_Delete ( pJsonRoot ) ;
return ;
exit :
@@ -208,6 +227,142 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata )
}
/*
*<2A> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> json
*udp_flag:<3A> <> <EFBFBD> <EFBFBD> udp/mqtt<74> <74> ־λ,<2C> ˴ <EFBFBD> <CBB4> IJ<DEB8> <C4B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬ʱ,<2C> <> Ҫʵʱ<CAB5> <CAB1> <EFBFBD> ¸ <EFBFBD> domoticz
*x:<3A> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
bool json_plug_analysis ( int udp_flag , char x , cJSON * pJsonRoot , cJSON * pJsonSend )
{
if ( ! pJsonRoot ) return false ;
if ( ! pJsonSend ) return false ;
char i ;
bool return_flag = false ;
char plug_str [ ] = " plug_X " ;
plug_str [ 5 ] = x + ' 0 ' ;
cJSON * p_plug = cJSON_GetObjectItem ( pJsonRoot , plug_str ) ;
if ( ! p_plug ) return false ;
cJSON * json_plug_send = cJSON_CreateObject ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> plug on------------------------------------------------------
cJSON * p_plug_on = cJSON_GetObjectItem ( p_plug , " on " ) ;
if ( p_plug_on )
{
if ( cJSON_IsNumber ( p_plug_on ) )
{
user_relay_set ( x , p_plug_on - > valueint ) ;
if ( user_config - > plug [ x ] . idx > 0 )
{
cJSON * json_return_now = cJSON_CreateObject ( ) ;
cJSON_AddNumberToObject ( json_return_now , " idx " , user_config - > plug [ x ] . idx ) ;
cJSON_AddNumberToObject ( json_return_now , " nvalue " , user_config - > plug [ x ] . on ) ;
char * json_str = cJSON_Print ( json_return_now ) ;
user_send ( udp_flag , json_str ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
free ( json_str ) ;
cJSON_Delete ( json_return_now ) ;
}
}
cJSON_AddNumberToObject ( json_plug_send , " on " , user_config - > plug [ x ] . on ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> plug<75> <67> setting<6E> <67> Ŀ----------------------------------------------
cJSON * p_plug_setting = cJSON_GetObjectItem ( p_plug , " setting " ) ;
if ( p_plug_setting )
{
cJSON * json_plug_setting_send = cJSON_CreateObject ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> plug<75> <67> setting<6E> <67> name----------------------------------------
cJSON * p_plug_setting_name = cJSON_GetObjectItem ( p_plug_setting , " name " ) ;
if ( p_plug_setting_name )
{
if ( cJSON_IsString ( p_plug_setting_name ) )
{
return_flag = true ;
sprintf ( user_config - > plug [ x ] . name , p_plug_setting_name - > valuestring ) ;
}
cJSON_AddStringToObject ( json_plug_setting_send , " name " , user_config - > plug [ x ] . name ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> plug<75> <67> setting<6E> <67> idx----------------------------------------
cJSON * p_plug_setting_idx = cJSON_GetObjectItem ( p_plug_setting , " idx " ) ;
if ( p_plug_setting_idx )
{
if ( cJSON_IsNumber ( p_plug_setting_idx ) )
{
return_flag = true ;
user_config - > plug [ x ] . idx = p_plug_setting_idx - > valueint ;
}
cJSON_AddNumberToObject ( json_plug_setting_send , " idx " , user_config - > plug [ x ] . idx ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> plug<75> <67> setting<6E> <67> task----------------------------------------
for ( i = 0 ; i < PLUG_TIME_TASK_NUM ; i + + )
{
if ( json_plug_task_analysis ( x , i , p_plug_setting , json_plug_setting_send ) )
return_flag = true ;
}
}
cJSON_AddItemToObject ( pJsonSend , plug_str , json_plug_send ) ;
return return_flag ;
}
/*
*<2A> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> json
*x:<3A> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> y:<3A> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
bool json_plug_task_analysis ( char x , char y , cJSON * pJsonRoot , cJSON * pJsonSend )
{
if ( ! pJsonRoot ) return false ;
bool return_flag = false ;
char i ;
char plug_task_str [ ] = " task_X " ;
plug_task_str [ 5 ] = y + ' 0 ' ;
cJSON * p_plug_task = cJSON_GetObjectItem ( pJsonRoot , plug_task_str ) ;
if ( ! p_plug_task ) return false ;
cJSON * json_plug_task_send = cJSON_CreateObject ( ) ;
cJSON * p_plug_task_hour = cJSON_GetObjectItem ( p_plug_task , " hour " ) ;
cJSON * p_plug_task_minute = cJSON_GetObjectItem ( p_plug_task , " minute " ) ;
cJSON * p_plug_task_repeat = cJSON_GetObjectItem ( p_plug_task , " repeat " ) ;
cJSON * p_plug_task_action = cJSON_GetObjectItem ( p_plug_task , " action " ) ;
cJSON * p_plug_task_on = cJSON_GetObjectItem ( p_plug_task , " on " ) ;
if ( p_plug_task_hour & & p_plug_task_minute & & p_plug_task_repeat & &
p_plug_task_action
& & p_plug_task_on )
{
if ( cJSON_IsNumber ( p_plug_task_hour )
& & cJSON_IsNumber ( p_plug_task_minute )
& & cJSON_IsNumber ( p_plug_task_repeat )
& & cJSON_IsNumber ( p_plug_task_action )
& & cJSON_IsNumber ( p_plug_task_on )
)
{
return_flag = true ;
user_config - > plug [ x ] . task [ y ] . hour = p_plug_task_hour - > valueint ;
user_config - > plug [ x ] . task [ y ] . minute = p_plug_task_minute - > valueint ;
user_config - > plug [ x ] . task [ y ] . repeat = p_plug_task_repeat - > valueint ;
user_config - > plug [ x ] . task [ y ] . action = p_plug_task_action - > valueint ;
user_config - > plug [ x ] . task [ y ] . on = p_plug_task_on - > valueint ;
}
}
cJSON_AddNumberToObject ( json_plug_task_send , " hour " , user_config - > plug [ x ] . task [ y ] . hour ) ;
cJSON_AddNumberToObject ( json_plug_task_send , " minute " , user_config - > plug [ x ] . task [ y ] . minute ) ;
cJSON_AddNumberToObject ( json_plug_task_send , " repeat " , user_config - > plug [ x ] . task [ y ] . repeat ) ;
cJSON_AddNumberToObject ( json_plug_task_send , " action " , user_config - > plug [ x ] . task [ y ] . action ) ;
cJSON_AddNumberToObject ( json_plug_task_send , " on " , user_config - > plug [ x ] . task [ y ] . on ) ;
cJSON_AddItemToObject ( pJsonSend , plug_task_str , json_plug_task_send ) ;
return return_flag ;
}
unsigned char strtohex ( char a , char b )
{
if ( a > = 0x30 & & a < = 0x39 )