Opis instalacji HBLink3 chciałem wykonać przekierowanie do strony http://sp2ong.noip.pl/pl/blog/stworz-swoj-wlasny-serwer-dmr niestety okazuje się to już niemożliwe ponieważ opisane repozytorium zostało zamknięte lub jest ograniczony dostęp - nie wiem.

Dlatego niniejszy opis wykonam na innym źródle HBLink lecz odsyłam na w/w stronę bo to kopalnia wiedzy jak ktoś chce się w to bawić.

 

cd /opt
git clone https://github.com/HBLink-org/hblink3.git
cd hblink3
pip3 install -r requirements.txt

 

Konieczne jest jeszcze utworzenie pliku z konfiguracją oraz z regułami

cp hblink-SAMPLE.cfg hblink.cfg
cp rules_SAMPLE.py  rules.py

 

Zanim zaczniemy konfigurację serwera warto jeszcze wykonać plik startowy

nano /lib/systemd/system/hblink.service

I wklejamy do niego

[Unit]
Description=HBLink

After=network-online.target syslog.target
Wants=network-online.target

[Service]
StandardOutput=null
WorkingDirectory=/opt/hblink3
RestartSec=3
ExecStart=/usr/bin/python3 /opt/hblink3/bridge.py
Restart=on-abort

[Install]
WantedBy=multi-user.target

 

Teraz można poprzez komendy systemctl start/stop/restart hblink sterować programem

Można zająć się konfiguracją samego serwera i jego testowym uruchomieniem. W konfiguracji najważniejsze są na poczatku dwa pliki.

hblink.cfg  - odpowiedzialny za konfigurację serwera

 rules.py  -  zawierający instrukcje co z czym łączyć i na jakich zasadach

 

 Edytujemy plik hblink.cfg 

nano /opt/hblink3/hblink.cfg

 

Plik zawiera opisy funkcji w języku angielskim lecz ja przedstawię tylko same funkcje

 

[GLOBAL]
PATH: ./
PING_TIME: 5
MAX_MISSED: 3
USE_ACL: True
REG_ACL: PERMIT:ALL
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPORTS]
REPORT: True
REPORT_INTERVAL: 60
REPORT_PORT: 4321
REPORT_CLIENTS: 127.0.0.1
[LOGGER]
LOG_FILE: /tmp/hblink.log
LOG_HANDLERS: console-timed
LOG_LEVEL: DEBUG
LOG_NAME: HBlink
[ALIASES]
TRY_DOWNLOAD: True
PATH: ./
PEER_FILE: peer_ids.json
SUBSCRIBER_FILE: subscriber_ids.json
TGID_FILE: talkgroup_ids.json
PEER_URL: https://www.radioid.net/static/rptrs.json
SUBSCRIBER_URL: https://www.radioid.net/static/users.json
STALE_DAYS: 7
[OBP-1]
MODE: OPENBRIDGE
ENABLED: True
IP:
PORT: 62035
NETWORK_ID: 3129100
PASSPHRASE: password
TARGET_IP: 1.2.3.4
TARGET_PORT: 62035
BOTH_SLOTS: True
USE_ACL: True
SUB_ACL: DENY:1
TGID_ACL: PERMIT:ALL
[MASTER-1]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 10
EXPORT_AMBE: False
IP:
PORT: 54000
PASSPHRASE: s3cr37w0rd
GROUP_HANGTIME: 5
USE_ACL: True
REG_ACL: DENY:1
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPEATER-1]
MODE: PEER
ENABLED: True
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54001
MASTER_IP: 172.16.1.1
MASTER_PORT: 54000
PASSPHRASE: homebrew
CALLSIGN: W1ABC
RADIO_ID: 312000
RX_FREQ: 449000000
TX_FREQ: 444000000
TX_POWER: 25
COLORCODE: 1
SLOTS: 1
LATITUDE: 38.0000
LONGITUDE: -095.0000
HEIGHT: 75
LOCATION: Anywhere, USA
DESCRIPTION: This is a cool repeater
URL: www.w1abc.org
SOFTWARE_ID: 20170620
PACKAGE_ID: MMDVM_HBlink
GROUP_HANGTIME: 5
OPTIONS:
USE_ACL: True
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL

 Szczegułowe opisy konfiguracji i wyjaśnienie poszczególnych opcji znajdziecie w internecie, ja tylko przedstawię parę z nich w wariancie SERWER TESTOWY w pełni otwarty bez zabezpieczeń DMRiD

 

[GLOBAL]
PATH: ./
PING_TIME: 10
MAX_MISSED: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPORTS]
REPORT: True
REPORT_INTERVAL: 20
REPORT_PORT: 4321
REPORT_CLIENTS: 127.0.0.1
[LOGGER]
LOG_FILE: /var/log/hblink.log
LOG_HANDLERS: file-timed
LOG_LEVEL: DEBUG
LOG_NAME: HBlink
[ALIASES]
TRY_DOWNLOAD: False
PATH: ./
PEER_FILE: peer_ids.json
SUBSCRIBER_FILE: subscriber_ids.json
TGID_FILE: talkgroup_ids.json
PEER_URL: https://www.radioid.net/static/rptrs.json
SUBSCRIBER_URL: https://www.radioid.net/static/users.json
STALE_DAYS: 7
[OBP-1]
MODE: OPENBRIDGE
ENABLED: False
IP:
PORT: 62035
NETWORK_ID: 3129100
PASSPHRASE: password
TARGET_IP: 1.2.3.4
TARGET_PORT: 62035
BOTH_SLOTS: True
USE_ACL: True
SUB_ACL: DENY:1
TGID_ACL: PERMIT:ALL
[MASTER-1]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 2
EXPORT_AMBE: False
IP:
PORT: 54001
PASSPHRASE: s3cr37w0rd
GROUP_HANGTIME: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL

Dopisujemy kolejnego MASTER

[MASTER-2]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 2
EXPORT_AMBE: False
IP:
PORT: 54002
PASSPHRASE: s3cr37w0rd2
GROUP_HANGTIME: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPEATER-1]
MODE: PEER
ENABLED: False
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54001
MASTER_IP: 172.16.1.1
MASTER_PORT: 54000
PASSPHRASE: homebrew
CALLSIGN: W1ABC
RADIO_ID: 312000
RX_FREQ: 449000000
TX_FREQ: 444000000
TX_POWER: 25
COLORCODE: 1
SLOTS: 1
LATITUDE: 38.0000
LONGITUDE: -095.0000
HEIGHT: 75
LOCATION: Anywhere, USA
DESCRIPTION: This is a cool repeater
URL: www.w1abc.org
SOFTWARE_ID: 20170620
PACKAGE_ID: MMDVM_HBlink
GROUP_HANGTIME: 5
OPTIONS:
USE_ACL: True
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL

Dzięki takim zmianom mamy dwa konta MASTER dla dwóch hotspotów, wyłączyliśmy OpenBridge oraz Repeter a także zabroniliśmy pobierać aktualną bazę MARC-DMR ID bo jest ona zbyteczna, utworzylismy plik LOG i kilka innych funkcji.

Tak wstępnie przygotowany serwer pozwala na uruchomienie i testy. Lecz aby można rozmawiać na nim konieczne jest napisanie komend co ma robić gdy

W tym celu należy edytować plik rules.py
 
nano /opt/hblink3/rules.py


Interesujący nas fragment wygląda tak:

BRIDGES = {
    'WORLDWIDE': [
    {'SYSTEM': 'MASTER-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': 'MASTER-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': 'MASTER-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': []},
        ]

 

A opis znajdziecie na stronie http://sq9lm.lukaszmisiura.com/hblink-opis-pliku-rules-py/

Musicie zrozumieć zależności występujące bo inaczej wysypie się cały serwer. Mając w pamięci że podczas edycji pliku hblink.cfg mamy taki status:

OPB - openbridge - Enable=False czyli wyłaczony

MASTER-1  Enable=True czyli włączony

MASTER-2 Enable=True czyli włączony

REPEATER-1 Enable=False czyli wyłaczony

 

 

To konfiguracji wymagają jedynie elementy włączone czyli MASTER-1 oraz MASTER-2. Przykładowo napiszemy regułe dla 3 grup rozmownych TG 10,20 i 30

Przy założeniu że mamy tylko SIMPLEX hotspot pracujące na TS2 i że chcemy mieć wszystkie grupy nieaktywne po restarcie serwera a aktywacja jakiejś grupy przez użytkownika jest na stałe do momentu gdy on sam nie zdecyduje się na zmianę grupy rozmownej

BRIDGES = {
    'TG10': [
 {'SYSTEM': 'MASTER-1',    'TS': 2, 'TGID': 10, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE',  'ON': [10,], 'OFF': [20,30], 'RESET': []},
 {'SYSTEM': 'MASTER-2',    'TS': 2, 'TGID': 10, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE',  'ON': [10,], 'OFF': [20,30], 'RESET': []},
        ],
    'TG20': [
 {'SYSTEM': 'MASTER-1',    'TS': 2, 'TGID': 20,   'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [20,], 'OFF': [10,30], 'RESET': []},
 {'SYSTEM': 'MASTER-2',    'TS': 2, 'TGID': 20,   'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [20,], 'OFF': [10,30], 'RESET': []},
        ],
    'TG30': [
 {'SYSTEM': 'MASTER-1',    'TS': 2, 'TGID': 30, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [30,], 'OFF': [10,20], 'RESET': []},
 {'SYSTEM': 'MASTER-2',    'TS': 2, 'TGID': 30, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [30,], 'OFF': [10,20], 'RESET': []},
        ]

 

 

 

Aby zobaczyć wizualnie efekty naszych zmagań konieczny jest program HBMonitor którego instalacja w nastepnej części.