氦氪JavaScript API文档
v1.0.0 by kj021320
关键词
- S表达式(SEXP):准确地说是lambdaTM代码,SEXP既是代码也是数据,这对于理解指令和后续描述的一些场景非常重要
- user_token: 用户授权识别码
- device_token: 设备授权识别码
- J1:Hekr JavaScript API
- J2:LambdaTM 虚拟机 JavaScript API
流程说明
1. 与云端交互的js-api 需要登录
2. 与app移动设备交互的js-api需要native代码支持
3. LambdaTM 虚拟机 负责解析和执行sexp数据,该协议表示形式比json更简单更便捷,而且不只是数据,可以作为代码执行
4. JS地址 : hekr.js lambdaTM.js
J1接口说明
J1-1 用户登录认证
var h = Hekr.login( { accesskey: "" , tid: "imei/uuid" , channel:"code" } );
参数
tid
- 必选;终端设备唯一id,一般传入手机imei或者ios上面的uuid,浏览器使用evercookie一类唯一标记accesskey
- 必选;用户的accesskey;见云端API C1-2channel
- 可选;通讯频道,默认是code代码频道。
返回参数
- 登录后会话信息
J1-2 websocket往云端发送数据
Hekr.wssend ( data );
代码示例:
var h = Hekr.login(...);
h.wssend("(+ 1 2 3)");
参数
data
- 往云端发送的数据,通常是S表达式
返回参数 无
J1-3 websocket云端返回数据
Hekr.wsonmessage ( new callback(data){ } ) ;
代码示例:
var h = Hekr.login(...);
h.wssend("(+ 1 2 3)");
h.wsonmessage(
new callback(evt){
alert(evt.data);
}
);
请求参数
callback
- 回调函数接口data
- 云端返回的数据,通常是S表达式
返回参数 无
J1-4 tcpsocket云端发送数据(需要native代码支持)
Hekr.tcpsend( { data:data } );
代码示例:
var h = Hekr.login(...);
h.tcpsend(
{
data:"(+ 1 2 3)"
}
);
请求参数
data
- 云端发送数据
返回参数 无
J1-5 tcpsocket云端接收数据(需要native代码支持)
Hekr.tcprecv( new callback(data){ } );
代码示例:
var h = Hekr.login(...);
h.tcpsend(
{
data:"(+ 1 2 3)"
}
);
h.tcprecv(
new callback(data){
alert(data);
}
);
请求参数
callback
- 回调函数接口data
- 云端返回的数据
返回参数 无
J1-6 udp局域网数据发送(需要native代码支持)
暂无
J1-7 udp局域网数据接收(需要native代码支持)
暂无
J1-8 wifi一键连接(需要native代码支持)
Hekr.hekrconfig( { ssid : "ssid" , password : "password" , time:second } );
hekrconfig wifi配置技术,采用最先进的技术,能够1秒完成wifi ssid和密码传递。
请求参数
ssid
- wifi ssidpassword
- wifi 密码time
- 连续发送多少秒?
返回参数
- 无
J1-9 接收云端组播数据
Hekr.onmessage( function( uid , tid , listdata ){
} );
代码示例:
var h = Hekr.login(...);
h.onmessage( function( uid , tid , listdata ){
console.log(listdata);
} );
uid
广播的用户IDtid
广播的设备唯一IDlistdata
- 广播的数据集合列表
返回参数
- 无
J2接口说明
J2-1 LambdaTM 数据读取解析
var r = new LambdaTM.LambdaTMReader(
new LambdaTM.StringReader('( "asdasdsadsad" "sssssssss" 1 2 3 )')
);
var lisp = r();
请求参数
字符串
- 必选
返回参数
- lisp读取对象;
- 读取之后会获取SEXP对象
J2-2 LambdaTM 数据解析为列表
var list = LambdaTM.sexp2list( lispdata );
代码示例:
var r = new LambdaTM.LambdaTMReader(
new LambdaTM.StringReader('( "asdasdsadsad" "sssssssss" 1 2 3 )')
);
var lisp = r();
LambdaTM.sexp2list(lisp);
请求参数
lisp
- 必选;lisp对象,sexp数据
返回参数 无
J2-3 LambdaTM 宏执行数据
该方法会把第一个符号当作宏执行,其后的数据作为参数
LambdaTM.calljsmacro(lisp);
代码示例:
var r = new LambdaTM.LambdaTMReader(new LambdaTM.StringReader('(add 1 2 3)')) ;
var lisp = r();
function add(x,y,z){
return x+y+z;
}
LambdaTM.calljsmacro(lisp);
请求参数
lisp
- 必选;lisp对象,sexp数据
返回参数
- 宏执行结果
J2-3 LambdaTM 运行数据
该方法会把第一个符号当作函数执行,其后的数据作为参数,函数通过env中查找获取
LambdaTM.LispEval.lisp_eval( env , lisp );
代码示例:
var env = new LambdaTM.Env();
add = function (){
this.apply = function ( env, args){
return Util.proxycall(this.fun,env,args);
}
this.fun = function(env , b , c , d , e){
return b + c + d + e;
}
return this;
}
add.prototype = new LambdaTM.LambdaFunction();
env.setLocal("add",new add());
var r = new LambdaTM.LambdaTMReader(
new LambdaTM.StringReader('(add 1 2 3 (add 2 3 4 5) )')
);
var lisp = r();
LambdaTM.LispEval.lisp_eval( env , lisp );
请求参数
lisp
- 必选;lisp对象,sexp数据
返回参数
- lisp执行结果
J3 JSSDK
所有接口均置于Hekr命名空间下
Base
SDK 加载
Event:"HekrSDKReady"
- SDK加载完毕时会发送此信号,所有SDK相关逻辑必须等到该信号发出后才可执行
代码示例:
function onSDKReady(callback){
if (Hekr && Hekr.ready){
callback(Hekr);
}else{
document.addEventListener('HekrSDKReady', function() {
callback(Hekr);
}, false);
}
};
onSDKReady(function(sdk){
.....
});
平台
plantform
- 当前平台 目前仅支持
iOS
,Android
,web
打开第三方应用
open(schemeurl)
参数
schemer
第三方应用的scheme URL 如tel://10086
页面控制
打开新页面
- openType:
push
新页面加载,current
当前页加载, 默认在当前页面加载
http://hekr.me/templates/1/content.html?openType=push
- showNavBar:
true
orfalse
显示系统原生导航栏,默认不显示 仅iOS
关闭页面
close(animation)//关闭当前页面
closeAll()//关闭该页面之后的所有页面
window.close() 将默认调用Hekr.close(true)
参数
+ animation
:true
or false
是否显示动画 仅支持openType=push
打开的新页面
页面回退
backTo(path,animation)//回退到指定页面,如果不存在该页面则什么也不做
参数
path
页面路径animation
是否展示动画
示例代码
Hekr.backTo("home/index.html",true) //回退到home页
J3-2 设备
设备列表
getDevices(callback(list,error))
参数
callback
回调函数 参考C1-3
代码示例:
Hekr.getDevices(function(list,error)){
if (list){
....
}
}
设备重命名
renameDevice(tid,name,callback(ret,error))
参考C1-5
回调参数
+ ret
: true
or false
+ error
:错误信息
参数
+ tid
设备ID
+ name
名字
+ callback
回调函数
设备解绑
removeDevice(tid,callback)
参考C1-18
回调参数
+ ret
:true
or false
参数
+ tid
设备ID
+ callback
回调函数
检查设备固件更新
checkDeviceUpdate(tid,mid,version,type,callback)
参考C2-4
回调参数
+ json
:更新信息
+ error
:错误信息
参数
+ tid
设备ID
+ mid
设备型号ID
+ version
设备当前固件版本
+ type
设备当前固件版本类型
+ callback
回调函数
设备报警信息
warningList(tid,callback)
回调参数
+ list
报警信息列表
参数
+ msg
反馈信息
+ callback
回调
控制
设备控制
sendMsg(tid,msg,type)
- 如果
type
==auto
本接口将根据设备所处环境自动决定使用局域网控制还是使用云端转发
参数
tid
设备IDmsg
sexp表达式 参考C3-9codetype
发送方式local
本地,cloud
云端 ,auto
自动选择(默认)- 无返回值 参照J3-4获得设备状态反馈
代码示例:
Hekr.sendMsg("xxxxx","(+1 1)");
设备状态回馈
setMsgHandle(tid,handle(str))
- 接收消息转发 同一页面多次调用同一设备将覆盖旧的handle
回调参数
+ str
: 设备下发的onmessage信息
参数
tid
设备IDhandle
回调函数 参考C33
代码示例:
Hekr.setMsgHandle("xxxxx",function(str){
});
授权
设备授权列表
deviceAuthList(tid,callback)
回调参数
+ list
授权信息列表
参数
+ tid
设备ID
取消授权
deviceDeauth(tid,from,grant,callback)
回调参数
+ ret
true
orfalse
是否成功
参数
+ tid
设备ID
+ from
授权用户ID
+ grant
被授权用户ID
+ callback
回调
设备授权
deviceAuth(tid,grant,desc,callback)
回调参数
+ ret
true
orfalse
是否成功
参数
+ tid
设备ID
+ grant
被授权用户ID
+ desc
介绍
+ callback
回调
定时
创建定时任务
createScheduler(tid,name,cronexpr,code,desc,callback)
回调参数
+ obj
定时任务信息
参数
+ tid
设备ID
+ name
定时任务名字
+ cronexpr
任务计划执行 Quartz Cron表达式
+ code
执行代码
+ desc
介绍
+ callback
回调
定时任务列表
schedulerList(tid,callback)
回调参数
+ list
定时任务列表
参数
+ tid
设备ID
+ callback
回调
分组
设备分组
setGroup(tid,gid,name,callback(ret,error))
参考C1-12
回调参数
+ ret
: true
or false
+ error
:错误信息
参数
tid
设备IDgid
分组IDname
分组名字callback
回调函数
获取所有分组
getGroups(callback(list,error))
参考C1-9
回调参数
+ list
: 分组信息数组
+ error
:错误信息
参数
callback
回调函数
创建分组
createGroup(name,callback(ret,error))
参考C1-8
回调参数
+ ret
: true
or false
+ error
:错误信息
参数
name
分组名字callback
回调函数
重命名分组
renameGroup(gid,name,callback(ret,error))
参考C1-11
回调参数
+ ret
: true
or false
+ error
:错误信息
参数
gid
分组IDname
分组名字callback
回调函数
删除分组
removeGroup(gid,callback(ret,error))
参考C1-10
回调参数
+ ret
: true
or false
+ error
:错误信息
参数
gid
分组IDcallback
回调函数
J3-11 设备配置
一键配置
config(ssid,pwd,callback(ret,error))
- 该接口自动判断使用
一键配置
或软ap
参考M2-1
回调参数
+ ret
: true
or false
+ error
:错误信息
参数
ssid
wifi名字pwd
wifi 密码callback
回调函数
手机是否已连接软AP
isConnectSoftAP(callback(ret))
参考M2-3
回调参数
+ ret
: true
or false
+ error
:错误信息
参数
callback
回调函数
获取AP列表
getAPList(callback(list,error))
参考M2-4
回调参数
+ list
: ap信息列表
+ error
:错误信息
参数
callback
回调函数
取消一键配置
cancelConfig()
取消正在进行中的一键配置 参考M2-2
用户
当前用户
currentUser(callback(user))
获取当前已登录用户
回调参数
+ user
: 用户信息
{"uid":"xxxxxx"}//用户已登录
//or
undefined //用户未登录
参数
callback
回调函数 当前用户信息如果未登录则返回undefined
匿名登录
guestLogin(callback)
以客户身份登录
回调参数
+ obj
成功
:用户信息 失败
:undefined
登出
logout()
登出用户 将会触发onUser
回调
用户改变
onUser(callback(user))
当用户发生改变时则调用callback
回调参数
+ user
: 用户信息
{"uid":"xxxxxx"}//用户已登录
//or
undefined //用户未登录
参数
callback
回调函数
获取用户配置
getPreferences(callbck)
参考C1-16
回调参数
+ config
:JSON格式配置信息
+ error
:错误信息
参数
callback
回调函数
更新用户配置
setPreferences(json,callback)
参考C1-17
回调参数
+ json
:用户配置信息JSON数据
+ ret
:true
or false
参数
callback
回调函数
其它
本地数据存储
saveConfig(obj)
将数据存在本地 即使用户清除缓存也不会丢失 只支持存储JSON数据 图片等大型数据请存储在服务器上
参数
+ obj
JSON数据(js object)
本地数据获取
getConfig(callback)
取得J3-25存储的数据
回调参数
+ obj
J3-25存储的数据
参数
+ callback
回调函数
用户反馈
report(msg,callback)
回调参数
+ ret
true
orfalse
是否成功
参数
+ msg
反馈信息
+ callback
回调
通知(跨页面数据传递)
notify(data)
参数
+ data
传递的数据
通知回调(跨页面数据传递)
setNotifyHandel(func)
参数
+ func
回调data
J3快速开始
JSSDK提供App底层服务和面向用户的底层API,开发者可以使用我们API开发出个性化定制设备页面,我们对于开发者的要求是:
- 有一定的Html + Css + JavaScript等前端基础
- 熟悉HTML5的开发技术
- 熟悉Android或iOS的webview调试技巧
SDK
下载地址 iOS android(稍后推出)
准备工作
- 该SDK需要您的本机提供一个可访问的HTTP静态服务器,如 apache, nginx, IIS, Node 等
- 下载 iOS SDK demo
模块开发
目录结构
MODEL_NAME (设备的model id)
├── version (版本号)
├── index.html (入口文件)
├── style
│ ... xxx.css
├── scripts
│ ... xxx.js
├── images
│ ... xxx.png
version
版本号标识文件 文本内容 如:1.0.0
index.html
入口文件 SDK加载该页面作为该模块展示页style
scripts
images
样式 业务逻辑 和 资源文件
调试运行
-
部署模块目录到HTTP服务器
-
如下图 替换
startPagePath
为HTTP服务器上模块入口地址,运行demo工程即可开始调试 -
页面调试方法 运行demo后即可在
Safari
开发菜单中找到相关web页的调试工具入口
发布
请联系我公司相关业务人员