65.9K
CodeProject 正在变化。 阅读更多。
Home

IoT 服务 - Buddy Platform 简介

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2014年11月24日

CPOL

8分钟阅读

viewsIcon

28382

IoT 服务:Buddy 平台简介。

引言

本文通过一个名为 Buddy Platform 的新服务,向我们介绍了物联网服务。我们将学习什么是 Buddy,如何使用 Buddy,以及 Buddy 如何帮助我们构建物联网项目。

什么是物联网?

正如我们所知所见,互联网帮助我们连接、沟通、娱乐、赚钱、学习和分享。现在,新的热门话题是将小型设备互相连接,共享信息,并帮助我们学习或管理我们的世界。这种通过互联网相互连接的设备网络被称为物联网。

通过将流程、人员、数据和设备结合起来,我们就能创造出指数级的响应,应对当今企业、个人和国家面临的异常挑战。因此,物联网的需求比以往任何时候都更为重要。

什么是物联网服务?

在我们之前的文章中,我们学习了 Arduino、Netduino 和 Raspberry Pi 等不同设备以及如何使用它们。现在,一旦我们编写了程序来读取传感器或监控流程,我们就需要将数据传输到我们可以使用或供其他设备/流程使用的地方。

为了实现这种数据传输,我们可以创建自己的 Web 服务并与之接口,或者使用市场上已有的、称为 **物联网服务** 的一些服务。

这些服务的示例包括:

  • Amazon webservices(亚马逊 Web 服务)与 AMZ Kinesis
  • Microsoft Azure(微软 Azure)与 Intelligent Systems and Services(智能系统与服务)
  • IFTTT – If This Then That(如果这样,那么那样)
  • Buddy Services(Buddy 服务)
  • 为什么我们需要物联网服务?

随着我们日常生活中越来越多的事物变得智能化或互联,我们将需要一个单一简单的界面来在同一个地方控制/管理其中大部分。然而,由于每个设备都有特定的问题需要解决,并且由不同的开发者或公司开发,它们各自运行在自己的平台上,拥有自己的接口。

由于资源限制和专业知识的缺乏,越来越多的开发者转向使用现成的服务来与他们的设备进行接口。这使他们能够更深入地专注于自己的产品,而无需投资或担心设备所需的基础设施。

这些服务还为他们提供了即时扩展、安全和执行的能力/灵活性,具体取决于使用情况。这也有助于避免因投资可能无法满足市场期望而需要撤回或从头开始重新开发的产品基础设施而造成的无谓损失。

这些服务与上述目的相同,即作为一项服务提供传输、托管、安全、使用和分析设备数据的基础设施。

在今天的文章中,我们将重点介绍一个名为 Buddy 的优质物联网服务平台。

Buddy Platform

什么是 Buddy?

  • Buddy 是一种后端服务,开发者可以直接使用。这些服务是平台无关的,可以与 Android、iOS、Web 应用、Raspberry Pi、Arduino 等任何平台进行接口。
  • Buddy 具有 API,可以帮助我们管理连接到服务的设备以及用户(如果存在)。
  • API 可以向 Windows、Android 或 IoS 上的移动应用程序推送通知。
  • Buddy 平台支持记录度量事件。
  • 来自应用程序和设备的数据以遥测(Telemetry)的形式发送并存储在 Buddy 平台上。
  • Buddy 还支持深度分析,可以帮助我们更好地了解客户。
  • 公司的商业智能应用程序可以轻松地与 Buddy 平台上的数据进行接口。
  • Buddy 可根据连接的设备或应用程序进行扩展。

Buddy 平台软件开发工具包(SDK)

如前所述,Buddy 支持多个平台。通过 SDK 提供支持,SDK 本质上是 REST 服务的薄包装,用于处理请求和响应管理、身份验证等复杂任务。Buddy 有四个 SDK 可供下载,如下所示:

  • .NET SDK
  • iOS SDK
  • Android SDK
  • JavaScript

.NET SDK

.NET SDK 用于从 .NET 应用程序、Windows 手机应用程序、Netduino 应用、Xamarin 应用与 Buddy 平台进行接口。该 SDK 可以从 Visual Studio 中的 NuGet 管理器安装。

软件开发工具包可帮助我们完成以下任务:

  • 创建 Buddy REST API 调用的请求
  • 管理身份验证
  • 解析 API 调用收到的响应
  • 存储和管理凭证

必备组件

此版本支持与 Visual Studio 2012 和 2013 的开发,并支持以下平台:.NET 4.5、Windows Phone 8.x、Windows 8.x、Xamarin Android、Xamarin iOS。

以下是使用 Visual Studio 中的 NuGet 安装 SDK 的步骤。

  • 打开 Visual Studio
  • 创建一个新项目
  • 搜索 NuGet 包管理器
  • 在 NuGet 在线搜索中搜索 Buddy
  • 点击安装

下方是带有上述步骤的 GIF。

使用 .NET SDK

要在我们的 .NET 代码中使用 SDK,我们需要使用 `init` 方法初始化 SDK。

`init` 方法需要 Buddy Platform 上应用程序的 App ID 和 App Key。让我们首先在平台上创建一个名为 `CodeProject_Sample` 的应用程序。

以下是从仪表板创建新应用程序并获取 App Key 和 ID 的步骤。

现在,让我们在 .NET 代码中初始化 SDK。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BuddySDK;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Buddy.Init("jdjjjasdj.fGgbvKNcKsFv", 
            "111112211-5D48-4BFD-A36A-A975D0C34F20");
        }
    }
}

注册设备

要在 Buddy 平台应用程序上注册设备,我们可以使用注册设备方法。此方法将设备注册并向 Buddy 平台应用程序进行身份验证。

Buddy.registerDevice("bbbbbc.fGgbvKNcKsFv",
"FB664210-5D48-4BFD-A36A-A975D0C34F20", function(error, res) {
       Buddy.recordMetricEvent("app_started");

  Buddy.get("/users", function(error_2, res_2) {
      var myUsers = res_2.result;
  });
});

var deviceToken = null;

$.ajax( {
  type: 'POST',
  url: "https://api.buddyplatform.com/devices",
  processData: false,
  data: JSON.stringify({appId:myAppId, appKey:myAppKey, platform:"REST"}),
  headers: {"Content-Type":'application/json'},
  success: function(data) {
              if (data.success && data.result) {
                     // save the token
                     deviceToken = data.result.accessToken;
              }

        // get the list of users
        $.ajax( {
          type: 'GET',
          url: "https://api.buddyplatform.com/users",
          headers: {
                           "Content-Type":"application/json",
                "Authorization" : "Buddy " + deviceToken
          },
          success: function(data) {
                if (data.success && data.result) {
                    // save the token
                    var users = data.result.pageResults;
                }
          });
  });
})

遥测

随着我们日常生活中越来越多设备能够连接到互联网,这些设备可以生成大量数据,并在许多方面为企业提供帮助。一个简单的例子就是联网汽车。

汽车一旦售出并联网,就可以将数据发送回制造商,这些数据可用于多种用途,数据可以是以下任何内容:

  • 汽车每天的使用量
  • 汽车的维护情况
  • 汽车在地理位置、气候、使用情况等方面的性能表现
  • 哪些仪表板功能最常被使用
  • 哪些功能从未被使用或很少被使用
  • 汽车的维修频率等

拥有我们产品的数据有助于我们做出决策和改变,从而帮助我们为客户提供最好的产品和服务。

Buddy 帮助我们通过 Buddy Telemetry(Buddy 遥测)捕获这些数据。

配置遥测

在收集数据之前,我们需要让 Buddy 了解我们要发送的数据,这样 Buddy 才能知道如何处理。这部分称为遥测配置。

通常在发送数据之前配置一次,并且可以随时覆盖配置。我倾向于在初始化应用程序时发送配置,之后再发送数据。以下是一个示例配置。

{
  Car: {
    VIN: ‘234324234234324’,
     Make: ‘2012’,
      Model: ‘XXXX’
  },
  ssn: '111-11-1111',
  name: ‘Mr.XXX YYY’,,
Coutry: ‘USA’,
State: ‘WA’,
City: ‘Seattle’,
GPS:   ’12.12 12.12’,
MPG: 23,
}

Buddy.put('/telemetry/carconfig',
          {filterKeys:[car.VIN','ssn',’name’],
           metrics:{State:' State',City:’ City’, GPS:'GPS', Mileage:’MPG’}});

配置完成后,我们需要发送实际数据,如下所示:

// ...later, when data is ready to send.
var data = getSomeData();
Buddy.post('/telemetry/myconfig',{data:data});

filterKeys

`FilterKeys` 用于排除客户敏感数据不被存储。在上面的示例中,我过滤掉了 SSN、姓名和车辆识别号(VIN)。

存储和检索媒体和文件

在 Buddy 上存储图片

就像存储数据一样,我们可以使用 API 将图片存储在 Buddy 平台上。限制图片大小始终是明智的,这样可以减少上传和检索时间。有可用的库可以在上传到 Buddy 平台之前调整图片大小。

以下是我们可以在 JavaScript 上使用的代码片段,用于从客户端上传文件。

var options = {

            readPermissions: "User",
            writePermissions: "User",
            permissions: "App",
data: "{binary picture data}",
            location: "22.1, -678.21",
            caption: "Sample picture for Codeproject article!",
            tag: "samples",
            watermark: "CPCPCPCPCP"
};

Buddy.post('/pictures',
                        options,
                        function(err, result) {

                                    if(err)
                                                return err;
                        }
            );
字段 data
必需? 必需
描述 以二进制格式上传的文件
   
字段 location
必需? 可选
描述 位置的纬度和经度,通常是拍摄照片的地理位置
   
字段 caption
必需? 可选
描述 任何文本作为图片的标题
   
字段 标签
必需? 可选
描述 用作图片标签的字符串值,通常用于将图片分组在一起
   
字段 watermark
必需? 可选
描述 Buddy 将作为水印覆盖的字符串值
   
字段 readPermissions
必需? 可选
描述 值可以是 User(用户)或 App(应用程序),表示只有创建者可以查看,或者 App 代码也可以访问
   
字段 writePermissions
必需? 可选
描述 值可以是 User(用户)或 App(应用程序),表示只有创建者可以修改,或者 App 代码也可以修改
   
字段 permissions
必需? 可选
描述 值可以是 User(用户)或 App(应用程序),表示只有创建者可以查看或修改,或者 App 代码可以访问和修改

为 .NET 应用程序编写的相同代码如下所示:

BuddyFile data = new BuddyFile(myFile.AsStream(), "My File Name", fileType);
BuddyGeoLocation location = new BuddyGeoLocation(47.1, -122.3);

var options = new {
                                    readPermissions= "User",
            writePermissions= "User",
            permissions= "App",
data= data_variable,
            location= "22.1, -678.21",
            caption= "Sample picture for Codeproject article!",
            tag= "samples",
            watermark= "CPCPCPCPCP"
                  };

var result = await Buddy.PostAsync<Picture>("/pictures", options); 

这些是服务上的一些基本 API,我们将在下一篇文章中通过示例进一步探讨其他 API。

物联网服务 - Buddy 平台介绍 - CodeProject - 代码之家
© . All rights reserved.