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

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

### Installation

1.  clone this repo.
1.  `cd` to the folder.

## 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
