# Matter Python REPL

The Matter Python REPL is a native IPython shell environment loaded with a
Python-wrapped version of the C++ Matter stack to permit interacting as a
controller to other Matter-compliant devices.

You can interact with the REPL in a one of three ways:

1. Through an IPython shell built from source
2. Through a locally built 'REPL Playground', which is a Jupyter Lab environment
   that supports launching both a native IPython shell as well as Guide
   Notebooks.
3. Through a cloud-hosted REPL Playground that has pre-built versions of the
   REPL that can be interacted with through a browser.

This guide provides instructions on how to utilize its various features.

###

## Source files

You can find source files of the Python CHIP Controller tool in the
`src/controller/python` directory.

The tool uses the generic CHIP Device Controller library, available in the
`src/controller` directory.

## Building

Please follow the instructions
[here](./python_chip_controller_building.md#building-and-installing) to build
the Python virtual environment.

### Building for `arm64` e.g. for Raspberry Pi

Matter code relies on code generation for cluster-specific data types and
callbacks. A subset of code generation is done at compile time by `zap-cli`. ZAP
is generally installed as a third-party tool via CIPD during the build
environment bootstrap. However, zap packages are currently NOT available for
`arm64` (like when compiling on Raspberry PI.). In this case, you have 2
choices.

1. You could check out zap from source as described in
   [Code Generation - Installing zap and environment variables](https://github.com/project-chip/connectedhomeip/blob/master/docs/code_generation.md#Installing-zap-and-environment-variables)
   and proceed with the
   [instructions](./python_chip_controller_building.md#building-and-installing)
   to build the Python virtual environment.

2. When compile-time code generation is not desirable, then pre-generated output
   code can be used. To understand about code generation and pre-generating
   matter code see.
   [Code generation - Pre-generation](https://github.com/project-chip/connectedhomeip/blob/master/docs/code_generation.md#Pre-generation).
   To build and install the Python CHIP controller with pre-generated files use
   the -z argument that points to the directory of pre-generated code:

    ```
    scripts/build_python.sh -m platform -i separate -z "/some/pregen/dir"
    ```

    > Note: To get more details about available build configurations, run the
    > following command: `scripts/build_python.sh --help`

## Launching the REPL

1. Activate the Python virtual environment:

    ```
    source out/python_env/bin/activate
    ```

2. Launch the REPL.

    ```
    sudo out/python_env/bin/chip-repl
    ```

> By default, the REPL points to `/tmp/repl-storage.json` for persistent
> storage. You can over-ride that location by passing in `--storagepath <path>`
> to the above invocation.

## REPL Playground

The REPL playground is a Jupyter Lab instance that allows you to interact with
the REPL from a web browser (or a Jupyter Notebook client of your choice!). It
contains the entire REPL encapsulated as an IPython kernel.

### Locally Hosted

The locally hosted version requires you to follow the build instructions below
to initially setup your Python environment.

Then:

1. Install
   [Jupyter Lab](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html)
   (not within the virtualenv!)

```
pip3 install jupyterlab ipykernel
```

2. Install the [Python LSP](https://github.com/jupyter-lsp/jupyterlab-lsp)
   extension for better code autocompletion in the playground.

```
pip3 install jupyterlab-lsp
pip3 install python-lsp-server
```

3. Every virtual env needs to be installed as a 'kernel' in Jupyter Lab. To do
   so, activate the virtual env and run:

```
python -m ipykernel install <name-for-your-kernel>
```

4. Navigate to the SDK root folder and launch Jupyter Lab (not from within
   virtual env!)

```
jupyter-lab
```

This will automatically launch the playground on your browser.

5. (Optional) To enable live code completions, in the Jupyter Lab Interface, go
   to "Settings" → "Advanced Settings Editor" → "Code Completion". In the "User
   Preferences" section, add the following:

```
{
    "continuousHinting": true,
    "showDocumentation": true,
    "theme": 'material'
}
```

Now, when you type, it should auto complete functions/objects/etc.

For more details, go to the
[Python LSP](https://github.com/jupyter-lsp/jupyterlab-lsp) page.

### Cloud Hosted

A pre-built version of the REPL playground is made available through the cloud.
This is ideal if you're new to the REPL and want to try it out without having to
follow the build and launch instructions below. You can also use this to
prototype various bits of logic in Python as well as interact with
all-clusters-app from a browser.

The playground can be accessed [here](http://35.236.121.59/).

> **NOTE:** You have to create a user ID when accessing the above for the first
> time (password can be blank). That creates a sandboxed environment for you to
> play in. There-after, you'll always be re-directed straight to the Jupyter Lab
> landing page.

> **NOTE:** The sandbox is temporary. After an hour of inactivity, the sandbox
> is deleted and your saved contents will be lost.

For more information on Jupyter Lab, check out
[these](https://jupyterlab.readthedocs.io/en/stable/user/interface.html) docs.

### IPython REPL

Going through the above isn't terribly useful, since all you'll be able to do is
launch the REPL environment itself through the IPython shell.

To launch the IPython REPL, launch "matter-env" from the "Console" tab in the
Launcher.

### Guide Notebooks

A number of Jupyter Notebooks have been written that serve as both guides for
interacting with the REPL _as well as_ being launchable directly into the
cloud-hosted playground.

The following icon is present at the top of applicable guides that can be
launched into the playground:

![Launch playground icon](https://i.ibb.co/hR3yWsC/launch-playground.png")
<br></br>

## Guides

[REPL Basics](https://deepnote.com/viewer/github/project-chip/connectedhomeip/blob/master/docs/guides/repl/Matter_REPL_Intro.ipynb)

[Using the IM](https://deepnote.com/viewer/github/project-chip/connectedhomeip/blob/master/docs/guides/repl/Matter_Basic_Interactions.ipynb)

[Multi Fabric Commissioning](https://deepnote.com/viewer/github/project-chip/connectedhomeip/blob/master/docs/guides/repl/Matter_Multi_Fabric_Commissioning.ipynb)

[Access Control](https://deepnote.com/viewer/github/project-chip/connectedhomeip/blob/master/docs/guides/repl/Matter_Access_Control.ipynb)

## Testing

We also provide `mobile-device-test.py` for testing your accessories, you can
run it manually or using a wrapper script.

### Usage

mobile-device-test.py provides the following options for running the tests:

```
  --controller-nodeid INTEGER     NodeId of the controller.
  --device-nodeid INTEGER         NodeId of the device.
  -a, --address TEXT              Skip commissionee discovery, commission the
                                  device with the IP directly.

  -t, --timeout INTEGER           The program will return with timeout after
                                  specified seconds.

  --discriminator INTEGER         Discriminator of the device.
  --setup-pin INTEGER             Setup pincode of the device.
  --enable-test TEXT              The tests to be executed. By default, all
                                  tests will be executed, use this option to
                                  run a specific set of tests. Use --print-
                                  test-list for a list of appliable tests.

  --disable-test TEXT             The tests to be excluded from the set of
                                  enabled tests. Use --print-test-list for a
                                  list of appliable tests.

  --log-level [ERROR|WARN|INFO|DEBUG]
                                  The log level of the test.
  --log-format TEXT               Override logging format
  --print-test-list               Print a list of test cases and test sets
                                  that can be toggled via --enable-test and
                                  --disable-test, then exit

  --help                          Show this message and exit.
```

By default, all tests will be executed, however, you can exclude one or more
tests or only include a few tests if you want.

For example, if you are working for commissioning, then you may want to exclude
the data model test cases by adding `--disable-test datamodel` to disable all
data model tests.

Some tests provides the option to exclude them. For example, you can use
`--disable-test ClusterObjectTests.TestTimedRequestTimeout` to exclude the
"TestTimedRequestTimeout" test case.

It is recommanded to use the test wrapper to run mobile-device-test.py, for
example, you can run:

```
./scripts/tests/run_python_test.py --app chip-all-clusters-app --factoryreset
```

It provides some extra options, for example:

```
optional arguments:
  -h, --help                show this help message and exit
  --app APP                 Path to local application to use, omit to use external apps.
  --factoryreset            Remove app config and repl configs (/tmp/chip* and /tmp/repl*) before running the tests.
  --app-args APP_ARGS       The extra parameters passed to the device side app.
  --script SCRIPT           Path to the test script to use, omit to use the default test script (mobile-device-test.py).
  --script-args SCRIPT_ARGS Arguments for the REPL test script
```

You can pass your own flags for mobile-device-test.py by appending them to the
command line with two dashes, for example:

```
./scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-no-ble-no-wifi-tsan-clang/chip-all-clusters-app --factoryreset --script-args "-t 90 --disable-test ClusterObjectTests.TestTimedRequestTimeout"
```

will pass `-t 90 --disable-test ClusterObjectTests.TestTimedRequestTimeout` to
`mobile-device-test.py`
