Exosite平台的命令行界面。

exoline的Python项目详细描述


外显子系[PYPI版本](https://badge.fury.io/py/exoline.svg)(http://badge.fury.io/py/exoline)[![PYPI](https://img.shields.io/PYPI/dm/exoline.svg)](!)[在https://gitter.im/exosite/exoline](https://badges.gitter.im/join%20chat.svg)加入聊天室](https://gitter.im/exosite/exoline?utm_source=badge&utm_medium=badge&utm_campaign=pr badge&utm_content=badge

exoline是exosite[one platform]的命令行界面(http://exosite.com/products/onep)。这里有一个[视频介绍](http://docs.exosite.com/video s/using exoline)。

![外显行树功能的命令行用法](images/twee-example.png)


installation
----


install the latest released version of exoline from pypi.

```
$sudo pip install--upgrade exoline
```

pip是python的包管理器。要获得pip,请在mac os x中尝试"sudo easy_install pip",在ubuntu中尝试"sudo apt get install python setuptools;sudo easy_install pip"。请参阅下面的Windows说明。

以下是如何从源代码安装:

````
$git clone git://github.com/exosite/exoline
$cd exoline
$python setup.py install
````

[virtualenvwrapper](http://virtualenvwrapper.readthedocs.org/en/latest/)是一个很好的方法管理python环境,避免使用sudu进行包安装。

exoline支持python 2.6及更高版本。(测试运行在2.6、2.7、3.2、3.3和3.4版本上。)


安装-Windows
——


对于Windows安装程序,请查看[此处](https://github.com/exosite/exoline/releases/)。

要从PYPI安装,首先安装先决条件:

-[python](http://www.python.org/downloads/windows/)

-[pip win](https://sites.google.com/site/pydatalog/python/pip-for-windows)(或者,您可以单独安装[setuptools](https://pypi.python.org/pypi/setuptools)和[pip](https://pypi.python.org/pypi/pip)。pip win只保存了几个步骤。)

安装pip win后,将弹出一个gui窗口。若要安装exoline,请在命令字段中键入
`pip install exoline'。



```
$sudo pip install exo line--upgrade
````

usage
----

`````
exoline--exosite iot命令行
https://github.com/exosite/exoline

用法:
exo[--help][options]<;command>;[<;args>;..]

commands:
read从资源中读取数据。
在当前时间写入写入数据。
在指定时间记录写入数据。
从传递到stdin(with-)、
或使用命令行速记(其他变体)的json描述创建资源。
列出客户端子级的RID。
info以JSON格式获取资源的元数据。
根据stdin上传递的JSON描述更新资源。
映射将别名添加到资源。
取消映射从资源。
查找根据资源的别名cik查找资源的rid。
删除(永久删除)资源。
刷新从资源中删除时间序列数据。
使用情况显示一段时间内一个平台资源的使用情况。
树显示资源的子代。
显示资源的子代。像树一样,但更难以实现。
查找搜索资源的子代以查找匹配项。
脚本上载lua脚本
spark显示点之间的间隔分布。
复制生成客户端副本。
diff显示两个点之间的差异客户端。
ip获取服务器的ip地址。
使用http数据api读取或写入数据。
门户无效通过告诉portals
在由<;cik>;.
共享生成允许非所有者访问资源的代码
吊销吊销共享代码
激活激活共享代码
停用停用共享代码
克隆创建客户端的克隆
别名获取数据端口cik中的别名
转储使用客户端的所有数据写入zip文件
键从~/.exolinerc
makeshortcuts从客户端生成快捷方式列表
ndup在数据端口中复制值
model manage client model s for a子域(alpha)
sn manage serial number(alpha)
content manage content,例如固件映像,用于模型(alpha)
搜索搜索资源名称、别名、序列号,脚本内容
spec通过映射所有值(alpha)


选项:
--host=<;host>,确定客户端是否与规范(beta)匹配一个主机。默认值为$exo_host或m2.exosite.com
--port=<;port>;onep port。默认值为$exo_port或443
-c--config=<;file>;配置文件默认值为$exo_config或~/.exoline
--http timeout=<;sec>;http timeout[默认值:60](复制默认值为480)
--启用https(不推荐,默认为https)
--http禁用https
--user agent=<;ua>;设置传出请求的用户代理头
--debug显示调试信息(异常时的堆栈跟踪)
-d--debughttp打开pyonep中的调试级别日志记录
--curl显示请求的curl调用。意味着--debughttp
--stdout和stderr中的离散模糊rid
-e--clearcache在运行命令后使门户缓存失效
--portals=<;server>;portals server[默认值:https://portals.exosite.com]
-t--vendoken=<;vt>;供应商令牌(/admin/home in portals)
-n--vendor=<;vendor>;供应商标识符(/admin/managemodels in portals)
(参见http://github.com/exosite/exoline provisioning)
-h——帮助显示此屏幕
-v——版本显示版本

--有关特定命令的详细信息,请参阅"帮助"。
```



示例
——


显示客户端的树视图

````
$exo tree 5de0cfc7b5bed2ea7a8012345678901233456789
dev client cik:5de0cfc7b5bed2ea7a8012345678901233456789(别名:(请参阅父项))
——设备1客户端CIK:970346D3391A2D8C703A10234567890123456789(别名:[设备1])
设备2客户端CIK:E95052AB56E985E6807d01245678901233456789(别名:[设备2])
JSON字符串数据端口RID:82209D5888A3BD1530D201234567890123456789(别名:['json'])
```

show a tree view of a client with values

```
$exo tree 2ca4f441538c1f2cc8bf01234567890123456789--values
arduinowifi client cik:2ca4f441538c1f2cc8bf01245678901233456789(别名:请参阅父项)
事件字符串数据端口rid:f264984bc4f9cf205e8801234567890123456789(别名:["event"],值:button/1年前)
气体整数数据端口rid:5c9d695fdbe1503c662201234567890123456789(别名:["gas"],值:263/1年前)
——湿度浮动数据端口RID:4fa572ba020cd921038801245678901233456789(别名:["湿度"],值:71.7/1年前)
——图像URL字符串数据端口RID:76143aaf0930802775e201234567890123456789(别名:["图像URL"],值:http://exosite.co../1年前)
Light Integer数据端口RID:8dc131ea3fff528b122301234567890123456789(别名:["light"],value:1/1年前)
——元数据字符串数据端口rid:e93eea75d58615e78e8f01234567890123456789(别名:["metadata"],值:{"foo":"bar","baz…/1年前)
——温度浮动数据端口rid:3bbee56c446f546b5469012456789045678901233456789(别名:["temperature"],值:22/1几年前)
```

write lua script

````
$exo script translate\u gps.lua e469e36ff9c8ed9176bc05ed7fa40daaaaaaa
更新脚本rid:6c130838e14903f7e12d39b5e76c8e3aaaaaaaa
``

阅读lua脚本[jq](http://stedolan.github.io/jq/)

````
$exo info e469e336ff9c8ed9176bc05ed7fa40daaaaaaa translate_gps.lua--include=description jq-r.description.rule.script
````

监视脚本的调试输出

``````
$exo read e469e36ff9c8ed9176bc05ed7fa40daaaaaaatranslate_gps.lua——按照
2013-07-09 11:57:45,第2行:运行translate_gps.lua…
2013-07-09 12:00:17,"第12行:新4458.755987,N,09317.538945,W
第23行:写入4458.755987_09317.538945"
2013-07-09 12:15:41,"第12行:新4458.755987,N,09317.538945,第23行:写44558.755987-09317.538945"
````


>写原始数据

````
``````
>$exo写e469e36e36ff9e36e36ff9ed9176bc05ed7fa40daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa69e36ff9e36e363c8ed9176c9176c9176c9176c9176c9176c57575757575757575759919176e9176e36 exo记录e469e336ff9c8ed9176bc05ed7fa40daaaaaaaaaaa gps raw-
````

将数据从多个数据端口读取到与excel兼容的csv

```
$time exo read 2ca4f44153c1f2cc8baaaaaaaaaaaaaaaaa气体温度湿度事件--timeformat=excel--start=5/1/2013--end=8/1/2013--limit=10000>;all data.csv

real 1M58.377s
user 0m10.981s
sys 0m0.506s

$wc-l alldata.csv
316705 alldata.csv
``````

clientdump.zip
infotree.json:3资源
b4a243a16c702cacccc991c8b771ef838623445db.json
dump.json
{"点":88,"错误":[],"资源":3}
$unzip-l clientdump.zip
存档:clientdump.zip
长度日期时间名称
----
1772 12-30-14 15:27 infotree.json
2212 12-30-14 15:27 dataport.b4a243a16c702cacccc991c8b771ef838623445db.json
75 12-30-14 15:27 dump.json
----
4059 3个文件
```




使用RID ED6C3F…在具有CIK E469E3的门户网站内部,使用CIK E469E369E369E369E336FF9E469E336FF9C8ED9176BC057FA40DAAAAAAAAAAAAAAAAAA——RID=ED6C3FACB6A6AC68C4DE9A69A6996A89594AAAAAAAAAAAAAA
CIK:C81E6AE0FB0FBBD7E9635E6AE0FBBD7E9635AA74053B36AAAAAAAAAAAAAAAAAA
RID:9635AA74053A374053B3B3AB683B6A0FB8187AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
:9681E6E6AE0AE000EB000FB000FB0FBBD7FBFBE3…到另一个有CIK ED6C3F的入口…请注意,虽然克隆可以在同一门户中克隆所有类型的设备和设备数据,复制在其支持的设备类型上有一定的限制,但可以执行门户间复制。

`````
$exo copy e469e336ff9c8ed9176bc05ed7fa40daaaaaaaaa ed6c3facb6a3ac68c4de9a6996a89594aaaaaaaaaa
cik:c81e6ae0fbbd7e9635aa74053b3ab6aaaaaaaaaaaaaa
rid:9635aa74053b3ab681e0fb8187a000000000
```


创建新客户端或资源

```
$exo create ad02824a8c7cb6b98fdfe0a9014b3c0faaaaaaa--type=dataport--format=string--alias=stringport--name="original name"
rid:34EAAE237988167D90BFC218FFEB666AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'卷曲cik.herokuapp.com`
$echo'{"format":"string","retention":{"count":4,"duration":"infinity"}}";exo create$c--type=dataport--alias=myconfig-
$exo info$c myconfig--include=description
{"description":{"name":,"format":"string","subscribe":null,"meta":,"preprocess":[],"public":false,"retention":{"count":4,"duration":"infinity"}}
```

CB96A2077BB0D5B2B2B2B2B2B2B2B5280D5280D5280D52B2B2B2A2077BB0D5AAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAA级--type=dataport--format=float--name=湿度
rid:6a8974d3d7d1f0ffd28385c90a1bebaaaaaaaaa
$exo diff 3ae52b2bdd5280d7cb96a2077b0cd5dbaaaaaaaaaaaa cc080a86b1c9b5371e0fa793f1daaaaaaaaaaa
{
"<;<;rid>;":{
"别名":{
"<;<;rid>;":[
"temp"
]
},
"basic":{
"订阅者":0,
"类型":"客户端"
},
"子级":{
"<;<;rid>;":{
+"basic":{
+"订阅者":0,
+"类型":"数据端口"
+},
+"children":{},
+"comments":[],
+"description":{
+"format":"float",
+"meta":,
+"name":"湿度",
+"preprocess":[],
+"public":false,
+"retention":{
+"count":"infinity",
+"duration":"infinity"
+},
+"subscribe":null
+},
+"shares":[],
+"subscribers":[],
+"tags":[]
+},
+"temperature.f2a40b81cb677401dfdc2cfad0f8a266d63590b":{
"basic":{
"subscribers":0,
"type":"dataport"
},
"children":{},
"comments":[],
"description":{
"format":"float"
"meta":",
"name":"temperature",
"preprocess":[],
"public":false,
"retention":{
"count":"infinity",
"duration":"infinity"
},
"subscribe":null
},
"共享":[],
"订阅者":[],
"标记":[]
}
},
"注释":[],
"计数":{
"客户端":0,
-"数据端口":1,
?^
+"数据端口":2,
?^
"datarule":0,
"dispatch":0
},
"description":{
"limits":{
"client":"inherit",
"dataport":"inherit",
"datarule":"inherit",
"disk":"inherit",
"dispatch":"inherit",
"dispatch""email":"inherit"、
"email\u bucket":"inherit"、
"http":"inherit"、
"http\u bucket":"inherit"、
"share":"inherit"、
"sms":"inherit"、
"sms\u bucket":"inherit"、
"xmpp":"inherit",
"xmpp_bucket":"inherit"
},
"locked":false,
"meta":",
"name":"mydevice",
"public":false
},
"shares":[],
"subscribers":[],
"taged":[],
"tags":[]
}
}
```


查看pyonep发出的http请求和响应:

````
$exo—调试http读取传感器1温度
调试:pyonep.onep:post/api:v1/rpc/process
host:m2.exosite.com:80
头:{content-type':'应用程序/json;字符集=utf-8'}
正文:{"calls":[{"id":70,"procedure":"read","arguments":[{"alias":"temperature"},{"sort":"desc","selection":"all","limit":1,"endtime":1376943416,"starttime":1}]},"auth":{"cik":"2ca4f441538c1f2cc8bf0124567890123456789"}
调试:pyonep.onep:http/1.1200确定
标题:[('date',mon2013年8月19日20:16:53 GMT'),('content-length','54'),('content-type','application/json;charset=utf-8'),('connection','keep alive'),('server','nginx')]
正文:[{"id":70,"status":"ok","result":[[1376819736,24.1]}]
2013-08-18 04:55:36,24.1
```

`--curl`类似于`--debughttp`,但以curl格式记录可以直接运行的请求。

````
$exo--curl read sensor1 temperature
debug:pyonep.onep:curl https://m2.exosite.com:443/onep:v1/rpc/process-x post-m 60-h'内容类型:application/json;charset=utf-8'-h'用户代理:exoline 0.9.0'-d'{"调用":[{"id":25,"过程":"读取","参数":[{"别名":"温度"},{"排序":"描述","选择":"全部","限制":1}]},"验证":"cik":"2ca4f44153c1f2cc8bf01245678901233456789"}
调试:pyonep.onep:http/1.1200确定
头:[('date','tue,2014年11月18日03:02:11 gmt'),('content-length','52'),('content-type','application/json;charset=utf-8'),('connection','keep alive'),('server','misultin/0.8.2-exosite')]
调试:pyonep.onep:body:[{"id":25,"status":"ok","result":[[1379607152,22]]}]
2013-09-19 11:12:32-05:00,22

$curl https://m2.exosite.com:443/onep:v1/rpc/process-x post-m 60-h'内容类型:application/json;charset=utf-8'-h'用户代理:exoline 0.9.0'-d'{"调用":[{"id":42,"过程":"读取","参数":[{"别名":"温度"},{"sort":"desc","selection":"all","limit":1}]],"auth":{"cik":"2ca4f441538c1f2cc8bf01245678901234567890123456789"}"
[{"id":42,"status":"ok","result":[[1379607152,22]]]
````

与另一个客户端共享一个数据端口。

```
0a35320000000000000000000000000000000000(别名:[u'client1'])
共享代码
$exo share 0a3532000000000000000000000000000000000000000000000 dataport1
e9a52a000000000000000000000000000000000000000

tree
$exo tree wb
dev client cik:5de0cf000000000000000000000000000000000000000000000000000(别名:(请参阅父项))
client1 client cik:0a35320000000000000000000000000000000000000000000000000000(别名:[u'client1'])
(别名:[u'dataport1'])
C2D4F30000000000000000000000000000000000
{"数据端口":[],"数据规则":[],"客户端":[],"dispatch":[]}

\"dispatch":[]}

477509000000000000000000000000000000000000000
2013-12-13 11:34:13-06:00,分享我

……但你不能从非所有者那里写信
$exo write c2d4f300000000000000000000000000000000000000477500000000000000000000000000000000000000000000000000000000000--value="非所有者无法写入"
一个平台错误:restricted

E9A52a00000000000000000000000000000000000
4775090000000000000000000000000000000000000000000

WB
开发客户端CIK:5DE0CF000000000000000000000000000000000000000000000000000(别名:(请参阅父项))
——客户端1客户端CIK:0A3532000000000000000000000000000000000000000000000000000000(别名:[u'client1'])
[u'dataport1'])
这将使其不可用。
$exo revoke 0a35320000000000000000000000000000000000000000000000--share=e9a52a000000000000000000000000000000000000000000000
ok
```

转储文件是一个zip文件,其中包含信息树(作为info-recursive的输出)、读取timeseries值的时间戳以及客户端下的每个timeseries资源。TimeSeries资源包括数据端口类型和数据规则类型。

```
$exo dump sensor1 sensor1.zip
$unzip-l sensor1.zip
存档:sensor1.zip
长度日期时间名称
----
3938 12-16-14 22:58信息树
1012-16-14 22:58时间戳
5367020 12-16-14 23:00数据端口3bbee56c446f546b5469f629610b8afbcd1fe093
5367610 12-16-14 23:02数据端口4fa572ba020cd9210388f9f60e4708bd627c8a
10747240 12-16-14 23:06数据端口5c9d695fdbe1503c6622b0f603edc23149c53
127 12-16-1423:06数据端口76143aaf0930802775e295b190d540d709ebc6b1
767969 12-16-14 23:06数据端口8dc131ea3fff528b122324def5b65159523f7c77
151 12-16-14 23:06数据端口e93eea75d58615e78e8fd0915e7166edf7ad0525
23949 12-16-14 23:06数据端口。f264984bc4f9cf205e88a548f42f5ffbfd21f09
----
222780114 9个文件
````






provisioning
----


exoline包括执行车队管理操作的资源调配--与串行相关的所有内容编号、固件内容和客户端型号。要使用这些命令,需要使用供应商标识符和供应商令牌配置exoline。这需要对子域具有管理员访问权限。如果您在子域上具有该级别的访问权限,请登录门户并转到"https://<;your subdomain>;.exosite.com/admin/home",然后将名为"供应商API令牌"的内容复制到Exoline配置文件中。您还需要您的供应商标识,可以在"https://<;yoursubdomain>;.exosite.com/admin/managemodels`.

````
echo"vendorken:30c8b0123456789abcdef0123456789abcdef012">;~/.exoline
echo"vendor:myvendor">;~/.exoline
```

您可以这样做,设置命令"model"、"sn"和"content"的工作:

````
$exo model list
testmodel
petfooddispensermodel
````

每个配置文件只能有一个"vendor"和"vendorken"。如果使用多个子域,则需要创建多个exoline配置文件,并在命令行将其传入。例如:

```
$exo--config=~/.exo line另一个模型列表
```


列出
``

t
testmodel
petfooddispensermodel
$exo sn addrange petfooddispensermodel 00000000 000000ff--length=8
$exo sn enable petfooddispensermodel 0000000 1 my portal
ae33a501c0791b758c6ee89437b38d4466e6
$exo twee myportal
my portal cl cik:F9586AF62F8517B24A5F0123456789012345678901234567890123456789
分配器CL CIK:D3846D708C9E6EFAB8EC01234567890123456789(petfooddispensermodel 00000001)
dp.i percent full百分比:
$exo write D3846D708C9E6EFAB8EC01234567890123456789 percentfull值=100
一个平台异常:{u'message':u'authorization失败',U"代码":401}
$exo sn activate petfooddispensermodel 00000001
d3846d708c9e6efab8ecbad9966872aac77b99e8
$exo write d3846d708c9e6efab8ec01234567890123456789 percentfull--value=100
$exo read d3846d708c9e6efab8ec01234567890123456789 percentfull
2014-11-17 21:37:52-06:00,100
```

编写一些固件内容,读回并验证它

```
$exo content petfooddispensermodel list
$创建一个4K二进制文件
$dd if=/dev/random iflag=fullblock of=random固件。bin bs=4096 count=1
dd if=/dev/random of=random固件。bin bs=4096count=1
1+0记录输入
1+0记录输出
4096字节传输0.000298秒(13743895字节/秒)
$exo content put petfooddispensermodel firmware.bin random_firmware.bin--meta=v0.0.1
$exo content list petfooddispensermodel--long
firmware.bin,4k,2014年11月17日星期一22:01:34,False,应用程序/八位字节流,v0.0.1
$exo content get petfooddispensermodel firmware.bin firmware.bin.downloaded
$diff firmware.bin.downloaded random_firmware.bin
```

它的状态变为"notactivated"。再次激活它,看到它的状态变为"激活",24小时激活窗口关闭。再次调用"activate"显示窗口已关闭。

```
$exo twee my portal
my portal cl cik:f9586af62f8517b24a5f01234567890123456789
dp.i百分比:
$exo sn regen petfooddispensermodel 00000001
$deviceid=`exo lookup d3846d708c9e6efab8ec01234567890123456789`
$exo info myportal$deviceid--include=basic
{"basic":{"status":"notactivated","type":"client","modified":1416281490,"subscribers":0}
$exo twee my portal
我的门户cl cik:f9586af62f8517b24a5f01234567890123456789
分配器cl cik:70522b0830b8e4c4574f01245678901234567890123456789(petfooddispensermodel<0000001)
dp.i percent full:100(14小时前)
$exo sn activatepetfooddispensermodel 00000001
70522b0830b8e4c4574f0124567890123456789
$exo info myportal$deviceid--include=basic
{"basic":{"status":"activated","type":"client","modified":1416281490,"订阅者":0}
$exo sn activate petfooddispensermodel 00000001
一个平台设置异常:409冲突(http/1.1 409冲突)
````

它的状态变为"过期"。然后调用"regen"重新生成其cik并激活以激活它。

````
$exo sn disable petfooddispensermodel 00000001
$exo info myportal$deviceid--include=basic
{"basic":{"status":"expired","type":"client","modified":1416281490,"订阅者":0}
$exo sn activate petfooddispensermodel 00000001
一个平台设置异常:409冲突(http/1.1 409冲突)
$exo sn regen petfooddispensermodel 00000001
$exo sn activate petfooddispensermodel00000001
40368ebd8f9923fb189b012345678901233456789
$exo info myportal$deviceid--include=basic
{"basic":{"status":"activated","type":"client","modified":1416281490,"订阅者":0}
```

1416281778127.0.0.1,型号=petfooddispensermodel&vendor=weaver&sn=00000001
1416332704127.0.0.1,型号=petfooddispensermodel&vendor=weaver&sn=00000001
1416333004127.0.0.1,型号=petfooddispensermodel&vendor=weaver&;sn=00000001
```

spec
----


exoline的"spec"命令允许您使用规范文件简洁地指定单平台客户端的设置方式。下面是一个基于[本规范](https://github.com/exosite/exoline/blob/master/test/files/spec_script_embedded.yaml)从头开始创建客户机的示例。请注意,这使用了从cik fountain(cik.herokuapp.com)生成的1小时时间限制的cik。

`````
$temp_cik=`curl cik.herokuapp.com`
$exo spec$temp_cik https://raw.githubusercontent.com/exosite/exoline/master/test/files/spec_script_embedded.yaml--create
running spec on:cbcae94d523bc29b0937b759b7d3fde5c1670086
找不到temp\f。
正在创建名称为temp\f、别名为temp\f、格式为float
找不到temp\c的数据端口。
正在创建名称为temp\c、别名为temp\c的数据端口,格式:float
convert.lua未找到。
新脚本rid:7d7c4775af2aad7d9c770672cc36835c36a7cd9
别名脚本到:convert.lua
$exo twee$temp撹cik
临时cik cl cik:cbcae94d523bc29b093759b7d3fde5c1670086
temp撹c dp.f temp撹c:
temp撹温度:
convert.lua dr.s convert.lua:第3行:开始convert.lua…(35秒前)
$exo write$temp_cik temp_c--value=-40
$exo read$temp_cik temp_f
2014-11-24 10:50:18-06:00,-40.0
```

spec也适用于缩短的url。

````
$temp_cik=`curl cik.herokuapp.com`
$exo spec$temp_cik http://tinyurl.com/exospec-tempconvert--create
``

基于现有设备。有关用法的信息,请尝试"--help"和"--example"。

````
$exo spec--help
$exo spec--example
````

——


使用它,您必须下载带有

```
wget-o~/.exoline_自动完成https://raw.githubusercontent.com/exosite/exoline/master/exoline/complete.sh
````


的完整脚本,然后将该脚本添加到您的~/.bash配置文件中,以便它在您登录时工作。

~/.exoline"自动完成">;>;~/.bash配置文件`

,然后重新获取当前bash配置文件的源代码以激活自动完成程序。

`source~/.bash配置文件`

````
`wget-o~/.exoline自动完成https://raw.githubusercontent.com/exosite/exoline/master/exoline/complete.sh;echo"source ~/.exoline_autocomplete">;~/.bash_profile;source ~/.bash_profile
`````

完成操作将完成所有应完成的操作。

```
$exo<;tab>;
activate content data drop flush keys makeshortcuts ndup record search spark transform unmap write
````
`````
$exo read<;tab>;
12345678 My_Other_Key My_Cool_设备咖啡
````
`````
$exo copy coffee<;tab>;
adc cur e_waterheat errors powsw upstatus
````

`````
$exo read coffee dailybrews--<;tab>;
--chunksize--end--follow--format--header--帮助--限制--选择--排序--开始--时间格式--tz
```

cik快捷方式
----


>将常用的cik存储在配置文件中:

````
$printf"keys:\ n">;~/.exoline
$printf"mydevice:2ca4f441538c1f2cc8bf01245678901233456789\n">;>;~/.exoline
$exo read mydevice temperature
2013-08-18 04:55:36,24.1
>>>>>>>>>>>>>隐藏的更改-

为了方便起见,可以用环境变量替换几个命令行选项。

*`exo_host`:host,例如m2.exosite.com。它为exo提供主机和exodata的url。
*`exo_port`:port,例如80。目前这只适用于exo,而不是exodata。
*`exo_plugin_path`:查找插件的其他位置
*`exo_config`:配置文件的位置。如果未指定,则为` ~/.exo line`

通常,可以使用约定的`.exo`+`<;选项>;`,从环境中设置命令行选项。

exoline在工作目录中查找`.env`文件,如果找到一个文件,则将其内容放入环境中。这允许您为不同的项目设置不同的配置。



"mydevice:2ca4f44153c1f2cc8bf01234567890123456789\n">;.exoline
myproj$printf"供应商:weaver\n">;.exoline
myproj$printf"令牌:2ca4f44153c1f2cc8bf01245678901233456789\n">;.exoline
myproj$printf"exo配置=.exoline">;.env
myproj$exo读取mydevice temperature
2013-08-18 04:55:36,24.1
````


警告:外部行配置文件最好不受源代码管理,因为它们包含密钥和供应商令牌。下面是如何配置git忽略该文件的方法。

```
myproj$printf"\n.exoline">;.git ignore
```



----


要获得帮助,请在命令行中使用-h运行每个命令。


----


portals缓存一个平台数据,因此在Exoline中所做的更改可能需要15分钟才能显示在门户中。可以通过传递"--clearcache"(或"-c")来解决此问题。此选项告诉exoline清除门户中的相关缓存信息。

````
$exo--clearcache create<;cik>;--type=client
```


通过`--portals`指定该服务器。

````
exo--clearcache--portals=https://myportals.com create<;cik>;--type=dataport--format=string
`````


```

这样做有两种模式。首先,可以用在命令行上传递的
参数以及可选的字符串stdin参数调用"exo.run"。

``python


from exo line import exo

'script',
"脚本/myscript.lua",
"ad02824a8c7cb6b98fdfe0a9014b3c0faaaaaaaaa"]

打印(result.exitcode)0
打印(result.stdout)更新的脚本rid:c9c6daf83c44e44985aa724fea683f14eda71fac
打印(result.stderr)<;无输出>;
```

pyonep库也可以使用exoline的包装器,它包含了很多exoline的功能。

``python



filename='scripts/myscript.lua')
```

----


文档。

```
$exo read sensor1甲烷--timeformat=excel--limit=10000>;~/documents/甲烷.csv
```


-选择文件->;导入
-选择csv文件
-导航到文件"甲烷.csv",然后按"获取数据"
-您应该可以按完成,因为默认值有效,但如果您的默认值不同,这里有显式设置:

-选择Delimited并按Next
-选择Tab作为分隔符
-选择General作为列格式
-按Finish

-按OK导入A1现有工作表
-选择A列和B列
-在图表功能区中,选择"散布"->;"标记散布"
-结果如下:

![Excel时间序列图示例](images/excel_chart.png)


Google文档:

-选择文件->;导入
-选择"上载"选项卡
-选择CSV文件
-导航到"甲烷.csv",然后按"打开"
-选择"创建新电子表格并自动检测",然后按"导入"
-现在按"打开"
-选择列A和列B
-选择"插入"->;chart
-选择charts tab
-选择scatter
-选择top chart选项
-按insert
-结果如下:

![谷歌文档时间序列图示例](images/docs_chart.png)

插件位于[exoline/plugins/](exoline/plugins/)中,有一个例子
[这里](exoline/plugins/\example.py)。这里是如何制作的。

```
$git clone git@github.com:exosite/exoline.git
$cd exoline
$export exo\u plugin路径=`pwd`/exoline/plugin s
$cp exoline/plugins/\u example.py exoline/plugins/hello.py
$exoline/exo.py您好,咖啡状态
您好,新酿!!
```

或者想提出改进建议,请登录[此处](https://github.com/exosite/exoline/issues)。



-


>要运行exoline的集成测试,请参阅[test/readme.md](test/readme.md)。



release process
-


外显行:

-对所有受支持的python[tests](/test/readme.md)版本运行测试
-使用有关新版本的信息更新[history.md](history.md)和[exoline/\\u init\\uuu.py](exoline/\uu init\.py)
-提交并推入git
-git中的标记释放:`git tag<;version>;`和"git push origin<;version>;`
-发布到pypi:`python setup.py sdist upload`
-[生成Windows安装程序](为Windows生成)并为该安装程序生成一个版本。例如,请参阅[此版本](https://github.com/exosite/exoline/releases/tag/0.9.18)
-对于主要版本,请在[文档站点](https://github.com/exosite/exoline/tree/gh pages)中添加发布公告


窗口可执行文件和/或安装程序,而不是使用[预构建的](https://github.com/exosite/exoline/releases/),请执行以下操作:

-安装python。32位版本是在32位Windows系统上运行所必需的。
-安装[pip win](https://sites.google.com/site/pydatalog/python/pip-for-windows)确保位与python的位匹配。
-安装pywin32(再次,与python/pip相同的位)
-安装pyinstaller(`pip install pyinstaller`)
-在exoline根目录中,运行'pip install-r requirements.txt`
-在exoline根目录中,运行'pyinstaller exo.spec`
-`exo.exe',其依赖项位于dist\exo\
-运行'copy dist\exo\exo.exe dist\exo\exo',这样Windows用户就不必键入.exe

innosetup.iss
-更新文件部分的源文件,指向系统上的dist\exo文件夹
-在innosetup.iss中设置版本号
-按compile
-重命名输出/se将.exe安装到output/exoline-\<;version\>;-setup.exe




----


[此处](history.md)了解Exoline版本中的功能。



history
==


<0.10.0(2016-07-07)
----
-通过"token:<;token>;"在auth中添加令牌支持
-修复从多个数据端口读取有时返回不完整的数据

0.9.25(2015-12-01)
----


-修复El Capitan上的安装问题
-使用spec修复IOerror--在没有脚本文件夹时生成


0.9.24(2015-10-13)
----

-支持设置命令

0.9.23(2015-09-17)
----


-将ruamel.yaml升级到0.10.11以修复生成问题




0.9.22(2015-09-16)
----

-添加键命令快捷方式管理

0.9.21(2015-09-02)
----

-为无效/验证错误添加链接
-更好地支持管道彩色输出
-使用pyonep 0.13.4


0.9.20(2015-09-01)
----


-删除无关的调试输出

<0.9.19(2015-08-31)
-------

-添加meta命令以设置资源meta
-允许twee值占用整个终端宽度
-添加插件示例
-在测试门户内的客户端中运行测试


0.9.18(2015-07-15)
-------

-支持客户端spec中的限制(device.limits)
-支持没有资源的spec文件
-通过从python dotenv切换到dotenv重新添加对python 2.6的支持(运行pip uninstall
python dotenv从0.9.17升级)
-修复搜索的无关输出.env

0.9.17(2015-07-14)
----


-修复规范不会更新public、subscribe和预处理的问题,保留期
-支持[制表符完成](https://github.com/exosite/exoline/blob/master/exoline/complete.sh)
-支持.env
-暂时放弃对python 2.6的支持


0.9.16(2015-05-29)
----


-添加对调度和数据规则的规范支持

0.9.15(2015-05-11)
---------

-find命令(beta)
-脚本--将版本存储在meta中的版本字符串
-修复资源及其
共享具有相同父级时树/twee中的断言。在这种情况下,仅显示
原始版本。

16k
-警告如果代码未更改,脚本将不会重新启动

过期设备

0.9.11(2015-04-03)
----


-读取-使用wait()api快速跟踪
-在exoline配置中支持整数cik快捷方式
-包依赖项的提升版本

0.9.10(2015-03-11)
----

-规范--创建对预处理更新的支持

<0.9.9(2014-02-26)
----


-更新到pyonep 0.11.0


<0.9.8(2014-02-23)
----


-列出树和树之间的共享
-更新pyonep 0.10.0

>0.9.7(2014-01-29)
——————————————————————————————————————————————————————————————————————————————————————————————————————for--start和--end
(https://github.com/exosite/exoline/issues/30)
-添加了"您的意思是…"对错误输入的命令的建议
-支持规范脚本的url缩写
-添加了chunking to record用于处理大型csv文件。
-添加了对将多个rid记录为csv中的列的支持
-dump命令用于存储包含数据的客户端层次结构到zip文件
-auth(cik)也可以包含客户端或资源id。

0.9.4(2014-12-03)
----

-fix pyonep version for windows build
-update build machine to use 32-bit python to run better on



0.9.3(2014-12-02)
----

-添加支持名称、别名的搜索命令,序列号,脚本(https://github.com/exosite/exoline/issues/64)
-将globbing添加到模型,内容,sn list子命令
-makeshortcuts也将创建sn样式的快捷方式
-删除调试输出并修复https://github.com/exosite/exoline/issues/62


0.9.2(2014-11-24)
----

-spec接受yaml的url和脚本文件
-支持放置lua直接在spec文件"code"
属性中,而不是外部lua文件中。
-spec--检查基本规范验证的选项
-如果--检查失败,则不运行规范


0.9.1(2014-11-19)
----

-生成模型、内容,和sn顶级命令
-编写模型、内容、sn测试
-编写配置使用文档
-许多配置模型和sn命令的修复程序
-支持--curl选项以curl格式查看请求
-添加twee--rids选项
-较深的twee颜色以提高可见性在白色背景下

0.9.0(2014-10-29)
——————————————————————————————————————————content
-支持read--timeformat=excel进行电子表格导入
--config选项以支持多个exoline配置文件
-在python 3.4中使用exoline作为库进行修复
-修复管道读取-使用unicode
(https://github.com/exosite/exoline/issues/48)
-在客户端的twee输出
-脚本支持传递脚本的rid/别名
-(中断更改)删除cik激活,为了避免与
设置混淆,请激活
-(中断更改)修剪stdin的最后一条换行符以进行写入-


0.8.3(2014-10-20)
----



-禁用颜色来支持twee


0.8.2(2014-10-12)
----


-支持spec命令中的保留
-在spec命令中支持预处理
-在spec命令中支持订阅
-在.exoline中填充cik快捷方式的makeshortcuts命令
-灵活的配置文件位置
-修复一些unicode问题,添加Unicode测试
-修复Exoline树--值示例输出
-修复'Binary'类型的数据端口的Twee


0.8.1(2014-09-15)
----


-编写命令支持在stdin上传递值
---树的值选项以显示数据端口的最新点
datarules
-添加twee命令:类似于tree,但更易实现
-生成树报告并在遇到锁定的客户端时继续
-修复因使用onep更新进行浮点处理而中断的测试
-添加标准脚本命令顺序

<0.8.0(2014-06-09)
----


-用于修改时间序列数据的转换命令指定
-修复python 3.4回归

0.7.14(2014-05-30)
----


-修复exorpc.mult()中的错误


0.7.13(2014-05-28)
----


-添加exorpc.mult()以避免直接调用exomult

0.7.12(2014-05-28)
----

-添加--级别信息选项--递归以限制深度


0.7.11(2014-05-16)
----


-Windows可执行文件和i安装程序
-Windows的固定树输出

0.7.10(2014-05-08)
----


-添加spec--将spec应用于多个设备的门户选项


0.7.9(2014-04-15)
----

-调整树输出格式
-更好的文档记录-输入
-升级pyonep

0.7.8(2014-04-08)
----


-在spec命令中添加对json模式的支持
-从drop中删除无关输出--所有子项

<0.7.7(2014-04-02)
----

-更新到最新的pyonep
-修复rid正则表达式

0.7.6(2014-03-04)
----


-添加克隆命令
-设置数据端口订阅时避免部分复制


0.7.5(2014-03-03)
----

-添加--用户代理参数

0.7.4(2014-02-04)
---------

-如果--start和--end被省略为read、flush或usage,则从rpc调用中省略它们。如果时钟与一个平台不同步,这将修复读取问题。


0.7.3(2014-01-31)
----


-add--刷新的开始和结束


0.7.2(2014-01-14)
----

-add--spec命令的生成选项(beta)
-修复python 3.2上的树中回归命令
-删除wsgiref以修复python 3.3的nose


>0.7.1(2014-01-13)
---------


-处理csv输出中的unicode
-修复将树输出到文件时的错误
-删除二进制和布尔数据端口格式

>0.7.0(2013-12-13)添加共享、激活、停用,和lookup--share commands
-listing command现在接受过滤选项和更清晰的json
输出(不向后兼容)
-更新不正确的时区设置


0.6.1(2013-12-10)
----


-add owner lookup command(lookup--owner of)
-将"options"更改为"command options"以用于


0.6.0(2013-12-09)
----


-使门户服务器可自定义,例如,用于沙盒


0.5.2(2013-12-09)
-

-添加--用于缓存无效的门户选项和门户命令,
因此门户和exoline可以保持同步

0.5.1(2013-12-02)
----


-支持python 3.x


<0.5.0(2013-11-21)
----


-删除--计数选项到树命令
-删除存储选项到info命令

0.4.3(2013-11-19)
----

-将第二个参数设置为exo.cmd可选
-还原std*以便在调用exo.cmd()


0.4.2(2013-11-13)之后可以看到stdout
----

-spec命令支持单元和json格式验证
-示例spec文件

0.4.1(2013-11-11)
----


-添加激活命令
-修复数据端口格式差异的规范消息
-添加规范命令的文档yaml语法
-修复数据写入以处理urlencode字符(例如%)

0.4.0(2013-10-30)
----

-默认情况下使用https,为http指定--http
-修复由于stdout缓冲而无法通过管道将read--follow传输到其他命令的问题
-在"exo--help"中以一致顺序显示命令
-在"exo--help"中显示命令摘要


0.3.6(2013-10-29)
----

-read如果未指定rid,则命令默认读取所有数据端口/数据规则
-列出命令输出有效的json


0.3.5(2013-10-28)
----


-重用连接以加速api调用


0.3.4(2013-10-10)
-

-如果未指定rid,则默认为utc无法确定本地时区
-修复读取输出中的时区错误

0.3.3(2013-10-4)
----


-将脚本解码为规范命令的utf-8


0.3.2(2013-10-4)
----

-删除插件对脚本安装位置的依赖性

0.3.1(2013-10-1)
----

-修复安装问题


0.3.0(2013-9-30)
----


-添加插件框架
-更新树输出,包括按客户端名称排序
-添加spec命令作为插件(beta版)
-将列表设置为所有资源类型的默认值
-时区支持读取命令

<0.2.6(2013-9-19)
----


-固定更新命令


0.2.5(2013-8-26)
----

-记录读取stdin上的csv
-固定读取--sort=asc
-fixed——当多个值出现在轮询窗口中时,遵循顺序

<0.2.4(2013-8-19)
----


-fixed组合--debughttp和--discreet


0.2.3(2013-8-19)
----

--debughttp显示http请求&;响应
--discreet隐藏cik/rids
-作为库记录的用法

<0.2.2(2013-8-16)
-------

--read命令的头选项


0.2.1(2013-8-15)
-------

-cik查找在~/.exoline
-支持ISO8601日期读取
-复制注释

0.2.0(2013-8-13)
----


-大型门户的树更快
--tree的级别选项
-尽可能复制检查限制(未设置为"继承")
-改进信息的json格式--递归

0.1.3(2013-8-9)
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————(2013-7-31)
---------

-添加了--端口选项
-添加了--分块小时选项以分解大型读取

>0.1.1(2013-7-30)
----


-修复了--httptimeout
-显示树输出中元数据的模型和序列号

0.1.0(2013-7-24)从多个数据源读取(2013-7-19)
----


-如果没有传递别名,查找命令将查找RID的CIK
-修复异常



>0.0.31(2013-7-18)
----


-更新为使用pyonep 0.7.0
-添加了用法命令

<0.30(2013-7-16)
——————————————————————————————————————————————————————————————————————————————————————————————————————(2013-7-14)
----

-支持将脚本上载到多个cik
-为测试添加代码覆盖率
-读取-间隔显示点之间的延迟分布


0.0.26(2013-7-12)
----

-固定https端口

<0.0.25(2013-7-12)
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————对于所有命令都是可选的
-将根节点详细信息输出添加到树


0.0.22(2013-7-11)
----

-pyonep的增强版本要求


0.0.21(2013-7-11)
----

-为过期状态的设备固定树输出
-隐藏键盘中断异常,除非--debug set

<0.0.20(2013-7-10)
----


-固定脚本命令


>0.0.19(2013-7-10)
----

-fixed readme.md

<0.18(2013-7-10)
----


-个人帮助命令,git风格
-固定回归在0.0.17中打开,影响所有执行命令的命令<;rid>;
-记录回溯日期现在用--interval



>0.0.17(2013-7-09)
----



-优雅地处理键盘中断进行读取--follow
-在readme.md中添加了示例用法数据端口没有数据

0.0.16(2013-7-08)
---------

-支持传递<;rid>;的别名;
-默认情况下使读取返回最新值

<0.0.15(2013-7-08)
----


-脚本上载


0.0.14(2013-7-07)
----


-创建、读取、写入测试

<0.13(2013-7-03)
----

-记录、取消映射、查找命令,更好/更强/更快的树

<0.0.12(2013-6-27)
----


-很好地显示OnePlatform库异常


<0.0.11(2013-6-27)
----

-更改了树的默认值

<0.10(2013-6-27)
----


-刷新命令

0.0.9(2013-6-26)
----


-向树输出添加格式



>0.0.8(2013-6-26)
----


-向树输出添加单位,支持写入负数值

0.0.7(2013-6-23)
----


-时间序列数据写入和读取命令,使用--follow选项


<0.0.6(2013-6-23)
----


-RID查找和批量删除命令



<0.0.5(2013-6-21)
----

-安装两个命令行脚本:exo,外部数据



0.0.4(2013-6-18)
----


-完整的外部数据api
-外部站点rpc api的子集

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在Rally中的新测试文件夹下创建新测试用例   如何使用Selenium Webdriver和Java编写定位器来单击img?   while循环中的java异常处理   java发布自定义事件并在基于SpringMVC的Rest应用程序中异步处理它   java我可以在两个设备之间创建socket,其中一个设备连接到wifi internet,另一个连接到3G或2G internet。?   java提供了一个项目列表(不同类型),如何将它们分开,以便每个组只包含相同类型的项目   java如何在JBPM 6中获取和设置进程的局部变量列表?   java将Spring批处理连接到Spring集成工作流   java如何在安卓中使用Gson反序列化LocalDateTime?   java如何在openmrs和spring中分割值复杂数据?   java高效地在一组数字中查找组合   java缩小继承的返回类型(涉及泛型)   java SSLEngine提供需要\u在展开服务器后展开hello done   java JPA限制'queryResultList',即使'setMaxResults'未定义   java JTable着色?   java 安卓在移动到其他活动时保留内存   在Hibernate中用MySQL模拟延迟约束   如何将Java数组字符串写入Json文件