# Google Home UI Automator

Google Home Automator can help you automating your Google Home App.

## Getting Started

### Prerequisites

#### Python 3

You need a python 3 environment to run the script.
Google Home UI Automator requires python 3.9 or newer.

#### Android phone

1.  turn on ***User Debugging*** mode on your android phone.
1.  connect your android phone to computer.

#### Google Home App

1.  You need to install Google Home App on your Android phone.
1.  Login to your Google Home App.
1.  Make sure the Google Home App's version is between `3.1.1.14` and
    `3.10.1.6`(latest public version). Or `3.12.4.1`, `3.13.46.1`.

NOTE: Please select the correct Google account on Google Home App.

### Installation

1.  clone this repo.
2.  `cd` to the folder.
3.  Run `pip install .`

## Usage

### Commissioning Matter device

```shell
$ ui-automator --commission DEVICE_NAME,PAIRING_CODE,ROOM_NAME
```
*   `DEVICE_NAME`: desired Matter device, e.g. `m5stack`
*   `PAIRING_CODE`: pairing code of your Matter device, e.g. `34970112332`
*   `ROOM_NAME`: room that is going to be assigned, e.g. `Office`

### Decommissioning Matter device

```shell
$ ui-automator --decommission DEVICE_NAME
```
*   `DEVICE_NAME`: display name of commissioned Matter device on GHA, e.g. `m5stack`

### Regression Test

```shell
$ ui-automator --commission DEVICE_NAME,PAIRING_CODE,ROOM_NAME --regtest [--repeat <REPEAT_TIMES>]
```

*   flag `--regtest` is required
*   regression test need to be used with flag `--commission`
*   regression test now only supports commissioning/decommissioning cycle
*   defaultly, regression test will run until users use keyboard interrupt to
    stop the process
*   add `--repeat` to run regression test in limited times
*   `REPEAT_TIMES`: repeated times for regression test

## Roadmap

-   [x] Commissioning Matter device
-   [x] Decommissioning Matter device
-   [x] Regression test of cycling commissioning/decommissioning
-   [ ] Support regression test for devices that need additionally manual
    operations after decommissioning to recover to BLE commissioning mode
-   [ ] Share Fabric
-   [ ] Get pairing code when sharing fabric

## Notice

*   While UI Automation is processing, interfering android phone with any UI
    operation might fail the automation.

## Report issue

-   Click
    [here](https://issuetracker.google.com/issues/new?component=655104&template=1694023)
    to report any encountered issues.
