Report multiple Resources in a single Event and Stream
In the examples from the previous topics, data from each Resource was routed to a different cloud Stream.
Depending on how you plan to handle the data on the cloud side, it can be beneficial to send most of your data in a single Stream.
The following diagram depicts how to accomplish this. In this Octave implementation, which builds off of that in Report multiple Resources independently to the Cloud, a single Edge Action has been created.
Here, thermometer Events are routed to the Edge Action through the Edge Action's Observation, but humidity Events are read by the Edge Action' s logic, by invoking the Octave Edge Action Runner API Datahub.read(). Wind speed Events are now routed to a Stream Observation, and the Edge Action gets their events by Datahub.query().
The Edge Action then processes data from all three Resources and sends a single Event to the cloud.
Key Takeways
- In order to send Resource data in a single Event, you can use an Edge Action to collect the data and create the Event with the resource payload that you want
- One resource and Edge Action Observation are used to trigger the Edge Action
- Other Resources can be read from the Edge Action:
- directly via a call to
Datahub.Read('resource')
to get the latest value of a Resource.- by calling an Observation via
Datahub.query('observation')
, thus benefiting from the Observation characteristics (filter, buffering, min/max/mean).- The Event sent from the Edge Action will be routed to the
device/:default
Stream.
The following is an example of an Edge Action to handle this implementation:
function(event) {
return {
"cl://": [{
"temperature": event.value,
"humidity": Datahub.read('/humidity/value',0).value,
"wind_speed": Datahub.query('wind_speed','mean',10)
}]
};
}
The following shows what the Event looks like in the device/:default
Stream:
{
"elems": {
"humidity": 31.3,
"temperature": 37.4,
"wind_speed": 17.7
}
}
Learning more:
- In order to report Events on a periodic basis rather than on an actual measurable Resource, a similar approach can be taken with 'util/counter/value' as the input Resource to trigger the Edge Action.
- By directing the Edge Action output to
sf://
instead ofcl://
the Events will be handled by Store and Forward and sent according to its flushing rules.- if you want to use a similar approach but send the data to another a Stream other than
device/:default
, you can write out the Edge Action's output to a JSON Virtual Resource and set a Cloud Stream Observation on that Virtual Resource.
Updated over 4 years ago