乐联网TCP服务器通讯协议

2014-09-17 11:20

BH4TDV    2013-07-18

 

淘宝店铺:http://bh4tdv.taobao.com/

 

乐联网http://www.lewei50.com是个很好玩的东西,你可以十分方便的将你的硬件设备的各种常用数据发到网上。

但初次接触乐联网让我十分苦恼,网站上的一些帮助手册基本是基于arduino客户端的一些教程名称,与我们一般的理解不太一样。
我们一般和服务器通讯,需要知道服务器IP,端口号,通讯协议,3要素。下面我们一起梳理一下通讯协议。了解清楚后,无论使用arduino还是其他硬件均可实现服务器通讯。
 
服务器信息
1、服务器域名tcp.lewei50.com
2、服务器端口号:9960
 
服务器后台设置准备工作:
参考文档     http://www.lewei50.com/dev/doc/126
1、注册并登录乐联网后台,记住你的userkey用户编号,图片黑体字部分。
 
 
2、添加网关设备名称,记住网关标识编号,比如02
 
 
如果你LED、继电器之类的需要服务器来控制的设备,可勾选“是否可控”。否则可不选。
API地址:http://tcp.lewei50.com:9965/?method=send&gatewayNo=02
完全复制上面的链接文字段,文字段前后不要有空格等隐含多余字符,红色部分对应网关标识编号。
公网IPtcp.lewei50.com  
完全复制上面的链接文字段,文字段前后不要有空格等隐含多余字符
 
3、添加测量设备,比如我添加了2个温度探头,分别标识为T1 T2
 
 
4、添加一个演示开关
 
 
添加控制设备完毕,会提示“网关离线”,忽略不管。
 
 
再说一遍,通过以上操作,你知道了4件事:
你的userkey用户编号,
你要操作的网关编号02
你要操作的测量设备标识T1,T2,
你要控制的设备标识POWER
 
 
 
客户端主动向服务器上传数据过程
该方法主要用于测量类型设备,比如我有2个温度探头,分别测到温度33度和96.2度。
客户端主动上传数据步骤:
 
1、连接tcp.lewei50.com 或者IP:42.121.128.216   端口号:9960
 
2、发送登录注册信息
{"method": "update","gatewayNo": "02","userkey": "6f289b7f11084520bd2aad8e425ee9b4"}&^!
 
完全复制上面的完整数据,红色部分替换成你网关的编号,绿色部分替换成你自己的userkey用户编号。
注意:发送后服务器不会有反馈响应。
 
3、发送具体数据
{"method": "upload","data":[{"Name":"T1","Value":"33"},{"Name":"T2","Value":"96.2"}]}&^!
 
完全复制上面的完整数据,红色部分替换成你设备的标识,绿色部分替换成对应的设备数据。
注意:发送后服务器不会有反馈响应。
 
4、客户端数据发送完毕可以主动断开链接。
 
实际操作验证一下
1、电脑端:建立客户端,设服务器IP,端口号,连接,发送登陆注册信息,发送具体数据33度和96.2度。
 
 
2、服务器端:后台2个温度数据更新了。
 
 
 
 
服务器控制客户端的控制设备(客户端被动上传数据,反向控制)
该方法主要用于控制类型设备,比如有一个继电器开关,标识POWER。
客户端被动上传数据步骤:
 
1、连接tcp.lewei50.com 或者IP:42.121.128.216   端口号:9960
 
2、发送登录注册信息
{"method": "update","gatewayNo": "02","userkey": "6f289b7f11084520bd2aad8e425ee9b4"}&^!
 
完全复制上面的完整数据,红色部分替换成你网关的编号,绿色部分替换成你自己的userkey用户编号。
注意:发送后服务器不会有反馈响应。
 
保持每隔40秒(注)登录注册一次,以保持服务器与客户端的链接。
注:注册连接超过1分钟,服务器会断开链接。
参考文档   http://www.lewei50.com/dev/doc/155
 
3、服务器后台,点击“我的设备----控制设备”-新建”,新建一个可控设备,标识POWER
 
 
 
3、服务器点击“控制设备”,客户端收到数据:
{"method":"send","gatewayNo":"02","userkey":"6f289b7f11084520bd2aad8e425ee9b4","f":"getAllSensors"}&^!
 
 
数据解析:通过 2号网关, Userkey 的用户,指令:读取全部设备参数。
 
客户端收到这个控制指令后,应向 TCP服务器做应答,如果不应答,服务器根据客户端连接状态情况显示超时提示,或显示客户端离线。
服务器指令列表
 
 
 
 
4、客户端应答:
 
从一个例子开始看吧,库请参考 https://github.com/lewei50/LeweiTcpClient/tree/LeweiTcpClientLite
 
这是注册的两个函数
void ledOn()
{
  client->setRevCtrlMsg("true","on");
  digitalWrite(LED_PIN,HIGH);
}
void ledOff()
{
  client->setRevCtrlMsg("true","off");
  digitalWrite(LED_PIN,LOW);
}
 
每次服务器调用这两个函数执行的时候,都要给服务器一个返回,返回值的内容就是从标红的那里赋值的。
 
赋值完了怎么用了?用SourceInsight 工程搜一下关键词setRevCtrlMsg发现
void LeweiTcpClient::setRevCtrlMsg(char* execResult,char* msg)
{
    _revCtrlResult = execResult;
    _revCtrlMsg = msg;
}
 
也就是只是赋值了_revCtrlResult,_revCtrlMsg。
继续搜_revCtrlResult,_revCtrlMsg,发现getResponse()这里用到了。
 
 
                     int len=strlen(_revCtrlResult)+strlen(_revCtrlMsg)+63;
                     //Serial.println(len);
                     commandString=(char *)malloc(len);  
                     snprintf(commandString, len, "{"method":"response","result":{"successful":%s,"message":"%s"}}&^!", _revCtrlResult, _revCtrlMsg);
                     Serial.println(commandString);
                     _clientRevCtrl.print(commandString);
 
commandString 就是客户端需要回复的格式,注意是转义符(等于
这些都在这里标注着:http://www.lewei50.com/dev/doc/155
 
 
 
 
 
 
服务器发送数据串给客户端
该方法主要用于控制类型设备,用于服务器发送一串指令,由客户端再具体解析执行。
客户端操作步骤:
 
1、连接tcp.lewei50.com 或者IP:42.121.128.216   端口号:9960
 
2、发送登录注册信息
{"method": "update","gatewayNo": "02","userkey": "6f289b7f11084520bd2aad8e425ee9b4"}&^!
 
完全复制上面的完整数据,红色部分替换成你网关的编号,绿色部分替换成你自己的userkey用户编号。
注意:发送后服务器不会有反馈响应。
 
每隔40秒(注)登录注册一次,以保持服务器与客户端的链接。
注:注册连接超过1分钟,服务器会断开链接。
 
3、服务器后台,点击“智能物联----控制命令管理”-添加执行命令”,点击测试
 
 
3、客户端收到服务器控制数据
{"method":"send","gatewayNo":"02","userkey":"6f289b7f11084520bd2aad8e425ee9b4","f":"updateSensor","p1":"123123"}&^!
 
 
客户端收到这个控制指令后,应向 TCP服务器做应答,如果不应答,服务器显示超时提示。
 
4、客户端应答:
{"method":"response","result":{"successful":true,"message":"Write serial successful 0"}}&^!
 
 
5、服务器显示OK
 
 
6、如果客户端不应答,服务器显示