CN104577537A - 一种基于物联网的智能wifi插座及其控制方法 - Google Patents
一种基于物联网的智能wifi插座及其控制方法 Download PDFInfo
- Publication number
- CN104577537A CN104577537A CN201410525562.8A CN201410525562A CN104577537A CN 104577537 A CN104577537 A CN 104577537A CN 201410525562 A CN201410525562 A CN 201410525562A CN 104577537 A CN104577537 A CN 104577537A
- Authority
- CN
- China
- Prior art keywords
- control module
- module
- dev
- local
- cmd
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01R—ELECTRICALLY-CONDUCTIVE CONNECTIONS; STRUCTURAL ASSOCIATIONS OF A PLURALITY OF MUTUALLY-INSULATED ELECTRICAL CONNECTING ELEMENTS; COUPLING DEVICES; CURRENT COLLECTORS
- H01R13/00—Details of coupling devices of the kinds covered by groups H01R12/70 or H01R24/00 - H01R33/00
- H01R13/66—Structural association with built-in electrical component
- H01R13/665—Structural association with built-in electrical component with built-in electronic circuit
- H01R13/6675—Structural association with built-in electrical component with built-in electronic circuit with built-in power supply
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01R—ELECTRICALLY-CONDUCTIVE CONNECTIONS; STRUCTURAL ASSOCIATIONS OF A PLURALITY OF MUTUALLY-INSULATED ELECTRICAL CONNECTING ELEMENTS; COUPLING DEVICES; CURRENT COLLECTORS
- H01R13/00—Details of coupling devices of the kinds covered by groups H01R12/70 or H01R24/00 - H01R33/00
- H01R13/66—Structural association with built-in electrical component
- H01R13/665—Structural association with built-in electrical component with built-in electronic circuit
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01R—ELECTRICALLY-CONDUCTIVE CONNECTIONS; STRUCTURAL ASSOCIATIONS OF A PLURALITY OF MUTUALLY-INSULATED ELECTRICAL CONNECTING ELEMENTS; COUPLING DEVICES; CURRENT COLLECTORS
- H01R13/00—Details of coupling devices of the kinds covered by groups H01R12/70 or H01R24/00 - H01R33/00
- H01R13/66—Structural association with built-in electrical component
- H01R13/70—Structural association with built-in electrical component with built-in switch
- H01R13/703—Structural association with built-in electrical component with built-in switch operated by engagement or disengagement of coupling parts, e.g. dual-continuity coupling part
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04M—TELEPHONIC COMMUNICATION
- H04M11/00—Telephonic communication systems specially adapted for combination with other electrical systems
Landscapes
- Engineering & Computer Science (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于物联网的智能WIFI插座及其控制方法,包括电源模块、WIFI模块和继电器开关,继电器开关与电源模块相连接,WIFI模块包括控制器,控制器内包括配置功能模块、管理控制模块和本地控制模块,配置功能模块和本地控制模块同时与继电器相连接,本地控制模块同时还与管理控制模块相连接,管理控制模块还通过无线与控制终端相连接。基于物联网的智能WIFI插座能使用户方便的对智能WIFI插座进行控制,且对智能WIFI插座的设备固件能进行不影响正常工作的更新,保证了智能WIFI插座的使用效果。本发明实用性强、易于实现。
Description
技术领域
本发明涉及一种插座,尤其是指一种基于物联网的智能WIFI插座及其控制方法。
背景技术
物联网最初在1999年提出:即通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器、气体感应器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通讯,以实现智能化识别、定位、跟踪、监控和管理的一种网络。简而言之,物联网就是“物物相连的互联网”。
现有的插座,功能较为局限,用电设备插上插座后,用户按下插座的按钮使插座与市电导通,进而使用电设备可以正常工作。而用户远离插座时,就无法主动控制插座与市电的通断,比如在在办公室,如果家中的灯忘关了,用户无法控制插座的通断,来关掉家里的灯;夏天还没有到家,用户无法控制插座的通断,来开启家里的空调。
中国专利公开号CN103647192A,公开日2014年3月19日,名称为“Wi-Fi智能插座系统”的发明专利中公开了一种Wi-Fi智能插座系统,包括插座体,所述的插座体内集成有主控MCU,与主控MCU相连的设置有定时器和继电器,继电器控制插头的开关,同时主控MCU还控制Wi-Fi模块,Wi-Fi模块通过互联网与云服务器相连,与云服务器相配的还设置有手机客户端或PC客户端。不足之处在于,该智能插座系统的功能较为单一,只能对插座的关断进行简单的控制,不能满足用户的需求。
发明内容
本发明的目的是克服现有技术中插座功能较为局限,不能满足用户远程对插座上连接的电器进行控制的缺陷,提供一种基于物联网的智能WIFI插座及其控制方法,通过该智能WIFI插座用户可以实现对电器进行远程控制,满足了用户的需求。
本发明的目的是通过下述技术方案予以实现:
一种基于物联网的智能WIFI插座,包括电源模块、WIFI模块和继电器开关,继电器开关与电源模块相连接,WIFI模块包括控制器,控制器内包括配置功能模块、管理控制模块和本地控制模块,配置功能模块和本地控制模块同时与继电器相连接,本地控制模块同时还与管理控制模块相连接,管理控制模块还通过无线与控制终端相连接。智能WIFI插座与控制终端的通信方式采用UDP的通信方式实现,UPD协议数据采用AES 128B的算法来进行加密后传输,保证通信数据的安全,提高了智能WIFI插座的安全性。控制终端通过与管理控制模块进行通信,管理控制模块发送信号至本地控制模块,本地控制模块控制继电器开关达到控制终端控制智能WIFI插座的目的。同时管理控制模块还通过对配置功能模块的控制达到对智能WIFI插座的WIFI配置工作。
作为一种优选方案,智能WIFI插座还包括自动升级模块和远程控制模块,远程控制模块与继电器相连接,自动升级模块和远程控制模块同时还与管理控制模块相连接,管理控制模块还通过无线与远程智能云端相连接。远程智能云端与管理控制模块进行通信,管理控制模块发送信号至自动升级模块或远程控制模块,远程控制模块控制继电器开关达到远程智能云端控制智能WIFI插座的目的。同时管理控制模块还通过对自动升级模块的控制达到对智能WIFI插座的固件进行升级的工作。
作为一种优选方案,控制终端为手机。
智能WIFI插座包括如下功能:
功能一:
手机APP控制继电器开关,手机APP软件会通过UDP广播来进行判断智能插座是否在局域网范围内,若判断在局域网范围内,则手机APP通过本地的UDP包对智能插座进行控制,若判断智能插座不在局域网内,则通过远程服务器再与智能插座端进行通信,达到远程开关插座继电器的功能;
功能二:
多组、多模式定时操作,嵌入式WIFI模组自带时钟,当智能插座接入远程智能云端后,会向远程智能云端取得一个当前的时区相对时间,然后以此时间为基础,自己时钟不断更新,作为智能插座当前的相对时间,然后依据此时间来执行一系列的定时等操作。
功能三:
事件推送功能,即支持继电器状态改变后,智能插座主动以事件机制推送信息到本地APP和远程智能云端等功能,本智能WIFI插座支持手动按键切换继电器开关功能,当继电器被手动切换后,插座会立即发送一个事件信息到本局域网内的APP和远程的云服务器,以实现APP上实时的显示出智能插座的开关状态,给用户提供一个很好的感知。
功能四:
自动远程更新智能插座设备固件,本智能WIFI插座的设计,支持了智能WIFI插座端固件的远程自动更新,设备做自动更新时与智能插座的正常工作是并行执行的,方便智能插座功能有更新时,可以很好的更新到旧版本的固件上,同时保证了智能插座的正常工作不受影响,且用户不会感到更新时带给用户使用的不便。
一种基于物联网的智能WIFI插座的控制方法,基于一种基于物联网的智能WIFI插座,包括如下步骤:
步骤1,管理控制模块判断智能WIFI插座的继电器是否处于工作状态,若处于工作状态,跳转至步骤2,如不处于工作状态,则跳转至步骤3;
步骤2,管理控制模块判断智能WIFI插座的连接方式,若智能WIFI插座与手机相连接,则管理控制模块激活本地控制模块,本地控制模块控制继电器;若智能WIFI插座与远程智能云端相连接,则管理控制模块激活远程控制模块,远程控制模块控制继电器;
步骤3,管理控制模块激活配置功能模块,配置功能模块与手机相连接进行通信。
作为一种优选方案,智能WIFI插座的控制方法,还包括以下步骤:
步骤4,管理控制模块定时激活自动升级模块,自动升级模块与远程智能云端进行通信。
本发明的有益效果是,基于物联网的智能WIFI插座能使用户方便的对智能WIFI插座进行控制,且对智能WIFI插座的设备固件能进行不影响正常工作的更新,保证了智能WIFI插座的使用效果。本发明实用性强、易于实现。
附图说明
图1是本发明的一种电路原理连接图;
图2是本发明的一种流程图。
其中:1、电源模块,2、控制器,3、继电器开关,4、手机,5、远程智能云端,21、配置功能模块,22、管理控制模块,23、本地控制模块,24、自动升级模块,25、远程控制模块。
具体实施方式
下面结合附图和实施例对本发明进一步描述。
实施例:一种基于物联网的智能WIFI插座,其电路原理连接图如图1所示,包括电源模块1、WIFI模块和继电器开关3,继电器开关与电源模块相连接,WIFI模块包括控制器2,控制器内包括配置功能模块21、管理控制模块22、本地控制模块23、自动升级模块24和远程控制模块25,本地控制模块同时与继电器相连接,配置功能模块和本地控制模块同时还与管理控制模块相连接,管理控制模块还通过无线与手机4相连接。远程控制模块与继电器相连接,自动升级模块和远程控制模块同时还与管理控制模块相连接,管理控制模块还通过无线与远程智能云端5相连接。
本发明控制方法的流程图如图2所示,包括如下步骤:
S1,管理控制模块判断智能WIFI插座的继电器是否处于工作状态,若处于工作状态,跳转至S2,如不处于工作状态,则跳转至S3;
S2,管理控制模块判断智能WIFI插座的连接方式,若智能WIFI插座与手机相连接,则管理控制模块激活本地控制模块,本地控制模块控制继电器S21;若智能WIFI插座与远程智能云端相连接,则管理控制模块激活远程控制模块,远程控制模块控制继电器S22;
S3,管理控制模块激活配置功能模块,配置功能模块与手机相连接进行通信;
S4,管理控制模块定时激活自动升级模块,自动升级模块与远程智能云端进行通信。
智能WIFI插座包括如下功能:
功能一:
手机APP控制继电器开关,手机APP软件会通过UDP广播来进行判断智能插座是否在局域网范围内,若判断在局域网范围内,则手机APP通过本地的UDP包对智能插座进行控制,若判断智能插座不在局域网内,则通过远程服务器再与智能插座端进行通信,达到远程开关插座继电器的功能;
功能二:
多组、多模式定时操作,嵌入式WIFI模组自带时钟,当智能插座接入远程智能云端后,会向远程智能云端取得一个当前的时区相对时间,然后以此时间为基础,自己时钟不断更新,作为智能插座当前的相对时间,然后依据此时间来执行一系列的定时等操作。
功能三:
事件推送功能,即支持继电器状态改变后,智能插座主动以事件机制推送信息到本地APP和远程智能云端等功能,本智能WIFI插座支持手动按键切换继电器开关功能,当继电器被手动切换后,插座会立即发送一个事件信息到本局域网内的APP和远程的云服务器,以实现APP上实时的显示出智能插座的开关状态,给用户提供一个很好的感知。
功能四:
自动远程更新智能插座设备固件,本智能WIFI插座的设计,支持了智能WIFI插座端固件的远程自动更新,设备做自动更新时与智能插座的正常工作是并行执行的,方便智能插座功能有更新时,可以很好的更新到旧版本的固件上,同时保证了智能插座的正常工作不受影响,且用户不会感到更新时带给用户使用的不便。
为了完成上述4个功能,配置功能模块、管理控制模块、本地控制模块、
自动升级模块和远程控制模块工作如下所述:
1. 管理控制模块:
(1)判断继电器开关情况,插座处于被添加后,若继电器被APP打开,则蓝灯亮,若继电器关闭,则红灯亮。
(2)执行WIFI插座的定时操作,当远程控制模块启动,WIFI插座的当前时间被更新之后,WIFI插座管理控制模块会判断当前需要执行的定时操作,并在定时时间到后做相应的操作。定时包括了单次时间点定时,单次时间段定时,对周的时间点循环定时和对一周内某一天时间段的定时。定义时间段的定时,可保证在这一时间段内,插座的状态保持一个定时的状态不变,如需要家里的热水器在每天早上7:30~8:00保持开启,则可设置一个7:30~8:00的时间段定时即可,设计时间段定时,可以给用户带来很多的便利。
(3)判断远程升级模块的使能,自动远程升级模块默认不开启,当服务器下发远程升级命令后,管理控制模块会启动自动升级模块线程,使能模块自动远程升级为新版本固件。
2. 配置管理模块:当APP需要配置该WIFI智能插座时,手机APP会自动连接上作为AP的WIFI模组,连接上后,通过UDP发送协议数据到WIFI模组,完成WIFI模块的WIFI配置工作,主要包括将要连接路由器的SSID和路由器的加密方式,算法和密码,同时APP会获取到WIFI插座的自身配置信息,如MAC地址,Device ID等信息,APP会将这些信息作为到云服务器绑定该WIFI插座的依据,完成WIFIF插座的WIFI配置和绑定用户的工作。
3. 本地控制模块:APP工作时,会不断的向APP所在的局域网UDP广播特定的协议数据包,周期为1min/次,当智能WIFI插座收到这个APP广播的本地数据包后,则会回复特定的协议数据,APP会根据回复的信息,判断在该局域网范围内是否有WIFI智能插座,当发现有WIFI智能插座后,会发送一条添加信息,同时设定一个AES 加密的密码,将WIFI插座添加到APP的本地控制范围内,同时,智能插座端也会将该APP的信息,如IP地址,保存到智能插座端维护的本地APP列表之内,之后,APP即对该智能插座的控制即采用本地UDP的方式进行通信控制,通信过程中的UDP数据包均用设定的AES 密码来进行加密。
本地控制模块的代码如下:
void dev_do_recv_data_local(U8 *data, int len, struct sockaddr_in *addr)
{
struct __STR_L1_CMD *l1_cmd= (struct __STR_L1_CMD *)data;
DEV_CONFIG *dev_config= &(m2m_at_config_n->un_dev_config.dev_config);
int local_index;
U8 l2_cmd_flag1;
char * mac_q;
mac_q= (char *)device_mac_addr_int;//NVRAM_ADDR_MAC;
if (l1_cmd->cmd== L1_CMD_LOCAL_BEAT)
dev_recv_local_beat(data, len, addr);
if (l1_cmd->flag.BIT.TLS!= 1)
{
if (IS_BIT_SET(dev_config->flag, FLAG_BIT_LOCAL_NEED_TLS)!= 0)
return ;
}
else
{
if ((l1_cmd->cmd== L1_CMD_LOCAL_REG)&&(IS_BIT_SET(dev_config->flag, FLAG_BIT_LOCAL_KEY_AVAI)== 0))
{
device_aes_decrypt(data, len, KEY_TYPE_OPEN);
}
else if ((((l1_cmd->cmd&0x80)==0x80)&&IS_BIT_SET(dev_config->flag, FLAG_BIT_LOCAL_KEY_AVAI)== 0))
//add for test
{
device_aes_decrypt(data, len, KEY_TYPE_OPEN);
}
else if (IS_BIT_SET(dev_config->flag, FLAG_BIT_LOCAL_KEY_AVAI)!= 0)
{
device_aes_decrypt(data, len, KEY_TYPE_LOCAL);
}
else
return ;
HF_DBG(("dev_do_recv_data_local: %s\r\n", "decrypted"));
dev_debug_print_data(data, len);
}
data_copy_cmd(data);
if (l1_cmd->RES!= 0x00)
return ;
if (l1_cmd->ver!= HF_IOTM_VER)
return ;
if (device_mac_same(data+2, (U8 *)(mac_q+4))== 0)
return ;
if (devicetype_ok(l1_cmd)== 0)
return ;
if(l1_cmd->flag.BIT.ACK == 1)
remove_waiting_cmd(l1_cmd->cmd, DEV_SENDTO_ALL_LOCAL);
switch(l1_cmd->cmd)
{
case L1_CMD_LOCAL_REG:
dev_recv_local_reg(data, len, addr);
break;
case L1_CMD_SET_NICKNAME:
dev_recv_set_nickname(data, len, addr);
break;
case L1_CMD_GET_NICKNAME:
dev_recv_get_nickname(data, len, addr);
break;
case L1_CMD_LOCAL_GET_TIME:
dev_recv_local_get_time(data, len, addr);
break;
case L1_CMD_LOCAL_UPDATE_SERVADD:
dev_recv_local_update_servadd(data, len, addr);
break;
case L1_CMD_GET_DEVICE_INFO:
dev_recv_get_device_info(data, len, addr);
break;
case L1_CMD_SET_DEVICE_RELD:
dev_recv_set_device_reld(data, len, addr);
break;
case L1_CMD_LOCAL_FAC_UPDATA: //local updata
{
dev_recv_upgrade(data, len); // server to tell device to upgrade
updata_cmd_is_recv_from_local = 1;
}
break;
case L1_CMD_LOCAL_DATA_SEND:
break;
case L1_CMD_LOCAL_DATA_CTRL:
{
local_index= find_in_local_list(addr);
HF_DBG(("dev_do_recv_data_local: local_index=%d\r\n", local_index));
if (local_index!= -1 )
{
l2_cmd_flag1= *(data+sizeof(struct __STR_L1_CMD));
if (l2_cmd_flag1== L2_FLAG1_SET)
do_data_ctrl_req_local(data, len, (U8)local_index);
else if (l2_cmd_flag1== L2_FLAG1_GET)
do_data_info_req_local(data, len, (U8)local_index);
}
break;
}
case L1_CMD_LOCAL_FAC_TEST_GET_INFO:
dev_recv_get_device_info(data, len, addr); //for factory test
break;
case L1_CMD_LOCAL_FAC_TEST_CTL:
{
local_index= find_in_local_list(addr);
HF_DBG(("dev_do_recv_data_local: local_index=%d\r\n", local_index));
if (local_index!= -1 )
{
do_data_ctrl_req_local(data, len, (U8)local_index); //for factory test
}
else
{
HF_DBG(("TEST ERROR!"));
}
break;
}
case L1_CMD_LOCAL_FAC_SET_INFO:
{
local_index= find_in_local_list(addr);
HF_DBG(("dev_do_recv_data_local: local_index=%d\r\n", local_index));
if (local_index!= -1 )
{
do_data_ctrl_fac_set_pinfo(data, len, (U8)local_index); //for factory test
}
else
{
HF_DBG(("TEST ERROR!"));
}
break;
}
default:
break;
}
}
static void device_recv_from_local(void)
{
int num;
unsigned char *c= m2m_net_recv_local;
struct sockaddr_in addr;
extern int getSystime();
memset(c, 0, DEV_LOCAL_MAXRECV_LEN);
num= udp_recv_data((char*)c, DEV_LOCAL_MAXRECV_LEN, dev_local_sock, &addr);
if (num >= 16)
{
dev_do_recv_data_local((U8 *)c, num, &addr);
}
return;
}
static U8 dev_local_select_sock()
{
fd_set fdR;
struct timeval timeout;
int ret;
U8 sel= 0;
FD_ZERO(&fdR);
if (dev_local_sock!= -1)
FD_SET(dev_local_sock,&fdR);
timeout.tv_sec= 0; // timeout shall be in while
timeout.tv_usec= 200000; // 100ms
ret= select(dev_local_sock+1,&fdR,NULL,NULL,&timeout);
//printf("After Select: ret= %d\n", ret);
if (ret<= 0)
return 0;
else if ((FD_ISSET(dev_local_sock, &fdR))&&(dev_local_sock!= -1))
sel|= 0x01;
return sel;
}
static void dev_init_udp_local_sock()
{
struct sockaddr_in addr;
HF_DBG(("init a local sock!"));
while (1)
{
if ( (dev_local_sock= socket(AF_INET, SOCK_DGRAM, 0)) < 0) //a UDP socket
{
msleep(500);
continue;
}
else
break;
}
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(DEV_LOCAL_PORT);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
bind(dev_local_sock, (struct sockaddr*)&addr, sizeof(addr));
dev_local_state= DEV_LOCAL_STATE_DISCONN;
hfnet_set_udp_broadcast_port_valid(DEV_LOCAL_PORT-1,DEV_LOCAL_PORT); //SDK Must used!
HF_DBG(("init local sock OK!"));
}
void device_udp_local_thread(void)
{
U8 sel;
dev_init_udp_local_sock();
while (1)
{
sel= dev_local_select_sock();
if (IS_BIT_SET(sel, 0)) // dev_server_sock selected
device_recv_from_local();
if(dev_local_num > 0)
{
if((l2_event_local == L2_EVENT_SETPIN)||(l2_event_local == L2_EVENT_SETALM))
{
if (((l2_event_local& 0x0f)& (L2_EVENT_SETPIN))!= 0)
{
device_send_event(L2_EVENT_SETPIN, DEV_SENDTO_ALL_LOCAL);
}
if (((l2_event_local& 0x0f)&(L2_EVENT_SETALM))!= 0)
{
device_send_event(L2_EVENT_SETALM, DEV_SENDTO_ALL_LOCAL);
}
l2_event_local= 0xf0;
}
}
msleep(100);
////////////////////////////////////////
}
}
void hfiots_start(void)
{
extern void device_udp_local_thread(void);
extern void device_udp_server_thread(void);
device_iots_para_init();
if(hfthread_create(device_hfiots_thread, "IOT_TD_1", 250, NULL, HFTHREAD_PRIORITIES_MID,NULL,NULL)!= HF_SUCCESS)
{
HF_DBG(("Create a thread failed!"));
}
if(hfthread_create(device_udp_local_thread, "IOT_TD_2",300, NULL, HFTHREAD_PRIORITIES_MID,NULL,NULL)!= HF_SUCCESS)
{
HF_DBG(("Create a thread failed!"));
}
if(cmd_read_dev_wifi_mode() ==MODULE_RUN_MODE_STA)
{
dev_wifi_run_mode_flag = MODULE_RUN_MODE_STA;
if(hfthread_create(device_udp_server_thread, "IOT_TD_3", 350, NULL, HFTHREAD_PRIORITIES_MID,NULL,NULL)!= HF_SUCCESS)
{
HF_DBG(("Ccreate a thread failed!"));
}
}
else
dev_wifi_run_mode_flag = MODULE_RUN_MODE_AP;
return;
}
4. 远程控制模块:远程控制模块首先会发送信息到远程的服务器,请求接入远程服务器,智能插座与云服务器通过C口方向的协议交互时序。
远程控制模块会更新智能插座的当前时间,每次接入时,会获取一个当前时间,后续时间依靠WIFI模组的自身时钟进行更新,作为智能插座定时操作的时间基准。远程控制模块可接受服务器发送给WIFI插座的控制命令,控制命令包括设定的定时信息和对继电器开关的操作等。每一条控制命令都采用一问一答的形式,保证了数据的稳定性,不丢包,远程采用UDP,数据实时性将会很高,控制开关将会很及时,能带给用户一个很好的体验。
远程控制模块的代码如下:
void data_ctrl_to_device(U8 *dat_in, int dat_in_len, U8 *dat_out, int *dat_out_len)
{
U16 len_tmp;
U8 l2_cmd;
*dat_out_len= 0;
if ((*(dat_in+0)== L2_FLAG1_SET)&&(*(dat_in+1)== 0/*FLAG2*/))
;
else
return ;
if (dat_in_len< 4)
return ;
Memcpy((char *)(&len_tmp), dat_in+2, 2);
len_tmp= ntohs(len_tmp);
if (dat_in_len< len_tmp+4)
return ;
l2_cmd= *(dat_in+4);
switch (l2_cmd)
{
case L2_CMD_SET_PIN:
l2_cmd_set_pin(dat_in+4, len_tmp, dat_out, dat_out_len);
break;
case L2_CMD_SET_ALARM:
l2_cmd_set_alarm(dat_in+4, len_tmp, dat_out, dat_out_len);
break;
case L2_CMD_RM_ALARM:
l2_cmd_rm_alarm(dat_in+4, len_tmp, dat_out, dat_out_len);
break;
default:
*dat_out_len= 0;
break;
}
if (*dat_out_len!= 0)
{
if (l2_cmd== L2_CMD_SET_PIN)
{
l2_event_server = L2_EVENT_SETPIN;
l2_event_local = L2_EVENT_SETPIN;
}
else if((l2_cmd== L2_CMD_SET_ALARM)||(l2_cmd== L2_CMD_RM_ALARM))
{
l2_event_server = L2_EVENT_SETALM;
l2_event_local = L2_EVENT_SETALM;
}
}
dev_debug_print_data(dat_out, *dat_out_len);
return;
}
void do_data_ctrl_req_server(U8 *data, int len, U8 sendto)
{
struct __STR_L1_CMD *l1_cmd= (struct __STR_L1_CMD *)data;
struct __STR_L1_CMD reply;
portTickType now= GetSysTimeMS();
char *L2_data;
int L2_len;
unsigned short l2_user_len;
char *L2_ret_data;//= m2m_net_recv_iots;
int L2_ret_len;
if (l1_cmd->flag.BIT.REP!= 1)
return ;
Memcpy((char *)&reply, (char *)data, sizeof(struct __STR_L1_CMD));
reply.flag.BIT.REP= 1;
reply.flag.BIT.ACK= 1;
reply.flag.BIT.L2= 1;
L2_data= (char *)(data+ sizeof(struct __STR_L1_CMD));
Memcpy((char*)&l2_user_len, (L2_data+2),2);
l2_user_len = ntohs(l2_user_len);
L2_len = 4+l2_user_len;
L2_ret_data= (char *)HFMalloc(300, 0);
memset(L2_ret_data,0,300);
if(hfiots_server_recv_FE_callback((U8 *)L2_data, L2_len, (U8 *)L2_ret_data, &L2_ret_len) == HFIOTS_USR_TRUE)
{
HF_DBG(("local recv has done in usr callback"));
}
else
{
data_ctrl_to_device((U8 *)L2_data, L2_len, (U8 *)L2_ret_data, &L2_ret_len);
}
if (L2_ret_len== 0)
{
HFFree(L2_ret_data);
return ;
}
if (sendto== DEV_SENDTO_SERVER)
dev_send_reply(&reply, (U8 *)L2_ret_data, L2_ret_len, dev_server_sock, &dev_server_addr, dev_server_TLS, KEY_TYPE_SERVER);
HFFree(L2_ret_data);
return;
}
void dev_do_recv_data_server(U8 *data, int len)
{
struct __STR_L1_CMD *l1_cmd= (struct __STR_L1_CMD *)data;
U8 * mac_q=NULL;
mac_q= (U8*)device_mac_addr_int;//NVRAM_ADDR_MAC;
U8 l2_cmd_flag1;
unsigned int index = 0;
if (l1_cmd->cmd== L1_CMD_DISCOVER_REQ)
{
dev_recv_discover_req(data, len);
HF_DBG(("recv server let dev discover request..."));
return ;
}
#if Cus_gongniu
if (l1_cmd->cmd== L1_CMD_NEED_SERVER_ERASE_DEVICE)
{
index= find_waiting_cmd(L1_CMD_NEED_SERVER_ERASE_DEVICE, DEV_SENDTO_SERVER);
HF_DBG(("~~~~~OK TO ERASE DEVICE TO SERVER:%d~~~~~",index));
if (index>= 0)
{
gn_clear_erase_flag();
device_iots_reload();
}
return ;
}
#endif
if (dev_server_TLS== 1)
{
if (l1_cmd->flag.BIT.TLS!= 1)
return ;
if (dev_server_key_av== 1)
{
if ((l1_cmd->cmd== L1_CMD_ACCESS_REQ)||(l1_cmd->cmd== L1_CMD_DISCOVER_REQ))
{
device_aes_decrypt(data, len, KEY_TYPE_OPEN);
}
else
{
device_aes_decrypt(data, len, KEY_TYPE_SERVER); // aes_decrypt
}
}
else
{
device_aes_decrypt(data, len, KEY_TYPE_OPEN);
}
}
data_copy_cmd(data);
if (l1_cmd->RES!= 0x00)
return ;
if (l1_cmd->ver!= HF_IOTM_VER)
return ;
if (device_mac_same(data+2, (U8 *)(mac_q+4))== 0)
return ;
if (devicetype_ok(l1_cmd)== 0)
return ;
dev_debug_print_data(data, len);
remove_waiting_cmd(l1_cmd->cmd, DEV_SENDTO_SERVER);
switch(l1_cmd->cmd)
{
case L1_CMD_ACCESS_REQ:
dev_recv_access_req(data, len);
break;
case L1_CMD_BEAT:
break;
case L1_CMD_TIME_REQ:
dev_recv_time_req(data, len);
break;
case L1_CMD_SEND_MODULE_INFO:
dev_recv_module_info_send_rsp(data, len); // server to update key
break;
case L1_CMD_UPDATE_SERVADD:
dev_recv_update_servadd(data, len); // server to update server address
break;
case L1_CMD_UPGRADE:
dev_recv_upgrade(data, len); // server to tell device to upgrade
break;
case L1_CMD_DATA_SEND:
break;
case L1_CMD_DATA_CTRL:
l2_cmd_flag1= *(data+sizeof(struct __STR_L1_CMD));
HF_DBG(("l2_cmd_flag1:%X ",l2_cmd_flag1));
if (l2_cmd_flag1== L2_FLAG1_SET)
do_data_ctrl_req_server(data, len, DEV_SENDTO_SERVER);
else if (l2_cmd_flag1== L2_FLAG1_GET)
do_data_info_req_server(data, len, DEV_SENDTO_SERVER);
break;
default:
break;
}
}
static void device_recv_from_server(void)
{
int num;
unsigned char *recv_data_buf_ptr= m2m_net_recv_server;
struct sockaddr_in addr;
extern int getSystime();
memset(recv_data_buf_ptr, 0, DEV_SERVER_MAXRECV_LEN);
num= udp_recv_data((char *)m2m_net_recv_server, DEV_SERVER_MAXRECV_LEN, dev_server_sock, &addr);
if (num > 0)
{
HF_DBG(( "<<____Receive from Server,cmd:0x%X______>>%s", *(recv_data_buf_ptr+0),"\r\n"));
dev_debug_print_data((U8 *)recv_data_buf_ptr, num);
dev_do_recv_data_server((U8 *)recv_data_buf_ptr, num);
}
return;
}
static U8 dev_server_select_sock()
{
fd_set fdR;
struct timeval timeout;
int ret;
U8 sel= 0;
FD_ZERO(&fdR);
if (dev_server_sock!= -1)
FD_SET(dev_server_sock,&fdR);
timeout.tv_sec= 0; // timeout shall be in while
timeout.tv_usec= 100000; // 100ms
ret= select(dev_server_sock+1,&fdR,NULL,NULL,&timeout);
if (ret<= 0)
{
return 0;
}
else if ((FD_ISSET(dev_server_sock, &fdR))&&(dev_server_sock!= -1))
sel|= 0x01;
return sel;
}
static void dev_init_udp_server_sock()
{
struct sockaddr_in addr;
ip_addr_t dest_addr;
HF_DBG(("TO init a server sock!"));
DEV_CONFIG *dev_config= &(m2m_at_config_n->un_dev_config.dev_config);
if (IS_BIT_SET(dev_config->flag, FLAG_BIT_SERV_ADDR_AVAI)) // connect to server
{
if(hf_is_ipaddress((char *)(dev_config->server_ip)) !=1 )
{
char ret;
ret = netconn_gethostbyname((char *)(dev_config->server_ip), &dest_addr);
if(ret!=/*ERR_OK*/0)
{
msleep(500);
return ;
}
}
else
{
if( inet_aton((char *)(dev_config->server_ip), (ip_addr_t *) &dest_addr) == 0)
{
//u_printf("error!\r\n");
}
}
memset(&dev_server_addr, 0, sizeof(dev_server_addr));
inet_addr_from_ipaddr(&dev_server_addr.sin_addr, &dest_addr);
dev_server_addr.sin_family = AF_INET;
dev_server_addr.sin_port = htons(dev_config->server_port);
while (1)
{
if ( (dev_server_sock= socket(AF_INET, SOCK_DGRAM, 0)) < 0) //a UDP socket
{
msleep(1000);
continue;
}
else
break;
}
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
bind(dev_server_sock, (struct sockaddr*)&addr, sizeof(addr));
dev_server_state= DEV_SERVER_STATE_CONNECTING;
HF_Debug(DEBUG_DEVICE, "Server sock %s!\r\n", "ok");
}
return;
}
void device_udp_server_thread(void)
{
U8 sel;
DEV_CONFIG *dev_config= &(m2m_at_config_n->un_dev_config.dev_config);
portTickType now = 0;
U16 beattm = 0;
U32 my_time_ms;
HF_DBG(("SERVER thread"));
while (cmd_read_is_wifi_linked()== 0)
msleep(1000);
while (!(IS_BIT_SET(dev_config->flag, FLAG_BIT_SERV_ADDR_AVAI)))
{
msleep(1000);
}
HF_Debug(DEBUG_DEVICE, "device_udp_server_thread: %d\r\n", 1);
dev_init_udp_server_sock();
if ((dev_config->beat_time== 0)||(dev_config->beat_time> 60*5)) // beat time shall less than 5 min
beattm= 60*1; // 1 mins
else
beattm= dev_config->beat_time;
HF_DBG(("beat time: %d\r\n", beattm));
my_time_ms = 0;
while (1)
{
now= GetSysTimeMS();
waiting_time= now;
my_time_ms++;
if (dev_server_state== DEV_SERVER_STATE_CONNECTING)
{
my_time_ms = 0;
device_send_cmd(L1_CMD_ACCESS_REQ, CMD_TIMEOUT_1, 1, 0xFFFF, DEV_SEND_DATA_MAX_FAILTM, DEV_SENDTO_SERVER, NULL, 0, 0xFFFF);
}
if (dev_server_state== DEV_SERVER_STATE_CONNECTED)
{
if ((dev_time_avai== 0)||(dev_time_avai== 0xff))
{
device_send_cmd(L1_CMD_TIME_REQ, CMD_TIMEOUT_1, 1, 0xFFFF, DEV_SEND_DATA_MAX_FAILTM, DEV_SENDTO_SERVER, NULL, 0, 0xFFFF);
}
else
{
if ((U32)((now-dev_time_last_update)/1000)>= (U32)(DEV_TIME_UPDATE_TM))
dev_time_avai= 0xff;
}
if (((U32)((now-module_last_send_info_time)/1000)>= (U32)(MODULE_SEND_INFO_TIME))||(is_need_first_send_devinfo_to_server > 0))
{
device_send_cmd(L1_CMD_SEND_MODULE_INFO, CMD_TIMEOUT_1, 1, 0xFFFF, DEV_SEND_DATA_MAX_FAILTM, DEV_SENDTO_SERVER, NULL, 0, 0xFFFF);
module_last_send_info_time= now;
is_need_first_send_devinfo_to_server--;
}
if ((U32)((now-dev_last_beat_time)/1000)>= (U32)(beattm))
{
HF_DBG(("Do beat"));
dev_last_beat_time= now;
}
#if Cus_gongniu
if ((dev_config->need_to_reset_server == 1))
{
HF_DBG(("~~~~~ TO NEED ERASE DEVICE~~~~~"));
device_send_cmd(L1_CMD_NEED_SERVER_ERASE_DEVICE, CMD_TIMEOUT_1, 1, 0xFFFF, DEV_SEND_DATA_MAX_FAILTM, DEV_SENDTO_SERVER, NULL, 0, 0xFFFF);
to_server_erase_flag ++;
if(to_server_erase_flag > 3)
gn_clear_erase_flag();
}
#endif
#if Cus_gongniu
if((l2_event_server == L2_EVENT_SETPIN) || (l2_event_server == L2_EVENT_SETALM))
{
if(l2_event_server == L2_EVENT_SETPIN)
{
if (device_send_event(L2_EVENT_SETPIN, DEV_SENDTO_SERVER)== 1)
l2_event_server = 0xf0;
}
else if(l2_event_server == L2_EVENT_SETALM)
{
if (device_send_event(L2_EVENT_SETALM, DEV_SENDTO_SERVER))
l2_event_server = 0xf0;
}
else if(l2_event_server == L2_EVENT_USR_DATA)
{
// if (device_send_event(L2_EVENT_USR_DATA, DEV_SENDTO_SERVER))
l2_event_server = 0xf0;
}
if(is_init_event_flag > 0)
{
if(is_init_event_flag>3)
l2_event_server = L2_EVENT_SETPIN;
else
l2_event_server = L2_EVENT_SETALM;
is_init_event_flag--; //for first time
}
}
#endif
}
if(my_time_ms*150>(beattm*1000*5))
{
dev_write_err_no_to_flash(DEV_ERR_NO_SYS_TIME_ERR);
dev_write_err_no_to_flash(dev_server_state&0xFF);
HF_DBG(("**RUN ERROR,TO RESTART:%X***",dev_server_state));
msleep(3000);
hfsys_softreset();
}
sel= dev_server_select_sock();
if (IS_BIT_SET(sel, 0)) // dev_server_sock selected
device_recv_from_server();
update_waiting_cmd();
msleep(50);
}
}
5. 自动升级模块:自动升级模块会每一段时间向云服务器上报一条UDP协议数据,该数据包含了设备的软件版本信息和硬件版本信息,MAC地址等,当服务器收到该模块的信息后会判断该WIFI插座是否需要升级,若需要升级,则云服务器会返回一个升级的配置文件信息给WIFI插座,WIFI插座在收到该升级配置信息之后,会去按照指定的配置信息,使能升级,同时升级过程中,WIFI插座的其他功能模块不受影响,将会正常工作,待自动升级模块升级成功后,会判断继电器的状态,当继电器关闭处于关闭状态时,会立即重新启动WIFI插座端固件,重新工作在新版本的固件上,若插座继电器开启,为避免开启会重启会影响已连接的家电设备的正常工作,WIFI插座会等继电器关闭之后再重新启动,切换为新版本的固件,继续工作,该设计,很好的保证了自动升级模块完全不影响智能插座的正常工作。
Claims (5)
1.一种基于物联网的智能WIFI插座,其特征是,包括电源模块、WIFI模块和继电器开关,继电器开关与电源模块相连接,WIFI模块包括控制器,控制器内包括配置功能模块、管理控制模块和本地控制模块,本地控制模块同时与继电器相连接,配置功能模块和本地控制模块同时还与管理控制模块相连接,管理控制模块还通过无线与控制终端相连接。
2.根据权利要求1所述的一种基于物联网的智能WIFI插座,其特征是,还包括自动升级模块和远程控制模块,远程控制模块与继电器相连接,自动升级模块和远程控制模块同时还与管理控制模块相连接,管理控制模块还通过无线与远程智能云端相连接。
3.根据权利要求1或2所述的一种基于物联网的智能WIFI插座,其特征是,所述的控制终端为手机。
4.一种基于物联网的智能WIFI插座的控制方法,基于权利要求2所述的一种基于物联网的智能WIFI插座,其特征是,包括如下步骤:
步骤1,管理控制模块判断智能WIFI插座的继电器是否处于工作状态,若处于工作状态,跳转至步骤2,如不处于工作状态,则跳转至步骤3;
步骤2,管理控制模块判断智能WIFI插座的连接方式,若智能WIFI插座与手机相连接,则管理控制模块激活本地控制模块,本地控制模块控制继电器;若智能WIFI插座与远程智能云端相连接,则管理控制模块激活远程控制模块,远程控制模块控制继电器;
步骤3,管理控制模块激活配置功能模块,配置功能模块与手机相连接进行通信。
5.根据权利要求4所述的一种基于物联网的智能WIFI插座的控制方法,其特征是,还包括以下步骤:
步骤4,管理控制模块定时激活自动升级模块,自动升级模块与远程智能云端进行通信。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410525562.8A CN104577537B (zh) | 2014-10-09 | 2014-10-09 | 一种基于物联网的智能wifi插座 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410525562.8A CN104577537B (zh) | 2014-10-09 | 2014-10-09 | 一种基于物联网的智能wifi插座 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104577537A true CN104577537A (zh) | 2015-04-29 |
CN104577537B CN104577537B (zh) | 2017-01-11 |
Family
ID=53093036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410525562.8A Active CN104577537B (zh) | 2014-10-09 | 2014-10-09 | 一种基于物联网的智能wifi插座 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104577537B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104994519A (zh) * | 2015-05-13 | 2015-10-21 | 小米科技有限责任公司 | 智能设备测试方法、装置及系统 |
CN105406287A (zh) * | 2015-10-08 | 2016-03-16 | 黎宜 | 一种可远程控制智能插座 |
CN106483937A (zh) * | 2015-08-26 | 2017-03-08 | 富欣实业股份有限公司 | 远程电源控制方法与系统 |
CN107566167A (zh) * | 2017-08-22 | 2018-01-09 | 上海斐讯数据通信技术有限公司 | 一种智能排插及其控制系统、方法 |
CN107666060A (zh) * | 2017-08-14 | 2018-02-06 | 昆山伊斯科特电子科技有限公司 | 一种智能定时器插座开关 |
CN108107767A (zh) * | 2018-02-01 | 2018-06-01 | 攀枝花学院 | 分布式物联网终端控制电路 |
CN108737554A (zh) * | 2018-05-29 | 2018-11-02 | 山东建筑大学 | 基于Thread协议栈的建筑设备物联网系统及终端管理方法 |
CN113448607A (zh) * | 2021-07-12 | 2021-09-28 | 青岛海尔科技有限公司 | 用于固件升级的方法、装置和智能家电 |
TWI777763B (zh) * | 2021-09-08 | 2022-09-11 | 陳瑞祥 | 多功能節電裝置 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7964989B1 (en) * | 2010-09-09 | 2011-06-21 | Green Power Technologies, Llc | Method and system for controlling power to an electrically powered device |
CN202111719U (zh) * | 2011-07-11 | 2012-01-11 | 廖超 | 一种基于无线路由的电源控制装置 |
CN102593670A (zh) * | 2011-12-06 | 2012-07-18 | 许季祥 | 智能网络控制遥控插座 |
CN102694870A (zh) * | 2012-06-08 | 2012-09-26 | 汕头市易普联科技有限公司 | 动态分配地址的网关的在线升级方法 |
CN103019181A (zh) * | 2012-11-20 | 2013-04-03 | 程亮 | 基于ZigBee无线通讯协议的物联网智能家居系统 |
CN103092172A (zh) * | 2013-01-08 | 2013-05-08 | 宁波高新区智轩物联网科技有限公司 | 一种基于云服务平台的布线式智能家居综合控制装置 |
CN103235581A (zh) * | 2013-04-23 | 2013-08-07 | 深圳先进技术研究院 | 基于无线手持终端的用电设备控制系统 |
CN203218629U (zh) * | 2013-04-03 | 2013-09-25 | 陈雪飞 | 基于wifi无线控制的插座 |
CN203339430U (zh) * | 2013-07-03 | 2013-12-11 | 深圳市蝶瑭电子商务有限公司 | 一种智能插座及其控制系统 |
CN103928799A (zh) * | 2014-04-28 | 2014-07-16 | 深圳市康凯斯信息技术有限公司 | 智能插头及具有该智能插头的家电控制系统 |
CN103997092A (zh) * | 2014-05-27 | 2014-08-20 | 福建星网锐捷通讯股份有限公司 | 一种基于手机的智能充电插座及其方法 |
-
2014
- 2014-10-09 CN CN201410525562.8A patent/CN104577537B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7964989B1 (en) * | 2010-09-09 | 2011-06-21 | Green Power Technologies, Llc | Method and system for controlling power to an electrically powered device |
CN202111719U (zh) * | 2011-07-11 | 2012-01-11 | 廖超 | 一种基于无线路由的电源控制装置 |
CN102593670A (zh) * | 2011-12-06 | 2012-07-18 | 许季祥 | 智能网络控制遥控插座 |
CN102694870A (zh) * | 2012-06-08 | 2012-09-26 | 汕头市易普联科技有限公司 | 动态分配地址的网关的在线升级方法 |
CN103019181A (zh) * | 2012-11-20 | 2013-04-03 | 程亮 | 基于ZigBee无线通讯协议的物联网智能家居系统 |
CN103092172A (zh) * | 2013-01-08 | 2013-05-08 | 宁波高新区智轩物联网科技有限公司 | 一种基于云服务平台的布线式智能家居综合控制装置 |
CN203218629U (zh) * | 2013-04-03 | 2013-09-25 | 陈雪飞 | 基于wifi无线控制的插座 |
CN103235581A (zh) * | 2013-04-23 | 2013-08-07 | 深圳先进技术研究院 | 基于无线手持终端的用电设备控制系统 |
CN203339430U (zh) * | 2013-07-03 | 2013-12-11 | 深圳市蝶瑭电子商务有限公司 | 一种智能插座及其控制系统 |
CN103928799A (zh) * | 2014-04-28 | 2014-07-16 | 深圳市康凯斯信息技术有限公司 | 智能插头及具有该智能插头的家电控制系统 |
CN103997092A (zh) * | 2014-05-27 | 2014-08-20 | 福建星网锐捷通讯股份有限公司 | 一种基于手机的智能充电插座及其方法 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104994519A (zh) * | 2015-05-13 | 2015-10-21 | 小米科技有限责任公司 | 智能设备测试方法、装置及系统 |
CN104994519B (zh) * | 2015-05-13 | 2019-01-11 | 小米科技有限责任公司 | 智能设备测试方法、装置及系统 |
CN106483937A (zh) * | 2015-08-26 | 2017-03-08 | 富欣实业股份有限公司 | 远程电源控制方法与系统 |
CN105406287A (zh) * | 2015-10-08 | 2016-03-16 | 黎宜 | 一种可远程控制智能插座 |
CN107666060A (zh) * | 2017-08-14 | 2018-02-06 | 昆山伊斯科特电子科技有限公司 | 一种智能定时器插座开关 |
CN107566167A (zh) * | 2017-08-22 | 2018-01-09 | 上海斐讯数据通信技术有限公司 | 一种智能排插及其控制系统、方法 |
CN107566167B (zh) * | 2017-08-22 | 2021-04-09 | 台州市吉吉知识产权运营有限公司 | 一种智能排插及其控制方法 |
CN108107767A (zh) * | 2018-02-01 | 2018-06-01 | 攀枝花学院 | 分布式物联网终端控制电路 |
CN108737554A (zh) * | 2018-05-29 | 2018-11-02 | 山东建筑大学 | 基于Thread协议栈的建筑设备物联网系统及终端管理方法 |
CN113448607A (zh) * | 2021-07-12 | 2021-09-28 | 青岛海尔科技有限公司 | 用于固件升级的方法、装置和智能家电 |
CN113448607B (zh) * | 2021-07-12 | 2023-06-09 | 青岛海尔科技有限公司 | 用于固件升级的方法、装置和智能家电 |
TWI777763B (zh) * | 2021-09-08 | 2022-09-11 | 陳瑞祥 | 多功能節電裝置 |
Also Published As
Publication number | Publication date |
---|---|
CN104577537B (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104577537B (zh) | 一种基于物联网的智能wifi插座 | |
CN103401102B (zh) | 智能电源插座及控制系统 | |
US11647548B2 (en) | Network access method, device, and system | |
EP3118700B1 (en) | Intelligent home control method and system based on alljoyn technology | |
US20160323689A1 (en) | Zero-touch wi-fi | |
WO2016058367A1 (zh) | 智能家居控制系统 | |
WO2016058366A1 (zh) | 智能家电的控制方法及家庭控制中心 | |
RU2663652C2 (ru) | Способ для эксплуатации коммуникационного устройства в коммуникационной сети, коммуникационное устройство, светильник, снабженный таким коммуникационным устройством | |
US9872128B2 (en) | Method of establishing stable Piconet and system of establishment of stable Piconet based on bluetooth | |
US11082238B2 (en) | Secure network authentication at a gateway for non-internet protocol enabled devices | |
WO2022143153A1 (zh) | Wi-Fi配置方法及电子设备 | |
CN107135529B (zh) | 实现ap和sta自动连接并同步ap配置修改的方法 | |
CN110636483A (zh) | 一种配网方法及系统 | |
JP2017516367A (ja) | ワイヤレスな電力計測およびメトリクス | |
CN108834197A (zh) | 一种自动同步无线局域网名称和密码的系统及方法 | |
US9590865B2 (en) | Control device and communication device | |
CN104704774B (zh) | 网络设备的自动重新配置 | |
JP2015029197A (ja) | インターネット接続システム、データ中継機能を有する携帯端末、サーバ装置、無線lan端末をインターネットに接続する接続方法、および、データ中継機能を有するコンピュータが実行するコンピュータプログラム | |
US20160330565A1 (en) | Z-wave controller shift in thermostats | |
TW201733308A (zh) | 智慧開關控制系統與方法 | |
CN113472763A (zh) | 控制指令的发送方法及装置、存储介质及电子装置 | |
WO2014187384A1 (zh) | 移动终端自动适配切换网络的方法及移动终端 | |
Lukac et al. | Bluetooth smart plug | |
WO2022022420A1 (zh) | 一种配网方法及系统 | |
González González | Study of the protocol for home automation Thread |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 315314 East District of Industrial Park, Cixi, Ningbo, Zhejiang Patentee after: Bulls group Limited by Share Ltd Address before: 315314 East District of Industrial Park, Cixi, Ningbo, Zhejiang Patentee before: Gongniu Group Co., Ltd. |