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:
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.
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.
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.
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 |
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.
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 type identifier that determines the command type and schema of the message.
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.
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.
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 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.
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:
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.
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 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.
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 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. |
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.
Command Contents (0 bytes): no message data.
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. |
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.
Command Contents (0 bytes): no message data.
Response Contents (1 byte):
Parameter | Type/Length | Description |
---|---|---|
Breaker State | u8 | The breaker’s remote handle position. Open = 0, Closed = 1. |
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.
Command Contents (0 bytes): no message 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 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.
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 Contents (1 byte):
Parameter | Type/Length | Description |
---|---|---|
Ack/Nack | u8 | Affirmative or negative acknowledgement of the command. Possible values described below. |
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. |
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.
Command Contents (1 byte):
Parameter | Type/Length | Description |
---|---|---|
Action | u8 | The desired state of the remotely-controllable contacts. Possible values are described below. |
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 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 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. |
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.
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 Contents (1 byte):
Parameter | Type/Length | Description |
---|---|---|
Ack/Nack | u8 | Affirmative or negative acknowledgement of the command. Possible values described below. |
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. |
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.
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 Contents (1 byte):
Parameter | Type/Length | Description |
---|---|---|
Ack/Nack | u8 | Affirmative or negative acknowledgement of the command. Possible values described below. |
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. |
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.
Command Contents (0 bytes): no message data.
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 |
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.
Command Contents (0 bytes): no message data.
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:
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. |
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.
Command Contents (0 bytes): no message data.
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 |
All of the examples below were generated from the Node.JS SDK.
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.
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.
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.
Periodically, it may also be desirable to control groups of EMCBs. This is demonstrated in the Set Breaker Remote Handle Position Example.
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:
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 |
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
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
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" }
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 }
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 ---------------------------
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' } } }
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 }
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 |
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 }
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
}
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'
}
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 }
}
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!
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 |