首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

利用物联网来节约用水,第 3 部分(1)

利用物联网来节约用水,第 3 部分(1)

步骤 1. 准备好 Cloudant                数据存储在这一步中,将会让 Poseidon Cloudant                数据库中的传感器读数可以采用客户端使用的某种格式。更具体地讲,要让数据可用于客户端应用程序,以便创建一个图表,显示某个特殊传感器的最后 x                天值得一读的温度、湿度和压力值。
存储在数据库中每一个传感器读数现在都具有以下格式:
1
2
3
4
{"_id":"f15b90c35ac432034b7d08d628f204f9","_rev":"2-9d58792b0ad4e39116572ac811a2d509",
"temperature":21.74,"timestamp":"2014-09-11T20:49:03.950070",
"altitude":167703.6,"clientID":"ExamplePlantSensor",
"pressure":1021.52,"longitude":4.8,"moisture":699,"latitude":50.2}




默认情况下,所有读数都是通过其 ID(_id)进行分类的。您要做的第一件事就是在 Cloudant                中创建一个新的视图,通过使用传感器名称和时间戳的组合键对数据进行分类。然后,可以查找某个特定传感器和时间范围。
  • 查找主机名\用户名和您的 Cloudant 实例的密码:
    • 登录到  。
    • 在仪表板中,单击您在本教程系列的   中创建的应用程序的图标。
    • 选择 SDK for Node.js(在左边)。
    • 您可以看到针对 Bluemix 实例中的服务的环境变量。(可能需要花费一段时间来加载它们。)这些变量包含您在本教程中需要使用的 Cloudant                            主机名、用户 ID                                和密码:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      {
         "name": "MyPoseidon3:cloudantNoSQLDB",
         "label": "cloudantNoSQLDB",
         "plan": "Shared",
         "credentials": {
            "username": "f8fe0075-9b65-49c5-bffd-b67c1fe16260-bluemix",
            "password": "11111111111111111111111111111b456b35bd2e609740ae54f83602",
            "host": "f8fe0075-9b65-49c5-bffd-b67c1fe16260-bluemix.cloudant.com",
            "port": 443,
            "url": "https://f8fe0075-9b65-49c5-bffd-b67c1fe16260-bluemix:
            801e32c10276a103abb374284d34a9bdfad91b456b35bd2e609740ae54f83602@f8fe0075-9b65-
            49c5-bffd-b67c1fe16260-bluemix.cloudant.com"
         }
      }





                                  在一个您可以轻松进行复制/粘贴的文件中保存此代码。
  • 在 Cloudant 中创建一个历史视图:
    • 在 Bluemix 实例仪表板中,选择您的 Cloudant 服务。
    • 单击 Launch 为您的 Cloudant 实例加载管理用户界面。
    • 单击 poseidonsensors。
    • 单击 All Design Docs 旁边的 +,并选择 New View:
  • 填充 New View 表单: Cloudant 中的视图采用了 MapReduce 概念来构建视图索引。关于构建您自己的自定义视图的更多信息,请参阅 CouchDB 文档中的  。

    • 对于 Save to Design Document,可以选择 New document
    • 在 _/design 字段中,输入 sensors。
    • 对于索引名称,可以输入 history。
    • 选择可选 Reduce 字段中的 None
    • 在 Map function 字段中,输入以下内容:                                
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      function(doc) {
         if(doc.clientID && doc.timestamp) {
            sensor_values = [0, 0, 0];
            if (doc.temperature) {
                  sensor_values[0] = doc.temperature;
            }
            if (doc.moisture) {
                  sensor_values[1] = doc.moisture;
            }
            if (doc.pressure) {
                  sensor_values[2] = doc.pressure;
            }      
            emit([doc.clientID, doc.timestamp], sensor_values);
        }
      }




  • 单击 Save & Build index
  • 通过浏览以下内容来测试您的新视图:                        https://host/poseidonsensors/_design/sensors/_view/history
    例如:https://f8fe0075-9b65-49c5-bffd-b67c1fe16260-bluemix.cloudant.com/poseidonsensors/_design/sensors/_view/history)。
    您必须在后续步骤                        1d 中提供用户名和密码。(在步骤 2 中,可以将此数据作为开放数据提供,从而不必提供用户名和密码。)
    此请求将返回所有文档:

  • 通过提供一个起始和结束时间,您可以使用 startkey 和 endkey 参数来限制列表。URL                        的结构如下所示:                            https://host/poseidonsensors/_design/sensors/_view/history?startkey=[sensor_id,                            datetime]&endkey=[sensor_id,datetime]                        
    例如:                    https://f8fe0075-9b65-49c5-bffd- ... w/history?startkey=["BramPlantSensor",                    "2014-10-10T00:00:00.000000"]&endkey=["BramPlantSensor",                    "2014-11-10T00:00:00.000000"]
  • 注销 Cloudant 并重新登录,以便刷新 Cloudant 管理用户界面。现在,可以在 Views 列表中看到新的 history                    视图:
  • history 视图将会返回创建一个图表所需的所有数据,但您可以将这些数据转换成逗号分隔值 (CSV) 格式(通过使用  ),让数据变得更紧凑:
    • 单击 Cloudant 管理界面中的 All Design Docs
    • 单击 Edit 来编辑您在这一步中创建的设计文档。
    • 将以下代码添加到设计文档中,立即对 history 视图使用以下代码:                                
      1
      2
      3
      4
      5
      6
      "lists" : {
         "csv" : "function(head, req){ start({ 'headers': { 'Content-Type': 'text/csv' } });
      send('timestamp,temperature,moisture,pressure\\u000A'); while(row = getRow()){
      send(row.key[1] + ',' + row.value[0] + ',' + row.value[1] + ',' + row.value[2] +
      '\\u000A'); } }"
        }




  • 作为一种替代方法(不想现在就做到这一点),您可以在不使用管理界面的情况下重新提交整个设计文档(包括 history 和                                lists 视图)。在编辑模式下,在克隆的 PoseidonProject 存储库打开                                Tutorial3/Cloudant/creating_views.json。将版本号(_rev)更改为类似于                            Cloudant 中的当前设计文档的编号(让 Cloudant 知道您正在更新以前的版本)。上传文件:curl -X PUT                                    https://host/poseidonsensors/_design/sensors                                --data-binary @sensors_design.json。Cloudant                            会使用结果值和所创建设计文档的版本号来进行响应。

    在您的浏览器中使用以下 URL 结构来测试新的 lists 视图:
                            https://host/poseidonsensors/_design/sensors/_list/csv/history?startkey=[sensor_id,                        datetime]&endkey=[sensor_id,datetime]                            例如:                        https://f8fe0075-9b65-49c5-bffd- ... v/history?startkey=["BramPlantSensor",                        "2014-10-10T00:00:00.000000"]&endkey=["BramPlantSensor",                        "2014-11-10T00:00:00.000000"]
    URL 返回了一个包含传感器读数的 CSV 文件:
这就是这一步中的操作。您已经完成了数据存储的准备工作。
返回列表