![ARM Mbed-OS logo](https://raw.githubusercontent.com/ARMmbed/mbed-os/master/logo.png)
# Matter Arm Mbed OS provisioning guide
- [Overview](#overview)
- [Prerequisites](#prerequisites)
- [CHIPTool for Android](#chiptool-for-android)
- [Building and installing](#building-and-installing)
- [Accessory Matter device setup](#accessory-matter-device-setup)
- [Device commissioning for Android](#device-commissioning-for-android)
- [Sending ZCL commands](#sending-zcl-commands-android)
- [POSIX CLI CHIPTool](#posix-cli-chiptool)
- [Building](#building)
- [Device commissioning for CLI](#device-commissioning-for-cli)
- [Sending ZCL commands](#sending-zcl-commands-posix)
- [Python Device Controller](#python-device-controller)
- [Building and installing](#building-and-installing-1)
- [Device commissioning for Python Device Controller](#device-commissioning-for-python-device-controller)
- [Sending ZCL commands](#sending-zcl-commands-python)
- [ZCL commands details](#zcl-commands-details)
## Overview
This document provides a step-by-step guide how to commission any Matter
application. For demonstration purposes the Lighting app is used.
The provisioning process is composed of the following stages:
- CHIPTool discovers a Matter accessory device over Bluetooth Low Energy
(BLE).
- CHIPTool establishes a secure channel to the device over BLE, and sends
network credentials data.
BLE is only used during first phase. Afterwards, only the IP connectivity
between the smartphone and the accessory device is needed to send messages.
## Prerequisites
To complete all the steps in the tutorial, you need:
- A smartphone with Android 8+ or PC with Ubuntu 20.04 and Bluetooth
connectivity
- A WiFi Access Point (smartphone router, standalone AP, wireless router or
PC)
- Any currently supported target device (for example, a Cypress PSoC6
CY8CPROTO-062-4343W board)
## CHIPTool for Android
### Building and installing
To make provisioning possible and to control the Matter device from your Android
based smartphone, you must first build and install the CHIPTool application.
To build the CHIPTool application for your smartphone, read
[Android building guide](../android/android_building.md).
After building, install the application by completing the following steps:
1. Install the Android Debug Bridge (adb) package by running the following
command:
```
$ sudo apt install android-tools-adb
```
2. Enable **USB debugging** on your smartphone. See the
[Configure on-device developer options](https://developer.android.com/studio/debug/dev-options)
guide on the Android Studio hub for detailed information.
3. If the **Install via USB** option is supported for your Android version,
turn it on.
4. Plug your smartphone into a USB port on your PC.
5. Run the following command to install the application, with _matter-dir_
replaced with the path to the Matter source directory:
$ adb install out/android-$TARGET_CPU-chip-tool/outputs/apk/debug/app-debug.apk
6. Navigate to settings on your smartphone and grant **Camera** and
**Location** permissions to CHIPTool.
Android CHIPTool is now ready to be used for commissioning.
### Accessory Matter device setup
To prepare the accessory Matter device for commissioning (called rendezvous),
complete the following steps:
- Open a serial terminal session to connect to the UART console of the
accessory device. You can use **mbed-tools** for this purpose
([mbed-tools](https://github.com/ARMmbed/mbed-tools)):
```
mbed-tools sterm -p /dev/ttyACM0 -b 115200 -e off
```
To start the rendezvous, CHIPTool must get the commissioning information from
the Matter device. The data payload is encoded within a QR code and is printed
to the UART console.
- Reset the device.
- Find a message similar to the following one in the application logs:
```
[INFO][CHIP]: [SVR]Copy/paste the below URL in a browser to see the QR Code:
[INFO][CHIP]: [SVR]https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AYNJV7VSC00CMVH7SR00
```
- Open URL from the console to display the QR in a web browser.
### Device commissioning for Android
To commission Matter device onto the network created complete the following
steps:
- Enable Bluetooth and Location services on your smartphone.
- Connect the smartphone to the WiFi Network
- Open the CHIPTool application on your smartphone.
- Tap the 'PROVISION CHIP DEVICE WITH WI-FI' button and scan the commissioning
QR code.
- Go through the the paring and connecting Bluetooth on your smartphone (you
will see a few pop-up messages appear as the commissioning progresses.
Finally, the network settings screen appears.
- In the network settings screen enter the Wi-Fi credentials and tap the Save
Network button to send a WiFi provisioning message to the accessory device.
- After successful completion of the process, the application returns to the
main screen.
### Sending ZCL commands Android
After the accessory device has been successfully commissioned to the network, it
is possible to communicate with it using IP. Matter uses Zigbee Cluster Library
(ZCL) protocol which defines common means for applications to communicate.
Communication with the device via ZCL commands is possible by using buttons of
the main screen.
For example, selecting the 'LIGHT ON/OFF & LEVEL CLUSTER' button opens the
screen which allows controlling the light dimming. Tap either the ON or the OFF
button to toggle between min and max brightness. Use the slider to modify the
brightness between 0-255.
If **Lighting LED** is available then brightness change can be observed.
> For more details about Android CHIPTool please visit
> [CHIPTool](../../../examples/android/CHIPTool/README.md)
## POSIX CLI CHIPTool
### Building
To make provisioning possible and to control the Matter device from Linux-based
device, you can build and run the Matter Client example application on it.
To build the POSIX CLI CHIPTool application check the guide
[POSIX CLI guide](../../../examples/chip-tool/README.md).
### Device commissioning for CLI
In order to send commands to a device, it must be paired with the client and
connected to the network.
To run the commissioning process via BLE, run the built executable and pass it
the node id to assign to the newly-commissioned node, network ssid and password,
discriminator and pairing code of the remote device.
Example:
$ chip-tool pairing ble-wifi node_id_to_assign network_ssid network_password 20202021 3840
### Sending ZCL commands POSIX
If the commissioning process was successful, it is possible to send a ZCL
command to the device which initiate a certain action.
To send a ZCL commands, run the executable and pass it the target cluster name,
the target command name as well as an endpoint id.
The endpoint id must be between 1 and 240.
For example:
$ chip-tool onoff on 1
The client will send a single command packet and then exit.
> For more details about POSIX CLI CHIPTool please visit
> [POSIX CLI CHIPTool](../../../examples/chip-tool/README.md)
## Python Device Controller
### Building and installing
To make provisioning possible and to control the Matter device with Python
application, you can build and run the Python CHIP controller.
To build and install the Python Device Controller application check the guide
[Python Device Controller guide](../../development_controllers/chip-repl/python_chip_controller_building.md).
### Device commissioning for Python Device Controller
In order to send commands to a device, it must be paired with the client and
connected to the network.
To run the auto commissioning process via BLE:
- Run Device Controller:
chip-device-ctrl
- Scan BLE devices:
chip-device-ctrl > ble-scan
- Pass the Wi-Fi credentials to the device:
chip-device-ctrl > set-pairing-wifi-credential ssid credentials
- Connect the device via BLE (provide the accessory device discriminator,
setup pin code and node ID):
chip-device-ctrl > connect -ble 3840 20202021 1234
### Sending ZCL commands Python
If the commissioning process was successful, it is possible to send a ZCL
command to the device which initiates a certain action.
`zcl [arguments]`
Example:
chip-device-ctrl > zcl LevelControl MoveWithOnOff 12344321 1 0 moveMode=1 rate=2
#### ZCL commands details
To get the list of supported clusters run:
chip-device-ctrl > zcl ?
To get the list of available commands in cluster run:
chip-device-ctrl > zcl ?
**Format of arguments**
For any integer and char string (null terminated) types, just use `key=value`,
for example: `rate=2`, `string=123`, `string_2="123 456"`
For byte string type, use `key=encoding:value`, currently, we support `str` and
`hex` encoding, the `str` encoding will encode a NULL terminated string. For
example, `networkId=hex:0123456789abcdef` (for
`[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]`), `ssid=str:Test` (for
`['T', 'e', 's', 't', 0x00]`).
For boolean type, use `key=True` or `key=False`