1、 简介
AllJoyn框架处理附近IOT设备的发现,设备之间回话的建立,以及通信的安全性。它抽象出物理传输的细节,并提供了一个简单易用的API。它支持多方链接回话的拓扑结构,支持点对点的回话以及小组回话。该安全框架非常灵活,支持原始套接字,或具有良好定义的接口、方法、属性和信号的抽象对象。
AllJoyn架构的特征之一是其固有的灵活性。
它被设计为在多个平台上运行,从小型的嵌入式实时操作系统平台,到全功能的操作系统。它支持多种语言和通信方式。此外,用于AllJoyn框架是开源的这种灵活性可以在未来进一步扩展,以支持更多的通讯方式,编程语言和功能。
-传输方式:无线网络连接、以太网串口、电源线(PLC)
-语言:C、C++、OBJ-C、Java的
-平台:RTOS、Arduino的、linux和Android的、iOS的、在Windows、Mac
-安全性:同行对等加密(AES128)和身份验证(PSK、ECDSA)
为了更好地实现物联网的愿望,IOT设配和应用程序需要使用一种通用的方式进行交互。我们认为:这种通用语言就是AllJoyn框架;他作为中间的粘合剂,将来自不同的公司设备,运行在不用的操作系统上,采用不用语言编写的程序,紧密联系在一起,专注于更有效地工作。
AllSeen联盟和开源社区一起正在制定和实现一个通用的service和接口,来应对特定的使用场景,例如:第一次添加新设备,发送通知以及控制设备等等。如果开发人员想让他们的设备与其他设备和应用程序在AllJoyn生态系统相兼容,可以利用这些 service,将它们集成到自己的产品中。
AllJoyn框架是很灵活的。除了通用的service和接口,APP或设备也可以实现私有的专用接口。这样应用程序就可以使用AllJoyn框架与APP和设备采用私有方式进行通信。
AllJoyn框架一般都运行在本地网络上,云服务不是必需的。在本地网络中,APP和设备之间互相通讯、直接快速、高效和安全。当设备就在你身边时,没有必要让消息再到互联网广阔的云中逛一圈,然后再回到你身边。如果确实需要云,AllJoyn框架可以通过Gateway代理的方式来支持。这种网络结构的一个主要优点是安全性:仅网关代理直接连接到网络,由于减少了直接连接到互联网的设备的数量,一次降低了攻击面。
2、 网络架构
AllJoyn框架运行在本地网络上。它能够让设备和APP发送广播和发现彼此。本节介绍AllJoyn的网络架构,以及各种AllJoyn组件之间的关系:
AllJoyn框架包括AllJoyn APP和AllJoyn router(后面简称为APP和router)。APP和router之间进行双向通信,APP如果要和其他APP进行通信,必须要经过router中转。
APP和router可以处于同一个物理设备上,或者是在不同的物理设备上。在现实中,有三种有三种拓扑结构存在:
a. APP使用自己的router。在这种情况下,router被称为“Bundled Router”,因为他们是捆绑在一起应用的。运行在移动操作系统和桌面操作系统的AllJoyn APP通常属于这一类。
b. 在同一设备上的多个APP使用一个router。在这种情况下,router被称为“Standalone Router”,他通常运行在后台服务器进程。这在linux系统中很长见,其中AllJoyn router作为后台进程运行,其他AllJoyn APP连接到该“Standalone Router”。通过多个APP公用一个router这种方式,设备可以消耗更少资源。
c. APP和router处于不同的物理设备上,APP使用位于另外一个物理设备上的router。嵌入式设备(它使用AllJoyn架构的精简变种)通常落入这个阵营;嵌入式设备通常没有足够的CPU和内存来运行AllJoyn路由器;
3、 网络传输
AllJoyn框架运行在本地网络上。目前,它支持Wi-Fi,以太网,串口和电源线 (PLC:Power Line Communication;电力线上网PLC,又称电力猫上网,是一种借助电力线传输高频数字信号的技术),但由于 AllJoyn软件代码的编写是传输介质无关的,并且AllJoyn是一个不断发展的开放源代码项目,因此将来会有更多的传输支持添加进来。
此外,可以利用bridge software将AllJoyn框架桥接到其他系统上,例如Zigbee,Z-wave,或互联网云。事实上,一个工作组正在努力增加网关代理,将它作为一个标准的AllJoyn service。
4、 软件结构
AllJoyn 网络包括AllJoyn APP和AllJoyn Router。
一个AllJoyn App包括如下组成部分:
- AllJoynApp Code
- AllJoynService Frameworks Libraries
- AllJoynCore Library
一个 AllJoyn Router 可以独立运行,也可以和AllJoyn Core Library 捆绑在一起工作。
a. AllJoyn Router
AllJoyn Router路由APP和Router之间的AllJoyn消息,包括在不同的传输方式之间。
b. AllJoyn Core Library
AllJoyn Core Library提供访问AllJoyn网络的底层API:
a) 广播和发现
b) 回话建立
c) Interface defintion of methods, properties, and signals
d) 对象的创建和处理
开发者使用这些API来实现 AllJoyn service 框架,或者实现私有的接口.
c. AllJoyn Service Framework Libraries
AllJoyn Service框架实现了一组common service, 例如 onboarding, notification, 或者 control Panel。 利用这些common AllJoyn service框架, app和devices 设备之间可以互相交互,以实现一个特定的功能。
Service 被分解到不同的 AllSeen 工作组:
a) BaseServices
- Onboarding. 提供一个一致的方式将新的设备加入到Wi-Fi网络
- Configuration. 运行对某些属性进行配置, 例如设置一个更友好的名字.
- Notifications. 允许在 AllJoyn 中的设备发送或者接收基于文本的通知。也支持通过URL发送音频和图像.
- ControlPanel. 允许设备广播一个虚拟的控制面板以便被远程控制。
b) More ServiceFrameworks. AllSeen 工作组正在开发更多的service框架。.
我们鼓励开发者在可能的情况下都尽量使用AllJoyn service框架。如果现有的某个service目前不可用,鼓励开发者与AllSeen联盟一起合作来创建标准的服务。在某些情况下,尽管使用专用服 务和交互方法是最有意义的; 但是,由于它们是非标准的,因此不能够互操作,也不能够获得将设备和APP加入到的较大AllJoyn生态系统的优点。
d. AllJoyn App Code
This is the application logic of the AllJoyn application.It can be programmed to either the AllJoyn Service Frameworks Libraries, whichprovide higher level functionality, or the AllJoyn Core Library, which providesdirect access to the AllJoyn Core APIs.
这是AllJoyn APP的应用程序逻辑。它可以被编写为AllJoyn服务框架库,以提供更高级别的功能;也可以编写成AllJoyn Core Library,以提供直接访问AllJoyn核心的API
5、 两个版本
AllJoyn 框架提供两种不同的类型:
- Standard. 针对非嵌入式设备, 例如 Android, iOS, Linux.
- Thin. 针对资源有限的嵌入式设备, 例如 Arduino, ThreadX, Linux with limited memory.
6、 编程模型
通常,应用程序要使用AllJoyn Service框架的API,使得它可以与使用相同的服务框架设备兼容。只有使用 AllSeen工作组开发的AllJoyn服务框架的应用程序才能与其他应用程序和设备的AllSeen生态系统相兼容。
如果一个应用程序希望实现自己的服务,它可以通过直接编程到AllJoyn核心API。此时,建议遵循事件和行为习惯,以便能够和其他AllJoyn设备之间进行特设(ad hoc)的互动。
应用程序可以同时使用Service Framework 和 Core API。