Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景
博客說明
所有刊發(fā)內(nèi)容均可轉(zhuǎn)載但是需要注明出處。
三種整合數(shù)據(jù)至Streamr的典型場景
本系列文檔主要介紹怎么通過Streamr管理自己的DATA,整個(gè)系列包括三篇教程文檔,分別是:教你5分鐘上傳數(shù)據(jù)至Streamr、三種整合數(shù)據(jù)至Streamr的典型場景、教你在Streamr市場上發(fā)布數(shù)據(jù)。所有文檔均參考Streamr blog。前兩篇主要偏向技術(shù)文檔,所以需要有一定的技術(shù)背景。第三篇不包含任何技術(shù)知識(shí),大部分人都可以按照教程來完成相應(yīng)的操作。
簡介
第一篇文檔主要介紹如何通過調(diào)用API接口上傳數(shù)據(jù)至Streamr,本篇教程文檔主要介紹了三種整合數(shù)據(jù)至Streamr網(wǎng)絡(luò)的典型示例。包括: 1. 直接從數(shù)據(jù)源推送數(shù)據(jù)至Streamr網(wǎng)絡(luò); 2. 數(shù)據(jù)源和Streamr之間建立橋接(數(shù)據(jù)源向橋接點(diǎn)實(shí)時(shí)推送數(shù)據(jù)); 3. 數(shù)據(jù)源和Streamr之間建立橋接(橋接點(diǎn)向數(shù)據(jù)源發(fā)送輪詢請求)。
相關(guān)概念說明
在Streamr網(wǎng)絡(luò)中,每個(gè)數(shù)據(jù)點(diǎn)屬于一個(gè)Stream。每個(gè)數(shù)據(jù)點(diǎn)(或者成為事件、消息)包含了標(biāo)有時(shí)間戳的一系列信息,比如,傳感器采集的數(shù)據(jù)、即時(shí)通訊的消息等。根據(jù)使用場景的不同,一個(gè)Stream可以包括一個(gè)源的數(shù)據(jù)或者是多個(gè)數(shù)據(jù)源的數(shù)據(jù)。Streamr網(wǎng)絡(luò)為用戶上傳數(shù)據(jù)提供API接口,用戶調(diào)用該API接口最簡單的方式是使用Streamr客戶端庫。當(dāng)前的Streamr客戶端庫是JavaScript編寫的,其他語言的客戶端庫還在開發(fā)中。如果您不方便使用當(dāng)前的Streamr客戶端庫,您也可以使用HTTP庫來調(diào)用API接口,相關(guān)方法請參見上一篇說明文檔。
場景一:直接從數(shù)據(jù)源推送數(shù)據(jù)至Streamr網(wǎng)絡(luò)
- 復(fù)雜度:低
- 延遲:低
- 可用性:中等
在這種模式下,數(shù)據(jù)源一產(chǎn)生新的數(shù)據(jù),將被立即直接推送至Streamr網(wǎng)絡(luò)。這種模式是官方推薦的,但是受環(huán)境影響,這種模式有可能會(huì)不可用。這種模式需要用戶能夠控制產(chǎn)生數(shù)據(jù)的系統(tǒng)并且能夠決定該數(shù)據(jù)發(fā)送的地方。舉例來說,如果您是IoT設(shè)備生產(chǎn)商,您可以直接將Streamr客戶端直接植入這些IoT設(shè)備中,并且允許設(shè)備使用者上傳數(shù)據(jù)至Streamr網(wǎng)絡(luò)。大部分的工業(yè)設(shè)備具有良好的可配置特性,可以隨時(shí)將產(chǎn)生的數(shù)據(jù)接入Streamr網(wǎng)絡(luò)。然而,諸如汽車、手機(jī)、智能手環(huán)等消費(fèi)級(jí)設(shè)備經(jīng)常強(qiáng)制將用戶數(shù)據(jù)發(fā)送至設(shè)備制造商的云端,然后向用戶提供訪問該數(shù)據(jù)的API接口。在這種場景下,用戶可以使用橋接模式將數(shù)據(jù)接入到Streamr網(wǎng)絡(luò)(具體參見下一小節(jié))。
下面以一個(gè)實(shí)際應(yīng)用為例說明如何直接從數(shù)據(jù)源推送數(shù)據(jù)至Streamr網(wǎng)絡(luò)。這里主要介紹如何將IoT傳感器Ruuvi產(chǎn)生的測量數(shù)據(jù)實(shí)時(shí)上傳至Streamr。該設(shè)備通過低功耗藍(lán)牙將數(shù)據(jù)傳輸至一臺(tái)裝有Streamr客戶端庫的網(wǎng)關(guān)計(jì)算機(jī)。其中,網(wǎng)關(guān)計(jì)算機(jī)為每個(gè)設(shè)備單獨(dú)建立一個(gè)Stream,并且將設(shè)備產(chǎn)生的測量數(shù)據(jù)實(shí)時(shí)上傳至所創(chuàng)建的Stream。其示例代碼如下:
const StreamrClient = require('streamr-client')
const ruuvi = require('node-ruuvitag')
const API_KEY = 'MY-API-KEY'
const client = new StreamrClient({apiKey: API_KEY
})
const streams = {}
console.log('Listening for RuuviTags...')
ruuvi.on('found', tag => {// Create a Stream for this tag if it doesn't exist yetif (!streams[tag.id]) {streams[tag.id] = await client.getOrCreateStream({name: 'Ruuvi ' + tag.id})}tag.on('updated', async (data) => {const stream = streams[tag.id]try {// Produce the data point to the streamawait stream.produce(data)} catch (err) {console.error(err)}})
}) 場景二:數(shù)據(jù)源和Streamr之間建立橋接(數(shù)據(jù)源向橋接點(diǎn)實(shí)時(shí)推送數(shù)據(jù))
- 復(fù)雜度:中等
- 延遲:低
- 可用性:中等
這種模式適用于您無法直接控制數(shù)據(jù)源的場景,用戶可以通過一系列API接口實(shí)時(shí)獲取數(shù)據(jù)。具體地,在這種模式下,數(shù)據(jù)源實(shí)時(shí)將新產(chǎn)生的數(shù)據(jù)推送給用戶,用戶收到通知后立即將該數(shù)據(jù)上傳至Streamr。
示例1
示例1主要介紹如何使用Bitfinex客戶端庫和Streamr客戶端庫,將Bitfinex上DATA/USD交易數(shù)據(jù)和Streamr建立連接。
const BFX = require('bitfinex-api-node')
const StreamrClient = require('streamr-client')
const STREAM_ID = 'MY-STREAM-ID'
const API_KEY = 'MY-API-KEY'
const bws = new BFX('', '', {version: 2,transform: true
}).ws
const client = new StreamrClient({apiKey: API_KEY
})
bws.on('open', () => {bws.subscribeTicker('DATUSD')
})
bws.on('ticker', (pair, ticker) => {console.log('Ticker:', ticker)client.produceToStream(STREAM_ID, ticker).then(() => console.log('Sent to Streamr!')).catch((err) => console.error(err))
}) 示例2
示例1主要從編程角度介紹如何建立相應(yīng)的連接,如果您非程序員,那可以使用本示例中的可視化編輯器Streamr Editor來建立相應(yīng)的連接。但是,使用該可視化編輯器也需要用戶了解一些API接口和協(xié)議等技術(shù)知識(shí)。下面展示一個(gè)通過MQTT API監(jiān)測電車實(shí)時(shí)位置的過程,該過程已獲得赫爾辛基公共交通的授權(quán)。
# MQTT 模型參數(shù)
URL: mqtt://mqtt.hsl.fi
Topic: /hfp/v1/journey/ongoing/tram/#MQTT 模型數(shù)據(jù)JSON格式的字符串,通過JSON解析器模型解析為一個(gè)對(duì)象。從該對(duì)象中提取出'VP'字段,該字段包含的也是一個(gè)對(duì)象。從提取出的對(duì)象中獲取'desi','lat','long'和'veh'字段的值,然后經(jīng)過數(shù)據(jù)處理之后通過SendToStream模型將該數(shù)據(jù)上傳至Streamr。 場景三:數(shù)據(jù)源和Streamr之間建立橋接(橋接點(diǎn)向數(shù)據(jù)源發(fā)送輪詢請求)
- 復(fù)雜度:中等
- 延遲:中等
- 可用性:好
大多數(shù)云服務(wù)提供商都會(huì)為用戶提供訪問數(shù)據(jù)的API接口,這種場景正是使用該API接口完成用戶數(shù)據(jù)上傳至Streamr。在這種場景下,當(dāng)數(shù)據(jù)源產(chǎn)生新的數(shù)據(jù)時(shí),用戶不會(huì)收到任何通知,這就意味著用戶需要重復(fù)向該API接口發(fā)送數(shù)據(jù)請求,這種方式成為輪詢。顯而易見,這種方式并不是一個(gè)獲取實(shí)時(shí)數(shù)據(jù)的最佳方式,原因如下:1. 在用戶請求該數(shù)據(jù)之前,該數(shù)據(jù)可能已經(jīng)變化多次,意味著用戶會(huì)丟失一些數(shù)據(jù)信息;2. 會(huì)給API服務(wù)器端帶來不必要的負(fù)載,因?yàn)橛脩粽埱蟮臅r(shí)機(jī)是不固定的,不一定恰巧在數(shù)據(jù)值發(fā)送變化的時(shí)候;3. 增加了時(shí)延(輪詢周期的一半時(shí)間)。
示例1
本示例將介紹如何使用OpenWeatherMap每隔15分鐘查詢?nèi)鹗砍竦奶鞖馇闆r。對(duì)于天氣等這種數(shù)據(jù),使用輪詢方式獲取是可行的,因?yàn)樘鞖鉅顩r不會(huì)變化的太快。
const fetch = require('node-fetch')
const StreamrClient = require('streamr-client')
const OPENWEATHERMAP_API_KEY = 'MY-OPENWEATHERMAP-KEY'
const STREAMR_API_KEY = 'MY-STREAMR-KEY'
const POLL_INTERVAL = 15 * 60 * 1000 // 5 minutes
const location = 'Zug,Switzerland'
const client = new StreamrClient({apiKey: STREAMR_API_KEY
})
// Query data from OWM and produce the result to Streamr
function pollAndProduce(stream) {fetch(`https://api.openweathermap.org/data/2.5/weather?q=${location}&APPID=${OPENWEATHERMAP_API_KEY}&units=metric`).then((response) => response.json()).then((json) => {console.log(json)// Produce the data point to Streamrreturn stream.produce(json)}).catch((err) => {console.error(err)})
}
// Create a Stream for this location, if it doesn't exist
client.getOrCreateStream({name: `Weather in ${location}`,description: 'From openweathermap.org, updated every 15 minutes'
}).then((stream) => {console.log(`Target Stream id: ${stream.id}`)// Poll and produce nowpollAndProduce(stream)// Keep repeating every 15 minutessetInterval(() => pollAndProduce(stream), POLL_INTERVAL)
}).catch((err) => {console.log(err)
}) 示例2
示例2將介紹如何利用可視化編輯器完成上述功能。
圖中,Clock模型每隔15分鐘發(fā)出一次警報(bào)并且觸發(fā)HTTP Request模型向OpenWeatherMap發(fā)出獲取天氣數(shù)據(jù)的請求。然后,SendToStream模型將獲取到的數(shù)據(jù)上傳至Streamr。
參考文獻(xiàn)
- https://medium.com/streamrblog/three-patterns-for-integrating-your-data-to-streamr-2-of-3-38027dc91f9e
轉(zhuǎn)載于:https://www.cnblogs.com/Streamr-letsgo/p/9129707.html
總結(jié)
以上是生活随笔為你收集整理的Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个玲玲的微信网名
- 下一篇: node.js实现国标GB28181流媒