Skip to main content

Device Profiles

What Are Device Profiles?

Device profiles are standardized interfaces that define a common set of telemetry, properties, commands, and alerts for a particular type of device. When your blueprint implements a profile, the Enapter EMS knows how to treat your device in a unified way — enabling cross-device dashboards, automation rules, and interoperability.

For example, all power inverters share common characteristics like AC voltage, current, and power output. A profile for power inverters defines these common attributes, so any inverter blueprint that implements the profile will automatically work with inverter-specific dashboards and rules.

Benefits of Using Profiles

  • Unified dashboards — Devices implementing the same profile share common dashboard widgets.
  • Rule engine compatibility — Automation rules can target any device implementing a specific profile, regardless of the manufacturer.
  • Interoperability — Different devices that implement the same profile can be swapped without changing automation rules.

Available Profiles

Enapter profiles are published on GitHub: https://github.com/Enapter/profiles.

Using Profiles

  1. Choose the most suitable profile. As an example we'll take a single-phase inverter:
1_phase.yml
blueprint_spec: profile/1.0

display_name: Single-Phase Battery Inverter
description: A single-phase battery inverter profile combining all relevant capabilities

implements:
- lib.device.nameplate
- lib.energy.battery.electrical
- lib.energy.battery.nameplate
- lib.energy.battery.soc
- lib.energy.inverter.ac.1_phase
- lib.energy.inverter.ac.power
- lib.energy.inverter.grid.power
- lib.energy.inverter.load.power
- lib.energy.inverter.nameplate
- lib.energy.inverter.status
  1. Mention it in the implements field at the top level of your manifest:
manifest.yml
blueprint_spec: device/3.0

display_name: My Inverter
description: Battery inverter integration.
icon: enapter-inverter-battery

implements:
- enapter.battery_inverter.1_phase

runtime:
type: lua
options:
file: main.lua

# ... rest of the manifest
  1. Ensure that your device manifest satisfies the implemented profile

Now, you need to adjust your device manifest so that it can implement the chosen profile. Let's see how to do it looking at these two components:

nameplate.yml
blueprint_spec: profile/1.0

display_name: Device Nameplate
description: Includes typical nameplate information like vendor, model, and serial number.

properties:
serial_number:
display_name: Serial Number
type: string
description: Unique serial number of the device.

# ... rest of the component
soc.yml
blueprint_spec: profile/1.0

display_name: Battery State of Charge
description: Implements the state of charge for a battery.

telemetry:
battery_soc:
display_name: State of Charge
type: float
unit: "%"
description: Battery state of charge percentage.

You can either:

  • directly match the profile, i.e. set the same names as in the implemented profile
  • leave arbitrary names, but mention which profile component they implement

Here names are exactly the same as in the profile.

manifest.yml
blueprint_spec: device/3.0

display_name: My Battery Inverter
description: Battery inverter integration.
icon: enapter-inverter-battery

implements:
- enapter.battery_inverter.1_phase

runtime:
type: lua
options:
file: main.lua

properties:
serial_number:
display_name: Serial Number
type: string
description: Unique serial number of the device.

telemetry:
battery_soc:
display_name: State of Charge
type: float
unit: "%"
description: Battery state of charge percentage.

# ... rest of the manifest
caution

Don't forget to change property/telemetry metric/command names in a corresponding Lua script.

All Rights Reserved © 2026 Enapter AG.