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.
327 lines
8.5 KiB
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
|