# Gateway Software 2.0

The Gateway is the energy site controller. It optimizes sites and systems that operate entirely or partially off-grid, supporting storage, load, solar, other generators and islanding control. Gateway autonomously maintains data backup in case of unstable internet connection.

Gateway Software

# Operational Modes

# Cloud Mode

On-site devices will be accessible remotely through Enapter Cloud. All data, including device configuration and telemetry, will be stored in the Cloud.

# Island Mode

Most sites that are located in remote areas where internet connection is not easily accessible or is not stable. Even if the Internet connection is available, it is important for business to keep their equipment operational in isolated setups in case of a power outage.

That is why Enapter offers Island Mode for Gateway that allows to collect and store data from Enapter devices locally.

# How to Set up Gateway in Island Mode

  1. Connect and power on all Enapter devices.
  2. Connect Intel NUC PC with Gateway 2.x software and network equipment according to technical specifications.
  3. Set up Gateway 2.0 software using installation instructions.
  4. Open Enapter App and add Island connection.
  5. Scan QR code of an Enapter device and follow instructions.

# Comparison Cloud Mode and Island Mode

Cloud Mode Island Mode
Historical data / Monitoring charts Yes
Unlimited free cloud data storage
Limited by Gateway's data drive storage
Commands Yes Yes
Remote access Yes No
Sites amount Unlimited
Cloud supports unlimited setups in any location
Only 1 site
Gateway supports only one setup
Adding 3rd party energy devices Yes
Any vendor devices can be added to an energy management system with UCMs and Blueprints
Only Enapter electrolysers, dryers and water tanks can be added

# Installation Instructions

# Purchase Intel NUC and Accessories

The wide range of Intel NUC models is supported, though minimal system requirements are applicable.

Recommended Configuration
Processor Intel® Core™ i5 or i7, 4 cores, 10th / 11th generation
Memory, RAM 8 - 16 GB
Data Storage 250 GB NVMe M.2

Example models:


Please note some NUC models are sold without memory and storage, so it must be purchased separately. The parts compatibility must be verified beforehand.

Apart from the NUC itself you will need:

  • External monitor and HDMI cable.
  • USB keyboard.
  • USB flash drive for the Gateway Firmware, at least 16 GB.

USB flash will be always attached to the NUC. To avoid accidental physical damage we recommend Sandisk Ultra Fit or similar models.

# Prepare Intel NUC

Enapter OS will boot from the USB flash. To enable it, Secure Boot must be turned off in BIOS.

To enter the BIOS press F2 button on a keyboard few times right after powering up Intel NUC. If you are facing issues with this step, check this throubleshoting guide (opens new window).

NUC with Visual BIOS

  • Click Advanced > Boot > Secure Boot tab.
  • Uncheck Secure Boot option.
  • Press F10.
  • Select Yes to save this change.
  • Reboot the system.

NUC with Aptio V BIOS

  • Click Boot > Secure Boot option
  • Select Disabled option for Secure Boot.
  • Press F10.
  • Select Yes to save this change.
  • Reboot the system.

# Create Bootable USB Flash

USB flash will hold a read-only version of Enapter OS, and will be constantly attached to the NUC during the Gateway operation.

  • Download the Gateway OS image to your computer. The lastest version can be found on https://fw.enapter.com (opens new window) website.
  • Download and install Balena Etcher (opens new window). It will be used to write the OS image to the USB flash.
  • Start Balena Etcher and follow on-screen instructions: select OS image file, select your USD flash drive, run the flashing process.

After the successful OS image flashing, extract the USB flash from your computer and insert it into any NUC USB port.

Reboot NUC. Enapter Gateway welcome message will appear shortly after the boot.

# Setting Up Enapter Gateway

To access the setup web interface:

  • Attach Ethernet cable to the Ethernet port of the NUC.
  • Use ip command on the initial welcome screen to obtain the Gateway IP address. The error may appear if the network is not yet initialized, please try again in one minute.
  • To access the web interface type the IP address into the address bar of the browser on your computer or mobile device.

You can now follow the on-screen setup instructions to finish the Gateway installation.

# Command Line Interface

There are two ways you can access the Enapter CLI:

As both ways using CLI are mostly the same, all instructions in this guide applicable for both cases.

Check our video guide to know how to access the CLI using Web Terminal.

# Command Modes

The are two command modes in Enapter CLI: operational mode and configuration mode.

  • Operational mode provides access to operational commands for showing help information, exiting CLI, showing system information, etc.
  • Configuration provides access to commands for creating, modifying, deleting, committing and showing configuration information, as well as commands for navigating through the configuration hierarchy.

When you log on to the system, the system is in operational mode.

  • To enter configuration mode from operational mode, issue the configure command.
  • To return to operational mode from configuration mode, issue the exit command. If there are uncommitted configuration changes, you must either commit the changes using the commit command, or enter exit to discard the changes.

# Configuration Mode

In configuration mode you can set, delete and show information. Enter configuration mode by typing configure at the command prompt in operational mode.

[enapter] $ configure
[enapter] conf $

[enapter] conf $ exit
[enapter] $

Notice how the command prompt changes to remind you what mode you are in.

# Command Completion

Pressing the <Tab> key provides command completion. You can use the <Tab> to show:

  • All available commands
  • All valid completions for a command partially typed in
  • The next available set of options for a command. You can use the <Tab> key iteratively in this way to discover complete command syntax.

Example 2-1 Use command completion on an unambiguous command

The following example requests command completion for the typed string sh. In this example, the command to be completed is unambiguous.

[enapter] conf $ sh <tab>
[enapter] conf $ show

# List of Possible Commands in Operational Mode.

Command Description
exit Exit shell
help Display help message
services Services operations
variables Variables operations
show Show system information
network Network configuration commands
configure Enter configuration mode
factory-reset Factory reset
reboot Reboot server
ping Execute ping command


# Configuration

Before starting integration process MQTT API should be configured. If you are not familiar with how to access and use Enapter Command Line interface please see Enapter Command Line Interface section of this documentation.

To do this - enter configuration mode on gateway shell and set basic parameters.

# Setup MQTT Port and Authentication

Public MQTT port is 9883.

set public-mqtt authentication username "public"
set public-mqtt authentication password "password"

# Receiving device telemetry

  1. Connect to mqtt on gateway ip address, specified port, with specified username & password,
  2. Subscribe to telemetry topic.
mosquitto_sub -d -v -p 9883 -h -u public -P password -t "telemetry/v1/<DEVICE_ID>"

# Device Telemetry API

# Device Telemetry

Provides Device telemetry.

Will be published every 1 second.

Payload Field Description
timestamp Message publishing timestamp
... Device-specific fields
# Example




  "timestamp": 1514320289,
  "uptime": 2

# Device Commands API

# Request Command Execution

Payload Field Description
id Command execution ID, e.g. UUID
name Command name
arguments Optional, command arguments
expires Optional, command expiration timestamp
# Example




  "id": "ab3e364c-cab2-4cc1-872d-4d554530d587",
  "name": "impulse",
  "arguments": {
    "id": 1,
    "impulse": 300

# Command Execution Responses

Payload Field Description
id Required, command execution ID, e.g. UUID
state Required, command execution state, e.g. started
payload Optional, command state payload
# Example




  "id": "ab3e364c-cab2-4cc1-872d-4d554530d587",
  "name": "finished"

# Electrolyser EL 2.1 Protocol

# Device Telemetry Payload

Field Description
timestamp Message publishing timestamp
status Electrolyser status string one of maintenance, expert, error, fatal, idle, steady, standby, curve, blowdown
is_running Indicates whether device is running boolean
has_errors Indicates whether any device errors boolean
has_warnings Indicates whether any device warnings boolean
errors List of electrolyser errors (opens new window)
warnings List of electrolyser warings (opens new window)
electrolyte_level_very_high Indicates whether electrolyte level is higher than very high level
electrolyte_level_high Indicates whether electrolyte level is higher than high level
electrolyte_level_medium Indicates whether electrolyte level is higher than medium level
electrolyte_level_low Indicates whether electrolyte level is higher than low level
h2_flow H2 Production in Normal Litre/hour
h2_total Total H2 Produced in Normal Litre
stack_pressure H2 Stack Pressure in Bar
stack_voltage H2 Stack Voltage in Volt
stack_amperage H2 Stack Amperage in Amper
outlet_pressure H2 Outlet Pressure in Bar
water_inlet_pressure Water Inlet Pressure in Bar
electrolyte_tank_temperature Electrolyte Tank Temperature in Celsius
electrolyte_downstream_temperature Downstream Temperature in Celsius
# Example
  "timestamp": 1514320289,
  "status": "steady",
  "is_running":  true,
  "has_errors":  true,
  "has_warnings": false,
  "h2_flow": 250.0,
  "h2_total": 10000,
  "stack_pressure": 30.1,
  "stack_voltage": 38.1,
  "stack_amperage": 12.3,
  "outlet_pressure":  30.0,
  "water_inlet_pressure": 1.2,
  "electrolyte_tank_temperature":  38.3,
  "electrolyte_downstream_temperature": 24.7,
  "errors": ["FP_01", "FP_03"],
  "warnings": [],
  "electrolyte_level_very_high": false,
  "electrolyte_level_high": false,
  "electrolyte_level_medium": true,
  "electrolyte_level_low": true

# Supported Commands

Command Name Description Arguments
start Start electrolyser
stop Stop electrolyser
reset Reset electrolyser
set_production_rate Set electrolyser production rate (in percents) value (float)
set_waterfill Force electrolyser to perform water refill operation value (boolean) (should be set to true)

# Enapter Dryer Protocol

# Device Telemetry Payload

Field Description
timestamp Message publishing timestamp
status Dryer status string one of waiting_for_power, waiting_for_pressure, stopped_by_user, starting, standby, waiting_for_pressure, drying_0, cooling_0, switching_0, pressurizing_0, finalizing_0, drying_1, cooling_1, switching_1, pressurizing_1, finalizing_1, leak_input, leak_dryer, error
is_running Indicates whether device is running boolean
has_errors Indicates whether any device errors boolean
errors List of dryer errors (opens new window)
warnings List of dryer warings (opens new window)
input_pressure H2 Inlet Pressure in Bar
output_pressure H2 Outlet Pressure in Bar
# Example
  "timestamp": 1547680704,
  "status": "drying_0",
  "is_running": true,
  "has_errors": true,
  "input_pressure": 30.5,
  "output_pressure": 26.1,
  "errors": ["TT00", "PT00"],
  "warings": []

# Supported Commands

Command Name Description
start Start dryer
stop Stop dryer
reset Reset dryer

# Use case scenarios

# Management of a group of electrolyzers

This example will show you how to setup and manage a group of Enapter Electrolysers through the Public MQTT API, including:

  • control of a group of electrolyzers as one device,
  • manage the overall production of a group of electrolyzers,
  • switch on a group of electrolyzers,
  • switch off a group of electrolyzers.

# Setup Public MQTT API

Setup Public MQTT as shown in this section of documentation.

# Create Enapter Rule

Manage Rules button located in Gateway section on Site page in Enapter Cloud (opens new window).

Rules IDE Link

Use Rule IDE to create following rule:

local power_manager = electrolysers.power_manager({

local desired_power_usage = variables.get('electrolysers_power')
if desired_power_usage then


Replace identifiers in rule above with your device's identifiers.


While this rule is active, it will not be possible to control electrolyzers from this group manually (start, stop, set production level)

# Setting Electrolysers power usage

Enapter Public MQTT API allows to set variables values. In this example mosquitto_pub binary from mosquitto MQTT broker package used to send MQTT message.

mosquitto_pub -p 9883 -h -u public -P password -t 'variables/v1/set/electrolysers_power' -m '{ "value": "50000" }'

To switch on all electrolysers in group set electrolysers_power value to some big number, like 1000000.

To switch off all electrolysers in group set it to 0.