New CONFIGURING.md is the full field reference for hblink.cfg (GLOBAL, REPORTS, LOGGER, ALIASES, and the SERVER/OUTBOUND/OPENBRIDGE system modes) and rules.py (BRIDGES/UNIT), matching the cc2obp CONFIGURING.md house style. hblink-SAMPLE.cfg and rules_SAMPLE.py comments are trimmed to terse one-liners that point here. Notable content: - Server/Client terminology throughout (a "master" is a Server; Clients are repeaters/hotspots, or an OUTBOUND HBlink masquerading as one). - Hard warning that a rules.py SYSTEM with no matching hblink.cfg system stops bridge.py from starting. - ALIASES memory warning: full subscriber DB ~500 MB per process, >1 GB if the dashboard loads it too; use dashboard-only or filter via FILTER_COUNTRIES. - BrandMeister prohibits OUTBOUND/Client links and requires OpenBridge. - BOTH_SLOTS is HBlink-to-HBlink only; no other server accepts it. - systemd/journal logging note; pointer to ACLS.md for the ACL model. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
2.5 KiB
Python
Executable File
50 lines
2.5 KiB
Python
Executable File
'''
|
|
THIS EXAMPLE WILL NOT WORK AS-IS - YOU MUST SPECIFY YOUR OWN VALUES!
|
|
Full reference: CONFIGURING.md (rules.py section).
|
|
|
|
BRIDGES defines "conference bridges" (think bridge groups / reflectors): every system
|
|
marked ACTIVE on a bridge exchanges traffic with every other ACTIVE system on that same
|
|
bridge. Not end-to-end -- each system is activated on each bridge independently.
|
|
|
|
Each bridge key is an arbitrary name; its value is one entry per participating system:
|
|
SYSTEM - system name from hblink.cfg -- MUST match EXACTLY, or bridge.py won't start
|
|
TS - timeslot 1 or 2 to match (XLX: always TS 2)
|
|
TGID - talkgroup ID to match (XLX: always TG 9)
|
|
ACTIVE - True/False: passing traffic now? (ON/OFF triggers below can flip it)
|
|
TO_TYPE - 'ON' = auto-off after TIMEOUT; 'OFF' = auto-on after TIMEOUT; else 'NONE'
|
|
TIMEOUT - timer length in MINUTES (minutes only; timers cost performance)
|
|
ON/OFF - lists of TGIDs that activate/deactivate this system (always lists; [] = none)
|
|
RESET - list of TGIDs that reset a running timer (only when voice TGID != trigger TGIDs)
|
|
'''
|
|
|
|
BRIDGES = {
|
|
'WORLDWIDE': [
|
|
{'SYSTEM': 'SERVER-1', 'TS': 1, 'TGID': 1, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [2,], 'OFF': [9,10], 'RESET': []},
|
|
{'SYSTEM': 'CLIENT-1', 'TS': 1, 'TGID': 3100, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [2,], 'OFF': [9,10], 'RESET': []},
|
|
],
|
|
'ENGLISH': [
|
|
{'SYSTEM': 'SERVER-1', 'TS': 1, 'TGID': 13, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [3,], 'OFF': [8,10], 'RESET': []},
|
|
{'SYSTEM': 'CLIENT-2', 'TS': 1, 'TGID': 13, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [3,], 'OFF': [8,10], 'RESET': []},
|
|
],
|
|
'STATEWIDE': [
|
|
{'SYSTEM': 'SERVER-1', 'TS': 2, 'TGID': 3129, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [4,], 'OFF': [7,10], 'RESET': []},
|
|
{'SYSTEM': 'CLIENT-2', 'TS': 2, 'TGID': 3129, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [4,], 'OFF': [7,10], 'RESET': []},
|
|
]
|
|
}
|
|
|
|
'''
|
|
UNIT: system names that should bridge unit-to-unit (individual/private) calls to each other.
|
|
'''
|
|
|
|
UNIT = ['ONE', 'TWO']
|
|
|
|
'''
|
|
This is for testing the syntax of the file. It won't eliminate all errors, but running this file
|
|
like it were a Python program itself will tell you if the syntax is correct!
|
|
'''
|
|
|
|
if __name__ == '__main__':
|
|
from pprint import pprint
|
|
pprint(BRIDGES)
|
|
print(UNIT)
|