Magnum Energy Network

Magnum Energy (ME) has implemented a proprietary network using an industry standard for serial data named RS-485. For ME’s purposes this works well. It allows the interchange of settings and data between a remote control device and the other devices connected to the network. It also allows the remote to send commands to these devices, such as “enable inverter”, “start generator” etc. However the protocol they implemented is very time critical and sends a continuous stream of messages, called packets, with no process to pause transmission. It is just a continuous stream of packets sent in an orderly fashion. Some information only get transmitted when required. This timeliness of packets means that not all information is always available to this software which only samples the packets at intervals. Due to the nature of the protocol to send continuous information and the behaviour of the computers that can use this software it is impossible to read and process all the data generated. I will explain what and how data is processed later in this section.

All information presented here is based on my interpretation of observed behaviour and my understanding of the protocol published by ME in a document named Magnum Networking Communications Protocol. There have been many versions of this document and there is contradictory information in each. There is no public, complete, version available at this time. The information in this section may be wrong and will be amended as needed.

The Process

The remote control device is the center of the universe for packets transmission but the timing is regulated by the inverter. The network will not operate without an inverter connected.

These are the known list of components. Depending on the model and revision number of your remote control not all components are supported.

  • INV - Inverter

  • REMOTE - Remote control or advance router (this is a 2 in one)

  • BMK – Battery Monitor kit

  • AGS – Automatic Generator Start

  • RTR – Router – separate for packet purpose although sometimes integrated physically

  • PT100 – PT-100 charge controller

  • ACLD – AC Load Diverter

The protocol

  • Inverter transmits a packet and waits to receive a packet

  • Remote, being in receive mode, reads the packet from inverter

  • Remote replies to inverter with settings data and optionally a command such as “toggle inverter on/off” but appends data at end of packet with a device byte for one of possible peripherals.

  • If the peripheral exists, it will reply with a specific packet containing data. This packet is consumed by the remote to update its stored information

  • 100ms after it previous transmission, the inverter sends another packet

  • This cycle repeats forever.

This is a simplification. The information exchange is a little more complicated.

The remote polls for all devices, but poles only one device per cycle. There is limited time before the next inverter TX so each cycle is, at most, an INV TX, an REMOTE TX and one device TX (as response)

On cycle 1 ARC will send an AGS packet, on cycle 2 a BMK and so on. If the device is connected it will respond with a device specific packet but not always immediately. If the remote doesn’t get a response from a device it delays sending more to that device but does check periodically in case it’s been connected.

If a device is connected, the remote may send up a follow up packet in another cycle to the device. For example there are 4 specific packets sent to a connected AGS and 3 for PT100. Unfortunately these additional packets are not sent consistently so this software, which only captures packets periodically, cannot capture all packets. But most packets that contain status data is sent often enough to be useful.

Fields sent

NOTE: Many PT100 fields may be wrong. This is a work in progress.

DEVICE

Field Name

Type

Comment

INVERTER

revision

text

INVERTER

mode

Integer

INVERTER

mode_text

Text

INVERTER

fault

Integer

INVERTER

fault_text

Text

INVERTER

vdc

Float

Volts DC - not accurate according to ME

INVERTER

adc

Float

Amps DC

INVERTER

VACout

Float

Volts AC Out

INVERTER

VACin

Float

Volts AC in - peak to peak, not RMS

INVERTER

invled

Integer

inverter on if 1

INVERTER

invled_text

Text

INVERTER

chgled

Integer

charger on if 1

INVERTER

chgled_text

Text

INVERTER

bat

Float

Battery temperature - only positive

INVERTER

tfmr

Float

Transformer Temperature

INVERTER

fet

Float

FET Temperature

INVERTER

model

Integer

INVERTER

model_text

Text

INVERTER

stackmode

Integer

INVERTER

stackmode_text

Text

INVERTER

AACin

Float

Amps AC in

INVERTER

AACout

Float

Amps AC out

INVERTER

Hz

Float

REMOTE

revision

Text

REMOTE

searchwatts

Integer

REMOTE

batterysize

Integer

REMOTE

battype

Integer

REMOTE

absorb

Integer

REMOTE

chargeramps

Integer

REMOTE

ainput

Integer

REMOTE

parallel

Integer

REMOTE

lbco

Float

Low Battery cut off

REMOTE

vaccutout

Float

REMOTE

vsfloat

Float

REMOTE

vEQ

Float

REMOTE

absorbtime

Float

REMOTE

end of core info

following only if AGS connected

REMOTE

runtime

Float

REMOTE

starttemp

Float

REMOTE

startvdc

Float

REMOTE

quiettime

Integer

REMOTE

begintime

Integer

REMOTE

stoptime

Integer

REMOTE

vdcstop

Float

REMOTE

voltstartdelay

Integer

REMOTE

voltstopdelay

Integer

REMOTE

maxrun

Integer

REMOTE

socstart

Integer

REMOTE

socstop

Integer

REMOTE

ampstart

Float

REMOTE

ampsstartdelay

Integer

REMOTE

ampstop

Integer

REMOTE

ampsstopdelay

Integer

REMOTE

quietbegintime

Integer

REMOTE

quietendtime

Integer

REMOTE

exercisedays

Integer

REMOTE

exercisestart

Integer

REMOTE

exerciseruntime

Integer

REMOTE

topoff

Integer

REMOTE

warmup

Integer

REMOTE

cool

Integer

following only if BMK connected

REMOTE

batteryefficiency

Integer

AGS

revision

Text

AGS

status

Integer

AGS

status_text

Text

AGS

running

Boolean

AGS

temp

Float

AGS

runtime

Float

AGS

gen_last_run

Integer

Not reliably reported

AGS

last_full_soc

Integer

Not reliably reported

AGS

gen_total_run

Integer

Not reliably reported

AGS

vdc

Float

BMK

revision

Text

BMK

soc

Integer

State of Charge

BMK

vdc

Float

BMK

adc

Float

BMK

vmin

Float

Min voltage - reset when power applied

BMK

vmax

Float

Max voltage - reset when power applied

BMK

amph

Float

Usage in amp hours in batteries - usually negative

BMK

amphtrip

Float

Resettable amp hours used

BMK

amphout

Float

lifetime amp hours used

BMK

Fault

Integer

BMK

Fault_Text

Text

PT-100

revision

Text

PT-100

address

Integer

PT-100

mode

Integer

PT-100

mode_text

Text

PT-100

mode_hex

Text

PT-100

regulation

Integer

PT-100

regulation_text

Text

PT-100

fault

Integer

PT-100

fault_text

Text

PT-100

battery

Float

PT-100

battery_amps

Float

PT-100

pv_voltage

Float

PT-100

charge_time

Float

PT-100

target_battery_voltage

Float

PT-100

relay_state

Integer

PT-100

alarm_state

Integer

PT-100

fan_on

Integer

PT-100

day

Integer

PT-100

battery_temperature

Float

PT-100

inductor_temperature

Float

PT-100

fet_temperature

Float

PT-100

lifetime_kwhrs

Float

PT-100

resettable_kwhrs

Float

PT-100

ground_fault_current

Float

PT-100

nominal_battery_voltage

Float

PT-100

stacker_info

Integer

PT-100

dip_switches

Text

PT-100

model

Integer

PT-100

output_current_rating

Integer

PT-100

input_voltage_rating

Integer

SPDX-License-Identifier: BSD-3-Clause