# 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.7.1.4`.

### Installation

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

## Usage

### Commissioning Matter device

1.  run script `ui-automator --commission m5stack,34970112332,Office`
    -   the parameters are
    *   desired Matter device
    *   pairing code of your Matter device
    *   room that is going to be assigned

## Roadmap

-   [x] Commissioning Matter device

## Notice

## Report issue

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