# G6 Pro 360 Experimenting with G6 Pro 360. ## Setup Requires [uv](https://docs.astral.sh/uv/) and Python 3.14. ```sh uv sync ``` Copy `.env.example` to `.env` and fill in your values: ```sh cp .env.example .env ``` ```env HOST=192.168.1.1 # UniFi controller IP API_KEY= # API key from UniFi OS profile → API Tokens UNIFI_USERNAME= # Local UniFi OS username (for speaker volume control) UNIFI_PASSWORD= # Local UniFi OS password ``` ## API Reference [UniFi Protect API v6.2.88](https://developer.ui.com/protect/v6.2.88) > **Note:** For use cases requiring real-time event subscriptions (WebSocket) or access to settings not exposed by the official API, consider [uiprotect](https://github.com/uilibs/uiprotect) — an unofficial Python library wrapping the private UniFi Protect API. ## Scripts ```sh uv run dump_camera.py # dump camera data from integration + private API uv run play_speaker.py # play hello.wav through the camera speaker uv run record_mic.py # record from the camera mic (Ctrl+C to stop) uv run blink_led.py # blink the status LED uv run morse.py "HELLO WORLD" # transmit Morse code on speaker + LED in sync ``` ### `blink_led.py` Toggles the status LED on and off, then restores its original state on exit. ```sh uv run blink_led.py # 10 blinks at 0.5s interval (default) uv run blink_led.py --count 20 --interval 0.3 ``` ### `morse.py` Encodes a message as Morse code, plays a 700 Hz tone through the talkback speaker, and blinks the status LED in sync. ```sh uv run morse.py "SOS" # default: SOS at 0.2s unit uv run morse.py "BACK HOME" --unit 0.25 # slower speed uv run morse.py "SOS" --volume 80 # set speaker volume first (0-100) uv run morse.py "SOS" --lead-in 0.8 # longer silence before morse starts ``` Standard Morse timing: dot = 1 unit, dash = 3 units, symbol gap = 1 unit, letter gap = 3 units, word gap = 7 units.