4.2.4. Multi Command Command Class, version 1

The Multi Command Command Class is used to bundle multiple commands in one encapsulation Command. This command class may be used to limit the number of transmissions and to extend battery lifetime.

4.2.4.1. Interoperability considerations

The “Answer-as-asked” requirement for Multi Command Encapsulation commands carrying Get type commands has been OBSOLETED.

This allows for a simple parser design in end devices, enables battery power savings and supports the deployment of gateways with a part of the application logic placed in the cloud.

Refer to section Section 4.2.4.2 for updated requirements text.

\requirement{CC:008F.01.00.31.001}{4}

Older implementations may expect Get type commands to be answered with the same encapsulation. However, responding nodes MUST NOT return answers with the same encapsulation if the destination does not advertise the Multi Command Command Class as supported.

\requirement{CC:008F.01.00.32.001}{0}

Supporting nodes SHOULD NOT return an answer Multi Command encapsulated if returning a single command and SHOULD NOT return individually Multi Command encapsulated response commands.

4.2.4.2. Compatibility considerations

4.2.4.2.1. Multi Command Support

\requirement{CC:008F.01.00.21.001}{0}

A node supporting this Command Class MUST be able to receive Multi Command Encapsulated commands.

\requirement{CC:008F.01.00.21.002}{0}

A supporting node MUST support the Multi Command Encapsulation of all command classes advertised as supported (for the received Security Class) except for command classes that are encapsulated outside Multi Command. Refer to the encapsulation order defined in section Section 4.1.3.5.

\requirement{CC:008F.01.00.21.003}{0}

A supporting node MUST respond to an encapsulated command requiring an answer to be returned, e.g. a Get type Command.

\requirement{CC:008F.01.00.21.004}{0}

A responding node MUST NOT return Multi Command encapsulated commands in response to encapsulated requests if the sender does not support the Multi Command Command Class.

4.2.4.2.2. Multi Command Control

A node controls the Multi Command Command Class if it sends Multi Command Encapsulated commands to supporting nodes.

\requirement{CC:008F.01.00.23.001}{0}

It means that a node MAY issue unsolicited Multi Command Encapsulated commands without advertising support for the Multi Command Command Class.

\requirement{CC:008F.01.00.51.001}{0}

A controlling node MUST verify that the destination supports Multi Command in its NIF before using Multi Command Encapsulation or be explicitly enabled by another controller node to use Multi Command encapsulation.

4.2.4.2.3. Node Information Frame (NIF)

\requirement{CC:008F.01.00.21.005}{0}

A supporting node MUST always advertise the Multi Command Command Class in its NIF, regardless of the security bootstrapping outcome.

This allows other nodes bootstrapped on any security level to know that they can use the Multi Command encapsulation with the supporting node.

4.2.4.3. Multi Command Encapsulated Command

The Multi Command Encapsulated Command used to contain multiple Commands.

\requirement{CC:008F.01.01.11.001}{0}

The encapsulated Commands MUST be executed in the order they are received. In case Get type Commands in a Multi Command Encapsulated Command are received by a device, the Report type Commands MUST be returned in the same order as the Get type Commands were received.

7

6

5

4

3

2

1

0

Command Class = COMMAND_CLASS_MULTI_CMD (0x8F)

Command = MULTI_CMD_ENCAP (0x01)

Number of Commands

Command Length 1

Command Class 1 (1 or 2 bytes)

Command 1

Data 1,1

Data 1,N

Command Length X

Command Class X (1 or 2 bytes)

Command X

Data X,1

Data X,N

Number of Commands (8 bits)

\requirement{CC:008F.01.01.11.002}{0}

This field MUST specify the number of encapsulated commands.

\requirement{CC:008F.01.01.12.001}{0}

This field SHOULD be set to a value greater than 1.

\requirement{CC:008F.01.01.11.003}{0}

Each block carrying an encapsulated command MUST comprise the following fields:

  • Command length

  • Command Class

  • Command

  • Data

\requirement{CC:008F.01.01.11.004}{0}

A supporting node MUST accept and execute all encapsulated commands contained in this command.

A supporting node MUST NOT discard any encapsulated command based on the number of commands encapsulated in the command.

Command Length (8 bits)

\requirement{CC:008F.01.01.11.005}{0}

This field MUST specify the number of bytes occupied by the Command Class, Command and the Data fields in the actual command block.

Command Class (8 bits or 16 bits)

\requirement{CC:008F.01.01.11.006}{0}

This field MUST specify the Command Class identifier of the encapsulated command. This field MUST carry a normal Command Class (8 bits) or an Extended Command Class (16 bits).

Command (8 bits)

\requirement{CC:008F.01.01.11.007}{0}

This field MUST specify the Command identifier of the encapsulated Command.

Data (N bytes)

\requirement{CC:008F.01.01.11.008}{0}

This field MUST carry the payload of the encapsulated command.