n8n-nodes-emberplus
v0.2.0
Published
n8n community node for interacting with Ember+ devices
Downloads
98
Maintainers
Keywords
Readme
n8n-nodes-emberplus
This is an n8n community node package for interacting with Ember+ devices. Ember+ is a control protocol commonly used in broadcast and professional audio/video equipment, including Lawo audio consoles, routing systems, and other broadcast infrastructure.
This package uses the sofie-emberplus-connection library under the hood.
Features
- Browse - Explore the Ember+ device tree structure
- Get - Read parameter values from any path
- Set - Write values to writable parameters
- Subscribe - React to real-time value changes via trigger node
- Support for both numeric (
0.1.2) and identifier-based (Root.Device.Param) paths - Automatic reconnection on connection loss
- Comprehensive error handling with helpful messages
Installation
In n8n (Community Nodes)
- Go to Settings > Community Nodes
- Select Install
- Enter
n8n-nodes-emberplus - Select Install
Manual Installation
# In your n8n installation directory
npm install n8n-nodes-emberplusFrom Source
git clone https://github.com/jonnelaakso/n8n-nodes-emberplus.git
cd n8n-nodes-emberplus
npm install
npm run build
npm link
# In your n8n directory
npm link n8n-nodes-emberplusCredential Setup
Before using the Ember+ nodes, configure your credentials:
- Go to Credentials in n8n
- Click Add Credential
- Search for Ember+ API
- Fill in the connection details:
| Field | Description | Default |
|-------|-------------|---------|
| Host | IP address or hostname of the Ember+ device | - |
| Port | TCP port of the Ember+ provider | 9000 |
| Connection Timeout | Timeout in milliseconds for connection attempts | 5000 |
Example Configuration
Host: 192.168.1.100
Port: 9000
Connection Timeout: 5000Nodes
Ember+ Node
The main node for interacting with Ember+ devices. Supports four operations:
Browse Operation
Explore the device tree structure to discover available nodes and parameters.
Parameters:
- Path (optional): Starting path to browse from. Leave empty for root.
Example Output:
{
"operation": "browse",
"path": "/",
"nodes": [
{
"path": "0",
"identifier": "Root",
"description": "Root Node",
"type": "node"
},
{
"path": "0.0",
"identifier": "Audio",
"type": "node"
}
]
}Get Operation
Read a value from a specific path.
Parameters:
- Path (required): The path to read from (e.g.,
0.1.2orRoot.Audio.MainFader)
Example Output:
{
"operation": "get",
"path": "0.1.2",
"value": -12.5
}Set Operation
Write a value to a writable parameter.
Parameters:
- Path (required): The path to write to
- Value: The value to set
- Value Type: String, Number, or Boolean
Example Output:
{
"operation": "set",
"path": "0.1.2",
"value": -6.0,
"success": true
}Subscribe Operation
Get the current value of a parameter (for trigger-based subscriptions, use the Ember+ Trigger node).
Parameters:
- Path (required): The path to subscribe to
Example Output:
{
"operation": "subscribe",
"path": "0.1.2",
"currentValue": -12.5,
"subscribed": true
}Ember+ Trigger Node
A trigger node that monitors an Ember+ parameter and fires when the value changes.
Parameters:
- Path (required): The path to monitor
Options:
- Include Previous Value: Add the previous value to the output
- Only On Change: Only trigger when the value actually changes (default: true)
- Include Metadata: Include node identifier and description
Example Output:
{
"path": "0.1.2",
"value": -6.0,
"timestamp": "2025-01-11T12:34:56.789Z",
"previousValue": -12.5,
"identifier": "MainFader",
"description": "Main Output Fader"
}Example Workflows
1. Discover Device Structure
Browse the root of an Ember+ device to discover its structure:
[Manual Trigger] -> [Ember+: Browse] -> [Set Variable]Configure the Ember+ node:
- Operation: Browse
- Path: (leave empty for root)
2. Read Multiple Parameters
Read several fader values and combine them:
[Manual Trigger] -> [Ember+: Get] -> [Ember+: Get] -> [Merge]
(path: 0.1.0) (path: 0.1.1)Or use a Code node to iterate:
const paths = ['0.1.0', '0.1.1', '0.1.2', '0.1.3'];
return paths.map(path => ({ json: { path } }));Then connect to an Ember+ Get node with {{ $json.path }} as the path.
3. Set a Value Based on Condition
Adjust a parameter based on time of day:
[Schedule Trigger] -> [If] -> [Ember+: Set]
(path: 0.2.0, value: -20)
|
+----> [Ember+: Set]
(path: 0.2.0, value: 0)4. React to Value Changes
Trigger a workflow when a parameter changes:
[Ember+ Trigger] -> [If: value > threshold] -> [Send Email]
(path: 0.3.1)Configure the trigger:
- Path:
0.3.1(or identifier path) - Options: Include Previous Value = true
5. Mirror Values Between Devices
Copy a value from one device to another:
[Ember+ Trigger] -> [Ember+: Set]
(Device A) (Device B, same path)6. Batch Parameter Updates
Update multiple parameters from a spreadsheet or database:
[Google Sheets Trigger] -> [Ember+: Set]
(path: {{ $json.path }})
(value: {{ $json.value }})Path Formats
Ember+ supports two path formats:
Numeric Paths
Reference nodes by their position in the tree:
0 # First root node
0.1 # Second child of first root
0.1.2 # Third child of 0.1Identifier Paths
Reference nodes by their identifier names:
Root
Root.Audio
Root.Audio.MainFaderTips for Finding Paths
- Use the Browse operation starting from root
- Navigate deeper by browsing child paths
- Parameters (leaf nodes with values) show
type: "parameter" - Nodes (containers) show
type: "node"
Debugging
Enable debug logging by setting the environment variable:
EMBER_PLUS_LOG_LEVEL=DEBUG n8n startLog levels: DEBUG, INFO, WARN, ERROR, NONE
Error Handling
The node provides detailed error messages for common issues:
| Error | Cause | Solution |
|-------|-------|----------|
| Connection timeout | Device unreachable | Check host/port and network connectivity |
| Path not found | Invalid path | Use Browse to discover valid paths |
| Invalid path format | Malformed path string | Use 0.1.2 or Root.Child format |
| Not connected | Connection lost | Check device status, workflow will auto-retry |
Using Continue On Fail
Enable Continue On Fail in the node settings to handle errors gracefully:
{
"error": "Node not found at path: 0.99.99",
"errorCode": "PATH_NOT_FOUND"
}Compatibility
- n8n: 1.0.0 or later
- Node.js: 18.0.0 or later
- Ember+ Protocol: Compatible with Ember+ 1.x providers
Tested Devices
- Lawo Ruby radio consoles
- Lawo R3lay virtual radio software
- Lawo mc2 series consoles
- Generic Ember+ providers using sofie-emberplus-connection
Development
# Install dependencies
npm install
# Start n8n with hot reload
npm run dev
# Build for production
npm run build
# Run linter
npm run lint
npm run lint:fixResources
- Ember+ Protocol Specification
- sofie-emberplus-connection Library
- n8n Community Nodes Documentation
- Lawo Documentation
License
Author
Jonne Laakso ([email protected])
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
