查看智能插座的源代码
←
智能插座
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== APP 与云通信 == === 注册验证 === APP 第一次运行提示用户注册,输入 email 和 password,调用: API: /v2/node 参数: <source lang=bash> {"email": "EMAIL", "password": "PASSWORD"} </source> 返回 uuid (整个平台的唯一识别码): <source lang=bash> {"uuid": "xxxxxxxxxxxxxxxxxx"} </source> 例子: <source lang=bash> $ cat user-signup POST /v2/node HTTP/1.1 Accept: */ * Content-Length: 52 Content-Type: text/html Connection: close {"email":"comcat@icamgo.com","password":"12341234"} #--------------------------------------------------- $ cat user-signup | nc cos.icamgo.com 998 HTTP/1.0 200 OK Date: Sun, 26 Apr 2015 02:42:26 GMT Content-Type: text/html; charset=utf-8 X-Catalyst: 5.90075 Content-Length: 32 {"uuid":"comcat@icamgo.com00"} </source> 用户 nodid 的生成算法:用户 email 地址作为 nodid,19位,不够补0,多了截掉。如:jiankemeng@gmail.com,nodid 为:jiankemeng@gmail.co 注册成功后,APP 加密 email 和 password 并存入本地,下次启动APP,首先检查本地,如有缓存,直接进入 APP,无需再输入 email 和 password <br><br> === 权限验证 === 每次的请求,都会生成一个 Token,云端验证这个 Token 是否合法 用户注册无需 Token,但后面的激活、控制等操作,就需要在 HTTP 的 header 里加入 Token 了 ==== PHP 实现 ==== <source lang=php> define("UUID", "comcat@icamgo.com00"); # 用户用 email 注册后,生成的 nodid define("PKEY", "12341234"); # 用户密码 function gen_token() { static $ts = 0; $tmp = time(); if ($tmp > $ts) { $ts = $tmp; } else { $ts += 1; } $iv = '12345678'; $ctx = sprintf("%s%08X", UUID, $ts); $td = mcrypt_module_open(MCRYPT_BLOWFISH,'','cbc',''); mcrypt_generic_init($td, PKEY, $iv); $encrypted = mcrypt_generic($td, $ctx); mcrypt_generic_deinit($td); $token = unpack("H*", $encrypted); return $token[1]; } </source> ;用法示例: <source lang=php> $token = gen_token(); $con = curl_init('http://cos.icamgo.com:998/v2/node/activate'); $body = '{"uuid":' . $uuid . '"}'; $header = array( "Accept: */ *", "nodid: " . NODID, "token: " . $token, "Content-Type: text/html", "Content-Length: " . strlen($body), "Connection: close" ); curl_setopt($con, CURLOPT_RETURNTRANSFER, 1); curl_setopt($con, CURLOPT_HTTPHEADER, $header); curl_setopt($con, CURLOPT_POST, 1); curl_setopt($con, CURLOPT_POSTFIELDS, $body); curl_setopt($con, CURLOPT_TIMEOUT, 6); $ret = curl_exec($con); </source> <br><br> === 激活 === 用户关联(添加)插座,视为激活插座 一个用户可能有多个插座,把插座的 UUID 生成为条形码或者二维码,添加插座时,建议实现为:直接在 APP 里扫码添加。 APP 扫描二维码后,解析出 UUID ,作为调用如下 cloud api 的参数 API: /v2/node/activate 参数: {"uuid":"xxxxxxxxxxxxxxxxxxx"} 例子: <source lang=bash> POST /v2/node/activate HTTP/1.1 Accept: */ * nodid: comcat@icamgo.com00 token: EE9B1A53F2F2EAF355DF9B772F7DBC3849896A38A7A081D480FF504E5AFDD54F Content-Length: 30 Content-Type: text/html Connection: close {"uuid":"88F6D02F5246F1EE0YL"} #--------------------------------------------------- $ cat user-activate-dev | nc cos.icamgo.com 998 HTTP/1.0 200 OK Date: Thu, 30 Jul 2015 05:52:24 GMT Server: HTTP::Server::PSGI Content-Type: text/html; charset=utf-8 X-Catalyst: 5.90075 Content-Length: 25 User add device success! </source> <br><br> === 用户的所有插座 === APP 获取当前用户名下的所有插座的 UUID (设备唯一串号): API: /v2/node/downnodes 参数: 无 例子: <source lang=bash> $ cat user-dev-list GET /v2/node/downnodes HTTP/1.1 Accept: */ * nodid: comcat@icamgo.com00 token: EE9B1A53F2F2EAF355DF9B772F7DBC3849896A38A7A081D480FF504E5AFDD54F Content-Length: 0 Content-Type: text/html Connection: close #--------------------------------------------------- $ cat user-dev-list | nc cos.icamgo.com 998 HTTP/1.0 200 OK Date: Thu, 30 Jul 2015 06:04:35 GMT Server: HTTP::Server::PSGI Content-Type: text/html; charset=utf-8 X-Catalyst: 5.90075 Content-Length: 24 ["88F6D02F5246F1EE0YL"] </source> <br><br> === 控制 === ;;这部分需要类似 PUSH 的实时消息同步,主要在设备和 APP 间 API: /v2/node/state 例子: ;;APP 改变插座状态: <source lang=bash> $ cat user-ctrl-dev POST /v2/node/state HTTP/1.1 Accept: */ * nodid: comcat@icamgo.com00 token: EE9B1A53F2F2EAF355DF9B772F7DBC3849896A38A7A081D480FF504E5AFDD54F Content-Length: 42 Content-Type: text/html Connection: close {"uuid":"88F6D02F5246F1EE0YL","value":55} #--------------------------------------------------- $ cat user-ctrl-dev | nc cos.icamgo.com 998 HTTP/1.0 200 OK Date: Thu, 30 Jul 2015 06:11:21 GMT Server: HTTP::Server::PSGI Content-Type: text/html; charset=utf-8 X-Catalyst: 5.90075 Content-Length: 16 Pushed success! </source> ;;APP 获取插座状态: <source lang=bash> $ cat user-check-dev GET /v2/node/state HTTP/1.1 Accept: */ * nodid: comcat@icamgo.com00 token: EE9B1A53F2F2EAF355DF9B772F7DBC3849896A38A7A081D480FF504E5AFDD54F Content-Length: 30 Content-Type: text/html Connection: close {"uuid":"88F6D02F5246F1EE0YL"} #--------------------------------------------------- $ cat user-check-dev | nc cos.icamgo.com 998 HTTP/1.0 200 OK Date: Thu, 30 Jul 2015 06:16:51 GMT Server: HTTP::Server::PSGI Content-Type: text/html; charset=utf-8 X-Catalyst: 5.90075 Content-Length: 47 {"timestamp":"2015-07-30T14:11:21","value":55} </source> <br><br> === 心跳检查 === API: /v2/node/beacon 参数: 无 例子: <source lang=bash> $ cat user-check-beacon GET /v2/node/beacon HTTP/1.1 Accept: */ * nodid: comcat@icamgo.com00 token: EE9B1A53F2F2EAF355DF9B772F7DBC3849896A38A7A081D480FF504E5AFDD54F Content-Length: 30 Content-Type: text/html Connection: close {"uuid":"88F6D02F5246F1EE0YL"} $ cat user-check-beacon | nc cos.icamgo.com 998 HTTP/1.0 200 OK Date: Thu, 30 Jul 2015 09:44:19 GMT Server: HTTP::Server::PSGI Content-Type: text/html; charset=utf-8 X-Catalyst: 5.90075 Content-Length: 33 {"beacon":"2015-07-30T17:19:46"} </source> <br><br> === 计划任务 === API: /v2/node/state 参数: <source lang=bash> {"uuid":"xxxxxxxxxxxx","timer":"xxxxxxxx"} </source> <br><br>
返回到
智能插座
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面