Blob Attributes
Blob attributes are able to store much more data than any other attribute data type. Blobs are reported as base64 encoded values.
While creating, you may specify a Content-Type to save the data as the proper file type.
Common use cases for Blobs are storing image data or snapshots of high frequency data.
What is a Blob?
A Blob is a Binary Large Object which is a collection of binary data stored as a single entity in a database. Blobs are images, CSVs, and binary data, but they can hold data of any type.
Images
You can use Blobs to store images.
You may report your images as base64 encoded strings. For example state report:
{
"data" : {
"image": "/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2===",
},
"time": <Optional Timestamp>,
"flowVersion": <Optional Workflow Version Name>
}
While storing Blobs that represent images, you may use them in the Image Block or the Custom HTML Block within a dashboard. For example, this allows for your dashboard to display the most recent image of a device.
High Frequency Data
“High frequency data” can be defined as anything that is reporting state many many times per second. For example, binary values or even sizable CSV data:
{
"data" : {
"csv": "/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2===",
},
"time": <Optional Timestamp>,
"flowVersion": <Optional Workflow Version Name>
}
Blobs are a great way to store a snapshot of the high-frequency data. While you cannot aggregate over data that exists inside of the Blob, you may use a snapshot of the high-frequency data:
- In a Notebook to perform batch processing.
- To display within an Experience Page.
- On a Dashboard using the Custom HTML Block.
Aggregations are allowed using the other attribute data types. It is common to store the aggregated values with the high frequency snapshot. Like so:
{
"data" : {
"csv": "/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2===",
"max": 100,
"average": 34,
},
"time": <Optional Timestamp>,
"flowVersion": <Optional Workflow Version Name>
}
Blob Usage
Depending on what resource you are using in WEGnology you can either get the original base64 data or a Signed URL. This is because the data can be so large it can be difficult to get all the data into a payload, thus you may get back a Signed URL where you have the option to distribute or download in the browser or workflow.
Signed URLs
A Signed URL is a URL with a signature and an expiration date. It allows anyone who has a copy of the link to access the data until the URL expires.
The following is an example Signed URL payload of a device state from the Data Gauge Query:
{
"data" : {
"result": {
"value": "https://storage.googleapis.com/wegnology-blob/5ea05725a2efcc00077a81d1/5ea057fc848d990006aceae9/blob/1588017908000-44221a392685cefc91513cfbdea1fbd8.jpeg?GoogleAccessId=data-export%40structure-1104.iam.gserviceaccount.com&Expires=1588104310&Signature=X%2FiIWMGwykuqmG9d57Kb%2Fz8s%2BFvnH4Xuq58%2BR2ekrC5CpBIWhrUYOBK4LrUjDuBNGn2IdsuhcKKJ4iPAO3PCEaj6avmwbn9TsePkwhhmmJiJeYHbe3IGMG3XdQUDauffIqUtaOpjP7oE8ddXAhJNm%2F43ekDIsiiqJOSt%2F3Fc94GBeAMaich6w40w%2FrAWlP6rlkAODQQxOftU8JmZesV65sR3g4hClfYntodFpAF9Ks4sCpjorhH2M79ceTVvnf4DtS00zzpII7iBKmbYU4d7fxqoUwlPqOApmnftaLoYgL%2Fnkp8dkKYq%2FDmEVfmg0uYw%3D%3D&response-content-disposition=attachment%3B%20filename%3D%221588017908000-44221a392685cefc91513cfbdea1fbd8.jpeg%22",
"time": <Timestamp of the reported state>
}
},
"time": <Optional Timestamp>,
"flowVersion": <Optional Workflow Version Name>
}
For a Data Gauge Query, you get a Signed URL because the data has already been saved and you can download the file using the HTTP node on the workflow.
The following are resources where you may utilize the Signed URL:
Certain areas throughout the platform will always display a Signed URL. For example:
Downloading within a Workflow
Downloading the Blob Data from a Signed URL within a workflow can be accomplished with the HTTP Node.
The most important field to set is the “Response Encoding Type” to Base64
. Then the Blob Data will be within the body
of the response.
Signed URL TTL
Signed URLs don’t last forever. The time to live for the Signed URL is configurable on an application level.
To update the Blob Attribute TTL:
- From the Application Menu, navigate to the “Application Info” page.
- Select “Blob Attribute TTL”.
The maximum time a Signed URL can live is a week and the shortest is an hour. The default for each application is 24 hours.
Raw Data
Raw data is the original base64 state data that was reported.
The following is an example of a payload on a Device State Trigger:
{
"data" : {
"blob_attribute": "/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2===",
},
"time": <Optional Timestamp>,
"flowVersion": <Optional Workflow Version Name>
}
The Device State Trigger gets the raw data, allowing you to analyze the data as it is coming into WEGnology.
The following resources allow you to utilize the raw base64 encoded data:
- Notebooks
- Device State Trigger
- Archiving
- Device Exports (when selecting “Include blob data inline in the export”)
Reporting Blobs
Blob attributes are reported the same way as other device attribute types. However, Blobs must be reported as base64 encoded values.
Content Types
When configuring a Blob attribute, you must provide a Content Type, which defines the file type of the Blob Data. This also ensure the proper file extension on the Signed URL.
Common content types:
- PNG image:
image/png
- JPEG image:
image/jpeg
- CSV:
text/csv
- JSON:
application/json
- Binary:
application/octet-stream
You can find a more complete list of content types here.
If you are using an unrecognized content type, your file extension will default to .bin
.
Converting to Base64
When reporting Blob Data from a workflow you may use the base64Encoded helper to re-encode your UTF8 string to base64:
Limits
The maximum size for this attribute is 512kB.
Was this page helpful?
Still looking for help? You can also search the WEGnology Forums or submit your question there.