# ENP-RS485


# RS-485 Module

The RS-485 Module is used to read data from devices such as inverters, ventilation systems, valves, irradiance sensors, power meters and others. The RS-485 Module sends the collected data to the Enapter Gateway and Cloud via secure wireless connection.

# Technical Data

Parameter Value
Voltage 9…60 V DC
Wireless Communication Wi-Fi 2.4 GHz
Bluetooth 4.0 LE
Integrated connection type RS-485 interface
Antenna connection type SMA-F (module) – SMA-M (antenna)
Local signaling 1 LED (green): steady – correct operation, blinking – establishing connection with server
1 LED (red): module error
Current consumption 50 mA 12 V DC, max. 300 mA
Mounting 35 mm Din rail acc. to IEC 60715
Height 90.2 mm (3.55 inch)
Depth 57.5 mm (2.26 inch)
Width 18.1 mm (0.71 inch)
Net weight 0.050 kg

# Environmental Conditions

Parameter Value
Ambient air temperature for operation -40…+60 ℃
Ambient air temperature for storage -40…+60 ℃
Relative humidity for operation 20…90 %, without condensation
Relative humidity for storage 20…90 %, without condensation
Operating altitude 0…2000 m
Storage altitude 0…3500 m
Pollution degree 2
IP degree of protection IP20

# Connected device

Parameter Value
Type Inverter
Ventilation system
Irradiance sensor
Power meter
and others
Voltage supply 9…60 V DC when module and device
powered from shared power supply
Connection 2-pin screw terminal block

# Dimensions

The dimensions are in mm and in brackets in inch.


# Mounting

The ENP-RS485 Module must be horizontally mounted on 35 mm DIN rail according to IEC 60715.


# Connection Examples



1 Amp Circuit Breaker recommended to use on power line for the ENP-RS485 Module.

# Standards

Wi-Fi protocols – 802.11 b/g/n/e/i (802.11n up to 150 Mbit/s).

Bluetooth protocols – Bluetooth v4.2 BR/EDR and BLE specification.

# Warnings


  • Alternating current voltage of 110 - 220 V is potentially lethal!

  • All works on assembly and installation should be performed only with a disconnected power supply!

  • The installation and assembly of electrical equipment must be carried out by electrically qualified persons.

The appearance of the product may differ from the images presented on the website or in this manual. The discrepancy between the appearance and packaging of the goods with a picture and description on the website or this manual is not an indication of poor quality goods. The manufacturer reserves the right to make changes to the design and packaging of the product without prior notice.

# Lua API

Lua API lets to interact with 3rd party RS485/Modbus devices via our UCMs. It includes functions which implement various kinds of interaction using Modbus and Enapter Telemetry Protocol.

# Modbus

This function is used to configure Modbus settings. Creates object which can be used for interacting with device connected to ENP-RS485.

modbus = Modbus.new(baud_rate, bits_in_word, parity, stop_bits)
Argument Type Example
baud_rate integer 9600
bits_in_word integer 8
parity string "N"(no parity)
stop bits integer 1

# read_holding

Used to read holding registers; if no errors occurred result would be 0.

result, data = modbus:read_holding(address, modbus_register, registers_count, timeout)

Table 1

Argument Description Type Example
address address of Modbus device integer 1
modbus_register register number address to start reading integer 1021
registers_count number count of registers to read integer 2
timeout time for waiting response in ms integer 1000

# read_input

Used to read input registers. For arguments see table 1.

result, data = modbus:read_input(address, modbus_register, registers_count, timeout)

# read_coils

Used to read coils registers. For arguments see table 1.

result, data = modbus:read_coils(address, modbus_register, registers_count, timeout)

# write_coils

Used to write values in coils registers.

result, data = modbus:write_coils(address, modbus_register, value, timeout)

Table 2

Argument Description Type Example
address address of Modbus device integer 1
modbus_register register number address to start reading integer 1000
value number value to write to coil number 2.5
timeout time for waiting response in ms integer 1000

# Example of usage

modbus = Modbus.new(38400, 8, "N", 2)
results = {} 
data = {}

results[1], data[1] = modbus:read_holding(1, 106, 2, 1000)
results[2], data[2] = modbus:read_input(1, 200, 1, 1000)
results[3], data[3] = modbus:read_coils(1, 300, 1, 1000)
results[4], data[4] = modbus:write_coils(1, 320, 1, 1000)

print("read_holding: " .. tostring(table.unpack(data[1]))
print("read_input: " .. tostring(table.unpack(data[2]))
print("read_coils: " .. tostring(table.unpack(data[3]))
print("write_coil: " .. tostring(table.unpack(data[4]))

> 0	0 0	0
> read_holding: 24154 12763
> read_input: 10904
> read_coils: 6
> write_coil: 30595   

# EnapterCloud

Used to configure Enapter Telemetry Protocol settings. Creates object which can be used for interacting with Enapter Cloud.

enapter = EnapterCloud.new(topic, version)
Argument Type Example
topic string "ucm"
version string "v1"

# register

Used for sending registration message to Enapter Cloud.

enapter:register({ vendor = vendor_name, model = device_model })
Value Type Example
vendor_name string "Enapter"
device_model string "EL21"

# telemetry

Used for sending telemetry to Enapter Cloud.

Argument Type Example
telemetry table {"output_voltage" : "5.1"}

# Example of usage

Sending registration message every 30s and telemetry every second:

enapter = EnapterCloud.new("h2xiq", "v1")

system.run_every(30000, function()
    enapter:register({ vendor = "Crowcon", model = "XgardIQ" })

system.run_every(1000, function()
    local telemetry = {}
    local result, data = mb:read_holding(address, 301, 2, 1000)

    -- tofloat is a custom function for parsing float numbers
    if result == OK then
        telemetry["h2_concentration"] = tofloat(data)
        success = true


# Resources

ENP-RS485 Module Datasheet (EN)

ENP-RS485 Module Quick Start Guide (EN)

ENP-RS485 Module CAD Drawings (2D)

ENP-RS485 Module CAD Drawings (3D DWG)

ENP-RS485 Module CAD Drawings (3D STP)