semvec/pypi-packages huggingface dataset:
mcbirdcage 2026.2.18
MCP server for Winegard satellite dish control via serial
Requires Python: >=3.11
Keywords: amateur-radio, antenna, mcp, satellite, winegard

# mcbirdcage

[MCP](https://modelcontextprotocol.io/) server for controlling Winegard satellite dishes through conversational tools. Built on [FastMCP](https://gofastmcp.com/), exposes 36 tools for dish positioning, signal analysis, firmware inspection, and satellite pass planning.

## Install

```bash
# Add to Claude Code
claude mcp add mcbirdcage -- uvx mcbirdcage

# Or run standalone
uvx mcbirdcage
```

## Demo Mode

No dish required. Set `BIRDCAGE_DEMO=1` to get simulated responses for all tools:

```bash
BIRDCAGE_DEMO=1 uvx mcbirdcage
```

## Tools

36 tools across six groups:

| Group | Count | Examples |
|-------|-------|---------|
| Connection | 3 | `connect`, `disconnect`, `status` |
| Movement | 9 | `get_position`, `move_to`, `home_motor`, `stow` |
| Signal | 8 | `get_rssi`, `enable_lna`, `az_sweep`, `get_lock_status` |
| System | 11 | `nvs_dump`, `get_firmware_id`, `set_pid_gains`, `get_a3981_diag` |
| Satellite | 4 | `search_satellites`, `get_passes`, `get_visible_targets` |
| Console | 1 | `send_raw_command` (direct firmware access) |

Plus 5 resources (hardware specs, NVS reference, firmware docs) and 3 prompts.

## Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `BIRDCAGE_DEMO` | `0` | Enable demo mode (no hardware) |
| `BIRDCAGE_PORT` | `/dev/ttyUSB0` | Serial port path |
| `BIRDCAGE_FIRMWARE` | `hal205` | Firmware variant (`hal000`, `hal205`, `g2`) |
| `BIRDCAGE_CRAFT_URL` | -- | Craft API URL for live satellite TLEs |

## Documentation

Full tool reference and hardware setup: **[birdcage.warehack.ing](https://birdcage.warehack.ing)**

## Credits

- **Gabe Emerson (KL1FI / [saveitforparts](https://github.com/saveitforparts))** -- original Winegard rotor scripts
- **Chris Davidson ([cdavidson0522](https://github.com/cdavidson0522))** -- Carryout G2 sky scan and rotator control

## License

MIT
birdcage-tui 2026.2.18
Textual TUI for Winegard satellite dish control and amateur radio sky tracking
Requires Python: >=3.11
Keywords: amateur-radio, antenna, ham, satellite, textual, tui, winegard

# birdcage-tui

Terminal UI for controlling Winegard satellite dishes. Built on [Textual](https://textual.textualize.io/) with six screens covering everything from manual pointing to live satellite tracking.

Try it without hardware:

```bash
uvx birdcage-tui --demo
```

## Install

```bash
pip install birdcage-tui

# With camera capture support (JPEG annotation, FITS export)
pip install birdcage-tui[camera]
```

## Screens

| Key | Screen | What it does |
|-----|--------|-------------|
| F1 | Dashboard | Live AZ/EL readout, compass rose, motor status, signal gauge |
| F2 | Control | Manual jog, satellite presets, Track mode (rotctld), Craft mode (live TLE) |
| F3 | Signal | RSSI bargraph, azimuth sweep plot, sky heatmap |
| F4 | System | NVS editor, firmware ID, motor dynamics, PID tuning, A3981 diagnostics |
| F5 | Console | Raw serial terminal to the dish firmware |
| F6 | Camera | Capture overlay with multi-trigger pipeline (requires `camera` extra) |

The collage below shows all six screens. On PyPI this image may not render -- see the [TUI guide](https://birdcage.warehack.ing/guides/tui/) for full screenshots.

![Birdcage TUI](https://birdcage.warehack.ing/screenshots/tui-collage.png)

## Usage

```bash
# Demo mode (no dish required)
birdcage-tui --demo

# Connect to hardware
birdcage-tui --port /dev/ttyUSB0 --firmware hal205

# Carryout G2 at 115200 baud
birdcage-tui --port /dev/ttyUSB2 --firmware g2 --baud 115200
```

## Documentation

Detailed screen walkthroughs and configuration: **[birdcage.warehack.ing/guides/tui](https://birdcage.warehack.ing/guides/tui/)**

## Credits

- **Gabe Emerson (KL1FI / [saveitforparts](https://github.com/saveitforparts))** -- original Winegard rotor scripts
- **Chris Davidson ([cdavidson0522](https://github.com/cdavidson0522))** -- Carryout G2 sky scan and rotator control

## License

MIT
winegard-birdcage 2026.2.18
Winegard satellite dish control for amateur radio sky tracking
Requires Python: >=3.11
Keywords: amateur-radio, antenna, ham, satellite, winegard

# winegard-birdcage

Serial control library for Winegard motorized satellite dishes, repurposed for amateur radio satellite tracking.

Turns surplus RV/marine satellite TV antennas into steerable ground station dishes via RS-485 or RS-422.

## Install

```bash
pip install winegard-birdcage
```

## CLI Tools

Two entry points are included:

**birdcage** -- antenna control and rotctld server:

```bash
birdcage init --port /dev/ttyUSB0 --firmware hal205
birdcage pos
birdcage move --az 180.0 --el 45.0
birdcage serve --host 127.0.0.1 --port 4533   # rotctld for Gpredict
```

**console-probe** -- automated firmware exploration:

```bash
console-probe --port /dev/ttyUSB0 --baud 115200 --discover-only --json report.json
console-probe --port /dev/ttyUSB0 --baud 115200 --deep --wordlist wordlist.txt
```

## Supported Hardware

| Variant | Connection | Baud | Motor Command |
|---------|-----------|------|---------------|
| Trav'ler (HAL 0.0.00) | RS-485 / RJ-25 | 57600 | `a <id> <deg>` |
| Trav'ler (HAL 2.05) | RS-485 / RJ-25 | 57600 | `a <id> <deg>` |
| Trav'ler Pro | USB A-to-A | 57600 | `a <id> <deg>` |
| Carryout | RS-485 / RJ-25 | 57600 | `g <az> <el>` |
| Carryout G2 | RS-422 / RJ-12 | 115200 | `a <id> <deg>` |

## Architecture

```
protocol.py   -- FirmwareProtocol ABC + per-variant subclasses (HAL205, HAL000, G2)
leapfrog.py   -- Predictive overshoot compensation for mechanical motor lag
antenna.py    -- BirdcageAntenna: high-level control wrapping protocol + leapfrog
rotctld.py    -- Hamlib rotctld TCP server (p/P/S/_/q) for Gpredict integration
cli.py        -- Click CLI: init / serve / pos / move
```

## Related Packages

| Package | Description |
|---------|-------------|
| [birdcage-tui](https://pypi.org/project/birdcage-tui/) | Six-screen terminal UI for dish control |
| [mcbirdcage](https://pypi.org/project/mcbirdcage/) | MCP server for AI-assisted dish operations |

## Documentation

Full hardware details, wiring guides, firmware command reference, and NVS tables:
**[birdcage.warehack.ing](https://birdcage.warehack.ing)**

## Credits

- **Gabe Emerson (KL1FI / [saveitforparts](https://github.com/saveitforparts))** -- original Trav'ler, Trav'ler Pro, and Carryout rotor scripts
- **Chris Davidson ([cdavidson0522](https://github.com/cdavidson0522))** -- Carryout G2 sky scan and rotator control

## License

MIT
pymxbi 0.3.4
Python interfaces and drivers for MXBI
Requires Python: >=3.14

# pymxbi

Python interfaces and drivers for mxbi

English | [中文](README.zh.md)

## Install

```bash
pip install pymxbi
```

Or with `uv`:

```bash
uv add pymxbi
```

## Public API

### Detectors

- `pymxbi.detector.detector.Detector`: base class + event registration
- `pymxbi.detector.detector.DetectorEvent` / `DetectorState` / `DetectionResult`
- `pymxbi.detector.beam_break_rfid_detector.BeamBreakRFIDDetector`: beam-break + RFID combined detector

### Rewarders

- `pymxbi.rewarder.rewarder.Rewarder`: reward backend protocol (`open`, `give_reward*`, `stop_reward`, `close`)
- `pymxbi.rewarder.pump_rewarder.PumpRewarder`: time-based reward delivery via a pump
- `pymxbi.rewarder.mock_rewarder.MockRewarder`: logging-only mock implementation

### Peripherals

- Pumps: `pymxbi.peripheral.pumps.pump.Pump` / `Direction`, `pymxbi.peripheral.pumps.RPI_gpio_pump.RPIGpioPump`
- Through-beam sensors: `pymxbi.peripheral.through_beam_sensor.through_beam_sensor.ThroughBeamSensor`, `pymxbi.peripheral.through_beam_sensor.RPI_IR_break_beam_sensor.RPIIRBreakBeamSensor`
- RFID reader: `pymxbi.peripheral.rfid.dorset_lid665v42.DorsetLID665v42` (`open`, `begin`, `read`, `close`, `errno`)

### Utilities

- Audio volume: `pymxbi.peripheral.amixer.amixer.set_master_volume`, `set_digital_volume` (calls `amixer`)

## Notes

- Typed package (`py.typed`), requires Python `>=3.14`.