...
Code Block |
---|
|
GatewayClient gw = new GatewayClient(new ConnectionInfo(ConnectionType.ZIGBEE_UART, "/dev/ttyUSB0"));
...
final Device d = gw.getDevice(id);
d.leaveNetwork(); |
sendProtocolMessage(String json)
Usage
Send a protocol-specific message to the Device using the underlying device protocol.
Parameters
Name | Type | Description |
---|
json | String | A JSON string formatted according the the protocol message specification (see below) |
Protocol Message Specification
Code Block |
---|
language | text |
---|
title | zcl unicast protocol message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"zcl_unicast",
"message":
{
"nodeId":"0x1234",
"endpointId":"0x01",
"localEndpoint":"0x01", // optional, will default to 0x01
"clusterId":"0x0006",
"responseOptions":"0x02", // optional, will default to no response
"encryption":"0x01", // optional, will default to network encryption
"frameControl":"0x00", // optional, will default to ZCL General Command, Client-to-Server
"manufacturerCode":"0x00", // optional, will only be read if frameControl requires it
"transactionNum":"0x00", // optional, will only be read if responseOptions requires it
"commandId":"0x00",
"payload":"0x0001030405" // optional, can omit if there's no payload. Otherwise, expect byte(s) in adherence to the zigbee spec
}
} |
Code Block |
---|
language | text |
---|
title | zcl multicast protocol message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"zcl_multicast",
"message":
{
"groupId":"0x0001",
"localEndpoint":"0x01", // optional, will default to 0x01
"clusterId":"0x0006",
"radius":"0x00" // optional, will default to 0x00 (max radius)
"nonMemberRadius":"0x07", // optional, will default to 0x07 (infinite non-member-radius)
"responseOptions":"0x02", // optional, will default to no response
"frameControl":"0x00", // optional, will default to ZCL General Command, Client-to-Server
"manufacturerCode":"0x00", // optional, will only be read if frameControl requires it
"transactionNum":"0x00", // optional, will only be read if responseOptions requires it
"commandId":"0x00",
"payload":"0x0001030405" // optional, can omit if there's no payload. Otherwise, expect byte(s) in adherence to the zigbee spec
}
} |
Code Block |
---|
language | text |
---|
title | zcl broadcast protocol message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"zcl_broadcast",
"message":
{
"broadcastAddress":"0xFD",
"endpoint":"0x01",
"localEndpoint":"0x01", // optional, will default to 0x01
"clusterId":"0x0006",
"radius":"0x00" // optional, will default to 0x00 (max radius)
"responseOptions":"0x02", // optional, will default to no response
"frameControl":"0x00", // optional, will default to ZCL General Command, Client-to-Server
"manufacturerCode":"0x00", // optional, will only be read if frameControl requires it
"transactionNum":"0x00", // optional, will only be read if responseOptions requires it
"commandId":"0x00",
"payload":"0x0001030405" // optional, can omit if there's no payload. Otherwise, expect byte(s) in adherence to the zigbee spec
}
} |
Code Block |
---|
language | text |
---|
title | zdo unicast protocol message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"zdo_unicast",
"message":
{
"nodeId":"0x1234",
"responseOptions":"0x02", // optional, will default to no response
"transactionNum":"0x00", // optional, will only be read if responseOptions requires it
"commandId":"0x0001",
"payload":"0x0001030405" // optional, can omit if there's no payload. Otherwise, expect byte(s) in adherence to the zigbee spec
}
} |
Code Block |
---|
language | text |
---|
title | zdo broadcast protocol message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"zdo_broadcast",
"message":
{
"broadcastAddress":"0xFD",
"radius":"0x00" // optional, will default to 0x00 (max radius)
"responseOptions":"0x02", // optional, will default to no response
"transactionNum":"0x00", // optional, will only be read if responseOptions requires it
"commandId":"0x0001",
"payload":"0x0001030405" // optional, can omit if there's no payload. Otherwise, expect byte(s) in adherence to the zigbee spec
}
} |
Returns
Return Type | Description |
---|
CompletableFuture<String> | A JSON string formatted according to the protocol message response specification (see below) |
Protocol Message Response Specification
Code Block |
---|
language | text |
---|
title | zcl response or zcl passthrough message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"zcl_response", // other valid value is zcl_passthrough_message
"message":
{
"sourceNode":"0xCB13",
"sourceEndpoint":"0x01",
"localEndpoint":"0x01",
"clusterId":"0x0006",
"encryption":"0x00",
"frameControl":"0x02",
"manufacturerCode":"0x0000",
"transactionNum":"0x7C",
"commandId":"0x01",
"payload":"0x01436300"
}
}
|
Code Block |
---|
language | text |
---|
title | zdo response protocol message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"zdo_response",
"message":
{
"sourceNode":"0xCB13",
"transactionNum":"0x7C",
"commandId":"0x0001",
"payload":"0x01436300"
}
} |
Code Block |
---|
language | text |
---|
title | default response protocol message |
---|
|
{
"gatewayApiVersion":"2.0.4",
"protocolName":"zigbee",
"protocolVersion":"3",
"messageType":"default_response",
"status":"0x00" // 0x00 is always success; anything else may refer to a general or specific failure
} |
Examples
Code Block |
---|
|
GatewayClient gw = new GatewayClient(new ConnectionInfo(ConnectionType.ZIGBEE_UART, "/dev/ttyUSB0"));
...
// This is an example of using the Protocol Passthrough API, with a zigbee message formed as a json string.
// The zigbee message we're forming is a Zone Enroll Response Command (see ZCL Spec Section 8.2.2.3.1)
Device device = gw.getDevice(id);
Optional<Property> protocolProperty = device.getCachedProperty(PropertyNames.PROTOCOL_PROPERTY_NAME);
if (protocolProperty.isPresent()) {
Property p = protocolProperty.get();
JsonObject jsonObject = jsonParser.parse(p.getValue()).getAsJsonObject();
ZCLUnicastMessageBuilder builder = new ZCLUnicastMessageBuilder();
builder.setGatewayAPIVersion(GatewayClient.getApiVersion());
builder.setProtocolName("zigbee");
builder.setProtocolVersion(3);
builder.setNodeID(jsonObject.get(ZigBeeMessageTypeAdapter.NODE_ID_KEY).getAsString());
builder.setEndpointID(jsonObject.get(ZigBeeMessageTypeAdapter.ENDPOINT_ID_KEY).getAsString());
builder.setClusterID(IAS_ZONE_CLUSTER_ID);
builder.setResponseOptions(ZigBee.FrameConstants.RESPONSE_OPTIONS_APS_RESPONSE.toBitmap8());
builder.setFrameControl(ZigBee.FrameConstants.FRAME_CONTROL_CLIENT_TO_SERVER_CLUSTER_CMD.toBitmap8());
builder.setCommandID(ZONE_ENROLL_RESPONSE_ID);
// Zone Enroll Response:
// Field 1: 00 - enroll success
// Field 2: 01 - zone id
// therefore, final payload is: 0x0001
builder.setPayload("0x0001");
ZCLUnicastMessage message = builder.build();
device.sendProtocolMessage(message.toJson())
.thenAccept(jsonResponse -> System.out.println(jsonResponse));
}
|