@embr-modules/sse
Version:
A module for Ignition that provides an API for high-speed streaming of tag changes and alarm events via SSE (server-sent events).
126 lines (89 loc) • 4.42 kB
Markdown
# Embr Event Stream Module [<img src="https://cdn.mussonindustrial.com/files/public/images/emblem.svg" alt="Musson Industrial Logo" width="90" height="40" align="right">][embr]
A module for Ignition that provides an API for high-speed streaming of tag changes and alarm events via SSE (server-sent events).
Server-Sent Events (SSE) is a server push technology enabling a client to receive automatic updates from a server via an HTTP connection.
All modern browsers support server-sent events: Firefox 6+, Google Chrome 6+, Opera 11.5+, Safari 5+, Microsoft Edge 79+.
## Getting Started
1. Download the [latest version] from [releases].
2. Install the module through the Ignition Gateway web interface.
## Module Documentation
- `#TODO` [Module documentation][documentation]
## Gateway API
- [Create a EventStream Session](#Create-a-EventStream) : `POST /embr/tag/stream/session`
- [Subscribe to a EventStream Session](#Subscribe-to-a-EventStream) : `GET /embr/tag/stream/session/{session_id}`
---
### Create a EventStream Session
Creates a EventStream session containing the specified tags.
The returned `session_id` is used to access the stream.
As a security measure, the `session_id` is time-limited and single use.
If the session is not accessed within 30 seconds after creation, a time-out occurs and the session is discarded.
Only a single client may access a given `session_id`.
| Item | Value |
| ------ | -------------------------- |
| URL | `/embr/tag/stream/session` |
| Method | `POST` |
| Body | `{ tagPaths: [] }` |
| Auth | `body` |
#### Body Example
```json
{
"username": "admin",
"password": "password",
"tag_paths": ["[default]Tag1", "[default]Path/Tag2"]
}
```
#### Success Response
**Code** : `200 OK`
The response is a `JSON` object containing the `session_id` of the stream and details of the tags included in the session.
Each tag is given a numeric `tag_id` in order to compress the event source message size.
The [EventSource] messages will use this `tag_id` when sending tag change information.
```json
{
"status": "success",
"data": {
"session_id": "8c1a5b02-df33-4a2e-ad6f-101f76ab3d06",
"tags": [
{
"tag_path": "[default]Tag1",
"alarm_path": "prov:default:/tag:Tag1",
"tag_id": 0
},
{
"tag_path": "[default]Path/Tag2",
"alarm_path": "prov:default:/tag:Path/Tag2",
"tag_id": 1
}
]
}
}
```
---
### Subscribe to a EventStream Session
Subscribe to a EventStream by its `session_id`.
This endpoint is meant to be accessed by an [EventSource].
For more details, see [Mozilla's MDN WebDocs](https://developer.mozilla.org/en-US/docs/Web/API/EventSource).
| Item | Value |
| ------ | --------------------------------------- |
| URL | `/embr/tag/stream/session/{session_id}` |
| Method | `GET` |
| Params | `session_id`: EventStream session id |
| Auth | None |
#### Success Response
**Code** : `200 OK`
Messages events have the following format:
```
event: tag_change
data: {"tag_id":0,"v":"Tag Value!","q": 192,"t":1717624491517}
event: alarm_event
data: {"tag_id":0,"count":1,"displayPath":"","eventData":{"eventValue":"false","name":"AlarmName","eventTime":"Thu Jun 20 13:17:37 EDT 2024","priority":"Critical","displayPath":""},"extension":{"isShelved":"false"},"id":"454d77c5-44f8-4e52-ab3c-e1ed5c950583","isAcked":false,"isCleared":false,"isShelved":false,"label":"AlarmName","name":"AlarmName","notes":"","priority":"Critical","source":"prov:default:/tag:Tag1:/alm:AlarmName","state":"Active, Unacknowledged","values":[{"isShelved":"false"}]}
```
---
## Changelog
The [changelog](./CHANGELOG.md)) is regularly updated to reflect what's changed in each new release.
## Copyright and Licensing
Copyright (C) 2023 Musson Industrial
Free use of this software is granted under the terms of the MIT License.
[embr]: https://github.com/mussonindustrial/embr
[releases]: https://github.com/mussonindustrial/embr/releases
[documentation]: https://docs.mussonindustrial.com/
[latest version]: https://github.com/mussonindustrial/embr/releases/download/embr-chart-js-0.1.3-SNAPSHOT/Embr-Chartjs-module.modl
[EventSource]: https://developer.mozilla.org/en-US/docs/Web/API/EventSource