Eaton EM Local Communications Protocol

Smart Breaker Local Communications Protocol

EM Devices can be configured to communicate with a Smart Breaker Coordinator on a local network. In the context of Local Communications and communication with a Coordinator on the local network, EM Devices are referred to as Smart Breaker Nodes (or simply Nodes).

A simple, effective, and secure application-layer protocol, known as the Smart Breaker Local Communications Protocol, or SBLCP, has been developed to facilitate communications with Smart Breaker Nodes. SBLCP currently utilizes the transport-layer User Datagram Protocol, or UDP.

Note that this document uses slightly different terminology to refer to devices than most other EM API documentation:

  • EMCB: Smart Breaker
  • EV-EMCB: Smart Breaker EV Charger

Protocol Overview

The EMCB will communicate over a local area network using the custom Application Layer described in this document. The layers of the network stack that Smart Breaker Nodes use for communication are:

Smart Breaker Nodes will listen to the network’s broadcast address as well as their individual IP addresses (for unicast messages) on port 32866. Nodes will reply to the source address and port for received and validated datagrams.

NOTE: Invalid datagrams will fail silently, with no response.

Security

NOTE: Communications between the Smart Breaker Coordinator and Node(s) on the local network are not encrypted, but proper security is accomplished through the use of a sequence number and a cryptographic signature that is attached to every SBLCP message.

The cryptographic signature is calculated over the contents of the message utilizing a 32-byte symmetric, or shared, hash key that is generated and assigned to the device via the Smart Breaker API. The signature of the message can be verified by the receiving party to ensure that the source of the communication can be trusted.

The symmetric hash key is generally referred to as the UDP Key throughout this overview documentation and the documented API operations further below.

In order to preserve cybersecurity best practices, UDP Keys expire after 7 days. If an expired key is used for calculation of a signature, the Smart Breaker Node will not respond to the Coordinator (i.e. the message will fail silently). This means these keys must be regularly rotated using the Smart Breaker API.

Application Layer

The protocol operates in a Coordinator->Node mode where every transaction is initiated by the on premises coordinator (e.g. a local controller) and terminated by a response from the Smart Breaker Node(s).

The Coordinator shall only retry a transaction or start a new transaction where there was no node response 200ms after the start of the transmission of the command.

Invalid messages are not responded to and will fail silently.

Message format

SBLCP utilizes a message format that has security built-in. The message format includes a header, body, and a footer and is shown below:

Header Body Footer
10 bytes 0-n bytes 32 bytes

Expanded, the overall message format is shown below:

Start Byte Sequence Number Message Code Message Data Cryptographic Hash
u32 u32 u16 0-n bytes u8*32
Start Byte

The hex code 0x45544E4D (“ETNM” in ASCII) is used to indicate the start of a new message from the Coordinator to the Node. The hex code 0x45544E53 (“ETNS” in ASCII) is used to indicate the start of a new message from the Node to the Coordinator. Note these values may appear elsewhere in the message.

Sequence Number

A 32-bit unsigned counter that starts at a random number on boot and counts upwards mod 2^32 in sequence space arithmetic. This is used as a nonce to prevent replay attacks and will be the same for the request from the Coordinator and the response from the Node. See the Sequence Number in Detail section for more information.

Message code

Message type identifier that determines the command type and schema of the message.

Message data

Variable data (0-1458 bytes based on the current MTU length of 1500 bytes), depending on the Message Code and described in detail in the Messages section.

Cryptographic Hash

A 32-byte HMAC-SHA256 hash must be calculated over the entire message Header and Body (including Start Byte, Sequence Number, Message code, and Message data) using the provisioned 32-byte UDP keys provided to the Coordinator by the EM Developer API.

Note: Different keys are required for broadcast messages vs. unicast messages. This is to ensure that a valid unicast message directed to one Smart Breaker Node cannot be replayed as a unicast message to another Smart Breaker Node.

Example Message

As an example, a valid message may look like the following (in hex):

Start Byte Sequence Number Message Code Message Data Cryptographic Hash
45 54 4e 4d 00 00 00 04 00 06 ab ba 6b 00 79 03 ea a7 7f 53 81 14 6d d5 46 29 74 5c 15 b5 b1 08 b5 ad e3 81 2d a5 07 00 86 a7 74 e4

This is a message from the Coordinator to the Node with a Sequence Number of 4, message code of 0x0006, message data of 0xabba and a cryptographic hash. The hash was calculated using the HMAC SHA-256 cryptographic algorithm over the Start Byte, Sequence Number, Message Code, and Message Data with a 32-byte hash key.

Data types and Endianness

Data types are abbreviated as follows:

Type Symbol Signed Length (bytes)
u8 No 1
u16 No 2
u24 No 3
u32 No 4
s32 Yes 4
u64 No 8
s64 Yes 8

NOTE: All number types are little-endian, least-significant-bit first, 2’s complement integers.

Sequence Number in Detail

SBLCP does not currently use any form of encryption. This means that an attacker with knowledge of the protocol and access to the local network can successfully decode any messages that they are able to monitor. One mitigation that is used to verify the authenticity of messages is the Cryptographic Hash. This allows both the Coordinator and the EMCBs to validate that at one time, a message originated from an authentic source.

However, this protection alone does not protect against replay attacks. Another potential threat is for an attacker to capture packets on the network and replay them to affect device behavior. The purpose of the Sequence Number is to prevent these message replay attacks. In order to mitigate this threat, all messages from the Coordinator require the “next” Sequence Number, with the exception of the Get Next Expected UDP Sequence Number message which can be used for device discovery and to allow synchronization between a Coordinator and Node.

Using the Set Next Expected UDP Sequence Number message is also available in order to synchronize and allow querying/control over groups of EMCBs, which can all respond to the same broadcast message.

This 32-bit unsigned counter will be initialized to a random number at EMCB boot and count upwards until it overflows back to zero. Values are compared in sequence space arithmetic. For a message to be accepted it must be within the range:

(Get Next Expected UDP Sequence Number response)

≤ Sequence Number <

(Get Next Expected UDP Sequence Number response) + 100.

This ability to “fast forward” the Sequence Number by 100 provides some resiliency to the inevitable dropped UDP packets that will occur in order to keep the Sequence Number of groups of EMCB’s synchronized. It also allows unicast packets (which are signed with a different UDP Key than broadcast packets) to share a common Sequence Number with broadcast packets without disturbing the synchronization of a group.

The EMCB does NOT have a secure, non-volatile monotonic counter. In order to preserve security and minimize the chance of replay attacks, the Sequence Number will be initialized to a cryptographically secure random number at every device boot. This means that the Sequence Number will be reset any time the EMCB is power cycled, however, as the EMCB is a line powered device, this should take place very rarely.

Whenever a reset inevitably happens, the Coordinator must use the Get Next Expected UDP Sequence Number and Set Next Expected UDP Sequence Number messages to resynchronize the device. It is assumed that replays spanning 2^31-100 messages are implausible and that the Coordinator and EMCBs will stay in sync. This assumption is safe to make because, at 25 messages/second, it would be over 284 weeks before messages have a 40ms window to be replayed (assuming the Sequence Number is never reset), and the UDP key is only valid for a maximum of 1 week.

The counter can be read or reset to any arbitrary value through the local API to allow for syncing of groups of EMCBs. On Coordinator boot, the Get Next Expected UDP Sequence Number message should be sent to the broadcast address on the local network.

Once the Sequence Number is known, the Coordinator can either begin sending messages using this value or choose to update the EMCB’s Sequence Number to its last known Sequence Number using the local API.

The same process should be followed when 100+ messages go without receiving a response, as the EMCB could have restarted and reinitialized the Sequence Number. It is important when using the Set Next Expected UDP Sequence Number command to set the Sequence Number to the following value to minimize the probability of a successful replay attack:

  • Next Expected Sequence Number = (most recent value that the Coordinator has sent + 1)
  • Alternatively, using a cryptographically-secure pseudo-random number generator for the Sequence Number is also acceptable.

For example, implementations should NOT initialize the Sequence Number to a static value, such as 0x00000000, on every boot.

The Smart Breaker API should be the preference for the Set Next Expected UDP Sequence Number command as this eliminates all threats of replays. However, the local API option is given for use cases where the Smart Breaker API may not be accessible. Refer to the Node.JS SDK for an example of best practices associated with this protocol.

Messages

Message list:

Message Message Code
Get Next Expected UDP Sequence Number 0x0000
Get Meter Telemetry Data 0x0200
Set Next Expected UDP Sequence Number 0x8000
Smart Breaker only:
Get Device Status 0x00FF
Get Breaker Remote Handle Position 0x0100
Set Breaker Remote Handle Position 0x8100
Set Bargraph LED to User Defined Color 0x8300
Smart Breaker EV Charger only:
Set EVSE Configuration Settings and Mode 0x9300
Get Currently Applied EVSE Control Settings 0x1100
Get Device EVSE State 0x1200
Get EVSE Configuration Settings and Mode 0x1300

Message: Get Next Expected UDP Sequence Number

Message Code: 0x0000

Get the next expected UDP Sequence Number. This message also includes the Device ID and Protocol Version implemented by this particular device.

Refer to the Get Next Expected UDP Sequence Number Example for an example of this message.

NOTE: THIS COMMAND CAN BE USED WITH SEQUENCE NUMBER 0x00000000 IN ORDER TO ALLOW SYNCHRONIZATION/DISCOVERY ON THE LAN. In other words, it is susceptible to replays on purpose to facilitate discovery!

NOTE: This message is rate-limited to responding once every 2 seconds in order to prevent abuse. If the rate-limiting is hit, the Node will fail silently.

Request: Get Next Expected UDP Sequence Number

Command Contents (4 bytes):

Parameter Type/Length Description
Nonce u32 32-bit value provided by the Coordinator in order to prove the authenticity of the Node to the Coordinator. Further description of how the Nonce should be generated and its purpose is below.

NOTE: The Nonce can be any 32-bit value, but it should be changed every time this message is sent. It is strongly suggested that a cryptographically-secure pseudo-random number generator is used for generation of the Nonce. The Nonce will be sent back in the response so that the Coordinator can verify it because this message and it's responses, when sent with a Sequence Number of 0x00000000 (to facilitate device discovery), are inherently replayable.

Response: Get Next Expected UDP Sequence Number

Response Contents (28 bytes):

Parameter Type/Length Description
Sequence Number u32 The Sequence Number to be used in the next command sent to this Smart Breaker Node.
Serial Number u8*16 ASCII encoded serial number of the device.
Protocol Version u32 An integer value describing the revision number of the protocol. For this version, the value will always be 1.
Nonce u32 The same 32-bit value provided by the Coordinator’s command. This value should be validated by the Coordinator in order to prove the integrity of the response as this message is replayable.

Message: Get Device Status

SB Only

Message Code: 0x00FF

Get EMCB device status. See Get Breaker Remote Handle Position and Get Meter Telemetry Data for more information.

Refer to the Get Device Status Example for an example of this message.

Request: Get Device Status

Command Contents (0 bytes): no message data.

Response: Get Device Status

Response Contents (268 bytes):

Parameter Type/Length Description
Breaker State u8 The breaker’s remote handle position. Open = 0, Closed = 1.
Meter Update Number u8 Starts at 0 on boot and increments when Meter periodic data is updated on the device.
Line frequency s32 mHz.
Period u16 The number of milliseconds over which the returned data was accumulated.
Phase 0 active energy s64 active energy. mJ.
Phase 0 reactive energy s64 reactive energy. mVARs.
Phase 0 app. energy s64 apparent energy. mVAs.
Phase 0 voltage RMS s32 voltage RMS. mV.
Phase 0 current RMS s32 current RMS. mA.
Phase 0 active ener. QI u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 active ener. QII u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 active ener. QIII u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 active ener. QIV u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 reactive ener. QI u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 reactive ener. QII u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 reactive ener. QIII u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 reactive ener. QIV u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 app. ener. QI u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 0 app. ener. QII u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 0 app. ener. QIII u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 0 app. ener. QIV u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 1 active energy s64 Pole 1 active energy. mJ.
Phase 1 reactive energy s64 Pole 1 reactive energy. mVARs.
Phase 1 app. energy u64 Pole 1 apparent energy. mVAs.
Phase 1 voltage RMS s32 Pole 1 voltage RMS. mV.
Phase 1 current RMS s32 Pole 1 current RMS. mA.
Phase 1 active ener. QI u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 active ener. QII u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 active ener. QIII u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 active ener. QIV u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 reactive ener. QI u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 reactive ener. QII u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 reactive ener. QIII u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 reactive ener. QIV u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 app. ener. QI u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase 1 app. ener. QII u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase 1 app. ener. QIII u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase 1 app. ener. QIV u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase-phase volt. RMS s32 Pole-Pole voltage RMS. mV.

Message: Get Breaker Remote Handle Position

SB Only

Message Code: 0x0100

Get the feedback position of the EMCB’s remotely-controllable contacts.

Refer to the Get Breaker Remote Handle Position Example for an example of this message.

Request: Get Breaker Remote Handle Position

Command Contents (0 bytes): no message data.

Response: Get Breaker Remote Handle Position

Response Contents (1 byte):

Parameter Type/Length Description
Breaker State u8 The breaker’s remote handle position. Open = 0, Closed = 1.

Message: Get Meter Telemetry Data

Message Code: 0x0200

Read periodic meter measurements. After periodic data has been read, subsequent calls will return the same data until the next low-rate period calculation completes.

Refer to the Get Meter Telemetry Data Example for an example of this message.

Request: Get Meter Telemetry Data

Command Contents (0 bytes): no message data.

Response: Get Meter Telemetry Data

Response Contents (267 bytes):

Parameter Type/Length Description
Meter Update Number u8 Starts at 0 on boot and increments when Meter periodic data is updated on the device.
Line frequency s32 mHz.
Period u16 The number of milliseconds over which the returned data was accumulated.
Phase 0 active energy s64 active energy. mJ.
Phase 0 reactive energy s64 reactive energy. mVARs.
Phase 0 app. energy s64 apparent energy. mVAs.
Phase 0 voltage RMS s32 voltage RMS. mV.
Phase 0 current RMS s32 current RMS. mA.
Phase 0 active ener. QI u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 active ener. QII u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 active ener. QIII u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 active ener. QIV u64 Pole 0 quadrant values for Active energy, in mJ.
Phase 0 reactive ener. QI u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 reactive ener. QII u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 reactive ener. QIII u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 reactive ener. QIV u64 Pole 0 quadrant values for Reactive energy, in mVARs.
Phase 0 app. ener. QI u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 0 app. ener. QII u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 0 app. ener. QIII u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 0 app. ener. QIV u64 Pole 0 quadrant values for Apparent energy, in mVAs.
Phase 1 active energy s64 Pole 1 active energy. mJ.
Phase 1 reactive energy s64 Pole 1 reactive energy. mVARs.
Phase 1 app. energy u64 Pole 1 apparent energy. mVAs.
Phase 1 voltage RMS s32 Pole 1 voltage RMS. mV.
Phase 1 current RMS s32 Pole 1 current RMS. mA.
Phase 1 active ener. QI u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 active ener. QII u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 active ener. QIII u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 active ener. QIV u64 Pole 1 quadrant values for Active energy, in mJ.
Phase 1 reactive ener. QI u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 reactive ener. QII u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 reactive ener. QIII u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 reactive ener. QIV u64 Pole 1 quadrant values for Reactive energy, in mVARs.
Phase 1 app. ener. QI u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase 1 app. ener. QII u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase 1 app. ener. QIII u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase 1 app. ener. QIV u64 Pole 1 quadrant values for Apparent energy, in mVAs.
Phase-phase volt. RMS s32 Pole-Pole voltage RMS. mV.

Message: Set Next Expected UDP Sequence Number

Message Code: 0x8000

Set the next expected UDP Sequence Number.

NOTE: THIS MESSAGE IS RATE-LIMITED TO SUCCEEDING ONCE EVERY 10 SECONDS IN ORDER TO PREVENT ABUSE.

Refer to the Set Next Expected UDP Sequence Number Example for an example of this message.

Request: Set Next Expected UDP Sequence Number

Command Contents (4 bytes):

Parameter Type/Length Description
Sequence Number u32 The value to set on the EMCB to use as the next Sequence Number. This value must be at least 100 greater than the Get Next Expected UDP Sequence Number response.

Sequence Number >= (Get Next Expected UDP Sequence Number response) + 100

Response: Set Next Expected UDP Sequence Number

Response Contents (1 byte):

Parameter Type/Length Description
Ack/Nack u8 Affirmative or negative acknowledgement of the command. Possible values described below.
  • Ack/Nack possible values:
    Ack/Nack Value Description
    0 Acknowledged: Command executed and Next Expected Sequence Number updated.
    1 Rate Limited: Rate Limiting has prevented the message from succeeding. Try again later.
    2 Bad Sequence Number: Sequence Number is in the invalid range.

Message: Set Breaker Remote Handle Position

SB Only

Message Code: 0x8100

Control the EMCB’s remotely-controllable contacts.

Refer to the Set Breaker Remote Handle Position Example for an example of this message.

Request: Set Breaker Remote Handle Position

Command Contents (1 byte):

Parameter Type/Length Description
Action u8 The desired state of the remotely-controllable contacts. Possible values are described below.
  • Action possible values:
    Action Value Description
    0 Open.
    1 Close.
    2 Toggle (The EMCB will read the current position of the remotely-controllable contacts and toggle them to the inverse state).

Response: Set Breaker Remote Handle Position

Response Contents (2 bytes):

Parameter Type/Length Description
Ack/Nack u8 Affirmative or negative acknowledgement of the command. Possible values described below.
Breaker State u8 The breaker’s remote handle position. Open = 0, Closed = 1.
  • Ack/Nack possible values:
    Ack/Nack Value Description
    0 Acknowledged: Command executed and breaker confirmed it is in desired state.
    other Negative acknowledgement: The command is correct from the Application layer perspective, but some values are invalid or the command cannot be executed.

Message: Set Bargraph LED to User Defined Color

SB Only

Message Code: 0x8300

Control the Bargraph LED Colors. LED 0 is the LED closest to the “bump”, where the Network Status LED on the EMCB is located.

Refer to the Set Bargraph LED to User Defined Color Example for an example of this message.

Request: Set Bargraph LED to User Defined Color

Command Contents (25 bytes):

Parameter Type/Length Description
Enabled u8 Determines if the User Defined Color should be shown or if the Bargraph LEDs should resume normal operation.
Duration s32 This is the amount of time in seconds that the Breaker should remain the user defined color.
LED 0 Red u8 LED 0 red brightness value.
LED 0 Green u8 LED 0 green brightness value.
LED 0 Blue u8 LED 0 blue brightness value.
LED 0 Blinking u8 Controls if LED 0 blinks.
LED 1 Red u8 LED 1 red brightness value
LED 1 Green u8 LED 1 green brightness value.
LED 1 Blue u8 LED 1 blue brightness value.
LED 1 Blinking u8 Controls if LED 1 blinks.
LED 2 Red u8 LED 2 red brightness value
LED 2 Green u8 LED 2 green brightness value.
LED 2 Blue u8 LED 2 blue brightness value.
LED 2 Blinking u8 Controls if LED 2 blinks.
LED 3 Red u8 LED 3 red brightness value
LED 3 Green u8 LED 3 green brightness value.
LED 3 Blue u8 LED 3 blue brightness value.
LED 3 Blinking u8 Controls if LED 3 blinks.
LED 4 Red u8 LED 4 red brightness value
LED 4 Green u8 LED 4 green brightness value.
LED 4 Blue u8 LED 4 blue brightness value.
LED 4 Blinking u8 Controls if LED 4 blinks.
  • Enabled possible values:

    Enabled Value Description
    0 Off. Note: if 0 is passed for Enabled, no other values will be parsed, however, the correct number of bytes must still be sent for Application Layer validation purposes.
    1 On.
  • Duration possible values:

    Duration Range Description
    <= 0 Infinite.
    > 0 <= 10,737,418 Duration in seconds that the LEDs will remain in the configured state.
    > 10,737,418 Durations larger than this will be rejected, instead.
  • Blinking possible values:

    Blinking Value Description
    0 Blinking Off.
    1 Blinking On. Blinking is for 0.5 seconds and off for 0.5 seconds.

Response: Set Bargraph LED to User Defined Color

Response Contents (1 byte):

Parameter Type/Length Description
Ack/Nack u8 Affirmative or negative acknowledgement of the command. Possible values described below.
  • Ack/Nack possible values:
    Ack/Nack Value Description
    0 Acknowledged: Command executed and LEDs confirmed to be in desired state.
    other Negative acknowledgement: The command is correct from the Application layer perspective, but some values are invalid or the command cannot be executed.

Message: Set EVSE Settings Configuration and Mode

EV Only

Message Code: 0x9300

Update EVSE configuration settings and mode of operation.

Please refer to the Understanding Evse Configuration for an explanation of the behavior of the device relative to the configuration settings applied in this operation.

Note: This command cannot be used when the device is in ocpp mode.

Refer to the Set EVSE Settings Configuration and Mode Example for an example of this message.

Request: Set EVSE Settings Configuration and Mode

Command Contents (8 bytes):

Parameter Type/Length Description
Mode u8 The Evse mode of operation. Possible values described below.
Offline Mode u8 How the device behaves in terms of charging when it goes offline. Possible values described below.
API Config Enabled u8 Whether or not the EV Smart Breaker is currently enabled. Possible values described below.
API Config Max Current u8 The current restriction to apply, in Amps. Possible values described below.
API Config Max Energy s32 The energy restriction to apply, in watt-hours. Possible values described below.

Note that the values for API Config (Enabled, Max Current, and Max Energy) can be set regardless of the mode, but they will only be applied when the breaker is in Cloud API mode.

  • Mode possible values:

    Mode Value Description
    1 No restrictions. Will always charge an EV when plugged in with no restrictions. This is the default out-of-the-box mode.
    4 Cloud API. Globally-applied settings to either enable or disable charging, or set restrictions that apply to every new plug session (if enabled).
    5 Charge windows. Minute-resolution start/stop windows, at the week resolution, for enabling scheduling of EV charging.
    6 API Override Enable. Temporarily override any configured modes, with the exception of no-restrictions mode, in a way that will enable charging with no restrictions until the plug session is complete.
    7 API Override Disable. Temporarily override any configured modes in a way that will disable charging with no restrictions until the plug session is complete. Will only succeed if the vehicle is currently charging and will continue to be disabled until the plug session is complete.
    255 None. Do not change the mode from the currently configured setting.
  • Offline mode possible values:

    Offline Mode Value Description
    1 No restrictions. When the device goes offline, the device will automatically enter offline-no-restrictions mode. When the device comes back online, it will revert to the previously-configured mode.
    2 No change. When the device goes offline, no automatic effect on the mode will take place and the device will continue to use it's currently-configured mode and settings.
    255 None. Do not change the offline mode from the currently configured setting.
  • Enabled possible values:

    Enabled Value Description
    0 Disabled.
    1 Enabled.
    255 None. Do not change the enabled value from the currently configured setting.
  • API config max current possible values:

    Max Current Value Description
    0 Clear the breaker's max current restriction. The breaker's default max current of 32 Amps will be used.
    6-32 Max current, in Amps.
    255 Do not change the max current value from the currently configured setting.
  • API config max energy possible values:

    Max Energy Value Description
    0 Clear the breaker's max energy restriction.
    1-200000 Max energy, in watt-hours
    -1 Do not change the max energy value from the currently configured setting.

Response: Set EVSE Settings Configuration and Mode

Response Contents (1 byte):

Parameter Type/Length Description
Ack/Nack u8 Affirmative or negative acknowledgement of the command. Possible values described below.
  • Ack/Nack possible values:
    Ack/Nack Value Description
    0 Acknowledged: Command executed and EVSE configuration settings confirmed to be in desired state.
    other Negative acknowledgement: The command is correct from the Application layer perspective, but some values are invalid or the command cannot be executed.

Message: Get Currently Applied EVSE Control Settings

EV Only

Message Code: 0x1100

Get currently applied EVSE control settings.

Please refer to the Understanding Evse Configuration docs, specifically the Currently Applied Settings section, for an explanation of the response for this operation.

Refer to the Get Currently Applied EVSE Control Settings Example for an example of this message.

Request: Get Currently Applied EVSE Control Settings

Command Contents (0 bytes): no message data.

Response: Get Currently Applied EVSE Control Settings

Response Contents (7 bytes):

Parameter Type/Length Description
Enabled u8 Whether or not the EV Smart Breaker is currently enabled. Possible values described below.
Authorized u8 Whether or not the EV Smart Breaker is currently authorized. Possible values described below.
Max Current u8 The currently-applied current restriction, in Amps. Possible values described below.
Max Energy s32 The currently-applied energy consumption restriction, in watt-hours. Possible values described below.
  • Enabled possible values:

    Enabled Value Description
    0 Disabled.
    1 Enabled.
    255 Missing.
  • Authorized possible values:

    Authorized Value Description
    0 Not authorized.
    1 Authorized.
    255 Missing.
  • Max Current possible values:

    Enabled Value Description
    0 No maximum current is configured. The breaker's default max current of 32 Amps will be used.
    6-32 Max current, in Amps.
  • Max Energy possible values:

    Max Energy Value Description
    0 No maximum energy is configured.
    1-200000 Max energy, in watt-hours

Message: Get Device EVSE State

EV Only

Message Code: 0x1200

Get device EVSE state.

Refer to Understanding Evse States for more information.

Refer to the Get Device EVSE State Example for an example of this message.

Request: Get Device EVSE State

Command Contents (0 bytes): no message data.

Response: Get Device EVSE State

Response Contents (11 bytes):

Parameter Type/Length Description
Raw State u8 Current physical connection state. Possible values described below.
Permanent Error Flag u8 Whether or not the device is in a permanent error condition. Possible values described below.
Error code u8 Current error code. 0 indicates that there is no error.
Error data 1 u16 Error data 1. Used to determine specific error message. 0 indicates that there is no error.
Error data 2 u16 Error data 2. Used to determine specific error message. 0 indicates that there is no error.
Error data 3 u16 Error data 3. Used to determine specific error message. 0 indicates that there is no error.
Error data 4 u16 Error data 4. Used to determine specific error message. 0 indicates that there is no error.
  • Raw state possible values:

    Raw State Value Description
    0 Idle. The EV Smart Breaker Charger is not connected to an Electric Vehicle. J1772 State A.
    1 Connected. The EV Smart Breaker Charger is connected to an Electric Vehicle and has not started the vehicle charging handshake process. This state is reported when the charger is not enabled or authorized. J1772 State B1.
    2 Connected EVSE Ready. The EV Smart Breaker Charger is connected to an Electric Vehicle and has started the vehicle charging handshake process, but is waiting on the Electric Vehicle to complete the process. J1772 State B2.
    3 Charging. The EV Smart Breaker Charger is connected to an Electric Vehicle and is charging. J1772 State C.
    4 Loss of utility power. The EV Smart Breaker Charger's main handle has been opened (no power will flow to the vehicle in this case). J1772 State E.
    5 Fault. The EV Smart Breaker Charger has experienced a fault (no power will flow to the vehicle in this case). J1772 State F.
    255 Unknown state.
  • Permanent error flag possible values:

    Raw State Value Description
    0 No permanent error.
    1 Permanent error.
    255 Unknown state.
  • Error code possible values:

    • Note that some error codes have different descriptions which are calculated based on the error data values. If no error data is mentioned in the table below, it is not needed to calculate the correct description.
      Code Type Error Data Description
      2 ERROR_VENT_NOT_SUPPORTED - Unsupported J1772 state
      4 ERROR_STATE_MACHINE_BAD_STATE - Bad state machine state, usually logged after a switch statement checking for specific states
      5 ERROR_STATE_MACHINE_INTERNAL - Someone tried to send an invalid state
      6 ERROR_STATE_MACHINE_INTERNAL_FATAL - Someone tried to send an invalid state, log an error and fair if this is not the first time
      7 ERROR_GROUND_FAULT - Ground Fault Detected
      8 ERROR_GROUND_FAULT_TEST_FAILED - Test never tripped the GFCI detection, which means the detection circuit may be broken
      9 ERROR_PILOT_DIODE_SHORT - Diode short detected on the car side, for wall charger installations please check orientation of P3 connector (12V Pilot) on the wall charger's cover circuit board
      10 ERROR_PILOT_NEG_12_VOLTS - Pilot voltage is read as a negative value
      11 ERROR_PILOT_VOLTAGE_INVALID - Pilot voltage is out of the given ranges
      12 ERROR_ADC_FAILURE - ADC has failed
      13 ERROR_WATCHDOG_FAILURE - Watchdog has failed
      16 ERROR_CLP_CONFIG_FAILURE - Min/Max not configured correctly (max !> min)
      30 ERROR_INTERNAL_EEPROM_INCONSISTENCY - Both mirrored statistics partitions were inconsistent
      34 ERROR_OVER_LIMITED_CURRENT - Current exceeds set limit
      48 ERROR_INVALID_INDEX - Invalid error index after verifying index
      51 ERROR_CONTACTOR_IN_WRONG_STATE Error data 1 = 0 Contactor wasn't hanging out in the right state for idle state
      51 ERROR_CONTACTOR_IN_WRONG_STATE Error data 1 = 1 Contactor wasn't hanging out in the right state for GFCI test
      51 ERROR_CONTACTOR_IN_WRONG_STATE Error data 1 = 2 Contactor wasn't hanging out in the right state when connected
      51 ERROR_CONTACTOR_IN_WRONG_STATE Error data 1 = 3 Unplug EV connector and wait 5 seconds to remove this error
      55 ERROR_SOLENOID_OPEN_FAIL - We've attempted to open the breaker, yet it did not open.
      56 ERROR_SOLENOID_CLOSE_FAIL Error data 4 = 0 We've attempted to close the breaker, yet it did not close.
      56 ERROR_SOLENOID_CLOSE_FAIL Error data 4 = 1 We've attempted to close the breaker, yet it did not latch.
      58 ERROR_SOLENOID_POWER_WAIT_FAIL - Timer expired for solenoid to check breaker open/close status.
      59 ERROR_SOLENOID_POWER_FAIL - Electronics Power Failure: This occurrence is primarily anticipated during instances of power outages. Should this error persist, we kindly request you to conduct a thorough verification of your wiring configuration to ensure its correctness.
      60 ERROR_GF_IMMEDIATE - Breaker experienced a ground fault before GF_IMMEDIATE_ID timer (5 secs) expired.
      61 ERROR_GF_IDLE - Breaker experienced ground fault in idle state.
      62 ERROR_P12V - +12 volt power rail fault.
      63 ERROR_N12V - -12 volt power rail fault.
      64 ERROR_P5V - +5 volt power rail fault.
      65 ERROR_SUPPLY_VOLTAGE - Input Supply voltage is incorrect. This can occur if the line-to-neutral voltage is below 105V for either L1 or L2.
      66 ERROR_GMI - Lost connection to ground.
      67 ERROR_HW_UNSUPPORTED - EVSE hardware is not supported by the current firmware.

Message: Get EVSE Settings Configuration and Mode

EV Only

Message Code: 0x1300

Get EVSE configuration settings and mode of operation.

Please refer to the Understanding Evse Configuration docs for an explanation of the behavior of the device relative to the configuration settings retrieved in this operation.

Refer to the Get EVSE Settings Configuration and Mode Example for an example of this message.

Request: Get EVSE Settings Configuration and Mode

Command Contents (0 bytes): no message data.

Response: Get EVSE Settings Configuration and Mode

Response Contents (8 bytes):

Parameter Type/Length Description
Mode u8 The Evse mode of operation. Possible values described below.
Offline mode u8 How the device behaves in terms of charging when it goes offline. Possible values described below.
API config enabled u8 Whether or not the EV Smart Breaker is currently enabled. Possible values described below.
API config max current u8 The currently-applied current restriction, in Amps. Possible values described below.
API config max energy u32 The currently-applied energy consumption restriction, in watt-hours. Possible values described below.
  • Mode possible values:

    Mode Value Description
    1 No restrictions. Will always charge an EV when plugged in with no restrictions. This is the default out-of-the-box mode.
    2 Offline no restrictions. Will always charge an EV when plugged in with no restrictions. Will revert back to previously configured mode when the device comes back online.
    3 Manual override. Temporarily override any configured settings. Can only be entered via physical interaction with the unit.
    4 Cloud API. Globally-applied settings to either enable or disable charging, or set restrictions that apply to every new plug session (if enabled).
    5 Charge windows. Minute-resolution start/stop windows, at the week resolution, for enabling scheduling of EV charging.
    6 API Override Enable. Temporarily override any configured modes, with the exception of no-restrictions mode, in a way that will enable charging with no restrictions until the plug session is complete.
    7 API Override Disable. Temporarily override any configured modes in a way that will disable charging with no restrictions until the plug session is complete. Will only succeed if the vehicle is currently charging and will continue to be disabled until the plug session is complete.
    8 OCPP. OCPP is used as the communication protocol with the charger.
    255 Unknown mode.
  • Offline mode possible values:

    Offline Mode Value Description
    1 No restrictions. When the device goes offline, the device will automatically enter offline-no-restrictions mode. When the device comes back online, it will revert to the previously-configured mode.
    2 No change. When the device goes offline, no automatic effect on the mode will take place and the device will continue to use it's currently-configured mode and settings.
    255 Unknown offline mode.
  • Enabled possible values:

    Enabled Value Description
    0 Disabled.
    1 Enabled.
    255 Missing.
  • API config max current possible values:

    Max Current Value Description
    0 No maximum current is configured. The breaker's default max current of 32 Amps will be used.
    6-32 Max current, in Amps.
  • API config max energy possible values:

    Max Energy Value Description
    0 No maximum energy is configured.
    1-200000 Max energy, in watt-hours

Examples

All of the examples below were generated from the Node.JS SDK.

Common Workflow

Discover Devices

Device discovery consists of sending the replayable Get Next Expected UDP Sequence Number to the network’s broadcast address. It is advised to do this multiple times in order to ensure that there were no dropped UDP packets during the device discovery process (devices that have responded will ignore Get Next Expected UDP Sequence Number for 2 seconds and will not respond to multiple commands within this time window).

Eaton also recommends repeating the Device Discovery process periodically to determine if devices have been added to the network or after a series of consecutive timeouts, in order to resynchronize a device’s Sequence Number (in the event of a power outage, network outage, etc.)

Refer to the Get Next Expected UDP Sequence Number Example.

Synchronize Device Sequence Numbers

Once devices are discovered, they can be interacted with using their individual Sequence Numbers. For group commands, it is necessary to synchronize Sequence Numbers to a common value as demonstrated in the Set Next Expected UDP Sequence Number Example.

Poll Device Status

Most applications will spend the bulk of their lifetime running this command. Applications may poll EMCBs as aggressively as they would like within the constraints of the Application Layer timing. An Example of 1 round of polling is demonstrated in the Get Device Status Example.

Control Devices

Periodically, it may also be desirable to control groups of EMCBs. This is demonstrated in the Set Breaker Remote Handle Position Example.

Individual Command Examples - EMCB

The following commands contain a mix of broadcast messages with multiple responses and unicast messages with a single response to an individual device with its own Sequence Number. Each of these commands would also work as the opposite type of message (broadcast/unicast), assuming the correct signing UDP Key was used.

For broadcast messages, it is important to have synchronized both UDP keys (using the Smart Breaker API) and Sequence Numbers.

The following examples were taken on a network with:

  • an IP address space of 10.130.116.0
  • a subnet mask of 255.255.255.0
  • and a broadcast address of 10.130.116.255

All devices were set up using the Smart Breaker API to use UDP Key DD4253D8725A02A0C1FA3417D809686FE397CC8148EFF5328CE436644849A225 (presented here as hex-formatted binary) for broadcast commands. The following EMCBs were on the network, with their unicast UDP Keys presented as hex-formatted binary:

Smart Breaker Node IP Address Serial Number UDP Unicast Key Log Color
10.130.116.28 30000c2a69113173 590871BFD0D5BE4F4976A9E379B3A0ECDE4613AEC67FD4472686C2242D104D2C blue
10.130.115.50 30000c2a690c7652 01C43A38DF5669F3D410602437EC2EF3DAEB12AED3C7EB3FA192D581D2AB9F20 red
10.130.116.84 30000c2a69112b6f FCF618AACA30BD359311F475AA7E6B6226CBA53E86681C1416565E8C8B76A663 purple
10.130.116.85 30000c2a6911283d E9227B7058B86636F41B7252CAFBFF8E3E64C4DA09A9AC806E7FC8C2D9E696DE green

Example: Get Next Expected UDP Sequence Number

This example utilizes the Get Next Expected UDP Sequence Number message as a broadcast message in order to perform device discovery. The example only shows a reply from a single device on the network. As mentioned, additional instances of the message should be used to find any remaining devices.

Message Reference: Get Next Expected UDP Sequence Number.

[2019-03-29T14:48:05.516Z]info:    Broadcast Address == 10.130.116.255
[2019-03-29T14:48:05.545Z]verbose: >>>> SENDING >>>>>>GET_NEXT_SEQUENCE_NUMBER ( 46 bytes) to 10.130.116.255:32866 (BROADCAST)
[2019-03-29T14:48:05.546Z]debug:   >>> >>> >>> "45 54 4E 4D 00 00 00 00 00 00 24 12 69 51 E9 F9 97 C6 14 B6 CF 5C C8 92 54 2E 58 72 09 A0 08 AA 1F 78 F4 36 AC CE 6B 69 B1 E7 59 08 DE 7C" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "00 00 00 00" = 0x0 >>> Message Code = "00 00" = GET_NEXT_SEQUENCE_NUMBER (0x0) >>> Message Data = "24 12 69 51" (4 bytes) >>> Crypto Hash = "E9 F9 97 C6 14 B6 CF 5C C8 92 54 2E 58 72 09 A0 08 AA 1F 78 F4 36 AC CE 6B 69 B1 E7 59 08 DE 7C"
[2019-03-29T14:48:05.555Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 70 bytes) from 10.130.116.84:32866
[2019-03-29T14:48:05.555Z]debug:   <<< <<< <<< "45 54 4E 53 00 00 00 00 00 00 D4 B4 DF 9B 34 30 30 30 30 63 32 61 36 39 31 31 32 62 36 66 01 00 00 00 24 12 69 51 8C 4A 7B 28 3E A3 1F EC 22 D2 4A 77 6D 4C DB 31 81 3C BA D2 B6 C7 FF DF EB 5C D9 E0 BB 7C C9 4F" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "00 00 00 00" = 0x0 <<< Message Code = "00 00" = GET_NEXT_SEQUENCE_NUMBER (0x0) <<< Message Data = "D4 B4 DF 9B 34 30 30 30 30 63 32 61 36 39 31 31 32 62 36 66 01 00 00 00 24 12 69 51" (28 bytes) <<< Crypto Hash = "8C 4A 7B 28 3E A3 1F EC 22 D2 4A 77 6D 4C DB 31 81 3C BA D2 B6 C7 FF DF EB 5C D9 E0 BB 7C C9 4F"
[2019-03-29T14:48:05.556Z]verbose: <<< HANDLING GET_NEXT_SEQUENCE_NUMBER ( 70 bytes) in 10ms
[2019-03-29T14:48:05.560Z]debug:   { nextSequenceNumber: 2615129300, idDevice: '40000c2a69112b6f', protocolRevision: 1 }
[2019-03-29T14:48:05.560Z]verbose: Creating EmcbUDPdeviceMaster Instance for 10.130.116.84
[2019-03-29T14:48:05.562Z]debug:   Setting instance sequence number to 0x9BDFB4D4 = 2615129300
Example: Get Device Status

This example utilizes the Get Device Status message as a broadcast message and receives a response from four devices on the network.

Message Reference: Get Device Status.

[2019-03-15T18:16:32.604Z]verbose: >>>> SENDING >>>>>>>>>>>>>GET_DEVICE_STATUS (42 bytes) to 10.130.116.255:32866 (BROADCAST)
[2019-03-15T18:16:32.605Z]debug:   >>> >>> >>> "45 54 4E 4D 61 61 B3 7E FF 00 6B 60 53 E4 F4 52 F6 28 09 FE D6 AD 8A 65 F4 EB DA BD 11 EB A6 80 79 7D 45 A7 E3 6D 76 46 C7 F5" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "61 61 B3 7E" = 0x7EB36161 >>> Message Code = "FF 00" = GET_DEVICE_STATUS (0xFF) >>> Message Data = "" >>> Crypto Hash = "6B 60 53 E4 F4 52 F6 28 09 FE D6 AD 8A 65 F4 EB DA BD 11 EB A6 80 79 7D 45 A7 E3 6D 76 46 C7 F5"
[2019-03-15T18:16:32.634Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (310 bytes) from 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-15T18:16:32.634Z]debug:   <<< <<< <<< "45 54 4E 53 61 61 B3 7E FF 00 01 9D 00 00 00 00 C8 00 E0 FB 33 C9 FF FF FF FF 8D 01 6C FB FF FF FF FF 11 E5 89 37 00 00 00 00 00 00 00 00 0D 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 1E 04 CC 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 75 FE 93 04 00 00 00 00 00 00 00 00 00 00 00 00 6A 75 1B 00 00 00 00 00 39 2E 29 00 00 00 00 00 74 E5 36 37 00 00 00 00 FA 5B 0E 00 00 00 00 00 FE FF FF FF FF FF FF FF AE FB FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7B 00 00 00 F6 4D 1C 1E 6D 4A 63 6D 26 F5 53 74 50 8D 81 C9 42 BE 88 07 3F 9B CC BB 6A 38 FB AD 02 95 E3 A5" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "61 61 B3 7E" = 0x7EB36161 <<< Message Code = "FF 00" = GET_DEVICE_STATUS (0xFF) <<< Message Data = "01 9D 00 00 00 00 C8 00 E0 FB 33 C9 FF FF FF FF 8D 01 6C FB FF FF FF FF 11 E5 89 37 00 00 00 00 00 00 00 00 0D 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 1E 04 CC 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 75 FE 93 04 00 00 00 00 00 00 00 00 00 00 00 00 6A 75 1B 00 00 00 00 00 39 2E 29 00 00 00 00 00 74 E5 36 37 00 00 00 00 FA 5B 0E 00 00 00 00 00 FE FF FF FF FF FF FF FF AE FB FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7B 00 00 00" <<< Crypto Hash = "F6 4D 1C 1E 6D 4A 63 6D 26 F5 53 74 50 8D 81 C9 42 BE 88 07 3F 9B CC BB 6A 38 FB AD 02 95 E3 A5"
[2019-03-15T18:16:32.635Z]verbose: <<< HANDLING GET_DEVICE_STATUS (310 bytes) in 30ms
[2019-03-15T18:16:32.636Z]debug:   { "breaker": { "state": 1, "stateString": "Closed" }, "meter": { "sequence": 157, "frequency": 0, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "931783953", "LNmVp0": 0, "mAp0": 13, "q1mJp0": "0", "q2mJp0": "2", "q3mJp0": "919340062", "q4mJp0": "0", "q1mVARsp0": "0", "q2mVARsp0": "2", "q3mVARsp0": "76807797", "q4mVARsp0": "0", "q1mVAsp0": "1799530", "q2mVAsp0": "2698809", "q3mVAsp0": "926344564", "q4mVAsp0": "941050", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "0", "LNmVp1": 0, "mAp1": 8, "q1mJp1": "0", "q2mJp1": "0", "q3mJp1": "2", "q4mJp1": "0", "q1mVARsp1": "0", "q2mVARsp1": "0", "q3mVARsp1": "1106", "q4mVARsp1": "0", "q1mVAsp1": "0", "q2mVAsp1": "0", "q3mVAsp1": "0", "q4mVAsp1": "0", "LLp01mV": 123 } }
[2019-03-15T18:16:32.636Z]info:    Breaker Feedback Position changed from undefined to 1
[2019-03-15T18:16:32.636Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (310 bytes) from 10.130.116.28:32866 [40000c2a69113173]
[2019-03-15T18:16:32.636Z]debug:   <<< <<< <<< "45 54 4E 53 61 61 B3 7E FF 00 01 E4 60 EA 00 00 C8 00 F7 E7 3B EF F5 FF FF FF 4F 68 7D EA FF FF FF FF 47 44 C3 3C 0A 00 00 00 5B E7 01 00 29 00 00 00 91 2D 00 00 00 00 00 00 11 D4 45 08 00 00 00 00 5D 94 7E 08 0A 00 00 00 D4 22 00 00 00 00 00 00 52 C0 01 00 00 00 00 00 2A AF 04 01 00 00 00 00 B1 FF 87 16 00 00 00 00 7C 07 01 00 00 00 00 00 93 4B 06 00 00 00 00 00 EB AD 4E 0E 00 00 00 00 3B 06 6A 2E 0A 00 00 00 8E 44 04 00 00 00 00 00 AD 89 4C 50 F3 FF FF FF 60 18 76 1D 00 00 00 00 23 55 4F 05 0D 00 00 00 5B E7 01 00 C1 04 00 00 50 0C 00 00 00 00 00 00 E0 BA 9E AF 0C 00 00 00 36 D0 14 00 00 00 00 00 73 08 00 00 00 00 00 00 45 D4 00 00 00 00 00 00 53 30 76 1D 00 00 00 00 47 81 00 00 00 00 00 00 F1 6A 00 00 00 00 00 00 BB 32 03 00 00 00 00 00 06 CD 71 00 0D 00 00 00 18 C7 D7 04 00 00 00 00 4A 8E 02 00 00 00 00 00 72 00 00 00 79 B5 24 04 E5 12 F3 63 D1 66 B9 FC 1E FF D2 A1 6B FD B5 CB C2 1B 7C 48 6E CC E1 83 5E DB CB DF" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "61 61 B3 7E" = 0x7EB36161 <<< Message Code = "FF 00" = GET_DEVICE_STATUS (0xFF) <<< Message Data = "01 E4 60 EA 00 00 C8 00 F7 E7 3B EF F5 FF FF FF 4F 68 7D EA FF FF FF FF 47 44 C3 3C 0A 00 00 00 5B E7 01 00 29 00 00 00 91 2D 00 00 00 00 00 00 11 D4 45 08 00 00 00 00 5D 94 7E 08 0A 00 00 00 D4 22 00 00 00 00 00 00 52 C0 01 00 00 00 00 00 2A AF 04 01 00 00 00 00 B1 FF 87 16 00 00 00 00 7C 07 01 00 00 00 00 00 93 4B 06 00 00 00 00 00 EB AD 4E 0E 00 00 00 00 3B 06 6A 2E 0A 00 00 00 8E 44 04 00 00 00 00 00 AD 89 4C 50 F3 FF FF FF 60 18 76 1D 00 00 00 00 23 55 4F 05 0D 00 00 00 5B E7 01 00 C1 04 00 00 50 0C 00 00 00 00 00 00 E0 BA 9E AF 0C 00 00 00 36 D0 14 00 00 00 00 00 73 08 00 00 00 00 00 00 45 D4 00 00 00 00 00 00 53 30 76 1D 00 00 00 00 47 81 00 00 00 00 00 00 F1 6A 00 00 00 00 00 00 BB 32 03 00 00 00 00 00 06 CD 71 00 0D 00 00 00 18 C7 D7 04 00 00 00 00 4A 8E 02 00 00 00 00 00 72 00 00 00" <<< Crypto Hash = "79 B5 24 04 E5 12 F3 63 D1 66 B9 FC 1E FF D2 A1 6B FD B5 CB C2 1B 7C 48 6E CC E1 83 5E DB CB DF" 
[2019-03-15T18:16:32.637Z]verbose: <<< HANDLING GET_DEVICE_STATUS (310 bytes) in 32ms
[2019-03-15T18:16:32.637Z]debug:   { "breaker": { "state": 1, "stateString": "Closed" }, "meter": { "sequence": 228, "frequency": 60000, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "43969102919", "LNmVp0": 124763, "mAp0": 41, "q1mJp0": "11665", "q2mJp0": "138794001", "q3mJp0": "43092186205", "q4mJp0": "8916", "q1mVARsp0": "114770", "q2mVARsp0": "17084202", "q3mVARsp0": "378011569", "q4mVARsp0": "67452", "q1mVAsp0": "412563", "q2mVAsp0": "240037355", "q3mVAsp0": "43728373307", "q4mVAsp0": "279694", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "55923660067", "LNmVp1": 124763, "mAp1": 1217, "q1mJp1": "3152", "q2mJp1": "54486022880", "q3mJp1": "1364022", "q4mJp1": "2163", "q1mVARsp1": "54341", "q2mVARsp1": "494284883", "q3mVARsp1": "33095", "q4mVARsp1": "27377", "q1mVAsp1": "209595", "q2mVAsp1": "55842032902", "q3mVAsp1": "81250072", "q4mVAsp1": "167498", "LLp01mV": 114 } }
[2019-03-15T18:16:32.637Z]info:    Breaker Feedback Position changed from undefined to 1
[2019-03-15T18:16:32.637Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (310 bytes) from 10.130.116.84:32866 [40000c2a69112b6f]
[2019-03-15T18:16:32.638Z]debug:   <<< <<< <<< "45 54 4E 53 61 61 B3 7E FF 00 01 F0 6F EA 00 00 C8 00 E6 54 8E FE FF FF FF FF 6D 6F EC FF FF FF FF FF BE 59 AB 01 00 00 00 00 65 E7 01 00 09 00 00 00 1A 0C 00 00 00 00 00 00 17 58 00 00 00 00 00 00 F2 6C 71 01 00 00 00 00 D5 0D 00 00 00 00 00 00 02 C0 02 00 00 00 00 00 A3 60 05 00 00 00 00 00 1A 6B 10 00 00 00 00 00 1E 46 0B 00 00 00 00 00 66 76 07 00 00 00 00 00 8C F0 0D 00 00 00 00 00 6D 3E 80 01 00 00 00 00 5F B4 15 00 00 00 00 00 0D 8B E4 9D DB FF FF FF 3A F5 34 CD FF FF FF FF 19 30 29 6C 24 00 00 00 65 E7 01 00 FC 04 00 00 31 02 00 00 00 00 00 00 8E F1 3C 06 0D 00 00 00 3A 96 DE 5B 17 00 00 00 A4 10 00 00 00 00 00 00 8C 73 00 00 00 00 00 00 9E BF 55 00 00 00 00 00 2C DD 12 33 00 00 00 00 C4 60 0E 00 00 00 00 00 CC A2 01 00 00 00 00 00 F0 08 84 02 0D 00 00 00 AE D8 8C 69 17 00 00 00 AF AB 16 00 00 00 00 00 72 00 00 00 45 BF FE B0 30 2F 2B 90 67 16 97 56 89 BB BB EA 71 DF 6A 26 33 CC 64 F8 1C D6 1C F2 FF F7 B6 D1" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "61 61 B3 7E" = 0x7EB36161 <<< Message Code = "FF 00" = GET_DEVICE_STATUS (0xFF) <<< Message Data = "01 F0 6F EA 00 00 C8 00 E6 54 8E FE FF FF FF FF 6D 6F EC FF FF FF FF FF BE 59 AB 01 00 00 00 00 65 E7 01 00 09 00 00 00 1A 0C 00 00 00 00 00 00 17 58 00 00 00 00 00 00 F2 6C 71 01 00 00 00 00 D5 0D 00 00 00 00 00 00 02 C0 02 00 00 00 00 00 A3 60 05 00 00 00 00 00 1A 6B 10 00 00 00 00 00 1E 46 0B 00 00 00 00 00 66 76 07 00 00 00 00 00 8C F0 0D 00 00 00 00 00 6D 3E 80 01 00 00 00 00 5F B4 15 00 00 00 00 00 0D 8B E4 9D DB FF FF FF 3A F5 34 CD FF FF FF FF 19 30 29 6C 24 00 00 00 65 E7 01 00 FC 04 00 00 31 02 00 00 00 00 00 00 8E F1 3C 06 0D 00 00 00 3A 96 DE 5B 17 00 00 00 A4 10 00 00 00 00 00 00 8C 73 00 00 00 00 00 00 9E BF 55 00 00 00 00 00 2C DD 12 33 00 00 00 00 C4 60 0E 00 00 00 00 00 CC A2 01 00 00 00 00 00 F0 08 84 02 0D 00 00 00 AE D8 8C 69 17 00 00 00 AF AB 16 00 00 00 00 00 72 00 00 00" <<< Crypto Hash = "45 BF FE B0 30 2F 2B 90 67 16 97 56 89 BB BB EA 71 DF 6A 26 33 CC 64 F8 1C D6 1C F2 FF F7 B6 D1" 
[2019-03-15T18:16:32.638Z]verbose: <<< HANDLING GET_DEVICE_STATUS (310 bytes) in 33ms
[2019-03-15T18:16:32.638Z]debug:   { "breaker": { "state": 1, "stateString": "Closed" }, "meter": { "sequence": 240, "frequency": 60015, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "28006846", "LNmVp0": 124773, "mAp0": 9, "q1mJp0": "3098", "q2mJp0": "22551", "q3mJp0": "24210674", "q4mJp0": "3541", "q1mVARsp0": "180226", "q2mVARsp0": "352419", "q3mVARsp0": "1075994", "q4mVARsp0": "738846", "q1mVAsp0": "489062", "q2mVAsp0": "913548", "q3mVAsp0": "25181805", "q4mVAsp0": "1422431", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "156433461273", "LNmVp1": 124773, "mAp1": 1276, "q1mJp1": "561", "q2mJp1": "55939232142", "q3mJp1": "100325561914", "q4mJp1": "4260", "q1mVARsp1": "29580", "q2mVARsp1": "5619614", "q3mVARsp1": "856874284", "q4mVARsp1": "942276", "q1mVAsp1": "107212", "q2mVAsp1": "55876782320", "q3mVAsp1": "100555085998", "q4mVAsp1": "1485743", "LLp01mV": 114 } }
[2019-03-15T18:16:32.638Z]info:    Breaker Feedback Position changed from undefined to 1
[2019-03-15T18:16:32.639Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (310 bytes) from 10.130.116.85:32866 [40000c2a6911283d]
[2019-03-15T18:16:32.639Z]debug:   <<< <<< <<< "45 54 4E 53 61 61 B3 7E FF 00 01 F4 60 EA 00 00 C8 00 08 13 87 E0 FE FF FF FF 85 78 FD 50 00 00 00 00 CB DD 25 67 01 00 00 00 F2 E7 01 00 09 00 00 00 00 00 00 00 00 00 00 00 34 E2 78 1F 01 00 00 00 C4 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 0B 00 00 00 00 00 00 6E 6D FD 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 34 00 00 00 00 00 00 E8 25 25 67 01 00 00 00 88 6D 00 00 00 00 00 00 19 16 00 00 00 00 00 00 50 4C E2 95 F5 FF FF FF 70 B1 63 FC FF FF FF FF 03 AF C8 79 0A 00 00 00 F2 E7 01 00 08 00 00 00 00 00 00 00 00 00 00 00 53 75 D3 53 00 00 00 00 5D 3E 4A 16 0A 00 00 00 00 00 00 00 00 00 00 00 35 3E 02 00 00 00 00 00 04 9E B2 13 00 00 00 00 BA 24 51 17 00 00 00 00 0F 06 00 00 00 00 00 00 E8 84 03 00 00 00 00 00 15 53 29 5D 00 00 00 00 A9 AA 99 1C 0A 00 00 00 5D 2C 02 00 00 00 00 00 72 00 00 00 FC FA 69 52 6E 0B 5F F0 E7 B1 C6 8C 2F DB AA 69 62 7C 30 98 6D 61 4F 8E F2 52 AC E0 23 25 49 3C" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "61 61 B3 7E" = 0x7EB36161 <<< Message Code = "FF 00" = GET_DEVICE_STATUS (0xFF) <<< Message Data = "01 F4 60 EA 00 00 C8 00 08 13 87 E0 FE FF FF FF 85 78 FD 50 00 00 00 00 CB DD 25 67 01 00 00 00 F2 E7 01 00 09 00 00 00 00 00 00 00 00 00 00 00 34 E2 78 1F 01 00 00 00 C4 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 0B 00 00 00 00 00 00 6E 6D FD 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 34 00 00 00 00 00 00 E8 25 25 67 01 00 00 00 88 6D 00 00 00 00 00 00 19 16 00 00 00 00 00 00 50 4C E2 95 F5 FF FF FF 70 B1 63 FC FF FF FF FF 03 AF C8 79 0A 00 00 00 F2 E7 01 00 08 00 00 00 00 00 00 00 00 00 00 00 53 75 D3 53 00 00 00 00 5D 3E 4A 16 0A 00 00 00 00 00 00 00 00 00 00 00 35 3E 02 00 00 00 00 00 04 9E B2 13 00 00 00 00 BA 24 51 17 00 00 00 00 0F 06 00 00 00 00 00 00 E8 84 03 00 00 00 00 00 15 53 29 5D 00 00 00 00 A9 AA 99 1C 0A 00 00 00 5D 2C 02 00 00 00 00 00 72 00 00 00" <<< Crypto Hash = "FC FA 69 52 6E 0B 5F F0 E7 B1 C6 8C 2F DB AA 69 62 7C 30 98 6D 61 4F 8E F2 52 AC E0 23 25 49 3C" 
[2019-03-15T18:16:32.639Z]verbose: <<< HANDLING GET_DEVICE_STATUS (310 bytes) in 34ms
[2019-03-15T18:16:32.639Z]debug:   { "breaker": { "state": 1, "stateString": "Closed" }, "meter": { "sequence": 244, "frequency": 60000, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "6025502155", "LNmVp0": 124914, "mAp0": 9, "q1mJp0": "0", "q2mJp0": "4822983220", "q3mJp0": "2756", "q4mJp0": "0", "q1mVARsp0": "2839", "q2mVARsp0": "1358785902", "q3mVARsp0": "0", "q4mVARsp0": "0", "q1mVAsp0": "13378", "q2mVAsp0": "6025455080", "q3mVAsp0": "28040", "q4mVAsp0": "5657", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "44992868099", "LNmVp1": 124914, "mAp1": 8, "q1mJp1": "0", "q2mJp1": "1406367059", "q3mJp1": "43323637341", "q4mJp1": "0", "q1mVARsp1": "146997", "q2mVARsp1": "330472964", "q3mVARsp1": "391193786", "q4mVARsp1": "1551", "q1mVAsp1": "230632", "q2mVAsp1": "1562989333", "q3mVAsp1": "43429505705", "q4mVAsp1": "142429", "LLp01mV": 114 } }
[2019-03-15T18:16:32.639Z]info:    Breaker Feedback Position changed from undefined to 1
Example: Get Breaker Remote Handle Position

This example utilizes the Get Breaker Remote Handle Position message as a broadcast message and receives a response from four devices on the network.

Message Reference: Get Breaker Remote Handle Position.

[2019-03-15T18:16:36.485Z]verbose: >>>> SENDING GET_BREAKER_REMOTE_HANDLE_POSITION ( 42 bytes) to 10.130.116.255:32866 (BROADCAST)
[2019-03-15T18:16:36.485Z]debug:   >>> >>> >>> "45 54 4E 4D 62 61 B3 7E 00 01 91 54 BD 23 F3 E4 7C CE CE 04 E1 AE BD 00 33 20 45 D3 C3 84 B5 7A 79 41 FB 38 80 8F ED 89 C0 07" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "62 61 B3 7E" = 0x7EB36162 >>> Message Code = "00 01" = GET_BREAKER_REMOTE_HANDLE_POSITION (0x100) >>> Message Data = "" >>> Crypto Hash = "91 54 BD 23 F3 E4 7C CE CE 04 E1 AE BD 00 33 20 45 D3 C3 84 B5 7A 79 41 FB 38 80 8F ED 89 C0 07"
[2019-03-15T18:16:36.490Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-15T18:16:36.490Z]debug:   <<< <<< <<< "45 54 4E 53 62 61 B3 7E 00 01 01 CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "62 61 B3 7E" = 0x7EB36162 <<< Message Code = "00 01" = GET_BREAKER_REMOTE_HANDLE_POSITION (0x100) <<< Message Data = "01" <<< Crypto Hash = "CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" 
[2019-03-15T18:16:36.490Z]verbose: <<< HANDLING GET_BREAKER_REMOTE_HANDLE_POSITION ( 43 bytes) in 5ms
[2019-03-15T18:16:36.491Z]debug:   { "state": 1, "stateString": "Closed" }
[2019-03-15T18:16:36.491Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.85:32866 [40000c2a6911283d]
[2019-03-15T18:16:36.491Z]debug:   <<< <<< <<< "45 54 4E 53 62 61 B3 7E 00 01 01 CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "62 61 B3 7E" = 0x7EB36162 <<< Message Code = "00 01" = GET_BREAKER_REMOTE_HANDLE_POSITION (0x100) <<< Message Data = "01" <<< Crypto Hash = "CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" 
[2019-03-15T18:16:36.492Z]verbose: <<< HANDLING GET_BREAKER_REMOTE_HANDLE_POSITION ( 43 bytes) in 6ms
[2019-03-15T18:16:36.492Z]debug:   { "state": 1, "stateString": "Closed" }
[2019-03-15T18:16:36.492Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.84:32866 [40000c2a69112b6f]
[2019-03-15T18:16:36.492Z]debug:   <<< <<< <<< "45 54 4E 53 62 61 B3 7E 00 01 01 CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "62 61 B3 7E" = 0x7EB36162 <<< Message Code = "00 01" = GET_BREAKER_REMOTE_HANDLE_POSITION (0x100) <<< Message Data = "01" <<< Crypto Hash = "CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" 
[2019-03-15T18:16:36.492Z]verbose: <<< HANDLING GET_BREAKER_REMOTE_HANDLE_POSITION ( 43 bytes) in 7ms
[2019-03-15T18:16:36.492Z]debug:   { "state": 1, "stateString": "Closed" }
[2019-03-15T18:16:36.521Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.28:32866 [40000c2a69113173]
[2019-03-15T18:16:36.521Z]debug:   <<< <<< <<< "45 54 4E 53 62 61 B3 7E 00 01 01 CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "62 61 B3 7E" = 0x7EB36162 <<< Message Code = "00 01" = GET_BREAKER_REMOTE_HANDLE_POSITION (0x100) <<< Message Data = "01" <<< Crypto Hash = "CA 18 DC B7 ED F6 7E 10 E4 0A 54 07 89 77 C8 40 AB D7 73 A1 45 55 D2 1D 41 03 5A 8E 57 90 AF 0A" 
[2019-03-15T18:16:36.521Z]verbose: <<< HANDLING GET_BREAKER_REMOTE_HANDLE_POSITION ( 43 bytes) in 36ms
[2019-03-15T18:16:36.521Z]debug:   { "state": 1, "stateString": "Closed" }
Example: Get Meter Telemetry Data

This example utilizes the Get Meter Telemetry Data message as a broadcast message and receives a response from four devices on the network.

Message Reference: Get Meter Telemetry Data.

[2019-03-15T18:16:38.908Z]verbose: >>>> SENDING >>>>>>GET_METER_TELEMETRY_DATA ( 42 bytes) to 10.130.116.255:32866 (BROADCAST)
[2019-03-15T18:16:38.908Z]debug:   >>> >>> >>> "45 54 4E 4D 63 61 B3 7E 00 02 84 AC BA 4E 51 4E 4C 19 34 7B 1F CF 75 69 31 75 3C 21 61 A6 A6 35 16 E8 61 41 CA 76 85 BA F5 C1" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "63 61 B3 7E" = 0x7EB36163 >>> Message Code = "00 02" = GET_METER_TELEMETRY_DATA (0x200) >>> Message Data = "" >>> Crypto Hash = "84 AC BA 4E 51 4E 4C 19 34 7B 1F CF 75 69 31 75 3C 21 61 A6 A6 35 16 E8 61 41 CA 76 85 BA F5 C1"
[2019-03-15T18:16:38.938Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (309 bytes) from 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-15T18:16:38.938Z]debug:   <<< <<< <<< "45 54 4E 53 63 61 B3 7E 00 02 BC 00 00 00 00 C8 00 E0 FB 33 C9 FF FF FF FF 8D 01 6C FB FF FF FF FF 11 E5 89 37 00 00 00 00 00 00 00 00 0F 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 1E 04 CC 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 75 FE 93 04 00 00 00 00 00 00 00 00 00 00 00 00 6A 75 1B 00 00 00 00 00 39 2E 29 00 00 00 00 00 74 E5 36 37 00 00 00 00 FA 5B 0E 00 00 00 00 00 FE FF FF FF FF FF FF FF AE FB FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7A 00 00 00 1F F8 25 BE BD AE 72 C3 49 31 71 65 5C EE E5 53 68 BF 16 F3 09 CA 20 DE 5B 7A 85 28 4F 81 B2 80" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "63 61 B3 7E" = 0x7EB36163 <<< Message Code = "00 02" = GET_METER_TELEMETRY_DATA (0x200) <<< Message Data = "BC 00 00 00 00 C8 00 E0 FB 33 C9 FF FF FF FF 8D 01 6C FB FF FF FF FF 11 E5 89 37 00 00 00 00 00 00 00 00 0F 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 1E 04 CC 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 75 FE 93 04 00 00 00 00 00 00 00 00 00 00 00 00 6A 75 1B 00 00 00 00 00 39 2E 29 00 00 00 00 00 74 E5 36 37 00 00 00 00 FA 5B 0E 00 00 00 00 00 FE FF FF FF FF FF FF FF AE FB FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7A 00 00 00" <<< Crypto Hash = "1F F8 25 BE BD AE 72 C3 49 31 71 65 5C EE E5 53 68 BF 16 F3 09 CA 20 DE 5B 7A 85 28 4F 81 B2 80" 
[2019-03-15T18:16:38.938Z]verbose: <<< HANDLING GET_METER_TELEMETRY_DATA (309 bytes) in 30ms
[2019-03-15T18:16:38.939Z]debug:   { "sequence": 188, "frequency": 0, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "931783953", "LNmVp0": 0, "mAp0": 15, "q1mJp0": "0", "q2mJp0": "2", "q3mJp0": "919340062", "q4mJp0": "0", "q1mVARsp0": "0", "q2mVARsp0": "2", "q3mVARsp0": "76807797", "q4mVARsp0": "0", "q1mVAsp0": "1799530", "q2mVAsp0": "2698809", "q3mVAsp0": "926344564", "q4mVAsp0": "941050", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "0", "LNmVp1": 0, "mAp1": 3, "q1mJp1": "0", "q2mJp1": "0", "q3mJp1": "2", "q4mJp1": "0", "q1mVARsp1": "0", "q2mVARsp1": "0", "q3mVARsp1": "1106", "q4mVARsp1": "0", "q1mVAsp1": "0", "q2mVAsp1": "0", "q3mVAsp1": "0", "q4mVAsp1": "0", "LLp01mV": 122 }
[2019-03-15T18:16:38.939Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (309 bytes) from 10.130.116.28:32866 [40000c2a69113173]
[2019-03-15T18:16:38.939Z]debug:   <<< <<< <<< "45 54 4E 53 63 61 B3 7E 00 02 03 6F EA 00 00 C8 00 F7 E7 3B EF F5 FF FF FF 4F 68 7D EA FF FF FF FF 3F BE C3 3C 0A 00 00 00 F7 E6 01 00 28 00 00 00 91 2D 00 00 00 00 00 00 11 D4 45 08 00 00 00 00 5D 94 7E 08 0A 00 00 00 D4 22 00 00 00 00 00 00 52 C0 01 00 00 00 00 00 2A AF 04 01 00 00 00 00 B1 FF 87 16 00 00 00 00 7C 07 01 00 00 00 00 00 93 4B 06 00 00 00 00 00 EB AD 4E 0E 00 00 00 00 33 80 6A 2E 0A 00 00 00 8E 44 04 00 00 00 00 00 FD 25 3E 50 F3 FF FF FF 60 18 76 1D 00 00 00 00 8F B3 5D 05 0D 00 00 00 F7 E6 01 00 C1 04 00 00 50 0C 00 00 00 00 00 00 90 1E AD AF 0C 00 00 00 36 D0 14 00 00 00 00 00 73 08 00 00 00 00 00 00 45 D4 00 00 00 00 00 00 53 30 76 1D 00 00 00 00 47 81 00 00 00 00 00 00 F1 6A 00 00 00 00 00 00 BB 32 03 00 00 00 00 00 72 2B 80 00 0D 00 00 00 18 C7 D7 04 00 00 00 00 4A 8E 02 00 00 00 00 00 72 00 00 00 21 18 36 92 71 B7 18 E4 29 BC D7 5D F4 C9 FC 25 1F 64 B7 D0 75 C2 E8 90 43 E0 F3 DC D5 BB 70 4F" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "63 61 B3 7E" = 0x7EB36163 <<< Message Code = "00 02" = GET_METER_TELEMETRY_DATA (0x200) <<< Message Data = "03 6F EA 00 00 C8 00 F7 E7 3B EF F5 FF FF FF 4F 68 7D EA FF FF FF FF 3F BE C3 3C 0A 00 00 00 F7 E6 01 00 28 00 00 00 91 2D 00 00 00 00 00 00 11 D4 45 08 00 00 00 00 5D 94 7E 08 0A 00 00 00 D4 22 00 00 00 00 00 00 52 C0 01 00 00 00 00 00 2A AF 04 01 00 00 00 00 B1 FF 87 16 00 00 00 00 7C 07 01 00 00 00 00 00 93 4B 06 00 00 00 00 00 EB AD 4E 0E 00 00 00 00 33 80 6A 2E 0A 00 00 00 8E 44 04 00 00 00 00 00 FD 25 3E 50 F3 FF FF FF 60 18 76 1D 00 00 00 00 8F B3 5D 05 0D 00 00 00 F7 E6 01 00 C1 04 00 00 50 0C 00 00 00 00 00 00 90 1E AD AF 0C 00 00 00 36 D0 14 00 00 00 00 00 73 08 00 00 00 00 00 00 45 D4 00 00 00 00 00 00 53 30 76 1D 00 00 00 00 47 81 00 00 00 00 00 00 F1 6A 00 00 00 00 00 00 BB 32 03 00 00 00 00 00 72 2B 80 00 0D 00 00 00 18 C7 D7 04 00 00 00 00 4A 8E 02 00 00 00 00 00 72 00 00 00" <<< Crypto Hash = "21 18 36 92 71 B7 18 E4 29 BC D7 5D F4 C9 FC 25 1F 64 B7 D0 75 C2 E8 90 43 E0 F3 DC D5 BB 70 4F" 
[2019-03-15T18:16:38.940Z]verbose: <<< HANDLING GET_METER_TELEMETRY_DATA (309 bytes) in 32ms
[2019-03-15T18:16:38.940Z]debug:   { "sequence": 3, "frequency": 60015, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "43969134143", "LNmVp0": 124663, "mAp0": 40, "q1mJp0": "11665", "q2mJp0": "138794001", "q3mJp0": "43092186205", "q4mJp0": "8916", "q1mVARsp0": "114770", "q2mVARsp0": "17084202", "q3mVARsp0": "378011569", "q4mVARsp0": "67452", "q1mVAsp0": "412563", "q2mVAsp0": "240037355", "q3mVAsp0": "43728404531", "q4mVAsp0": "279694", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "55924601743", "LNmVp1": 124663, "mAp1": 1217, "q1mJp1": "3152", "q2mJp1": "54486965904", "q3mJp1": "1364022", "q4mJp1": "2163", "q1mVARsp1": "54341", "q2mVARsp1": "494284883", "q3mVARsp1": "33095", "q4mVARsp1": "27377", "q1mVAsp1": "209595", "q2mVAsp1": "55842974578", "q3mVAsp1": "81250072", "q4mVAsp1": "167498", "LLp01mV": 114 }
[2019-03-15T18:16:38.986Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (309 bytes) from 10.130.116.84:32866 [40000c2a69112b6f]
[2019-03-15T18:16:38.986Z]debug:   <<< <<< <<< "45 54 4E 53 63 61 B3 7E 00 02 0F 6F EA 00 00 C8 00 E6 54 8E FE FF FF FF FF 6D 6F EC FF FF FF FF FF BE 59 AB 01 00 00 00 00 6C E6 01 00 09 00 00 00 1A 0C 00 00 00 00 00 00 17 58 00 00 00 00 00 00 F2 6C 71 01 00 00 00 00 D5 0D 00 00 00 00 00 00 02 C0 02 00 00 00 00 00 A3 60 05 00 00 00 00 00 1A 6B 10 00 00 00 00 00 1E 46 0B 00 00 00 00 00 66 76 07 00 00 00 00 00 8C F0 0D 00 00 00 00 00 6D 3E 80 01 00 00 00 00 5F B4 15 00 00 00 00 00 D9 7D D5 9D DB FF FF FF 3A F5 34 CD FF FF FF FF CB 39 38 6C 24 00 00 00 6C E6 01 00 FA 04 00 00 31 02 00 00 00 00 00 00 C2 FE 4B 06 0D 00 00 00 3A 96 DE 5B 17 00 00 00 A4 10 00 00 00 00 00 00 8C 73 00 00 00 00 00 00 9E BF 55 00 00 00 00 00 2C DD 12 33 00 00 00 00 C4 60 0E 00 00 00 00 00 CC A2 01 00 00 00 00 00 A2 12 93 02 0D 00 00 00 AE D8 8C 69 17 00 00 00 AF AB 16 00 00 00 00 00 72 00 00 00 72 84 3C CD B4 F4 E6 46 DF 1E 64 1C 70 D1 43 55 63 AD 00 AA 36 1C 59 C2 4C FC A8 C1 32 92 08 1D" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "63 61 B3 7E" = 0x7EB36163 <<< Message Code = "00 02" = GET_METER_TELEMETRY_DATA (0x200) <<< Message Data = "0F 6F EA 00 00 C8 00 E6 54 8E FE FF FF FF FF 6D 6F EC FF FF FF FF FF BE 59 AB 01 00 00 00 00 6C E6 01 00 09 00 00 00 1A 0C 00 00 00 00 00 00 17 58 00 00 00 00 00 00 F2 6C 71 01 00 00 00 00 D5 0D 00 00 00 00 00 00 02 C0 02 00 00 00 00 00 A3 60 05 00 00 00 00 00 1A 6B 10 00 00 00 00 00 1E 46 0B 00 00 00 00 00 66 76 07 00 00 00 00 00 8C F0 0D 00 00 00 00 00 6D 3E 80 01 00 00 00 00 5F B4 15 00 00 00 00 00 D9 7D D5 9D DB FF FF FF 3A F5 34 CD FF FF FF FF CB 39 38 6C 24 00 00 00 6C E6 01 00 FA 04 00 00 31 02 00 00 00 00 00 00 C2 FE 4B 06 0D 00 00 00 3A 96 DE 5B 17 00 00 00 A4 10 00 00 00 00 00 00 8C 73 00 00 00 00 00 00 9E BF 55 00 00 00 00 00 2C DD 12 33 00 00 00 00 C4 60 0E 00 00 00 00 00 CC A2 01 00 00 00 00 00 A2 12 93 02 0D 00 00 00 AE D8 8C 69 17 00 00 00 AF AB 16 00 00 00 00 00 72 00 00 00" <<< Crypto Hash = "72 84 3C CD B4 F4 E6 46 DF 1E 64 1C 70 D1 43 55 63 AD 00 AA 36 1C 59 C2 4C FC A8 C1 32 92 08 1D" 
[2019-03-15T18:16:38.987Z]verbose: <<< HANDLING GET_METER_TELEMETRY_DATA (309 bytes) in 79ms
[2019-03-15T18:16:38.987Z]debug:   { "sequence": 15, "frequency": 60015, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "28006846", "LNmVp0": 124524, "mAp0": 9, "q1mJp0": "3098", "q2mJp0": "22551", "q3mJp0": "24210674", "q4mJp0": "3541", "q1mVARsp0": "180226", "q2mVARsp0": "352419", "q3mVARsp0": "1075994", "q4mVARsp0": "738846", "q1mVAsp0": "489062", "q2mVAsp0": "913548", "q3mVAsp0": "25181805", "q4mVAsp0": "1422431", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "156434446795", "LNmVp1": 124524, "mAp1": 1274, "q1mJp1": "561", "q2mJp1": "55940218562", "q3mJp1": "100325561914", "q4mJp1": "4260", "q1mVARsp1": "29580", "q2mVARsp1": "5619614", "q3mVARsp1": "856874284", "q4mVARsp1": "942276", "q1mVAsp1": "107212", "q2mVAsp1": "55877767842", "q3mVAsp1": "100555085998", "q4mVAsp1": "1485743", "LLp01mV": 114 }
[2019-03-15T18:16:38.999Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (309 bytes) from 10.130.116.85:32866 [40000c2a6911283d]
[2019-03-15T18:16:38.999Z]debug:   <<< <<< <<< "45 54 4E 53 63 61 B3 7E 00 02 15 6F EA 00 00 C8 00 08 13 87 E0 FE FF FF FF 85 78 FD 50 00 00 00 00 CB DD 25 67 01 00 00 00 95 E7 01 00 09 00 00 00 00 00 00 00 00 00 00 00 34 E2 78 1F 01 00 00 00 C4 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 0B 00 00 00 00 00 00 6E 6D FD 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 34 00 00 00 00 00 00 E8 25 25 67 01 00 00 00 88 6D 00 00 00 00 00 00 19 16 00 00 00 00 00 00 50 4C E2 95 F5 FF FF FF 70 B1 63 FC FF FF FF FF 03 AF C8 79 0A 00 00 00 95 E7 01 00 08 00 00 00 00 00 00 00 00 00 00 00 53 75 D3 53 00 00 00 00 5D 3E 4A 16 0A 00 00 00 00 00 00 00 00 00 00 00 35 3E 02 00 00 00 00 00 04 9E B2 13 00 00 00 00 BA 24 51 17 00 00 00 00 0F 06 00 00 00 00 00 00 E8 84 03 00 00 00 00 00 15 53 29 5D 00 00 00 00 A9 AA 99 1C 0A 00 00 00 5D 2C 02 00 00 00 00 00 72 00 00 00 44 88 34 97 DD 1A 3E D5 75 18 10 FF C1 1C B4 09 E6 63 DE 43 2D 5E 59 C3 9E 85 A3 BA EF DA 89 0B" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "63 61 B3 7E" = 0x7EB36163 <<< Message Code = "00 02" = GET_METER_TELEMETRY_DATA (0x200) <<< Message Data = "15 6F EA 00 00 C8 00 08 13 87 E0 FE FF FF FF 85 78 FD 50 00 00 00 00 CB DD 25 67 01 00 00 00 95 E7 01 00 09 00 00 00 00 00 00 00 00 00 00 00 34 E2 78 1F 01 00 00 00 C4 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 0B 00 00 00 00 00 00 6E 6D FD 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 34 00 00 00 00 00 00 E8 25 25 67 01 00 00 00 88 6D 00 00 00 00 00 00 19 16 00 00 00 00 00 00 50 4C E2 95 F5 FF FF FF 70 B1 63 FC FF FF FF FF 03 AF C8 79 0A 00 00 00 95 E7 01 00 08 00 00 00 00 00 00 00 00 00 00 00 53 75 D3 53 00 00 00 00 5D 3E 4A 16 0A 00 00 00 00 00 00 00 00 00 00 00 35 3E 02 00 00 00 00 00 04 9E B2 13 00 00 00 00 BA 24 51 17 00 00 00 00 0F 06 00 00 00 00 00 00 E8 84 03 00 00 00 00 00 15 53 29 5D 00 00 00 00 A9 AA 99 1C 0A 00 00 00 5D 2C 02 00 00 00 00 00 72 00 00 00" <<< Crypto Hash = "44 88 34 97 DD 1A 3E D5 75 18 10 FF C1 1C B4 09 E6 63 DE 43 2D 5E 59 C3 9E 85 A3 BA EF DA 89 0B" 
[2019-03-15T18:16:38.999Z]verbose: <<< HANDLING GET_METER_TELEMETRY_DATA (309 bytes) in 91ms
[2019-03-15T18:16:38.999Z]debug:   { "sequence": 21, "frequency": 60015, "period": 200, "mJp0": 0, "mVARsp0": 0, "mVAsp0": "6025502155", "LNmVp0": 124821, "mAp0": 9, "q1mJp0": "0", "q2mJp0": "4822983220", "q3mJp0": "2756", "q4mJp0": "0", "q1mVARsp0": "2839", "q2mVARsp0": "1358785902", "q3mVARsp0": "0", "q4mVARsp0": "0", "q1mVAsp0": "13378", "q2mVAsp0": "6025455080", "q3mVAsp0": "28040", "q4mVAsp0": "5657", "mJp1": 0, "mVARsp1": 0, "mVAsp1": "44992868099", "LNmVp1": 124821, "mAp1": 8, "q1mJp1": "0", "q2mJp1": "1406367059", "q3mJp1": "43323637341", "q4mJp1": "0", "q1mVARsp1": "146997", "q2mVARsp1": "330472964", "q3mVARsp1": "391193786", "q4mVARsp1": "1551", "q1mVAsp1": "230632", "q2mVAsp1": "1562989333", "q3mVAsp1": "43429505705", "q4mVAsp1": "142429", "LLp01mV": 11 4 } 
Example: Set Next Expected UDP Sequence Number

This example utilizes the Set Next Expected UDP Sequence Number message as a unicast message to four individual devices message and receives a response from each device.

Message Reference: Set Next Expected UDP Sequence Number.

[2019-03-15T14:28:18.100Z]verbose: >>>> SENDING >>>>>>SET_NEXT_SEQUENCE_NUMBER ( 46 bytes) to 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-15T14:28:18.100Z]debug:   >>> >>> >>> "45 54 4E 4D B1 81 FB 64 00 80 10 8A C1 65 27 5F 9B 97 E4 0D 3B FB 1E CA CC C4 A1 27 9E 51 F7 42 B5 42 0E 64 16 DC DE A0 90 7F 64 A1 7F 5F" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "B1 81 FB 64" = 0x64FB81B1 >>> Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) >>> Message Data = "10 8A C1 65" >>> Crypto Hash = "27 5F 9B 97 E4 0D 3B FB 1E CA CC C4 A1 27 9E 51 F7 42 B5 42 0E 64 16 DC DE A0 90 7F 64 A1 7F 5F"
[2019-03-15T14:28:18.136Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-15T14:28:18.136Z]debug:   <<< <<< <<< "45 54 4E 53 B1 81 FB 64 00 80 00 E5 74 BE 5C 0F 3C 27 5C 3D 2C 19 4E 5C 6B C3 F7 C5 4F CF 92 EF D1 ED 94 A7 E5 EB 54 CC 3E D7 27" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "B1 81 FB 64" = 0x64FB81B1 <<< Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) <<< Message Data = "00" <<< Crypto Hash = "E5 74 BE 5C 0F 3C 27 5C 3D 2C 19 4E 5C 6B C3 F7 C5 4F CF 92 EF D1 ED 94 A7 E5 EB 54 CC 3E D7 27" 
[2019-03-15T14:28:18.136Z]verbose: <<< HANDLING SET_NEXT_SEQUENCE_NUMBER ( 43 bytes) in 36ms
[2019-03-15T14:28:18.136Z]debug:   { "ack": 0, "ackString": "Acknowledged", "nextSequenceNumber": 1707182608 }
[2019-03-15T14:28:18.136Z]verbose: Setting instance Sequence Number to 0x65C18A10 = 1707182608
[2019-03-15T14:28:18.137Z]verbose: ---------------------------------30000c2a690c7652 Initialized --------------------------- 
[2019-03-15T14:28:18.303Z]verbose: >>>> SENDING >>>>>>SET_NEXT_SEQUENCE_NUMBER ( 46 bytes) to 10.130.116.85:32866 [30000c2a6911283d]
[2019-03-15T14:28:18.303Z]debug:   >>> >>> >>> "45 54 4E 4D F8 24 8E C3 00 80 10 8A C1 65 5F 27 AE 93 F2 01 AD 04 36 10 24 BD 39 2F 09 85 D0 66 3E C7 29 3D F4 C3 78 FA 99 10 AA E2 2C 9E" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "F8 24 8E C3" = 0xC38E24F8 >>> Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) >>> Message Data = "10 8A C1 65" >>> Crypto Hash = "5F 27 AE 93 F2 01 AD 04 36 10 24 BD 39 2F 09 85 D0 66 3E C7 29 3D F4 C3 78 FA 99 10 AA E2 2C 9E"
[2019-03-15T14:28:18.352Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.85:32866 [30000c2a6911283d]
[2019-03-15T14:28:18.353Z]debug:   <<< <<< <<< "45 54 4E 53 F8 24 8E C3 00 80 00 3C 10 AF A0 58 68 4D A5 3D 69 BE EF B5 A4 84 78 C7 61 5B 5B B7 AB FA 67 FA B4 CE 06 38 CA 1E F2" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "F8 24 8E C3" = 0xC38E24F8 <<< Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) <<< Message Data = "00" <<< Crypto Hash = "3C 10 AF A0 58 68 4D A5 3D 69 BE EF B5 A4 84 78 C7 61 5B 5B B7 AB FA 67 FA B4 CE 06 38 CA 1E F2" 
[2019-03-15T14:28:18.353Z]verbose: <<< HANDLING SET_NEXT_SEQUENCE_NUMBER ( 43 bytes) in 50ms
[2019-03-15T14:28:18.353Z]debug:   { "ack": 0, "ackString": "Acknowledged", "nextSequenceNumber": 1707182608 }
[2019-03-15T14:28:18.353Z]verbose: Setting instance Sequence Number to 0x65C18A10 = 1707182608
[2019-03-15T14:28:18.353Z]verbose: ---------------------------------30000c2a6911283d Initialized --------------------------- 
[2019-03-15T14:28:18.507Z]verbose: >>>> SENDING >>>>>>SET_NEXT_SEQUENCE_NUMBER ( 46 bytes) to 10.130.116.84:32866 [30000c2a69112b6f]
[2019-03-15T14:28:18.507Z]debug:   >>> >>> >>> "45 54 4E 4D 8B BD 1F 0E 00 80 10 8A C1 65 D6 00 39 C2 AA 2E F3 0A A5 B2 C5 41 07 EF 08 A5 68 7E F1 17 D1 CF 9B F0 28 4B 59 41 45 E0 2C 17" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "8B BD 1F 0E" = 0xE1FBD8B >>> Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) >>> Message Data = "10 8A C1 65" >>> Crypto Hash = "D6 00 39 C2 AA 2E F3 0A A5 B2 C5 41 07 EF 08 A5 68 7E F1 17 D1 CF 9B F0 28 4B 59 41 45 E0 2C 17"
[2019-03-15T14:28:18.515Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.84:32866 [30000c2a69112b6f]
[2019-03-15T14:28:18.515Z]debug:   <<< <<< <<< "45 54 4E 53 8B BD 1F 0E 00 80 00 07 5A 82 AA 2A 50 28 1D A6 D2 70 FB 0A DF 38 75 30 1F 4C EF 2A 10 DD BC 98 7D B0 D9 C6 68 C4 C7" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "8B BD 1F 0E" = 0xE1FBD8B <<< Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) <<< Message Data = "00" <<< Crypto Hash = "07 5A 82 AA 2A 50 28 1D A6 D2 70 FB 0A DF 38 75 30 1F 4C EF 2A 10 DD BC 98 7D B0 D9 C6 68 C4 C7" 
[2019-03-15T14:28:18.516Z]verbose: <<< HANDLING SET_NEXT_SEQUENCE_NUMBER ( 43 bytes) in 8ms
[2019-03-15T14:28:18.516Z]debug:   { "ack": 0, "ackString": "Acknowledged", "nextSequenceNumber": 1707182608 }
[2019-03-15T14:28:18.516Z]verbose: Setting instance Sequence Number to 0x65C18A10 = 1707182608
[2019-03-15T14:28:18.516Z]verbose: ---------------------------------30000c2a69112b6f Initialized --------------------------- 
[2019-03-15T14:28:18.711Z]verbose: >>>> SENDING >>>>>>SET_NEXT_SEQUENCE_NUMBER ( 46 bytes) to 10.130.116.28:32866 [30000c2a69113173]
[2019-03-15T14:28:18.711Z]debug:   >>> >>> >>> "45 54 4E 4D C2 51 3B 09 00 80 10 8A C1 65 B4 CE D6 5B DE 7C 7A 7A 58 93 49 D6 60 68 F2 E3 B7 84 76 82 CA 2C DF 2A 04 54 EB B4 19 DB 96 DA" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "C2 51 3B 09" = 0x93B51C2 >>> Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) >>> Message Data = "10 8A C1 65" >>> Crypto Hash = "B4 CE D6 5B DE 7C 7A 7A 58 93 49 D6 60 68 F2 E3 B7 84 76 82 CA 2C DF 2A 04 54 EB B4 19 DB 96 DA"
[2019-03-15T14:28:18.761Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.28:32866 [30000c2a69113173]
[2019-03-15T14:28:18.762Z]debug:   <<< <<< <<< "45 54 4E 53 C2 51 3B 09 00 80 00 14 E3 A7 CF 40 74 13 6B 77 CE C0 72 56 4F 15 79 9B 01 7C AA D2 45 C6 56 0F 82 88 39 37 71 BD 27" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "C2 51 3B 09" = 0x93B51C2 <<< Message Code = "00 80" = SET_NEXT_SEQUENCE_NUMBER (0x8000) <<< Message Data = "00" <<< Crypto Hash = "14 E3 A7 CF 40 74 13 6B 77 CE C0 72 56 4F 15 79 9B 01 7C AA D2 45 C6 56 0F 82 88 39 37 71 BD 27" 
[2019-03-15T14:28:18.762Z]verbose: <<< HANDLING SET_NEXT_SEQUENCE_NUMBER ( 43 bytes) in 51ms
[2019-03-15T14:28:18.762Z]debug:   { "ack": 0, "ackString": "Acknowledged", "nextSequenceNumber": 1707182608 }
[2019-03-15T14:28:18.762Z]verbose: Setting instance Sequence Number to 0x65C18A10 = 1707182608
[2019-03-15T14:28:18.762Z]verbose: ---------------------------------30000c2a69113173 Initialized --------------------------- 
Example: Set Breaker Remote Handle Position

This example utilizes the Set Breaker Remote Handle Position message as a broadcast message and receives a response from four devices on the network.

Message Reference: Set Breaker Remote Handle Position.

[2019-03-15T14:28:19.520Z]verbose: >>>> SENDING SET_BREAKER_REMOTE_HANDLE_POSITION ( 43 bytes) to 10.130.116.255:32866 (BROADCAST)
[2019-03-15T14:28:19.520Z]debug:   >>> >>> >>> "45 54 4E 4D 10 8A C1 65 00 81 00 4A 08 FE B7 D7 5E AD 91 CC E5 A4 B8 1D BE D7 CE BF F7 96 48 BD 11 BD 09 89 87 7E CF FC 55 FF F3" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "10 8A C1 65" = 0x65C18A10 >>> Message Code = "00 81" = SET_BREAKER_REMOTE_HANDLE_POSITION (0x8100) >>> Message Data = "00" >>> Crypto Hash = "4A 08 FE B7 D7 5E AD 91 CC E5 A4 B8 1D BE D7 CE BF F7 96 48 BD 11 BD 09 89 87 7E CF FC 55 FF F3"
[2019-03-15T14:28:19.540Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 44 bytes) from 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-15T14:28:19.540Z]debug:   <<< <<< <<< "45 54 4E 53 10 8A C1 65 00 81 00 00 8A 07 C9 E4 41 C5 C1 17 D9 82 D9 81 CE 65 56 59 5B 1A 4C 26 FB 49 DF E8 4F D6 FB 93 E9 A7 55 0F" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "10 8A C1 65" = 0x65C18A10 <<< Message Code = "00 81" = SET_BREAKER_REMOTE_HANDLE_POSITION (0x8100) <<< Message Data = "00 00" <<< Crypto Hash = "8A 07 C9 E4 41 C5 C1 17 D9 82 D9 81 CE 65 56 59 5B 1A 4C 26 FB 49 DF E8 4F D6 FB 93 E9 A7 55 0F"
[2019-03-15T14:28:19.541Z]verbose: <<< HANDLING SET_BREAKER_REMOTE_HANDLE_POSITION ( 44 bytes) in 21ms
[2019-03-15T14:28:19.541Z]debug:   { "ack": 0, "state": 0, "stateString": "Open" }
[2019-03-15T14:28:19.642Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 44 bytes) from 10.130.116.85:32866 [30000c2a6911283d]
[2019-03-15T14:28:19.642Z]debug:   <<< <<< <<< "45 54 4E 53 10 8A C1 65 00 81 00 00 8A 07 C9 E4 41 C5 C1 17 D9 82 D9 81 CE 65 56 59 5B 1A 4C 26 FB 49 DF E8 4F D6 FB 93 E9 A7 55 0F" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "10 8A C1 65" = 0x65C18A10 <<< Message Code = "00 81" = SET_BREAKER_REMOTE_HANDLE_POSITION (0x8100) <<< Message Data = "00 00" <<< Crypto Hash = "8A 07 C9 E4 41 C5 C1 17 D9 82 D9 81 CE 65 56 59 5B 1A 4C 26 FB 49 DF E8 4F D6 FB 93 E9 A7 55 0F"
[2019-03-15T14:28:19.643Z]verbose: <<< HANDLING SET_BREAKER_REMOTE_HANDLE_POSITION ( 44 bytes) in 123ms
[2019-03-15T14:28:19.643Z]debug:   { "ack": 0, "state": 0, "stateString": "Open" }
[2019-03-15T14:28:19.662Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 44 bytes) from 10.130.116.84:32866 [30000c2a69112b6f]
[2019-03-15T14:28:19.663Z]debug:   <<< <<< <<< "45 54 4E 53 10 8A C1 65 00 81 00 00 8A 07 C9 E4 41 C5 C1 17 D9 82 D9 81 CE 65 56 59 5B 1A 4C 26 FB 49 DF E8 4F D6 FB 93 E9 A7 55 0F" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "10 8A C1 65" = 0x65C18A10 <<< Message Code = "00 81" = SET_BREAKER_REMOTE_HANDLE_POSITION (0x8100) <<< Message Data = "00 00" <<< Crypto Hash = "8A 07 C9 E4 41 C5 C1 17 D9 82 D9 81 CE 65 56 59 5B 1A 4C 26 FB 49 DF E8 4F D6 FB 93 E9 A7 55 0F"
[2019-03-15T14:28:19.663Z]verbose: <<< HANDLING SET_BREAKER_REMOTE_HANDLE_POSITION ( 44 bytes) in 143ms
[2019-03-15T14:28:19.663Z]debug:   { "ack": 0, "state": 0, "stateString": "Open" }
[2019-03-15T14:28:19.690Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 44 bytes) from 10.130.116.28:32866 [30000c2a69113173]
[2019-03-15T14:28:19.741Z]info:    Toggled all breakers successfully!
[2019-03-15T14:28:19.908Z]info:    { responses: { '10.130.116.50': { ack: 0, state: 0, stateString: 'Open' }, '10.130.116.85': { ack: 0, state: 0, stateString: 'Open' }, '10.130.116.84': { ack: 0, state: 0, stateString: 'Open' }, '10.130.116.28': { ack: 0, state: 0, stateString: 'Open' } } }
Example: Set Bargraph LED to User Defined Color

This example utilizes the Set Next Expected UDP Sequence Number message as a unicast message to a single device message and receives a single response.

Message Reference: Set Bargraph LED to User Defined Color.

[2019-03-21T18:02:36.254Z]debug:   Setting Bargraph LED to red for 10 seconds with Blinking = true
[2019-03-21T18:02:36.457Z]verbose: >>>> SENDING SET_BARGRAPH_LED_TO_USER_DEFINED ( 67 bytes) to 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-21T18:02:36.457Z]debug:   >>> >>> >>> "45 54 4E 4D 1B C0 05 0D 00 83 01 0A 00 00 00 FF 00 00 01 FF 00 00 01 FF 00 00 01 FF 00 00 01 FF 00 00 01 69 4D E4 5C 36 0A D5 1B 2C C5 21 7A 99 55 EB 86 14 64 C3 9B D3 21 6A 3F 86 76 D6 83 8C 0E 9E F5" >>> Start = "45 54 4E 4D" = "ETNM" >>> Sequence # = "1B C0 05 0D" = 0xD05C01B >>> Message Code = "00 83" = SET_BARGRAPH_LED_TO_USER_DEFINED (0x8300) >>> Message Data = "01 0A 00 00 00 FF 00 00 01 FF 00 00 01 FF 00 00 01 FF 00 00 01 FF 00 00 01" >>> Crypto Hash = "69 4D E4 5C 36 0A D5 1B 2C C5 21 7A 99 55 EB 86 14 64 C3 9B D3 21 6A 3F 86 76 D6 83 8C 0E 9E F5"
[2019-03-21T18:02:36.495Z]debug:   <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 10.130.116.50:32866 [30000c2a690c7652]
[2019-03-21T18:02:36.495Z]debug:   <<< <<< <<< "45 54 4E 53 1B C0 05 0D 00 83 00 89 8C 1C 30 F2 34 AA D9 8F 7F D8 AD 5D 2D 38 72 17 6D 02 06 EF 11 B8 5A 85 6C 7D 8A D3 1C EA E7" <<< Start = "45 54 4E 53" = "ETNS" <<< Sequence # = "1B C0 05 0D" = 0xD05C01B <<< Message Code = "00 83" = SET_BARGRAPH_LED_TO_USER_DEFINED (0x8300) <<< Message Data = "00" <<< Crypto Hash = "89 8C 1C 30 F2 34 AA D9 8F 7F D8 AD 5D 2D 38 72 17 6D 02 06 EF 11 B8 5A 85 6C 7D 8A D3 1C EA E7" 
[2019-03-21T18:02:36.495Z]verbose: <<< HANDLING SET_BARGRAPH_LED_TO_USER_DEFINED ( 43 bytes) in 38ms
[2019-03-21T18:02:36.495Z]debug:   { "ack": 0 }

Individual Command Examples - EV-EMCB

The following commands contain unicast messages with a single response to an individual EV-EMCB device with its own Sequence Number. Each of these commands would also work as broadcast messages, assuming the correct signing UDP Key was used.

Smart Breaker Node IP Address Serial Number UDP Unicast Key Log Color
192.168.50.187 30000c2a691f6c4e 9F28F6BFAEF0350A0828BC43CDA5511ED7BDE91AB7AE1EF0D230BFC60CCBAD9F blue
Example: Set EVSE Settings Configuration and Mode

This example utilizes the Set EVSE Settings Configuration and Mode message as a unicast message and receives a response from the device.

Message Reference: Set EVSE Settings Configuration and Mode.


[+   0.780ms]verbose: >>>> SENDING EMCB_UDP_MESSAGE_CODE_SET_EVSE_CONFIG_SETTINGS ( 50 bytes)  to  192.168.50.187:32866 [30000c2a691f6c4e]
[+   0.288ms]debug: >>> >>> >>>
"45 54 4E 4D BB 52 40 0A 00 93 04 02 01 10 E8 03 00 00 B4 49 DF 56 04 19 2F 92 7D 85 D2 E8 20 AC 3B 31 EE B7 49 98 A2 40 4B 08 13 7D 3A 70 0C 26 32 27"
    >>> Start        = "45 54 4E 4D"    = "ETNM"
    >>> Sequence #   = "BB 52 40 0A"    = 0xA4052BB
    >>> Message Code = "00 93"          = EMCB_UDP_MESSAGE_CODE_SET_EVSE_CONFIG_SETTINGS (0x9300)
    >>> Message Data = "04 02 01 10 E8 03 00 00" (8 bytes)
    >>> Crypto Hash  = "B4 49 DF 56 04 19 2F 92 7D 85 D2 E8 20 AC 3B 31 EE B7 49 98 A2 40 4B 08 13 7D 3A 70 0C 26 32 27"

[+ 364.048ms]debug: <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 43 bytes) from 192.168.50.187:32866 [30000c2a691f6c4e] 
[+   0.478ms]debug: <<< <<< <<<
"45 54 4E 53 BB 52 40 0A 00 93 00 D3 86 68 88 40 BE 76 9B 3B 04 1D 49 B5 63 E5 00 CB BB 7F C3 7E 14 DB 25 39 7F 28 AA 30 10 08 30"
    <<< Start        = "45 54 4E 53"    = "ETNS"
    <<< Sequence #   = "BB 52 40 0A"    = 0xA4052BB
    <<< Message Code = "00 93"          = EMCB_UDP_MESSAGE_CODE_SET_EVSE_CONFIG_SETTINGS (0x9300)
    <<< Message Data = "00" (1 bytes)
    <<< Crypto Hash  = "D3 86 68 88 40 BE 76 9B 3B 04 1D 49 B5 63 E5 00 CB BB 7F C3 7E 14 DB 25 39 7F 28 AA 30 10 08 30"

[+   0.458ms]verbose: <<< HANDLING EMCB_UDP_MESSAGE_CODE_SET_EVSE_CONFIG_SETTINGS ( 43 bytes)  in  365ms
[+   0.237ms]debug: { ack: 0 }
[+   0.439ms]info: EVSE configuration settings and mode have been set!
[+   0.169ms]info: Response from 192.168.50.187:
[+   0.229ms]info: { ack: 0 }
Example: Get Currently Applied EVSE Control Settings

This example utilizes the Get Currently Applied EVSE Control Settings message as a unicast message and receives a response from the device.

Message Reference: Get Currently Applied EVSE Control Settings.


[+   0.857ms]verbose: >>>> SENDING EMCB_UDP_MESSAGE_CODE_GET_EVSE_APPLIED_CONTROL_SETTINGS ( 42 bytes)  to  192.168.50.187:32866 [30000c2a691f6c4e]
[+   0.336ms]debug: >>> >>> >>>
"45 54 4E 4D A2 99 28 0C 00 11 43 1E 61 59 B5 4E 64 09 75 7E 23 DC AE 24 D9 F1 EC 94 F1 10 E4 68 B1 5E 7C 02 C6 6A 3E DD FF DB"
    >>> Start        = "45 54 4E 4D"    = "ETNM"
    >>> Sequence #   = "A2 99 28 0C"    = 0xC2899A2
    >>> Message Code = "00 11"          = EMCB_UDP_MESSAGE_CODE_GET_EVSE_APPLIED_CONTROL_SETTINGS (0x1100)
    >>> Message Data = "" (0 bytes)
    >>> Crypto Hash  = "43 1E 61 59 B5 4E 64 09 75 7E 23 DC AE 24 D9 F1 EC 94 F1 10 E4 68 B1 5E 7C 02 C6 6A 3E DD FF DB"

[+  18.893ms]debug: <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 49 bytes) from 192.168.50.187:32866 [30000c2a691f6c4e] 
[+   0.296ms]debug: <<< <<< <<<
"45 54 4E 53 A2 99 28 0C 00 11 01 01 10 E8 03 00 00 F4 43 A6 4A FD 3B 83 D7 DC 3B 83 64 97 AC 07 3C C4 03 67 D5 A0 27 06 65 53 AE 29 A7 44 E8 AF CD"
    <<< Start        = "45 54 4E 53"    = "ETNS"
    <<< Sequence #   = "A2 99 28 0C"    = 0xC2899A2
    <<< Message Code = "00 11"          = EMCB_UDP_MESSAGE_CODE_GET_EVSE_APPLIED_CONTROL_SETTINGS (0x1100)
    <<< Message Data = "01 01 10 E8 03 00 00" (7 bytes)
    <<< Crypto Hash  = "F4 43 A6 4A FD 3B 83 D7 DC 3B 83 64 97 AC 07 3C C4 03 67 D5 A0 27 06 65 53 AE 29 A7 44 E8 AF CD"

[+   0.430ms]verbose: <<< HANDLING EMCB_UDP_MESSAGE_CODE_GET_EVSE_APPLIED_CONTROL_SETTINGS ( 49 bytes)  in  19ms
[+   0.225ms]debug: { enabled: 1, authorized: 1, maxCurrentAmps: 16, maxEnergyWatts: 1000 }
[+   0.393ms]info: Got EVSE currently applied control settings:
[+   0.157ms]info: Response from 192.168.50.187:
[+   0.348ms]info: {
  enabled: true,
  authorized: true,
  maxCurrentAmps: 16,
  maxEnergyWatts: 1000
}
Example: Get Device EVSE State

This example utilizes the Get Device EVSE State message as a unicast message and receives a response from the device.

Message Reference: Get Device EVSE State.


+   0.666ms]verbose: >>>> SENDING EMCB_UDP_MESSAGE_CODE_GET_EVSE_DEVICE_STATE ( 42 bytes)  to  192.168.50.187:32866 [30000c2a691f6c4e]
[+   0.238ms]debug: >>> >>> >>>
"45 54 4E 4D 08 82 32 10 00 12 AC D8 74 43 29 88 74 AB 84 14 06 C1 5F 06 49 E4 04 E7 74 93 10 0C 1B 50 30 5E 41 EC 9A 8E C5 33"
    >>> Start        = "45 54 4E 4D"    = "ETNM"
    >>> Sequence #   = "08 82 32 10"    = 0x10328208
    >>> Message Code = "00 12"          = EMCB_UDP_MESSAGE_CODE_GET_EVSE_DEVICE_STATE (0x1200)
    >>> Message Data = "" (0 bytes)
    >>> Crypto Hash  = "AC D8 74 43 29 88 74 AB 84 14 06 C1 5F 06 49 E4 04 E7 74 93 10 0C 1B 50 30 5E 41 EC 9A 8E C5 33"

[+  27.834ms]debug: <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 53 bytes) from 192.168.50.187:32866 [30000c2a691f6c4e] 
[+   0.271ms]debug: <<< <<< <<<
"45 54 4E 53 08 82 32 10 00 12 03 00 00 00 00 00 00 00 00 00 00 9F 40 0E 3D A3 9B 0E 94 CE 46 51 C9 D0 45 71 5A E8 BC BC E6 93 4C 75 60 C2 B5 33 BD ED 89 4A 93"
    <<< Start        = "45 54 4E 53"    = "ETNS"
    <<< Sequence #   = "08 82 32 10"    = 0x10328208
    <<< Message Code = "00 12"          = EMCB_UDP_MESSAGE_CODE_GET_EVSE_DEVICE_STATE (0x1200)
    <<< Message Data = "03 00 00 00 00 00 00 00 00 00 00" (11 bytes)
    <<< Crypto Hash  = "9F 40 0E 3D A3 9B 0E 94 CE 46 51 C9 D0 45 71 5A E8 BC BC E6 93 4C 75 60 C2 B5 33 BD ED 89 4A 93"

[+   0.331ms]verbose: <<< HANDLING EMCB_UDP_MESSAGE_CODE_GET_EVSE_DEVICE_STATE ( 53 bytes)  in  28ms
[+   0.548ms]debug: {
  state: 3,
  permanentError: 0,
  errorCode: 0,
  errorData: [ 0, 0, 0, 0 ],
  raw: <Buffer 03 00 00 00 00 00 00 00 00 00 00>
}
[+   0.450ms]info: Got EVSE state:
[+   0.141ms]info: Response from 192.168.50.187:
[+   0.338ms]info: {
  state: 'C: charging',
  permanentError: false,
  errorData: [ 0, 0, 0, 0 ],
  error: 'NO_ERROR'
}
Example: Get EVSE Settings Configuration and Mode

This example utilizes the Get EVSE Settings Configuration and Mode message as a unicast message and receives a response from the device.

Message Reference: Get EVSE Settings Configuration and Mode.


[+   0.682ms]verbose: >>>> SENDING EMCB_UDP_MESSAGE_CODE_GET_EVSE_CONFIG_SETTINGS ( 42 bytes)  to  192.168.50.187:32866 [30000c2a691f6c4e]
[+   0.245ms]debug: >>> >>> >>>
"45 54 4E 4D B7 52 40 0A 00 13 31 EF C9 88 F7 C5 DA 02 87 4C E6 64 15 02 45 D3 B2 7D 27 0B 0C 12 BE 8E DE 63 CC C9 F1 A2 00 57"
    >>> Start        = "45 54 4E 4D"    = "ETNM"
    >>> Sequence #   = "B7 52 40 0A"    = 0xA4052B7
    >>> Message Code = "00 13"          = EMCB_UDP_MESSAGE_CODE_GET_EVSE_CONFIG_SETTINGS (0x1300)
    >>> Message Data = "" (0 bytes)
    >>> Crypto Hash  = "31 EF C9 88 F7 C5 DA 02 87 4C E6 64 15 02 45 D3 B2 7D 27 0B 0C 12 BE 8E DE 63 CC C9 F1 A2 00 57"

[+  57.149ms]debug: <<< RECEIVED <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ( 50 bytes) from 192.168.50.187:32866 [30000c2a691f6c4e] 
[+   0.440ms]debug: <<< <<< <<<
"45 54 4E 53 B7 52 40 0A 00 13 04 02 01 10 E8 03 00 00 3F 03 01 5C 21 82 D2 EB 72 36 3E CD 47 8D D3 58 E1 01 90 53 46 48 0A 76 73 36 87 91 62 5D 73 CA"
    <<< Start        = "45 54 4E 53"    = "ETNS"
    <<< Sequence #   = "B7 52 40 0A"    = 0xA4052B7
    <<< Message Code = "00 13"          = EMCB_UDP_MESSAGE_CODE_GET_EVSE_CONFIG_SETTINGS (0x1300)
    <<< Message Data = "04 02 01 10 E8 03 00 00" (8 bytes)
    <<< Crypto Hash  = "3F 03 01 5C 21 82 D2 EB 72 36 3E CD 47 8D D3 58 E1 01 90 53 46 48 0A 76 73 36 87 91 62 5D 73 CA"

[+   0.686ms]verbose: <<< HANDLING EMCB_UDP_MESSAGE_CODE_GET_EVSE_CONFIG_SETTINGS ( 50 bytes)  in  58ms
[+   0.651ms]debug: {
  mode: 4,
  offlineMode: 2,
  apiConfiguration: { enabled: 1, maxCurrentAmps: 16, maxEnergyWatts: 1000 },
  raw: 
}
[+   0.536ms]info: Got EVSE config!
[+   0.173ms]info: Response from 192.168.50.187:
[+   0.343ms]info: {
  mode: 'cloud-api',
  offlineMode: 'no-change',
  apiConfiguration: { enabled: true, maxCurrentAmps: 16, maxEnergyWatts: 1000 }
}

Release Status

The current implementation of SBLCP is currently in Beta release, and is therefore subject to breaking changes. However, the protocol has been reviewed and tested by Eaton's Cybersecurity Center of Excellence, and should be considered suitable and secure for production applications.

An SDK written in Node.JS is available for lab use and also serves as an example of leveraging this protocol using established best practices. The examples in the Examples section contain log output generated by the Node.JS SDK.

NOTE: The Node.JS SDK, while a useful example of leveraging the protocol and utilizing best practices for common workflows, should be considered in an Alpha state and not suitable for production applications. However, the SDK is open-source and contributions to enhance the state of the SDK are encouraged!

Known Limitations

IP Address ranges

To ensure that security is not compromised, Smart Breaker Nodes are limited to make connections to local/private IPv4 addresses only. In other words, Smart Breaker Nodes will only respond to local/private IP’s in the following ranges:

Range Start Range End
192.168.0.0 192.168.255.255
10.0.0.0 10.255.255.255
172.16.0.0 172.31.255.255