Description: Python library for controlling Icom transceivers over LAN

Skip to content

# icom-lan

Python library for controlling Icom transceivers over LAN (UDP).

Direct connection to your radio — no wfview, hamlib, or RS-BA1 required.

- Quick Start

  Get up and running in under 5 minutes.

  Getting Started

- CLI Tool

  Control your radio from the terminal.

  CLI Reference

- API Reference

  Full async Python API documentation.

  API Docs

- Protocol Internals

  Deep dive into the Icom LAN UDP protocol.

  Protocol

## Features

- Direct UDP connection — no intermediate software
- Full CI-V command set — frequency, mode, power, meters, PTT, CW keying, VFO, split
- Network discovery — find radios on your LAN automatically
- CLI tool — `icom-lan status`, `icom-lan freq 14.074m`
- Async API — built on asyncio for seamless integration
- Zero dependencies — pure Python, stdlib only
- Type-annotated — full `py.typed` support for IDE autocompletion

## Supported Radios

Radio | Status | CI-V Address
--- | --- | ---
IC-7610 | Tested | `0x98`
IC-705 | Should work | `0xA4`
IC-7300 | Should work | `0x94`
IC-9700 | Should work | `0xA2`
IC-7851 | Should work | `0x8E`
IC-R8600 | Should work | `0x96`

Any Icom radio with LAN/WiFi control should work — the CI-V address is configurable.

## Minimal Example

    import asyncio
    from icom_lan import IcomRadio

    async def main():
        async with IcomRadio("192.168.1.100", username="user", password="pass") as radio:
            freq = await radio.get_frequency()
            print(f"{freq / 1e6:.3f} MHz")

    asyncio.run(main())

## License

MIT — see LICENSE.

Protocol knowledge derived from the wfview project's reverse engineering work. This is an independent clean-room implementation.