You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dvmhost/tools/dvmcfggen/EXAMPLES.md

327 lines
8.5 KiB

# dvmcfggen - Examples
This file contains complete, copy-paste ready examples for common scenarios.
## Example 0: Using the Interactive Wizard (Easiest!)
The simplest way to create any configuration:
```bash
# Start the wizard
./dvmcfg wizard
# Follow the prompts:
# 1. Choose single instance or trunked system
# 2. Select template (hotspot, repeater, etc.)
# 3. Enter system details (identity, peer ID, etc.)
# 4. Configure network settings (FNE address, port, password)
# 5. Enable/disable protocols (DMR, P25, NXDN)
# 6. Set radio parameters (color code, NAC, site ID)
# 7. Configure modem (type, serial port, levels)
# 8. Optionally add location info
# 9. Review summary and save
```
The wizard validates all inputs and provides helpful defaults. Perfect for first-time users!
---
## Example 1: Basic Hotspot Setup (CLI)
```bash
# Create hotspot configuration
./dvmcfg create \
--template hotspot \
--output /etc/dvm/hotspot.yml \
--identity "HOTSPOT-HOME" \
--peer-id 100001 \
--fne-address "fne.example.com" \
--fne-port 62031 \
--callsign "KC1ABC" \
--validate
# Customize serial port
./dvmcfg edit /etc/dvm/hotspot.yml \
system.modem.protocol.uart.port "/dev/ttyACM0"
# Adjust levels
./dvmcfg edit /etc/dvm/hotspot.yml system.modem.rxLevel 60
./dvmcfg edit /etc/dvm/hotspot.yml system.modem.txLevel 60
# Final validation
./dvmcfg validate /etc/dvm/hotspot.yml --summary
```
## Example 2: Standalone Repeater
```bash
# Create repeater configuration
./dvmcfg create \
--template repeater \
--output /etc/dvm/repeater.yml \
--identity "REPEATER-W1ABC" \
--peer-id 100002 \
--fne-address "10.0.0.100" \
--fne-port 62031 \
--callsign "W1ABC"
# Set location
./dvmcfg edit /etc/dvm/repeater.yml system.info.latitude 42.3601
./dvmcfg edit /etc/dvm/repeater.yml system.info.longitude -71.0589
./dvmcfg edit /etc/dvm/repeater.yml system.info.location "Boston, MA"
./dvmcfg edit /etc/dvm/repeater.yml system.info.power 50
# Configure modem
./dvmcfg edit /etc/dvm/repeater.yml \
system.modem.protocol.uart.port "/dev/ttyUSB0"
# Validate
./dvmcfg validate /etc/dvm/repeater.yml
```
## Example 3: Small P25 Trunked System (2 VCs)
```bash
# Create trunked system
./dvmcfg trunk create \
--base-dir /etc/dvm/site1 \
--name site1 \
--protocol p25 \
--vc-count 2 \
--identity "SITE001" \
--base-peer-id 100000 \
--fne-address "10.0.0.1" \
--fne-port 62031 \
--nac 0x001 \
--site-id 1 \
--color-code 1
# Configure modem ports
./dvmcfg edit /etc/dvm/site1/site1-cc.yml \
system.modem.protocol.uart.port "/dev/ttyUSB0"
./dvmcfg edit /etc/dvm/site1/site1-vc01.yml \
system.modem.protocol.uart.port "/dev/ttyUSB1"
./dvmcfg edit /etc/dvm/site1/site1-vc02.yml \
system.modem.protocol.uart.port "/dev/ttyUSB2"
# Update location across all configs
./dvmcfg trunk update --base-dir /etc/dvm/site1 --name site1 \
system.info.latitude 42.3601
./dvmcfg trunk update --base-dir /etc/dvm/site1 --name site1 \
system.info.longitude -71.0589
./dvmcfg trunk update --base-dir /etc/dvm/site1 --name site1 \
system.info.location "Site 1, Boston"
# Validate system
./dvmcfg trunk validate --base-dir /etc/dvm/site1 --name site1
```
## Example 4: Large P25 Trunked System (6 VCs)
```bash
# Create large trunked system
./dvmcfg trunk create \
--base-dir /etc/dvm/hub \
--name hub \
--protocol p25 \
--vc-count 6 \
--identity "HUB" \
--base-peer-id 100000 \
--base-rpc-port 9890 \
--fne-address "172.16.0.1" \
--fne-port 62031 \
--fne-password "SecurePassword123" \
--nac 0x100 \
--site-id 10
# Enable verbose logging across all
./dvmcfg trunk update --base-dir /etc/dvm/hub --name hub \
protocols.p25.verbose true
# Configure individual modem ports
for i in {0..6}; do
if [ $i -eq 0 ]; then
file="hub-cc.yml"
else
file="hub-vc0${i}.yml"
fi
./dvmcfg edit /etc/dvm/hub/$file \
system.modem.protocol.uart.port "/dev/ttyUSB${i}"
done
# Validate
./dvmcfg trunk validate --base-dir /etc/dvm/hub --name hub
```
## Example 5: DMR Trunked System
```bash
# Create DMR trunked system
./dvmcfg trunk create \
--base-dir /etc/dvm/dmr-site \
--name dmrsite \
--protocol dmr \
--vc-count 3 \
--identity "DMR001" \
--base-peer-id 200000 \
--color-code 2 \
--site-id 1
# Configure to use specific slots
./dvmcfg edit /etc/dvm/dmr-site/dmrsite-cc.yml \
protocols.dmr.control.slot 1
# Enable both slots for voice channels
./dvmcfg trunk update --base-dir /etc/dvm/dmr-site --name dmrsite \
network.slot1 true
./dvmcfg trunk update --base-dir /etc/dvm/dmr-site --name dmrsite \
network.slot2 true
# Validate
./dvmcfg trunk validate --base-dir /etc/dvm/dmr-site --name dmrsite
```
## Example 6: Conventional P25 System with Grants
```bash
# Create conventional system
./dvmcfg create \
--template conventional \
--output /etc/dvm/conventional.yml \
--identity "CONV001" \
--peer-id 100010 \
--fne-address "10.0.0.1"
# Configure control channel settings
./dvmcfg edit /etc/dvm/conventional.yml \
protocols.p25.control.interval 300
./dvmcfg edit /etc/dvm/conventional.yml \
protocols.p25.control.duration 3
# Set as authoritative
./dvmcfg edit /etc/dvm/conventional.yml \
system.config.authoritative true
# Validate
./dvmcfg validate /etc/dvm/conventional.yml
```
## Example 7: Multi-Site System Migration
```bash
# Create Site 1
./dvmcfg trunk create \
--base-dir /etc/dvm/sites/site1 \
--name site1 \
--vc-count 2 \
--identity "SITE001" \
--base-peer-id 100000 \
--site-id 1 \
--nac 0x001
# Create Site 2
./dvmcfg trunk create \
--base-dir /etc/dvm/sites/site2 \
--name site2 \
--vc-count 2 \
--identity "SITE002" \
--base-peer-id 100010 \
--site-id 2 \
--nac 0x001
# Update both sites to new FNE
for site in site1 site2; do
./dvmcfg trunk update \
--base-dir /etc/dvm/sites/$site \
--name $site \
network.address "newfne.example.com"
done
# Validate both
./dvmcfg trunk validate --base-dir /etc/dvm/sites/site1 --name site1
./dvmcfg trunk validate --base-dir /etc/dvm/sites/site2 --name site2
```
## Example 8: Testing with Null Modem
```bash
# Create test configuration with null modem
./dvmcfg create \
--template repeater \
--output /tmp/test-config.yml \
--identity "TEST" \
--peer-id 999999
# Set to null modem
./dvmcfg edit /tmp/test-config.yml system.modem.protocol.type "null"
# Enable all debug logging
./dvmcfg edit /tmp/test-config.yml protocols.dmr.debug true
./dvmcfg edit /tmp/test-config.yml protocols.p25.debug true
./dvmcfg edit /tmp/test-config.yml system.modem.debug true
# Validate
./dvmcfg validate /tmp/test-config.yml --summary
```
## Example 9: Enabling Encryption
```bash
# Create secure configuration
./dvmcfg create \
--template repeater \
--output /etc/dvm/secure.yml \
--identity "SECURE001" \
--peer-id 100020
# Enable network encryption
./dvmcfg edit /etc/dvm/secure.yml network.encrypted true
# The preshared key is automatically generated
# You can update it if needed (must be 64 hex chars):
# ./dvmcfg edit /etc/dvm/secure.yml network.presharedKey "YOUR64HEXCHARACTERS..."
# Enable REST API with SSL
./dvmcfg edit /etc/dvm/secure.yml network.restEnable true
./dvmcfg edit /etc/dvm/secure.yml network.restSsl true
# Validate
./dvmcfg validate /etc/dvm/secure.yml
```
## Example 10: Batch Configuration Update
```bash
#!/bin/bash
# Update multiple configurations at once
CONFIGS=(
"/etc/dvm/repeater1.yml"
"/etc/dvm/repeater2.yml"
"/etc/dvm/repeater3.yml"
)
NEW_FNE="10.0.0.100"
NEW_PORT=62031
for config in "${CONFIGS[@]}"; do
echo "Updating $config..."
./dvmcfg edit "$config" network.address "$NEW_FNE"
./dvmcfg edit "$config" network.port "$NEW_PORT"
./dvmcfg validate "$config"
done
echo "All configs updated and validated!"
```
## Pro Tips
1. **Always validate after edits**: Add `&& ./dvmcfg validate $CONFIG` to your commands
2. **Use variables in scripts**: Define common values as variables for consistency
3. **Test with null modem first**: Verify config before connecting hardware
4. **Sequential RPC ports**: Keep RPC ports in sequence for easier troubleshooting
5. **Document peer IDs**: Keep a spreadsheet of all peer IDs in your network
6. **Backup before bulk updates**: `cp config.yml config.yml.bak`
7. **Use trunk update for consistency**: Ensures all configs in a system match
8. **Validate entire trunk systems**: Use `trunk validate` to catch cross-config issues

Powered by TurnKey Linux.