DMR Zone Channel Builder - Simplified for Anytone 878/890
A streamlined Python tool to generate Anytone radio codeplug CSV files from K7ABD format input files.
- ✅ Read K7ABD CSV format (Analog, Digital-Repeaters, Digital-Others, Talkgroups)
- ✅ Generate Anytone 878UVii CSV files
- ✅ Generate Anytone 890 CSV files
- ✅ Support APRS configuration on analog channels
- ✅
--user-idflag to assign Radio ID to all channels - ✅ Optional
Zones.csvfor explicit zone ordering - ✅ Simple command-line interface
- ✅ Modern Python packaging (Python 3.8+)
# Install from source
git clone https://github.com/AF1E/dzcb-simple.git
cd dzcb-simple
pip install -e .# Generate for both radios
dzcb input_directory output_directory --user-id "Joe AF1E"
# Generate for 890 only
dzcb input_directory output_directory --radio 890 --user-id "Joe AF1E"
# Generate for 878 only
dzcb input_directory output_directory --radio 878 --user-id "Joe AF1E"The --user-id value must match an entry in the CPS Radio ID list (Tools > Radio ID List in Anytone CPS). Omitting it leaves Radio ID blank, which may cause CPS import errors.
Control zone and channel ordering with --sort:
# Alphabetical (default) - zones and channels sorted A-Z
dzcb input_directory output_directory --sort alpha
# Repeaters first - digital repeater zones first, then analog/others, preserving file order
dzcb input_directory output_directory --sort repeaters-first
# Analog first - analog/digital-others zones first, then repeaters, preserving file order
dzcb input_directory output_directory --sort analog-first| Mode | Zone Order | Channel Order Within Zones |
|---|---|---|
alpha |
All zones sorted A-Z | Channels sorted alphabetically |
repeaters-first |
Repeater zones first, then analog/others | Preserves input file order |
analog-first |
Analog/others first, then repeater zones | Preserves input file order |
Place your K7ABD format CSV files in a directory. File names must start with the appropriate prefix:
Analog__YourName.csv (or any name starting with Analog):
Zone,Channel Name,Bandwidth,Power,RX Freq,TX Freq,CTCSS Decode,CTCSS Encode,TX Prohibit,APRS RX,APRS PTT Mode,APRS Report Type
Simplex,146.520,25,High,146.520,146.520,Off,Off,Off,Off,Off,OffDigital-Repeaters__YourName.csv (or any name starting with Digital-Repeaters):
Zone Name,Comment,Power,RX Freq,TX Freq,Color Code,TG1,TG2,TG3
K7ABD;K7ABD,Seattle,High,440.600,445.600,1,1,2,-Digital-Others__YourName.csv (or any name starting with Digital-Others):
Zone,Channel Name,Power,RX Freq,TX Freq,Color Code,Talk Group,TimeSlot,Call Type,TX Permit
Simplex,DMR Simplex 1,High,433.450,433.450,1,Local,1,Group Call,AlwaysTalkgroups__YourName.csv (or any name starting with Talkgroups):
Local,9
Worldwide,91
North America,93
TAC 310,310
Zones.csv (optional — explicit zone ordering):
# Lines starting with # are comments
Simplex
APRS
Repeaters
Zones listed here appear first in that order; any unlisted zones follow alphabetically. Without this file, ordering is controlled by --sort.
The tool generates four CSV files in the output directory for each radio:
Channel.CSV- All channelsTalkGroups.CSV- Contact listZone.CSV- Zone assignmentsScanList.CSV- Scan lists
Import these files into your Anytone CPS.
Add APRS configuration to analog channels with these optional columns:
APRS RX- Off or OnAPRS PTT Mode- Off, Start, End, or BothAPRS Report Type- Off, Analog, or Digital
Example:
Zone,Channel Name,...,APRS RX,APRS PTT Mode,APRS Report Type
APRS,144.390,...,On,Both,Analog# Install with dev dependencies
pip install -e ".[dev]"
# Format code
black src/
# Run tests
pytestThis is a simplified fork focused on:
- Local K7ABD CSV input only (no network fetching)
- Anytone 878/890 output only (no other radio formats)
- APRS support for analog channels
- Modern Python packaging
- Simpler codebase and maintenance
For the full-featured version with Repeaterbook integration, PNWDigital support, and multiple output formats, see the original dzcb.
For a quick one-click workflow on Windows, create a generate-codeplug.bat file in the project root. This file is personal (gitignored) because it contains your Radio ID and local paths.
@echo off
echo ========================================
echo Generating Anytone Codeplug Files
echo ========================================
echo.
cd /d "%~dp0"
rem Set your Radio ID name here — must match an entry in the CPS Radio ID list
rem (In CPS: Tools > Radio ID List — use the exact Name shown there)
set RADIO_ID=Your Name CALLSIGN
python -m dzcb my-codeplug output --radio both --sort analog-first --user-id "%RADIO_ID%" -v
echo.
echo ========================================
echo Done! Files are in the 'output' folder
echo ========================================
echo.
explorer output
pauseSave your input CSVs in a my-codeplug\ folder next to the bat file, then double-click to generate.
Based on the original dzcb by Masen Furer.
Simplified and modernized by Joe (AF1E) for personal use with Anytone 878UVii and 890 radios.
MIT License - see LICENSE file