精华内容
下载资源
问答
  • 通过阿里物联网平台,我们可以在不懂前后端开发的基础上,半个小时候左右就可以搭建一个智慧农业的物联网云平台框架。 效果如下: 大数据面板: 设备管理: 设备地图分布: 支持视频监控...

    前言

    8.1.1 物联网平台搭建

    8.2.1 LinkDevelop平台使用

    8.2.2 iotkit-embedded


    前言

    传统的物联网项目,需要嵌入式硬件、云平台。对于我们做嵌入式的来说,从零开始搭建一个物联网云平台几乎是不现实的。

    这里涉及到许多前后端的知识。

    通过阿里云物联网平台,我们可以在不懂前后端开发的基础上,半个小时候左右就可以搭建一个智慧农业的物联网云平台框架。

    效果如下:

    大数据面板:

    设备管理:

    设备地图分布:

    支持视频监控:

     

     

    多个组件图标功能:

     

    8.1.1 物联网平台搭建

    物联网平台搭建的话,我放在了bilibili这里:

    https://www.bilibili.com/video/bv1DK4y1s7Pc 

     

    8.2.1 LinkDevelop平台使用

    1.注册

    打开LinkDevelop官网:https://iot.aliyun.com/products/linkdevelop。单击“立即使用”按钮,如图8.3所示。

    图8.3 LinkDevelop官网

    2.新建项目

    单击左侧的“项目管理”按钮,随后再单击“新建项目”按钮,进入新建项目界面,如图8.4所示。

    图8.4 项目管理界面

    随后在弹出来的新建项目界面上,单击“新建空白项目”按钮,如图8.5所示。

    图8.5 新建项目界面

    弹出新建空白项目界面后,在“项目名称”中输入test,在“描述”中输入这是一个测试项目,单击“确认”按钮,如图8.6所示。

    图8.6 新建空白项目界面

    3.创建产品

    单击左侧的“产品”按钮,在弹出的界面中,单击“创建产品”按钮,如图8.7所示。

    图8.7 产品界面

    在“产品名称”中输入“sensor”,如图8.8所示。

    图8.8 创建产品

    单击“请选择标准品类”下拉框,弹出“选择品类”选择框,阿里云物联网平台预置了许多产品类型,读者可以根据自己的需求选择对应,本书选择“地磁检测器”,如图8.9所示。

    图8.9 选择产品种类

    其他选项按默认值即可,单击“保存”按钮,如图8.10所示。

    图8.10 创建产品

    4.创建设备

    页面左上角有个三角形下拉框,可以选择项目,选择我们刚才创建的test项目,再单击“设备”按钮,最后单击“新增设备”按钮,如图8.11所示。

    图8.11 设备界面

    在“产品”选择下拉框中,选择我们刚才创建的产品sensor,单击“提交”按钮,如图8.12所示。

    图8.12 新增设备

    在弹出的新界面中,单击“下载激活凭证”按钮,下载sheet.xlsx文件,如图8.13所示。保存sheet.xlsx文件,里面的内容后续会用到

    图8.13 下载激活凭证

     

    8.2.2 iotkit-embedded

    iotkit-embedded是阿里云物联网平台提供的一套C语言编写的SDK包。通过该SDK包,我们可以使我们的嵌入式设备接入到阿里云物联网平台。

    SDK使用MQTT/HTTP连接物联网平台,因此要求设备支持TCP/IP协议栈;对于Zigbee、ZWave之类的不支持TCP/IP协议栈的设备,需要通过网关接入物联网平台,这种情况下网关需要集成SDK。

    iotkit-embedded下载地址:https://github.com/aliyun/iotkit-embedded 。

    SDK提供了API供设备厂商调用,用于实现与阿里云IoT平台通信以及一些其他的辅助功能,例如WiFi配网、本地控制等。

    另外,C语言版本的SDK被设计为可以在不同的操作系统上运行,例如Linux、FreeRTOS、Windows,因此SDK需要OS或者硬件支持的操作被定义为一些HAL函数,在使用SDK开发产品时需要将这些HAL函数进行实现。

    产品的业务逻辑、SDK、HAL的关系如图8.15所示。

     

    图8.15 SDK 框架

    表8.1列出了SDK包的相关功能:

    功能模块

    功能点

    设备连云

    MQTT连云,设备可通过MQTT与阿里云IoT物联网平台通信。
    CoAP连云,设备可通过CoAP与阿里云IoT物联网平台通信,用于设备主动上报信息的场景。
    HTTPS连云,设备可通过HTTPS与阿里云IoT物联网平台通信,用于设备主动上报信息的场景。

    设备身份认证

    一机一密。
    一型一密。

    物模型

    使用属性、服务、事件对设备进行描述以及实现,包括:
    属性上报、设置。
    服务调用。
    事件上报。

    OTA

    设备固件升级。

    远程配置

    设备配置文件获取。

    子设备管理

    用于让网关设备添加、删除子设备,以及对子设备进行控制。

    WiFi配网

    将WiFi热点的SSID/密码传输给WiFi设备,包括:
    一键配网。
    手机热点配网。
    设备热点配网。
    零配。

    设备本地控制

    局域网内,通过CoAP协议对设备进行控制,包括:ALCS Server,被控端实现ALCS Client,控制端实现,通常被希望通过本地控制设备的网关使用。

    设备绑定支持

    设备绑定token维护,设备通过WiFI、以太网接入,并且通过阿里云开放智能生活平台管理时使用。

    设备影子

    在云端存储设备指定信息供APP查询,避免总是从设备获取信息引入的延时。

    Reset支持

    当设备执行Factory Reset时,通知云端清除记录。例如清除设备与用户的绑定关系,清除网关与子设备的关联关系等。

    时间获取

    从阿里云物联网平台获取当前最新的时间。

    文件上传

    通过HTTP2上传文件。

    8.2.3 ali-iotkit

    1.简介

    ali-iotkit是 RT-Thread 移植的用于连接阿里云 IoT 平台的软件包。基础 SDK是阿里提供的iotkit-embedded。

    iotkit SDK 为了方便设备上云封装了丰富的连接协议,如 MQTT、CoAP、HTTP、TLS,并且对硬件平台进行了抽象,使其不受具体的硬件平台限制而更加灵活。在代码架构方面,iotkit SDK 分为三层,如图8.16所示:

     

    图8.16 iotkit SDK框架

    硬件平台抽象层:也简称HAL层(Hardware Abstract Layer),抽象不同的嵌入式目标板上,操作系统对SDK的支撑函数,包括网络收发、 TLS/DTLS 通道建立和读写, 内存申请是否和互斥量加锁解锁等。

    中间层称为SDK内核实现层(IoT SDK Core Implements):物联网平台 C-SDK 的核心实现部分, 它基于 HAL 层接口完成了 MQTT/CoAP 通道等的功能封装, 包括 MQTT 的连接建立、 报文收发、CoAP 的连接建立、报文收发、 OTA 的固件状态查询和 OTA 的固件下载等。中间层的封装,使得用户无需关心内部实现逻辑,可以不经修改地应用。

    最上层称为SDK接口声明层(IoT SDK Interface Layer):最上层是为应用提供 API 的,用户使用该层的 API 完成具体的业务逻辑。

    2.配置

    RT-Thread已经为我们集成了ali-iotkit软件,通过简单的menuconfig配置即可使用。配置项位于:RT-Thread online packages→ IoT - internet of things→ IoT Cloud,如图8.17所示。

    图8.17 Ali-iotkit配置项

    按空格键选中“Ali-iotkit”后,再按回车键进入详细配置项。

    (1)version选择v2.0.3。

    (2)Config Product Key (NEW)填写我们之前下载的激活凭证sheet.xlsx文件中的Productkey项的内容。

    (3)Config Device Name (NEW)填写sheet.xlsx文件中的DeviceName项的内容。

    (4)Config Device Secret (NEW)填写sheet.xlsx文件中的DeviceName项的内容。

    其他配置项如图8.18所示。

    图8.18 Ali-iotkit详细配置

    阿里 TLS 认证过程中数据包较大,这里需要增加 TLS 帧大小,OTA 的时候至少需要 8K 大小,修改menuconfig配置项:RT-Thread online packages→security packages →mbedtls: An portable and flexible SSL/TLS library,把Maxium fragment length in bytes的数值改成8192,如图8.19所示。

    图8.19 mbedtls配置

    退出menuconfig,输入pkgs --update更新下载ali-iotkit软件包,下载软件包后,输入scons --target=mdk5重新生成工程文件。

    需要注意的是,ali-iotkit自带mqtt相关功能,如果之前代码配置选择了Paho MQTT,需要把Paho MQTT软件包去掉,否则编译报错。

    软件包位于Chapter8\rt-thread\bsp\stm32\stm32f407-atk-explorer\packages\ali-iotkit-v2.0.3软件包目录如图8.20所示。

    图8.20 ali-iotkit软件包目录

    其中各文件说明如下:

    docs:软件包说明文档。

    iotkit-embedded:阿里云物联网平台提供的SDK包。

    ports:RT-Thread相关移植文件。

    samples:RT-Thread提供的一个简单测试程序。

    8.2.4 实验

    1.上传消息到云端

    (1)打开Chapter8\rt-thread\bsp\stm32\stm32f407-atk-explorer\ project.uvprojx工程文件,其中SDK包相关的代码文件包含在ali-iotkit文件夹下,如图8.21所示。

    图8.21 项目工程

    (2)编译并下载程序到开发板,先确保开发板能ping通阿里云服务器。输入ping iot.aliyun.com并发送回车,有看到如下打印信息则代表网络正常。

    msh />ping iot.aliyun.com
    
    60 bytes from 42.120.219.14 icmp_seq=0 ttl=230 time=42 ms
    
    60 bytes from 42.120.219.14 icmp_seq=1 ttl=230 time=41 ms
    
    60 bytes from 42.120.219.14 icmp_seq=2 ttl=230 time=41 ms
    
    60 bytes from 42.120.219.14 icmp_seq=3 ttl=230 time=41 ms

    (3)打开LinkDevelop的设备管理界面,可以看到之前创建的设备的状态是“未激活”,如图8.22所示。

    图8.22 设备列表

    (4)打开串口工具,发送ali_mqtt_test start命令给开发板,可以看到开发板有如下打印信息:

    msh />ali_mqtt_test start
    
    [inf] iotx_device_info_init(40): device_info created successfully!
    
    [dbg] iotx_device_info_set(50): start to set device info!
    
    [dbg] iotx_device_info_set(64): device_info set successfully!
    
    [dbg] guider_print_dev_guider_info(271): ....................................................
    
    [dbg] guider_print_dev_guider_info(272):           ProductKey : a1wUxrR2Xd4
    
    [dbg] guider_print_dev_guider_info(273):           DeviceName : 3mX9eDe8wt0FDt2hIRxf
    
    [dbg] guider_print_dev_guider_info(274):             DeviceID : a1wUxrR2Xd4.3mX9eDe8wt0FDt2hIRxf
    
    host: a1wuxrr2xd4.iot-as-mqtt.cn-shanghai.aliyuncs.com
    
    [inf] iotx_mc_init(1703): MQTT init success!
    
    [inf] _ssl_client_init(175): Loading the CA root certificate ...
    
     [inf] iotx_mc_connect(2035): mqtt connect success!
    
    [dbg] iotx_mc_report_mid(2259): MID Report: started in MQTT
    
    [dbg] iotx_mc_report_mid(2276): MID Report: json data = '{"id":"a1wUxrR2Xd4_3mX9eDe8wt0FDt2hIRxf_mid","params":{"_sys_device_mid":"example.demo.module-id","_sys_device_pid":"example.demo.partner-id"}}'

    (5)有看到[inf] iotx_mc_connect(2035): mqtt connect success!则表示成功连接上LinkDevelop。重新查看LinkDevelop的设备管理界面,可以看到之前创建的设备的状态是“在线”,说明设备和LinkDevelop通信正常,如图8.23所示。

    图8.23 设备列表

    (6)输入ali_mqtt_test pub open并发送回车,开发板将会推送数据到云端,串口打印信息显示code值为200,则表示推送数据成功。

    _demo_message_arrive|203 :: Payload: '{"code":200,"data":{"LightSwitch":"tsl parse: params not exist","RGBColor":"tsl parse: params not exist"},"id":"1","\0

    (7)在设备列表中单击“查看”按钮,如图8.24所示:

    图8.24设备列表

    (8)在弹出来的设备详情页中,单击“日志服务”按钮,再单击“上行消息分析”按钮,可以看到开发板总共发送了2条消息,其中时间较早的消息是开发板登录时发送的,最新的信息是刚才的ali_mqtt_test pub open命令所发送得到消息。

    图8.25 设备详情

    (9)单击对应消息的MessageID,可以查看消息的具体内容,如图8.26所示。

    图8.26 消息内容

    2.云端发布消息

    (1)单击左上角的小三角形,选择 test,然后单击“产品”按钮,单击“sensor”对应的“查看”按钮,如图8.27所示。

    图8.27 产品列表

    (3)单击“功能定义”按钮,随后单击“自定义功能”按钮,最后单击“添加自定义功能”按钮,如图8.28所示。

    图8.28 功能定义

    (4)功能名称选择“测试001”,其他选型默认即可,单击“确认”,如图8.29所示。

    图8.29 自定义功能

    (5)单击右上角的“发布”按钮,发布新功能,如图8.30所示。

    图8.30 发布功能

    (6)再弹出来的界面中,把所有的“请确认”按钮后面的

    都选上,单击“发布”按钮,如图8.31所示。

    图8.31 确认发布

    (7)回到刚才的设备详情页,单击“在线调试”按钮,单击“调试真实设备” 按钮,单击“属性调试”按钮,调试功能选择“测试001(Test001)”,方法选择“设置”,如图8.32所示。

    图8.32 在线调试

    修改调试信息的内容为{ "Test001": "1"},如图8.33所示,单击“发送指令”按钮。

    图8.33 发送指令

    (8)可以看到开发板有如下打印信息:

    '/sys/a1NegcqX690/AwpDLCcqeb7TSbNevNAr/thing/service/property/set' (Length: 64)
    
    _demo_message_arrive|203 :: Payload: '{"method":"thing.service.property.set","id":"1302514310","params":{"Test001":"1"},"version":"1.0.0"}' (Length: 100)
    
    _demo_message_arrive|207 :: ----

    可以看到接收到LinkDevelop发送的{"Test001": "1"}消息,通信成功。

    展开全文
  • 流程平台

    千次阅读 2015-02-09 21:34:43
    面向的流程平台  传统的工作流管理系统(WFMC模型及BPMN2.0模型)经过多年发展已经能够满足企业对于业务流程信息化的各种需求。但是传统的工作流管理系统需要多次部署,分别维护,而且部署和维护的成本较高,...

    面向云的流程平台

        传统的工作流管理系统(WFMC模型及BPMN2.0模型)经过多年发展已经能够满足企业对于业务流程信息化的各种需求。但是传统的工作流管理系统需要多次部署,分别维护,而且部署和维护的成本较高,使得企业应用的门槛较高;交付能力跟不上业务需求的变化,无法高效的满足弹性变化的访问需求。为了降低传统工作流系统在部署和维护方面的开销,可以将传统的工作流管理平台云化,提供多租户、高并发、动态伸缩的能力。先让我们看下云时代企业面临的巨大挑战。

    云时代企业面临挑战

     

    业务集约化

    目前电信、金融领域均面临数据大集中的集约化之路即经营的集团化、规模化;由原来的粗放型经营向精细化经营转变。同时在企业IT战略层面要求具备必须的技术基础构建能力,各种应用系统运行在同一的平台之上,业务迫切需要“需求一体化”、“运维一体化”等平台建设的要求。业务集约化同样面临IT资源使用效率问题,据统计目前大型数据中心的软硬件资源利用率、能源利用率以及维护效率多在40%以下。 

    业务融合与快速交付

    全业务运营时代到来,大多数电信运营商业务支撑系统都是按照需求进行定制化开发的,系统能力总体来说滞后于市场部分的业务发展需求,而对新需求的支撑周期也比较长,随着业务量、业务种类的不断发展,系统稳定性、扩展性问题逐步显现,支撑风险逐步加大,这些情况都将影响全业务运营的顺利开展。

    互联网带来了新的业务创新,改变了企业的IT系统建设模式,更加强调业务的快速交付,造成企业IT系统面临和互联网无缝融合的压力。目前互联网行业的业务创新速度比传统IT企业的业务创新速度快3-5倍,一般情况下企业推新业务是6个月,而互联网是2周到2个月。

    高并发需求

    随着互联网应用的普及,企业应用需要面对高并发的弹性需求,根据业务并发数量动态调整资源分配。目前传统的数据中心,服务器一般按照业务系统的吞吐能力来进行配置。这种配置方式下,服务器资源只能被本业务系统所独享。也就是说,即使不同业务系统的服务器能力有空余,其资源也无法被其它业务系统共享。由于服务器的处理能力一般按照业务系统的峰值需求来设计,因此服务器资源的平均利用率更低。面对高并发的需求,如何做到流程支撑能力的柔性伸缩?

    云流程平台架构

             云流程平台将所有流程平台功能开放到云端,包括流程建模设计、表单开发环境,规则开发环境,流程监控分析等功能。云流程平台主要包括云流程开发平台、云流程引擎、云流程治理平台,分别解决开发、运行、管理监控期问题。

     

       

       

        云流程开发平台包括离线流程建模工具与在线流程建模工具,在线流程建模工具方便地支持在业务流程应用的运行期,以业务流程管理人员的身份,从业务化视角进行流程的业务建模、配置与调整,从而敏捷响应业务流程的变更和调优。在线流程建模工具通过浏览器(无需下载开发环境、SDK)的方式支持业务流程开发、管理、监控等,具体包括业务资源管理、业务流程配置、业务流程定制、参与者日历、业务规则等。。

        云流程治理平台集中管理和监控业务流程的运行情况。帮助企业管理者及时掌握业务运行状况,并对客户或市场进行快速响应。通过对流程实例的图形化实时监控,业务流程管理人员可以及时掌握业务处理的最新动态,及时发现长时间滞留未处理的任务,并对发生异常的流程实例进行及时调整。

        云流程引擎提供多租户能力、引擎动态伸缩、数据隔离、安全性、高性能访问架构。

        IaaS资源适配器提供云流程Pass平台与基础设施层之间的交互能力,协助云流程平台完成引擎的动态伸缩功能。

    云流程平台关键特性

             云流程平台至少满足下面特性:多租户、动态伸缩、在线开发。

      

    多租户

    多租户四级成熟度模型

             第一级:定制

        每个租户有其特定版本的工作流引擎,这些工作流引擎的实例分别运行在软件应用提供商提供的运行平台上。所有租户只是共享了软件系统的运行平台,仍然分别使用独立的工作流引擎版本。

        第二级:可配置

        每个租户都有特定的工作流引擎的实例分别运行在软件应用提供商提供的运行平台上。但是所有租户使用相同的工作流引擎版本,也就是说所有租户使用相同的程序代码,根据租户需求不同进行单独配置即可。

        第三级:可配置、多租户

        软件应用提供商提供的运行平台上只运行工作流引擎的一份实例即可满足所有租户的需求。在这种情况下,租户共享了软件系统、运行实例和软件运行平台。降低了运行实例花费的开销,增加了软件运行平台的利用率,也节约了用户使用软件的成本。

        第四级:可伸缩、可配置、多租户

        软件应用提供商在第三级成熟度模型支持多租户的基础上,引入了负载均衡策略。租户的请求动态的派发到不同的工作流引擎实例来完成。通过这一策略,不需要对于工作流引擎本身进行修改,就可以动态的通过增加或者减少应用实例的数量来应对用户请求的变化。

       

    云流程平台租户架构

        云流程平台多租户架构采用第四级的多组户模型,所有的租户共享同一份云流程引擎中(云流程引擎可以是一个节点,也可以是多个集群节点,对租户是透明的),租户间的数据相互隔离,不同租户支持维护自己的组织机构、权限模型、工作日历;同时流程定义、流程实例所有的流程数据在不同的租户间也严格的隔离。在第四级多租户模型下的云流程平台租户架构,可以真正的以较低的成本满足租户对于企业业务流程的需求,实现自身经济利益的最大化。下图中不同的租户A、B、C共享云流程引擎,不同租户只能看到自身业务域中的业务数据,租户间的业务数据完全隔离。

     

     

     

             租户间的数据安全性:

        不同租户通过安全的令牌机制访问租户内部的数据,租户间的数据隔离包括流程定义隔离、流程实例数据隔离、任务实例隔离;租户数据隔离架构设计如下图:

            

             租户A、B、C内部维护组织机构、工作日历,租户感觉不到其他租户的存在。例如某电信公司中搭建了自己的私有云流程平台,为两个网省(网省A、网省B)申请不同的租户,租户间的流程定义是不能户型访问的,即网省A发布的流程只有网省A下的用户可见,网省B不可见网省A发布的流程。

    动态伸缩

             云流程平台提供伸缩API,通过PAAS平台进行监控资源使用情况,根据监控资源的使用情况动态对云流程平台进行伸缩来满足业务的请求,充分利用IaaS层提供的计算资源;通过动态的伸缩,可以保证流程平台的高稳定、高可用,支持达到任意级别的SLA。

        动态伸缩的关键点:

        无状态流程或者轻量级状态流程;

        云流程引擎与物理无关性;

        提供轻量级的实例缓存;

     

       

        云流程平台动态伸缩示意图:

    0:客户访问云端流程服务;

    1:平台实时监控资源使用情况;

    2:云流程平台发现资源紧张,不能满足后续访问需求时候,申请动态扩容;

    3:云流程平台根据镜像动态创建云流程引擎节点并启动;

    4:新创建的节点统一注册到中信注册库中,方便统一管理;

    5:通知云流程平台中其它兄弟节点进行状态通知和拓扑通知;

    6:新的客户请求动态的分配到新增的云流程引擎节点;

        整个动态伸缩过程用户端是不敏感的,而且不影响用户的正常访问,可以真正做到7*24小时服务。

    在线开发

             云流程开发平台支持将传统流程平台的所有功能在云端开放,提供用户在线开发能力,无需安装SDK。云流程开发平台为开发者提供了一个基于浏览器的业务开发、测试、发布、部署、监控的综合环境。

     

       

     

        在线开发能力包括业务流程定制、表单开发、规则开发、脚本开发、集成外部服务等能力;在线运营负责运营期的流程在线调整、规则在线调整能力;在线测试支持开发修改即时更新,提供测试运行环境;在线发布部署支持应用发布、流程发布,以及管理应用及流程的版本;在线监控集中提供流程追踪和监控工具。

    小结

             随着云计算的发展和企业集约化、一体化、集中化的发展,云流程平台成为企业建立私有云流程平台的发展必然,给企业带来更多的经济效益,包括硬件成本的降低、硬件资源的使用率大幅提升,平台维护人员的大幅下降,数据的集中管理与管控。同时云流程平台带来了系统的高可用、扩展性、自动伸缩等能力,相信未来流程平台的云化必将成为下一个云计算的热点。您准备好拥抱云流程平台了吗?

     


    展开全文
  • 前提 本文操作的前提是已经在树莓派上完成了DHT11温湿度传感器的安装和数据读取。...为什么是阿里物联网平台 我选择使用阿里的原因有以下几点 阿里作为国内比较完善服务商,功能比较完善 阿里...

    前提

    本文操作的前提是已经在树莓派上完成了DHT11温湿度传感器的安装和数据读取。

    资料可以参考

    设备

    • 树莓派3b+
    • DHT11

    接入物联网平台

    为什么是阿里云物联网平台

    我选择使用阿里云的原因有以下几点

    • 阿里云作为国内比较完善云服务商,功能比较完善
    • 阿里云的iot已经完成产品探索阶段,开始正式商用,我之前的公司的产品也在一直使用,个人比较熟悉

    创建产品

    在这里插入图片描述
    物联网平台启动商用之后,新增的设备品类,里面的选项很多,如果没有合适的还可以自定义。

    在设备界面,我们就可以连接设备了。
    在这里插入图片描述

    注册设备

    下载SDK

    目前的SDK支持下面平台

    • Linux Ubuntu 16.04 64-bit

    • Windows Widows 7 64 bit

    • Mac High Sierra

    支持下面语言

    • C SDK
    • Android SDK
    • NodeJS SDK
    • Java SDK
    • Python SDK
    • iOS SDK

    我们的设备是通过python和传感器交互的,所以这里我们使用Python SDK 。

    Python SDK

    安装Python

    这里使用的python版本最低为3.6,没有环境的需要安装环境,之前我们已经完成了和传感器的交互,所以这部分直接跳过。

    wget https://bootstrap.pypa.io/get-pip.py
    sudo python3 get-pip.py
    sudo python3 -m pip install --upgrade pip setuptools wheel
    sudo apt-get install python3-venv
    

    下面是官方给的安装方式。

    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt-get update
    sudo apt-get install python3.6
    wget https://bootstrap.pypa.io/get-pip.py
    sudo python3.6 get-pip.py
    python3.6 -m pip install --upgrade pip setuptools wheel
    sudo apt-get install python3.6-venv
    

    创建和激活 VirtualEnvironments

    mkdir work_dir
    cd work_dir
    python3 -m venv test_env
    source test_env/bin/activate
    
    

    自动安装linkkit

    pip install aliyun-iot-linkkit
    

    下载官方事例

    文件位置为 http://iotx-pop-quickstart-shanghai.oss-cn-shanghai.aliyuncs.com/linkkit/sdk/python/python-linkkit-1.0.0-example.tar.gz?spm=a2c4g.11186623.2.26.756756bbr9vPXW&file=python-linkkit-1.0.0-example.tar.gz

    解压后得到文件

    在这里插入图片描述

    • dynamic_register.py 动态获取deviceScret
    • mqtt_connect_TCP.py 通过TCP方式建立MQTT连接
    • mqtt_connect_TLS.py 通过TLS加密方式建立MQTT连接
    • mqtt_sub_pub_on.py 展示mqtt订阅,发布,接收消息
    • thing_alink.py 通过透传协议,展示物模型能力,进行属性上报,属性设置,事件上报,服务响应
    • tsl.json thing_alink.py使用的物模型文件
    • thing_custom.py 通过用户自定义协议进行展示属性设置及属性上报
    • model_raw.json thing_custom.py 使用的物模型文件
    • data_transfer.js thing_custom.py 对应云端的数据解析脚本

    注册设备

    通过dynamic_register.py注册设备,修改文件中的参数,对应参数去产品页面查找。

    lk = linkkit.LinkKit(
        host_name="cn-shanghai",
        product_key="xxxxxxxxxxx",
        device_name="device-name",
        device_secret="",
        product_secret="yyyyyyyyyyyyyyyy")
    

    device_name对应设备信息,需要我们先在平台注册设备。

    在这里插入图片描述
    在这里插入图片描述
    修改之后的文件,执行

    (test_env) pi@raspberrypi:~/work_dir/examples $ python3 dynamic_register.py 
    2020-03-01 19:18:32,104-1308-1996303056 - linkkit:linkkit:debug - DEBUG - connect_async
    2020-03-01 19:18:32,106-1308-1968174176 - linkkit:linkkit:debug - DEBUG - LoopThread thread enter
    2020-03-01 19:18:32,107-1308-1968174176 - linkkit:linkkit:debug - DEBUG - enter
    2020-03-01 19:18:32,108-1308-1968174176 - linkkit:linkkit:info - INFO - start connect
    2020-03-01 19:18:32,111-1308-1968174176 - linkkit:linkkit:debug - DEBUG - current working directory:/home/pi/work_dir/examples
    2020-03-01 19:18:37,337-1308-1968174176 - Paho:client:_easy_log - DEBUG - Sending CONNECT (u1, p1, wr0, wq0, wf0, c1, k60) client_id=b'a1Gb6Hee6D8&dht11|securemode=2,signmethod=hmacsha1,ext=1,lan=Python,_v=1.2.0,timestamp=1583061512|'
    2020-03-01 19:18:37,448-1308-1968174176 - Paho:client:_easy_log - DEBUG - Received CONNACK (0, 0)
    2020-03-01 19:18:37,449-1308-1968174176 - linkkit:linkkit:info - INFO - __on_internal_connect
    2020-03-01 19:18:37,450-1308-1968174176 - Paho:client:_easy_log - DEBUG - Sending SUBSCRIBE (d0, m1) [(b'/sys/a1Gb6Hee6D8/dht11/thing/deviceinfo/update_reply', 0)]
    2020-03-01 19:18:37,451-1308-1968174176 - linkkit:linkkit:debug - DEBUG - post_message :'on_connect' 
    2020-03-01 19:18:37,451-1308-1968174176 - linkkit:linkkit:debug - DEBUG - post_message success
    2020-03-01 19:18:37,452-1308-1978537056 - linkkit:linkkit:debug - DEBUG - thread runnable pop cmd:'on_connect'
    2020-03-01 19:18:37,453-1308-1978537056 - linkkit:linkkit:info - INFO - __on_internal_connect enter
    2020-03-01 19:18:37,454-1308-1978537056 - linkkit:linkkit:debug - DEBUG - session:0, return code:0
    on_connect:0,rc:0,userdata:
    2020-03-01 19:18:37,502-1308-1968174176 - Paho:client:_easy_log - DEBUG - Received SUBACK
    2020-03-01 19:18:37,502-1308-1968174176 - linkkit:linkkit:debug - DEBUG - post_message :'on_subscribe' 
    2020-03-01 19:18:37,503-1308-1968174176 - linkkit:linkkit:debug - DEBUG - post_message success
    2020-03-01 19:18:37,504-1308-1978537056 - linkkit:linkkit:debug - DEBUG - thread runnable pop cmd:'on_subscribe'
    2020-03-01 19:18:37,505-1308-1978537056 - linkkit:linkkit:debug - DEBUG - __on_internal_subscribe mid:1  granted_qos:1
    2020-03-01 19:19:37,560-1308-1968174176 - Paho:client:_easy_log - DEBUG - Sending PINGREQ
    2020-03-01 19:19:37,597-1308-1968174176 - Paho:client:_easy_log - DEBUG - Received PINGRESP
    
    

    再次刷新页面,看到设备已经被激活~

    在这里插入图片描述

    上传温湿度信息

    获取物模型文件

    在物联网平台上,你可以发现设备上面直接有温湿度数据的展示。

    在这里插入图片描述
    这个设置,是在产品上,有一个概念是物模型。

    在这里插入图片描述
    通过物模型,可以定义设备的字段,点击物模型TSL下载json文件。

    在这里插入图片描述
    json文件如下

    {
    	"schema":"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
    	"profile":{
    		"productKey":"a1Gb6Hee6D8"
    	},
    	"properties":[
    		{
    			"identifier":"CurrentTemperature",
    			"name":"当前温度",
    			"accessMode":"r",
    			"required":true,
    			"dataType":{
    				"type":"float",
    				"specs":{
    					"min":"-40",
    					"max":"120",
    					"unit":"°C",
    					"unitName":"摄氏度",
    					"step":"0.1"
    				}
    			}
    		},
    		{
    			"identifier":"CurrentHumidity",
    			"name":"当前湿度",
    			"accessMode":"r",
    			"required":true,
    			"dataType":{
    				"type":"float",
    				"specs":{
    					"min":"0",
    					"max":"100",
    					"unit":"%",
    					"unitName":"百分比",
    					"step":"0.1"
    				}
    			}
    		},
    		{
    			"identifier":"GeoLocation",
    			"name":"地理位置",
    			"accessMode":"r",
    			"required":true,
    			"dataType":{
    				"type":"struct",
    				"specs":[
    					{
    						"identifier":"Longitude",
    						"name":"经度",
    						"dataType":{
    							"type":"double",
    							"specs":{
    								"min":"-180",
    								"max":"180",
    								"unit":"°",
    								"unitName":"度",
    								"step":"0.01"
    							}
    						}
    					},
    					{
    						"identifier":"Latitude",
    						"name":"纬度",
    						"dataType":{
    							"type":"double",
    							"specs":{
    								"min":"-90",
    								"max":"90",
    								"unit":"°",
    								"unitName":"度",
    								"step":"0.01"
    							}
    						}
    					},
    					{
    						"identifier":"Altitude",
    						"name":"海拔",
    						"dataType":{
    							"type":"double",
    							"specs":{
    								"min":"0",
    								"max":"9999",
    								"unit":"m",
    								"unitName":"米",
    								"step":"0.01"
    							}
    						}
    					},
    					{
    						"identifier":"CoordinateSystem",
    						"name":"坐标系统",
    						"dataType":{
    							"type":"enum",
    							"specs":{
    								"1":"WGS_84",
    								"2":"GCJ_02"
    							}
    						}
    					}
    				]
    			}
    		}
    	],
    	"events":[
    		{
    			"identifier":"post",
    			"name":"post",
    			"type":"info",
    			"required":true,
    			"desc":"属性上报",
    			"method":"thing.event.property.post",
    			"outputData":[
    				{
    					"identifier":"CurrentTemperature",
    					"name":"当前温度",
    					"dataType":{
    						"type":"float",
    						"specs":{
    							"min":"-40",
    							"max":"120",
    							"unit":"°C",
    							"unitName":"摄氏度",
    							"step":"0.1"
    						}
    					}
    				},
    				{
    					"identifier":"CurrentHumidity",
    					"name":"当前湿度",
    					"dataType":{
    						"type":"float",
    						"specs":{
    							"min":"0",
    							"max":"100",
    							"unit":"%",
    							"unitName":"百分比",
    							"step":"0.1"
    						}
    					}
    				},
    				{
    					"identifier":"GeoLocation",
    					"name":"地理位置",
    					"dataType":{
    						"type":"struct",
    						"specs":[
    							{
    								"identifier":"Longitude",
    								"name":"经度",
    								"dataType":{
    									"type":"double",
    									"specs":{
    										"min":"-180",
    										"max":"180",
    										"unit":"°",
    										"unitName":"度",
    										"step":"0.01"
    									}
    								}
    							},
    							{
    								"identifier":"Latitude",
    								"name":"纬度",
    								"dataType":{
    									"type":"double",
    									"specs":{
    										"min":"-90",
    										"max":"90",
    										"unit":"°",
    										"unitName":"度",
    										"step":"0.01"
    									}
    								}
    							},
    							{
    								"identifier":"Altitude",
    								"name":"海拔",
    								"dataType":{
    									"type":"double",
    									"specs":{
    										"min":"0",
    										"max":"9999",
    										"unit":"m",
    										"unitName":"米",
    										"step":"0.01"
    									}
    								}
    							},
    							{
    								"identifier":"CoordinateSystem",
    								"name":"坐标系统",
    								"dataType":{
    									"type":"enum",
    									"specs":{
    										"1":"WGS_84",
    										"2":"GCJ_02"
    									}
    								}
    							}
    						]
    					}
    				}
    			]
    		}
    	],
    	"services":[
    		{
    			"identifier":"set",
    			"name":"set",
    			"required":true,
    			"callType":"async",
    			"desc":"属性设置",
    			"method":"thing.service.property.set",
    			"inputData":[
    				
    			],
    			"outputData":[
    				
    			]
    		},
    		{
    			"identifier":"get",
    			"name":"get",
    			"required":true,
    			"callType":"async",
    			"desc":"属性获取",
    			"method":"thing.service.property.get",
    			"inputData":[
    				"CurrentTemperature",
    				"CurrentHumidity",
    				"GeoLocation"
    			],
    			"outputData":[
    				{
    					"identifier":"CurrentTemperature",
    					"name":"当前温度",
    					"dataType":{
    						"type":"float",
    						"specs":{
    							"min":"-40",
    							"max":"120",
    							"unit":"°C",
    							"unitName":"摄氏度",
    							"step":"0.1"
    						}
    					}
    				},
    				{
    					"identifier":"CurrentHumidity",
    					"name":"当前湿度",
    					"dataType":{
    						"type":"float",
    						"specs":{
    							"min":"0",
    							"max":"100",
    							"unit":"%",
    							"unitName":"百分比",
    							"step":"0.1"
    						}
    					}
    				},
    				{
    					"identifier":"GeoLocation",
    					"name":"地理位置",
    					"dataType":{
    						"type":"struct",
    						"specs":[
    							{
    								"identifier":"Longitude",
    								"name":"经度",
    								"dataType":{
    									"type":"double",
    									"specs":{
    										"min":"-180",
    										"max":"180",
    										"unit":"°",
    										"unitName":"度",
    										"step":"0.01"
    									}
    								}
    							},
    							{
    								"identifier":"Latitude",
    								"name":"纬度",
    								"dataType":{
    									"type":"double",
    									"specs":{
    										"min":"-90",
    										"max":"90",
    										"unit":"°",
    										"unitName":"度",
    										"step":"0.01"
    									}
    								}
    							},
    							{
    								"identifier":"Altitude",
    								"name":"海拔",
    								"dataType":{
    									"type":"double",
    									"specs":{
    										"min":"0",
    										"max":"9999",
    										"unit":"m",
    										"unitName":"米",
    										"step":"0.01"
    									}
    								}
    							},
    							{
    								"identifier":"CoordinateSystem",
    								"name":"坐标系统",
    								"dataType":{
    									"type":"enum",
    									"specs":{
    										"1":"WGS_84",
    										"2":"GCJ_02"
    									}
    								}
    							}
    						]
    					}
    				}
    			]
    		}
    	]
    }
    

    我们可以根据自己的需求增减里面的字段,我在这里删掉了地理位置。

    加载物模型文件

    配置模型文件

    lk.thing_setup("tsl.json"
    

    上传数据

    event_data = {
        "power": 10,
        "power_style": 1
    }
    rc, request_id = lk.thing_trigger_event(("power_state", event_data))
    

    我们可以直接参考事例文件中的,thing_alink.py,修改加载的模型文件

    合并温湿度获取数据逻辑

    参考文章 https://blog.csdn.net/diandianxiyu_geek/article/details/104547804

    这里要注意的是,设备连接需要时间,如果直接调用会提示未连接状态。

    最终实现效果的python代码如下

    import time
    
    import Adafruit_GPIO.SPI as SPI
    import Adafruit_SSD1306
    import Adafruit_DHT
    
    from PIL import Image
    from PIL import ImageDraw
    from PIL import ImageFont
    
    import subprocess
    import sys
    from linkkit import linkkit
    import threading
    import traceback
    import inspect
    import time
    import logging
    
    # Raspberry Pi pin configuration:
    RST = None     # on the PiOLED this pin isnt used
    # Note the following are only used with SPI:
    DC = 23
    SPI_PORT = 0
    SPI_DEVICE = 0
    
    disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
    
    # Initialize library.
    disp.begin()
    
    # Clear display.
    disp.clear()
    disp.display()
    
    # Create blank image for drawing.
    # Make sure to create image with mode '1' for 1-bit color.
    width = disp.width
    height = disp.height
    image = Image.new('1', (width, height))
    
    # Get drawing object to draw on image.
    draw = ImageDraw.Draw(image)
    
    # Draw a black filled box to clear the image.
    draw.rectangle((0,0,width,height), outline=0, fill=0)
    
    # Draw some shapes.
    # First define some constants to allow easy resizing of shapes.
    padding = -2
    top = padding
    bottom = height-padding
    # Move left to right keeping track of the current x position for drawing shapes.
    x = 0
    
    
    # Load default font.
    font = ImageFont.load_default()
    
    # Alternatively load a TTF font.  Make sure the .ttf font file is in the same directory as the python script!
    # Some other nice fonts to try: http://www.dafont.com/bitmap.php
    # font = ImageFont.truetype('Minecraftia.ttf', 8)
    
    
    # config log
    __log_format = '%(asctime)s-%(process)d-%(thread)d - %(name)s:%(module)s:%(funcName)s - %(levelname)s - %(message)s'
    logging.basicConfig(format=__log_format)
    
    class CustomerThing(object):
        def __init__(self):
            self.__linkkit = linkkit.LinkKit(
                host_name="cn-shanghai",
                product_key="*****",
                device_name="*****",
                device_secret="********")
            self.__linkkit.enable_logger(logging.DEBUG)
            self.__linkkit.on_device_dynamic_register = self.on_device_dynamic_register
            self.__linkkit.on_connect = self.on_connect
            self.__linkkit.on_disconnect = self.on_disconnect
            self.__linkkit.on_topic_message = self.on_topic_message
            self.__linkkit.on_subscribe_topic = self.on_subscribe_topic
            self.__linkkit.on_unsubscribe_topic = self.on_unsubscribe_topic
            self.__linkkit.on_publish_topic = self.on_publish_topic
            self.__linkkit.on_thing_enable = self.on_thing_enable
            self.__linkkit.on_thing_disable = self.on_thing_disable
            self.__linkkit.on_thing_event_post = self.on_thing_event_post
            self.__linkkit.on_thing_prop_post = self.on_thing_prop_post
            self.__linkkit.on_thing_prop_changed = self.on_thing_prop_changed
            self.__linkkit.on_thing_call_service = self.on_thing_call_service
            self.__linkkit.on_thing_raw_data_post = self.on_thing_raw_data_post
            self.__linkkit.on_thing_raw_data_arrived = self.on_thing_raw_data_arrived
            self.__linkkit.thing_setup("model.json")
            self.__linkkit.config_device_info("Eth|03ACDEFF0032|Eth|03ACDEFF0031")
            self.__call_service_request_id = 0
            self.__linkkit.connect_async()
            
        def on_device_dynamic_register(self, rc, value, userdata):
            if rc == 0:
                print("dynamic register device success, value:" + value)
            else:
                print("dynamic register device fail, message:" + value)
    
        def on_connect(self, session_flag, rc, userdata):
            print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
    
        def on_disconnect(self, rc, userdata):
            print("on_disconnect:rc:%d,userdata:" % rc)
    
        def on_topic_message(self, topic, payload, qos, userdata):
            print("on_topic_message:" + topic + " payload:" + str(payload) + " qos:" + str(qos))
            pass
    
        def on_subscribe_topic(self, mid, granted_qos, userdata):
            print("on_subscribe_topic mid:%d, granted_qos:%s" %
                  (mid, str(','.join('%s' % it for it in granted_qos))))
            pass
    
        def on_unsubscribe_topic(self, mid, userdata):
            print("on_unsubscribe_topic mid:%d" % mid)
            pass
    
        def on_publish_topic(self, mid, userdata):
            print("on_publish_topic mid:%d" % mid)
    
        def on_thing_prop_changed(self, params, userdata):
            print("on_thing_prop_changed params:" + str(params))
    
        def on_thing_enable(self, userdata):
            print("on_thing_enable")
    
        def on_thing_disable(self, userdata):
            print("on_thing_disable")
    
        def on_thing_event_post(self, event, request_id, code, data, message, userdata):
            print("on_thing_event_post event:%s,request id:%s, code:%d, data:%s, message:%s" %
                  (event, request_id, code, str(data), message))
            pass
    
        def on_thing_prop_post(self, request_id, code, data, message,userdata):
            print("on_thing_prop_post request id:%s, code:%d, data:%s message:%s" %
                  (request_id, code, str(data), message))
    
        def on_thing_raw_data_arrived(self, payload, userdata):
            print("on_thing_raw_data_arrived:%s" % str(payload))
    
        def on_thing_raw_data_post(self, payload, userdata):
            print("on_thing_raw_data_post: %s" % str(payload))
    
        def on_thing_call_service(self, identifier, request_id, params, userdata):
            print("on_thing_call_service identifier:%s, request id:%s, params:%s" %
                  (identifier, request_id, params))
            self.__call_service_request_id = request_id
            pass
    
        def update(self,CurrentTemperature,CurrentHumidity):
            prop_data = {
                            "CurrentTemperature": float(CurrentTemperature),
                            "CurrentHumidity": float(CurrentHumidity)
                        }
            self.__linkkit.thing_post_property(prop_data)
    
    if __name__ == "__main__":
        custom_thing = CustomerThing()
        time.sleep(1)
        while True:
            # Draw a black filled box to clear the image.
            draw.rectangle((0,0,width,height), outline=0, fill=0)
    
            sensor  = 11 # 传感器型号
            pin = 22 # 针脚
            
            humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    
            if humidity is not None and temperature is not None:
                Temp = '{0:0.1f}'.format(temperature)
                H = '{0:0.1f}'.format(humidity)
    
            now = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime())
            draw.text((x, top),       str(now),  font=font, fill=255)
            draw.text((x, top+8),     str("Temp="+Temp), font=font, fill=255)
            draw.text((x, top+16),     str("Humidity="+H+"%"), font=font, fill=255)
    
            custom_thing.update(Temp,H)
    
            # Display image.
            disp.image(image)
            disp.display()
            time.sleep(3)
    
    
    

    最终完成了设备通过屏幕展示温湿度信息并同步到物联网平台的功能。

    参考资料

    • https://help.aliyun.com/document_detail/98292.html?spm=a2c4g.11186623.2.20.36132cf0M0u5Wm
    • https://www.blackmoreops.com/2014/02/21/kali-linux-add-ppa-repository-add-apt-repository/
    展开全文
  • 管理平台简介

    万次阅读 2016-08-18 17:33:55
    管理平台(Cloud Management Platform,CMP)为数据中心资源的统一管理平台,可以管理多个开源或者异构的云计算技术或者产品

    概述

    Cloud Stack

    Cloud Stack 是对云环境进行分层的一种方式。按照某种规则,云环境可以分为三层:
    Cloud Stack

    可见:

    • Resource Layer (资源层)包括硬件、虚拟化和网络基础设施等。
    • Cloud Platforms (云平台层)提供了 API 给用户以及其它软件使用,使得它们可以管理、申请和使用云资源。
    • Coud Management Platforms (CMP 层)是包括开发人员、IT人员、商务分析师等在内的企业用户用来利用企业云基础设施的管理平台。它是整个云栈的最上面的一层,也是最后一层。终端用户在 CMP 层上进行操作,然后 CMP 层将指令发给下面的一个或者多个云平台,云平台又发送指令给下面的基础设施层。目前这一层的产品呈现碎片化的态势,包括不支持多云管理的 AWS Console 和 OpenStack Horizon 等以及支持多云管理的 Scalr, Dell Cloud Manager, 以及 CSC’s ServiceMesh 等。

    云平台

    云计算平台也称为云平台,是指可以提供IaaS、PaaS、SaaS等各种云服务的平台。
    云计算平台可以划分为3类:以数据存储服务为主的存储型云平台,以计算能力提供为主的计算型云平台以及计算和数据存储处理兼顾的综合云计算平台(其中,同一资源池集成主机与存储,辅以网络连接的架构称为超融合架构)。

    比较经典的开源云平台有 OpenStack、CloudStack、Hadoop、Apache Mesos、基于Docker的kubernetes、swarm等,商业云平台有 VMware vCloud、微软、Redhat、HP、IBM 以及 Citrix 的企业云解决方案

    使用场景:

    • 数据中心规模较小;
    • 设备异构复杂性不高;
    • 针对相对单一的业务系统或者新建的业务系统;
    • 更希望采取一种激进的技术手段重构。

    云管理平台(CMP)

    云管理平台(Cloud Management Platform,CMP)为数据中心资源的统一管理平台,可以管理多个开源或者异构的云计算技术或者产品,比如同时管理CloudStack、OpenStack、VMware、Docker等等。
    云管理平台(CMP)提供统一云管理,支持组织迅速将其现有虚拟基础架构转变为高度可扩展的私有云,同时可充分利用公共云资源。

    著名的有 VMware 的 vCMP 和 Redhat 的 CloudForms

    使用场景:

    • 大型的企业IT数据中心,支撑较多的业务系统;
    • 系统异构性较大,有多种类型服务器、存储、网络;
    • 已经部署多种虚拟化平台,特别是以VMware为主的虚拟化,或者KVM+其他商业虚拟化平台;
    • 已经实施了基于CloudStack、OpenStack云平台或者其他种类云平台,需要统一管理;
    • 多个部门实施了多朵私有云,需要统一集成管理;
    • 部分业务运行于公有云,需要与内部私有IT或者云统一管理。

    功能范围:
    CMP (Cloud management platforms,云管理平台)是一种管理公有云、私有云和混合云环境的整合性产品。
    其最小的范围应该包括自服务界面(self-service interfaces)、创建系统镜像(provision system images)、监控和账单(metering and billing),以及基于策略的某种程度的负载优化(workload optimization)等。
    先进的功能还包括整合外部已有的企业管理系统,包括服务目录(service catalogs)、存储和网络资源配置,更高级的资源管理和监控,比如客户机性能和可用性监控等。
    具体见下图:
    CMP 功能

    OpenStack 和 CMP

    Horizon 是 OpenStack 自带的 Dashboard 项目,它向管理员和终端用户提供了管理和操作 OpenStack 云的用户界面。它通过调用 OpenStack 各个项目的 API 接口来驱动这些模块去操作资源层中的各种资源。Horzion 实现了 CMP 所要求的一部分功能,但是它还缺少很多功能。

    CMP 是用来管理 OpenStack 云环境的,而 Horizon 只是 OpenStack 云的 Dashboard。因此,CMP 往往是以应用为中心的,而 OpenStack 是以基础设施为中心的。

    根据开发者和用途不同,OpenStack CMP 可以分为三类:

    类型目的
    专业的 CMP 提供商提供的能管理OpenStack 云环境的 CMP管理 OpenStack 云环境已经成为这种 CMP 的标准配置
    拥有混合云的 OpenStack 提供商(比如一个拥有公有云和OpenStack私有云的厂商)开发的管理包括 OpenStack 云在内的混合云的 CMPOpenStack Horion 不能支持混合云,厂商需要开发统一管理混合云环境的CMP
    独立 OpenStack 云提供商开放的只是管理其 OpenStack 云环境的 CMPOpenStack Horion 不能满足需求,见下文描述

    对于后两种来说,它们应该有以下几个需求:

    • 产品差异化需要:Horizon 作为用户操作的入口和用户首先接触到的 OpenStack 模块,一个非常直接的产品差异化要求就是对它进行定制。对终端用户来说,Horizon 就是 OpenStack 云,它的用户体验好坏、界面是否美观、功能是否全面等,就决定了用户对云的第一印象。因此,基本上所有的 OpenStack 提供商都定制了 Horizon。定制也分为两种,一种是基于社区提供的 Horizon 定制方法所做的非常简单的定制,比如更换 logo,简单改变布局、更换界面颜色等,很显然这种定制所带来的差异化非常有限;另一种是深度定制甚至重新编写,这能带来足够的差异化。
    • 功能补齐:比如一个拥有公有云和OpenStack私有云的厂商,将公有云和私有云的管理平台进行整合,向用户提供统一的能管理混合云的平台,是一个非常自然的选择;支持多租户;支持不同用户的需求;支持工单和账单等;支持应用管理和操作等。
    • 客户要求:对客户来说,要求 Console 定制是非常直接的,也是非常容易提出来的。一方面,一个好的界面,和直接使用社区版本 Horzion 或者只是简单定制,给客户将会带来非常不同的感受;另一方面,客户往往需要有定制功能,比如跟它已有系统的整合等。

    定制 Horizon 的一些好处:

    • 实现所需要的 CMP 功能
    • 对用户来说,有个统一的平台,免去了在多个不同系统和工具之间进行切换的麻烦,提高了用户体验和工作效率
    • 减少用户的培训成本,因为只需要培训一个管理平台
    • 多云和混合云支持

    产品

    常见的云平台和云管理平台产品

    RedHat CloudForms

    https://www.redhat.com/en/technologies/management/cloudforms

    • CloudForms 功能包括审批流程、合规、自服务、记账和配额管理。能管理多种IT和云环境
    • 功能全面、丰富,能管理多云,支持 OpenStack, VMware, KVM, Microsoft 和 Amazon等云环境。
    • 界面的用户体验不错,但是其风格还是传统IT管理软件的风格,因此 451 Reseach 将其归到 “Legacy CMP Vendors” 一类。

    Redhat 基于 CloudForms 提供了 open hybrid cloud 解决方案,该云管理平台同时管理 RHEV 与 OpenStack:
    open hybrid cloud

    界面截图

    cloudforms-service
    cloudforms-virtual-intel

    RightScale

    http://www.rightscale.com/

    RightScale能管理公有云和私有云,以及虚拟服务器和裸金属服务器,提供的功能包括自服务、云管理和云分析等

    • 功能全面、丰富,支持几乎所有的主流公有云、私有云、虚拟服务器和裸金属服务器等。
    • 界面风格现代,用户体验非常好。
    • 451 Reseach 将 RightScale 归到 “CLOUD-NATIVE CMP VENDORS” 一类。

    界面截图
    参考:http://docs.rightscale.com/cm/dashboard/

    Cloud Management (云管理)界面:
    Cloud Management

    实例和服务器:
    实例和服务器

    ManageIQ

    http://manageiq.org/

    这款云管理解决方案是红帽CloudForms背后的开源项目。除了能够支持混合云环境外,它还支持众多服务,比如费用分摊、服务编排、生命周期管理和自动化工作流程。

    界面截图

    ManageIQ

    Scalr

    http://www.scalr.com/

    Scalr旨在简化多云环境的管理、安全和治理,同时为用户们提供更大的业务灵活性。知名用户包括:Expedia、三星、迪士尼、美国宇航局喷气推进实验室、索尼和埃森哲。

    界面截图

    Scalr

    青云的 Console

    https://www.qingcloud.com/

    • 集成了IaaS(计算、网络、存储和安全)、PaaS(数据库、大数据)和 SaaS (第三方应用)等
    • 支持多区域
    • 对每一种资源,其功能包括生命周期管理以及监控
    • 支持工单、账单和账户管理等
    • 画风简约,操作方便、功能丰富

    界面截图

    “总览”界面:
    总览
    选中一个主机后:
    主机

    刻通云的 Console

    http://www.keytonecloud.com/

    • 在布局、风格和设计上与青云具有一定的相似性
    • 集成了IaaS(计算、网络、存储和安全)、PaaS(数据库)等
    • 支持多区域
    • 支持工单、财务和账户管理等
    • 操作方便、功能集成得很好、没发现功能上的bug
    • 与社区版本 OpenStack Horzon 相比,有一些新增功能,比如将 VPN 集成到虚机路由器上:

    界面截图

    概况

    选中一个主机后:
    主机

    FIT2CLOUD

    http://www.fit2cloud.com/

    界面截图

    dashboard
    主机

    天云软件 SkyForm CMP

    http://www.skycloudsoftware.com/

    天云软件解决方案如下图所示:
    天云软件解决方案

    对于OpenStack / CloudStack / VMware / Docker / Hadoop上的私有云实施,该方案允许企业在任何OpenStack / CloudStack / VMware / Docker / Hadoop平台上自动化关键流程,从而缩短执行时间。这其中包括自助服务、带审批过程的工作流程、容量和利用率、配额、基于资源和业务两个维度的工作负载调度操作,为客户提供OpenStack / CloudStack / VMware / Docker / Hadoop工作负载的完整生命周期管理能力。同时支持异构虚拟化管理:VMware、KVM、Xen、Hyper-V、PowerVM、国内虚拟化软件红山虚拟化以及最新的Docker等。

    对于公共云,天云软件的SkyForm CMP支持阿里云、联通沃云和AWS,允许组织利用阿里云、联通沃云和AWS作为其数据中心的扩展。它提供了阿里云、联通沃云和AWS工作负载的配置、容量利用率和生命周期管理,能将这些信息与其企业虚拟基础架构环境整合在一起,形成单一、统一的管理控制台。

    SkyForm CMP提供重要管理功能(方便部署、操作简单),从而降低私有云和混合云基础架构的成本和复杂性;支持客户部署全局私有云,加速服务交付、提高灵活性、改善服务水平,并且最大化资源效率。

    详细介绍见参考 #11、#12

    界面截图

    实例管理
    实例管理

    ConVirt

    http://www.convirture.com/

    Convirture公司发布的开源虚拟化管理工具,是一款使用python和jquery结合编写的其于web的集中管理xen服务的程序。该程序在 xen 社区项目,管理项目中被使用的量很高,convirt 开发有开源版本与企业版本。开源版本覆盖了我们必须需求中的所有选项,企业版本提供更高级的自动化、更强的可扩展性以及管理大规模或关键任务型虚拟化环境所必要的全面企业集成功能。

    oVirt

    http://www.ovirt.org/

    Virt-Manager

    https://virt-manager.org/

    ReadHat 自带的虚拟机管理工具,不支持多服务器集成管理。

    界面截图

    Virt-Manager

    CloudStack

    http://cloudstack.apache.org/

    CloudStack 与 OpenStack 的对比

    -CloudStackOpenStack
    LicenseApache 2.0 授权协议,可免费用于商业模式Apache 2.0 授权协议,可免费用于商业模式
    支持的 HypervisorsKVM,XEN,Oracle VM,vSphere 和 Bare MetalKVM,XEN,(有限支持 Hyper-V,ESX,PowerVM)
    支持的 Networking ModelOpenFlow,VLAN 和 Flat networksVLAN,Flat,Flat DHCP
    支持的StorageNFS,Cluster LVM,Rados Block Device(Ceph),Local StorageiSCSI,Ceph,NFS,Local Storage 和 Swift(对象存储)
    客户群不到 60 家,包括诺基亚,Zynga,日本电报电话公司,塔塔,阿尔卡特160 家左右,包括了 NASA,Rackspace,HP,红帽,Piston
    开发语言Java 为主Python 为主
    兼容亚马逊 EC2 API

    界面截图

    CloudStack

    参考

    1、云管理平台(CMP) 与 OpenStack 2016-06-08
    2、OpenStack 企业私有云的若干需求(9): 云管理平台 CMP 2016-06-12
    3、云管理平台(CMP)的概念与理解、发展趋势 2016-04-25
    4、国内云建设普遍缺失的一环:云管理平台 2016-05-05
    5、2015年5月开源云计算应用程序排行榜 2015-05-26
    6、虚拟机管理平台评估 2011-10-13
    7、虚拟化管理软件比较 -- 构架篇 2011-05-05
    8、云平台和虚拟机管理工具 2012-06-21
    9、八大主流云管理平台 2012-05-16
    10、SkyForm CMP(云管理平台)v4.0
    11、天云SkyForm云平台架构简析 2015-05-24
    12、用 CloudStack 配置和管理一个简单云 2013-03-21

    -eof-

    展开全文
  • OneNET云平台

    千次阅读 2020-11-24 00:05:25
    OneNET云平台 由中国移动打造的PaaS物联网开放平台平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。 OneNET致力于开发者的体验,逐步...
  • 容器云平台使用体验:时速

    万次阅读 2016-09-07 11:36:01
    容器技术风起云涌,在国内也涌现出了很多容器技术创业公司,本文介绍容器厂商DaoCloud提供的容器云平台,通过使用容器云平台,可以让大家更加了解容器,并可以学习不同容器云平台的优势。 1. 首先我们进行注册:...
  • 简要说明: 实现微信小程序连接阿里物联网平台并且显示阿里设备信息等,设备端采用模拟设备进行数据上传,并且利用规则引擎和自定义的Topic进行信息的接受和发送。 目前效果图 步骤: 1.注册阿里物联网开发...
  • 智慧物联网云平台

    千次阅读 2019-02-25 12:23:11
    彩虹智慧物联网云平台是一款采用大数据,人工智能 等先进技术,基于软件即服务(SAAS)理念, 依托公有资源的免费工业物联网服务平台云平台拥有智慧物联、商业智能、专家系统、智慧管理、预测决策等智慧子系统。...
  • 阿里分布式架构云平台解决方案

    万次阅读 2018-09-01 12:35:14
    分布式架构云平台在充分分析IT技术发展趋势,遵循集中化、标准化、集成化、可靠化和可扩展化的设计原则,以价值创造为使命,以规范化、一体化、智能化的云平台为支撑,实现信息的透明共享、业务的敏捷协同、管控及时...
  • 云平台知识简介

    千次阅读 2019-11-12 20:27:31
    一. 云平台定义 “是将服务器虚拟化,形成虚拟资源池,相比于以前的物理机更加节省...云计算、存储、云服务、云平台等就是利用通过一堆机器经过网络组合到一起的不同形式,是下面的子概念。总的来说就是,...
  • 如何在云平台选择虚拟机配置信息

    千次阅读 2017-03-02 08:45:07
    对于已经拥有云平台或者GIS平台的用户来说,只需几分钟就可以创建一个自定义操作系统和计算参数配置的虚拟机是一件非常容易的事情,但是很少有用户关心主机配置类型的选择,也就是说我创建的虚拟机需要多少个CPU...
  • LiveQing云端流媒体-云平台功能

    万次阅读 2019-04-18 21:36:21
    LiveQing云平台是一套由LiveQing、LiveGBS或LiveNVR构成的完整云平台架构,支持分布式、跨平台、多点部署,流媒体服务器支持负载均衡,按需直播,非常适用于互联网化的安防、智能家居、幼教平台、透明厨房、透明家装...
  • SAP云平台架构概述

    千次阅读 2018-08-29 12:09:39
    在我们开始SAP云平台的架构之旅之前,让我们先看看SAP已经发布的一些其他产品。这些产品方案可以分为公有云和私有两种。 SAP公有解决方案见下图最右侧,比较著名的有SAP SuccessFactors和SAP Cloud for ...
  • 云平台基本概念

    千次阅读 2019-10-24 18:44:36
    云平台:可以理解为存在于互联网中,能够扩展、向其他用户提供基础服务、数据、中间件、数据服务、软件的提供商。 例如:服务器空间租用产品,与直接购买服务器存在很大的区别: 一台服务器主机和存...
  • 当我们学习 esp8266 网络编程之后,无疑都是会跟物联网云平台打交道,以实现我们理想中的万物互联梦想。 所以,博主这里开了一个阿里物联网平台的系列教程,目的就是为了能让小白同学更好地学习阿里物联网平台...
  • 管理平台时代充分发挥云计算特性优势大幅提升生产力、应对新增混合多云资源管理问题的平台工具。当前在国外已发展多年并非常成熟,而在国内,一方面企业上云后特别是采纳混合后,IaaS本身提供的服务普遍...
  • 云平台基础知识

    千次阅读 2018-09-03 00:09:59
    云平台发展至今主流的平台已成N足鼎立之势,国外有AWS、Google、微软,国内有阿里、腾讯、AWS中国,私有有OpenStack。   AWS这里单独拿出来强调下,国际版与国内版需要区别对待,因为两者的域名不...
  • 在之前的一篇方案《基于EasyDarwin视频平台的幼儿园视频直播(手机直播/微信直播)解决方案》中,我们提到一种可以广泛应用于幼教、工厂、建筑工地以及各种现场监控的视频平台方案,这种方案有几个比较明显的...
  • 随着技术的不断发展,我们的视野也随之越来越开阔。以前认为不可能的事情也变成了现实。在这里就让我们一同体验腾讯开发平台带给我们的惊喜。
  • 外出几天,没有创新,今天开发了个综合信息发布平台,新闻,通知...,本模块首次采用7.13开发的权限控制系统管理编辑权限
  • 云平台是什么意思 云服务平台有哪些【详细介绍】  摘要:云平台是什么意思?随着云计算的不断发展,很多的云平台都应运而生,这种平台允许开发者们或是将写好的程序放在“”里运行,或是使用“”里提供的...
  • 云平台的分类

    千次阅读 2019-11-18 14:21:43
    要了解云平台之前,首先讲一下云计算 定义:云计算(cloud computing)是分布式计算的一种,指的是通过网络“”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些...
  • Testin测试平台

    千次阅读 2019-01-31 16:15:48
    Testin测试平台是一个基于真实终端设备环境,基于自动化测试技术的7x24云端服务.Testin在云端部署了千余款测试终端,并开放这些智能终端给全球移动开发者进行测试,开发者只需在Testin平台提交自己的App应用,选择...
  • LiveQing视频云平台部署实践

    万次阅读 2019-03-13 20:46:59
    EasyDSS云平台是一套由EasyDSS、EasyCMS、EasyCamera或EasyNVR、EasyClient、nginx、redis构成的完整云平台架构,支持分布式、跨平台、多点部署,流媒体服务器支持负载均衡,按需直播,非常适用于互联网化的安防、...
  • 树莓派连接阿里物联网平台记录

    万次阅读 热门讨论 2018-09-20 17:28:28
    接触阿里物联网平台     手中有一台树莓派3B,想接入物联网云平台试试,最终决定先从阿里下手。本文写作时间为2018年9月19日。 寻找阿里物联网平台入口 &...
  • 如何搭建中国电信物联网云平台

    千次阅读 2019-05-23 17:15:37
    如何搭建电信云平台 背景介绍:基于CN-M50平台下的电信云平台的搭建 目的:实现CN-M50开发板和电信云平台的相互通信 先点击注册,注册完登录进入到平台 按照如下第一步,第二步填写相应的信息,申请账号 1、1...
  • 由于底层硬件设备无法采用http等重量级请求发送数据,工业上常常采用MQTT协议进行数据传输,本次基于阿里物联网平台进行数据采集,本次主要云端收集信息与数据下发,云端采用AMQP方式接入,该方式使得云端服务同时...
  • 容器云平台使用体验:DaoCloud

    万次阅读 2016-09-06 13:58:41
    容器技术风起云涌,在国内也涌现出了很多容器技术创业公司,本文介绍容器厂商DaoCloud提供的容器云平台,通过使用容器云平台,可以让大家更加了解容器,并可以学习不同容器云平台的优势。  1. 首先我们进行注册:...
  • 阿里物联网平台MQTT教程

    千次阅读 2020-07-05 22:48:49
    之前一直使用的中移物联网ONENET平台的MQTT的功能,由于阿里云平台的MQTT功能支持SSL,所以使用了一下阿里云平。 创建产品和设备 首先肯定是进入阿里官网,并搜索物联网平台,点击物联网平台控制台,注意不是飞燕...
  • 云计算平台也称为云平台,是指可以提供IaaS、PaaS、SaaS等各种云服务的平台。云计算平台可以划分为3类:以数据存储服务为主的存储型云平台,以计算能力提供为主的计算型云平台以及计算和数据存储处理兼顾的综合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 257,002
精华内容 102,800
关键字:

云信息平台