Някои особенности на кофигурационният файл за DMR Gateway на Pi-Star

 Някои особенности на кофигурационният файл за DMR Gateway на Pi-Star

Този файл се е развивал във времето.

Този файл съдържа конфигурации които може да направят вашата точка за достъп неработеща и не случайно достъпът до него се намира в меню Експерт.

Промените които се правят в този файл изискват минимум от основни познания по Линукс, мрежи и сървъри. Ако не сте сигурни какво правите потърсете помощ от колеги.

В него отделните мрежи са описани в хронологичен ред.

При първоначална инсталация на Pi-Star в този файл има само четири мрежи:

XLX, BrandMeister, IPSC2 и HBlink.

FreeDMR мрежата не е описана, тя е най младата мрежа и затова се добавя допълнително.

В този файл има правила които определят кои групи за разговори накъде и как да се пренасочват. Тези правила са описани в предишни мои статии.

За радиолюбителите интерес представляват правилата за пренасочване на трафика -  TGRewrite. Тези правила се описват с поредни номера.

TGRewrite0

TGRewrite1

.

.

.

TGRewriteN

Ако номерацията на правилата е една и съща:

TGRewrite0

TGRewrite0

То тогава следващото правило пренаписва предишното и то не се изпълнява, затова поредните номера трябва да бъдат различни в рамките на една       [DMR мрежа N]

По подразбиране има зададени групи от правила за мрежите XLX, BrandMeister, IPSC2 и HBlink. Тези правила е добре да се оставят както са си и само да се допълват. Всяка една мрежа има своите особенности и тези базови правила регулират трафика от и към съответните мрежи по начин избягващ конфликти.

Друга особенност на този файл е, че поддържа до пет активни DMR мрежи, ако се добавят повече от пет активни мрежи, Pi-Star ще обслужва само първите четири DMR мрежи с правило Enable=1.

73 de LZ5PN

Rewrite Rules - g4klx/DMRGateway GitHub Wiki. Превод.

Rewrite Rules - g4klx/DMRGateway GitHub Wiki. Превод.

Правила за пренаписване - g4klx/DMRGateway GitHub Wiki

Обща употреба

DMR Gateway ще пренасочва трафик към различните мрежи само ако това е посочено в правило за пренасочване в .ini файла. 

Точките за достъп имат два интерфейса. Единият е радио интерфейс през който става връзката между радиостанцията и точката за достъп. Другият интерфейс е IP - LAN или WIFI през който се осъществява връзката със сървърите.

TGRewrite

TGRewrite ви позволява да пренасочите една група за разговори в друга и обратно както и да промените времевият слот. TGRewrite може също да се използва за пренасочване на група за разговори и комбинация от слотове към определена мрежа. „от“ се отнася за DMR пакети, влизащи в шлюза през MMDVMHost (RF), а „до“ е мястото, където те се насочват от страната на мрежата (Net). Правилата се прилагат за DMR пакети, преминаващи през шлюза в двете посоки.

Синтаксис

TGRewrite=fromSlot,fromTG,toSlot,toTG,обхват
* Обхват представлява число от 1 до 65535 което определя колко
последователни групи за разговори да се преименуват.
Например обхват = 3 приложен към група за разговори 28401
в резултат ще даде 28401, 28402, 28403. 
Примери

Правилото по-долу ще пренасочи групово повикване за разговор от група за разговор 8 в група за разговор 9 в [DMR мрежа 1].

[DMR Network 1] 

# Reflector TG on to slot 2 TG8
TGRewrite=2,8,2,9,1

Правилата по-долу ще пренасочат групово обаждане до 9990 във времеви слот 1 към [DMR мрежа 1] и групово повикване до 9990 във времеви слот 2 към [DMR мрежа 2].

[DMR Network 1]

# Echo on slot 1 TG9990
TGRewrite=1,9990,2,9990,1

[DMR Network 2]

# Echo on slot 2 TG9990
TGRewrite=2,9990,2,9990,1

PCRewrite

 Това е почти идентично с правилото TGRewrite, с изключение на това, че работи само при частни разговори. PCRewrite може да се използва за добавяне на префикс към частно повикване към рефлектор, за да го „насочи“ към определена мрежа. След това префиксът ще бъде премахнат, преди да бъде насочен към DMR мрежата. Правилата се прилагат за DMR пакети, преминаващи през шлюза в двете посоки. Това правило работи само върху DMR пакети, преминаващи от страната на RF към мрежата.

Обикновено се използва за пренасочване на повикванията за управление на рефлектора към различен локален диапазон, за да се избегнат сблъсъци и за разрешаване на доклади за GPS позиция и частни повиквания към определена мрежа.

Синтаксис
PCRewrite=fromSlot,fromId,toSlot,toId,обхват
Примери

The rules below will route any private calls on time slot 2 in the range 94000 - 95000 to 4000 - 5000 on DMR Network 1, and the range 84000 - 85000 to 4000 - 5000 on DMR Network 2.

Правилата по-долу ще пренасочат всички частни повиквания във времеви слот 2 в диапазона 94 000 - 95 000 до 4000 - 5000 в [DMR мрежа 1] и диапазона 84 000 - 85 000 до 4000 - 5000 в [DMR мрежа 2].

[DMR Network 1]

# Reflector control command slot 2 94000->4000 to 95000->5000
PCRewrite=2,94000,2,4000,1001

[DMR Network 2]

# Reflector control command slot 2 84000->4000 to 85000->5000
PCRewrite=2,84000,2,4000,1001

SrcRewrite

SrcRewrite will rewrite the source/from Talk Group ID to another ID.

SrcRewrite ще пренасочи трафика от определен източник/ID към определена група за разговори.

Синтаксис
SrcRewrite=fromSlot,fromId,toSlot,toTG,обхват
Примери

The rule below will rewrite calls from 4000-5000 on DMR Network 1, to talk group 9 on slot 2. This is useful for ensuring reflector announcements are heard on talk group 9. This rule only works on DMR frames passing from the network side to the RF side.

Правилото по-долу ще пренасочи повикванията от 4000-5000 в [DMR мрежа 1] към разговорна група 9 в слот 2. Това е полезно, за да се гарантира, че рефлекторните съобщения ще се чуват в разговорна група 9. Това правило работи само върху DMR пакети, преминаващи от страната на мрежата към страната на RF.

[DMR Network 1]

# Състоянието на рефлектора се връща (възстановява)
SrcRewrite=2,4000,2,9,1001

TypeRewrite

TypeRewrite maps a group call to a private call. This rule only works on DMR frames passing from the RF side to the network side.

TypeRewrite преобразува групово повикване в лично повикване. Това правило работи само върху DMR пакети, преминаващи от страната на RF към мрежата.

Синтаксис

TypeRewrite==fromSlot,fromId,toSlot,toId

Примери

The rules below translate a group call to 9990 on slot 1, to a private call on DMR Network 1. The SrcRewrite rule then allows the reply to traverse the gateway.

This could be used for converting Brandmeister's private call echo service to a group call method like DMR+, to make the usage more uniform across the networks.

Правилата по-долу преобразуват групово повикване до 9990 на слот 1 в частно повикване в [DMR мрежа 1]. След това правилото SrcRewrite позволява на отговора да премине през шлюза.

Това може да се използва за преобразуване на частната услуга за ехо тест на повикване на Brandmeister в метод на групово повикване като DMR+, за да направи използването по-унифицирано в мрежите.

[DMR Network 1]

# Ехо на RF слот 1 TG9990
# към мрежов слот 1 персонално повикване 9990
TypeRewrite=1,9990,1,9990
SrcRewrite=1,9990,1,9990,1

PassAllTG

Пропуска всички групи за разговор без конкретни правила за съвпадение и може да се използва само в една DMR мрежа. Правилата се прилагат за DMR пакети, преминаващи през шлюза в двете посоки.

Синтаксис

PassAllTG=Slot

Примери

Правилата по-долу позволяват на груповите повиквания да преминат от    [DMR мрежа 2] към който и да е времеви слот от RF страна.

[DMR Network 2]
# Прекарва целия останал трафик на групите за разговори
# на слот 1 и слот 2 PassAllTG=1 PassAllTG=2
Възможна е и следната комбинация:
[DMR Network 1]
# Прекарва целия останал трафик на групите за разговори на слот 1
PassAllTG=1
[DMR Network 2]
# Прекарва целия останал трафик на групите за разговори на слот 2
PassAllTG=2

PassAllPC

Пропуска всички частни разговори без конкретни правила и може да се използва само в една DMR мрежа. Правилата се прилагат за DMR пакети, преминаващи през шлюза в двете посоки.

Синтаксис

PassAllPC=Slot

Примери

Правилата по-долу позволяват частни повиквания да преминават от           [DMR мрежа 2] към който и да е времеви слот от RF страна.

[DMR Network 2]
# Прекарайте целия останал частен трафик на слот 1 и слот 2
PassAllPC=1
PassAllPC=2
 
Възможна е и следната комбинация:
[DMR Network 1]
# Прекарайте целия останал частен трафик на слот 1
PassAllPC=1
[DMR Network 2]
# Прекарайте целия останал частен трафик на слот 2
PassAllPC=2

73 de LZ5PN

Rewrite-Rules ред за обработка на заявките

 Rewrite-Rules ред за обработка на заявките

  Когато Pi-Star се постави в режим Gateway се работи по един конфигурационен файл достъпен през меню:

 Configuration -> Expert -> DMR GW

Ето го и самият файл копиран от работещ симплексен спот:

--------------------------------------------------------------------------------------------------------------------

[General]
RptAddress=127.0.0.1
RptPort=62032
LocalAddress=127.0.0.1
LocalPort=62031
RuleTrace=0
Daemon=1
Debug=0
RFTimeout=20
NetTimeout=20

[Log]
DisplayLevel=0
FileLevel=1
FilePath=/var/log/pi-star
FileRoot=DMRGateway

[Voice]
Enabled=1
Language=en_GB
Directory=/usr/local/etc/DMR_Audio

[Info]
Enabled=0
RXFrequency=439900000
TXFrequency=439900000
Power=1
Latitude=42.163358
Longitude=24.793430
Height=0
Location="OpenGD77"
Description="Bulgaria"
URL=https://www.qrz.com/db/LZХХХХ

[XLX Network]
Enabled=1
Id=1234567*
Startup=800
Module=B
File=/usr/local/etc/XLXHosts.txt
Port=62030
Password="passw0rd"
ReloadTime=60
Slot=2
TG=6
Base=64000
Relink=60
Debug=0
UserControl=1

[DMR Network 1]
Enabled=1
Id=123456701**
Address=2841.master.brandmeister.network
Port=62031
TGRewrite0=2,9,2,9,1
PCRewrite0=2,94000,2,4000,1001
TypeRewrite0=2,9990,2,9990
SrcRewrite0=2,4000,2,9,1001
PassAllPC0=1
PassAllTG0=1
PassAllPC1=2
PassAllTG1=2
Password="Password from BM"
Debug=0
Location=1
Name=BM_2841_Bulgaria

[DMR Network 2]
Enabled=1
Id=123456702**
Address=185.80.0.40
Password="PASSWORD"
Port=55555
TGRewrite0=2,8,2,9,1
TGRewrite20=2,284023,2,284,1
PCRewrite0=2,84000,2,4000,1001
Debug=0
Location=0
Name=DMR+_IPSC2-BG-Hotspot
Options="TS1_1=284;"

[DMR Network 3]
Id=123456703**
Enabled=1
Name=HBLink LZ5PN
Address=kario88.freeddns.com
Port=62031
Password="passw0rd"
Location=0
Debug=0
TGRewrite0=2,11,2,11,1
TGRewrite30=2,9999,2,9999,1

[DMR Network 4]
Enabled=1
Id=123456704**
#Name=FreeDMR_Bulgaria
#Address=sofia.freedmr.link
Name=FreeDMR LZ5PN-2
Address=75b7068e56f6.sn.mynetname.net
#Name=FreeDMR_Bulgaria
#Address=sofia.freedmr.link
Port=62031
Password="passw0rd"
Location=0
Debug=0
Options="TS1_1=284;"
TGRewrite201=2,284799,1,284,1

[GPSD]
Enable=0
Address=127.0.0.1
Port=2947

[APRS]
Enable=1
Address=127.0.0.1
Port=8673
Description=APRS for DMRGateway
Suffix=DMR

[Dynamic TG Control]
Enabled=1
Port=3769

--------------------------------------------------------------------------------------------------------------------

 * Да се замени със вашето ID което е 7 цифри а за репитер 6 цифри.

** Да се замени със вашето ID което е 7 цифри и се добавият още две цифри като разширение с което вашето ID става 9 цифри. Последните две цифри са в обхвата от 00 до 99. За всяка мрежа трябва да бъдат различни. Ако имате повече от един спот не трябва да се дублират. За репитер се използват само 6 цифри и не се добавя разширение. За всички мрежи репитрите използват само 6 цифрени IDта.

--------------------------------------------------------------------------------------------------------------------

Интерес тук представляват правилата TGRewrite и PassAllTG.

Правилата са описани тук:

 https://github-wiki-see.page/m/g4klx/DMRGateway/wiki/Rewrite-Rules

Има една особенност която не е описана а именно, редът по който се обработват правилата.

Както съм го описвал и в старият ми блог цифровата комуникация е пакетно предаване на данни при което на всеки пакет радиото поставя адрес на подателя и адрес на получателя. В тези пакети има само ID на подателя и TG на получателя.

За това кой пакет накъде ще се насочи се грижат TGRewrite и PassAllTG правилата следвайки следният ред:

1. TGRewrite

2. PassAllTG

И така ако TG на получателя не съвпада с нито едно от TGRewrite правилата то тогава пакетът се насочва към PassAllTG.

Тези правила, PassAllTG, са само две за целият конфигурационен файл, по едно за всеки слот.

Както може би забелязвате имаме секции [DMR Network Х]

Всяка една подобна секция се отнася за един DMR Network сървър.

 PassAllTG правила може да има само за първи и втори слот и то само за един DMR Network сървър в целият конфигурационен файл.

Допуска се PassAllTG правилото за единият от двата слота да бъде в секцията на единият от DMR Network сървърите а PassAllTG правилото за другият от двата слота да бъде в секцията на друг от DMR Network сървърите.

Какво означава това?

Примерно: 

[DMR Network 1] която има PassAllTG0=1 ще пренасочва всички заявки за TG не включени във TGRewrite правилата идващи от първи слот към [DMR Network 1]

[DMR Network 2] която има PassAllTG1=2 ще пренасочва всички заявки за TG не включени във TGRewrite правилата идващи от втори слот към [DMR Network 2]

Ако във конфигурационният файл няма PassAllTG правила за единият или другият слот то тогава заявките несъответстващи на нито едно TGRewrite правило се игнорират и не се обработват. 

Ето ги и самите правила:

Rewrite Rules - g4klx/DMRGateway GitHub Wiki

General Usage

DMR Gateway will only pass traffic to the different networks if it's referenced in a rewrite rule in the .ini file.

TGRewrite

TGRewrite allows you to translate one talk group ID to another, and to alter the time slot. TGRewrite can also be used to route a talk group and slot combination to a particular network. 'from' applies to DMR frames entering the Gateway via MMDVMHost (RF), and 'to' is where they are routed on the network side (Net). The rules apply to DMR frames traversing the gateway in both directions.

Syntax
TGRewrite=fromSlot,fromTG,toSlot,toTG,range
Examples

The rule below will translate a group call to talk group talk group 8 to talk group 9 on DMR Network 1.

[DMR Network 1] 

# Reflector TG on to slot 2 TG8
TGRewrite=2,8,2,9,1

The rules below will route a group call to 9990 on time slot 1 to DMR Network 1, and a group call to 9990 on time slot 2 to DMR Network 2.

[DMR Network 1]

# Echo on slot 1 TG9990
TGRewrite=1,9990,2,9990,1

[DMR Network 2]

# Echo on slot 2 TG9990
TGRewrite=2,9990,2,9990,1

PCRewrite

This is almost identical to the TGRewrite except it only operates on private calls. PCRewrite can be used to add a prefix on a private call to a reflector to 'steer' them to a particular network. The prefix will then be removed before being routed to the DMR network. The rules apply to DMR frames traversing the gateway in both directions. This rule only works on DMR frames passing from the RF side to the network.

Typically used to remap reflector control calls to a different local range to avoid clashes, and for permitting GPS position reports and private calls to a particular network.

Syntax
PCRewrite=fromSlot,fromId,toSlot,toId,range
Examples

The rules below will route any private calls on time slot 2 in the range 94000 - 95000 to 4000 - 5000 on DMR Network 1, and the range 84000 - 85000 to 4000 - 5000 on DMR Network 2.

[DMR Network 1]

# Reflector control command slot 2 94000->4000 to 95000->5000
PCRewrite=2,94000,2,4000,1001

[DMR Network 2]

# Reflector control command slot 2 84000->4000 to 85000->5000
PCRewrite=2,84000,2,4000,1001

SrcRewrite

SrcRewrite will rewrite the source/from Talk Group ID to another ID.

Syntax
SrcRewrite=fromSlot,fromId,toSlot,toTG,range
Examples

The rule below will rewrite calls from 4000-5000 on DMR Network 1, to talk group 9 on slot 2. This is useful for ensuring reflector announcements are heard on talk group 9. This rule only works on DMR frames passing from the network side to the RF side.

[DMR Network 1]

# Reflector status returns
SrcRewrite=2,4000,2,9,1001

TypeRewrite

TypeRewrite maps a group call to a private call. This rule only works on DMR frames passing from the RF side to the network side.

Syntax

TypeRewrite==fromSlot,fromId,toSlot,toId

Example

The rules below translate a group call to 9990 on slot 1, to a private call on DMR Network 1. The SrcRewrite rule then allows the reply to traverse the gateway.

This could be used for converting Brandmeister's private call echo service to a group call method like DMR+, to make the usage more uniform across the networks.

[DMR Network 1]

# Echo on RF slot 1 TG9990 to network slot 1 9990
TypeRewrite=1,9990,1,9990
SrcRewrite=1,9990,1,9990,1

PassAllTG

Passes all talk groups without specific matching rules, and can only be used on a single DMR network. The rules apply to DMR frames traversing the gateway in both directions.

Syntax

PassAllTG=Slot

Example

The rules below allow group calls to traverse from DMR network 2 to either time slot on the RF side.

[DMR Network 2]
# Pass all of the other talk group traffic on slot 1 and slot 2
PassAllTG=1
PassAllTG=2

PassAllPC

Passes all private calls without specific rules, and can only be used on a single DMR network. The rules apply to DMR frames traversing the gateway in both directions.

Syntax

PassAllPC=Slot

Example

The rules below allow private calls to traverse from DMR network 2 to either time slot on the RF side.

[DMR Network 2]
# Pass all of the other private traffic on slot 1 and slot 2
PassAllPC=1
PassAllPC=2

Ако имате въпроси по статията може да ме намерите на TG 284 или 284359 BrandMeister.

73 de LZ5PN

Radioddity GD77, Open GD77

Как се поставя радиото в режим на флашване.

Изключваме радиото, натискаме едновременно и задържаме двата малки бутона под ПТТ бутона, включваме радиото.

Екрана става черен и вече може да се флашва.

Firmware и софтуер за флашване от линковете по-долу:

firmware

CPS software 

FreeDMR install

Инсталация на FreeDMR сървър.


В това описание може и да има и неумишлени грешки.

Бакъп на версията която работи и която беше FreeDMR ID: 2842 тук.


Следва описанието което съм следвал. Имайте в предвид че линковете може и да не са активни.

Сваляме сървърът от тук като tar.gz файл.

Аз използвам FileZilla за ъплоудването в сървъра.

cd /opt/

tar zxvf FreeDMR-master.tar.gz 

или може да се използва командата git.

apt update

apt upgrade

apt install git

Работната директория е /opt/ 

cd /opt/

git clone https://gitlab.hacknix.net/hacknix/FreeDMR.git

cd /opt/FreeDMR/
sh ./install.sh

python3 -m pip install -U pyOpenSSL cryptography

mkdir /var/log/freedmr/
mkdir config
cp FreeDMR-SAMPLE-commented.cfg config/FreeDMR.cfg
cp rules_SAMPLE.py config/rules.py

Аз предпочитам конфигурационните файлове да имат коментари но за да спестя място тук няма да публикувам коментарите във конфигурационните файлове.

 nano /opt/FreeDmr/config/FreeDMR.cfg

 --------------------------------------

[GLOBAL]
PATH: ./
PING_TIME: 10
MAX_MISSED: 3
USE_ACL: True
REG_ACL: PERMIT:ALL
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
GEN_STAT_BRIDGES: False
ALLOW_NULL_PASSPHRASE: True
ANNOUNCEMENT_LANGUAGES: en_GB,en_US,es_ES,fr_FR,de_DE,dk_DK,it_IT,no_NO,pl_PL,se_SE,pt_PT,CW
SERVER_ID: 0000
VALIDATE_SERVER_IDS: False
DATA_GATEWAY: False

[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: FreeDMR

[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
TGID_URL: http://downloads.freedmr.uk/downloads/talkgroup_ids.json
LOCAL_SUBSCRIBER_FILE: local_subcriber_ids.json
STALE_DAYS: 1
SUB_MAP_FILE:
SERVER_ID_URL: http://downloads.freedmr.uk/downloads/FreeDMR_Hosts.csv
SERVER_ID_FILE: server_ids.tsv

[ALLSTAR]
ENABLED: False
USER:llcgi
PASS: mypass
SERVER: my.asl.server
PORT: 5038
NODE: 0000

[MYSQL]

ENABLED: False
USE_MYSQL: False
USER: hblink
PASS: mypassword
DB: hblink
SERVER: 127.0.0.1
PORT: 3306
TABLE: repeaters

[OBP-TEST]
MODE: OPENBRIDGE
ENABLED: False
IP:
PORT: 62044
NETWORK_ID: 1
PASSPHRASE: mypass
TARGET_IP:
TARGET_PORT: 62044
USE_ACL: True
SUB_ACL: DENY:1
TGID_ACL: PERMIT:ALL
RELAX_CHECKS: False
ENHANCED_OBP: False
PROTO_VER: 2

[SYSTEM]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 1
EXPORT_AMBE: False
IP: 127.0.0.1
PORT: 54000
PASSPHRASE:passw0rd
GROUP_HANGTIME: 5
USE_ACL: True
REG_ACL: DENY:1
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
DEFAULT_UA_TIMER: 60
SINGLE_MODE: True
VOICE_IDENT: True
TS1_STATIC:
TS2_STATIC:
DEFAULT_REFLECTOR: 0
ANNOUNCEMENT_LANGUAGE: en_GB
GENERATOR: 100
ALLOW_UNREG_ID: True
PROXY_CONTROL: True
OVERRIDE_IDENT_TG:

[ECHO]
MODE: PEER
ENABLED: False
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54916
MASTER_IP: 127.0.0.1
MASTER_PORT: 54915
PASSPHRASE: passw0rd
CALLSIGN: ECHO
RADIO_ID: 9990
RX_FREQ: 430500000
TX_FREQ: 439900000
TX_POWER: 25
COLORCODE: 1
SLOTS: 1
LATITUDE: 45.000000
LONGITUDE: 004.00000
HEIGHT: 320
LOCATION: FreeDMR-Echo:TG-9990
DESCRIPTION: ECHO
Url:
SOFTWARE_ID: 20170620
PACKAGE_ID: MMDVM_FreeDMR
GROUP_HANGTIME: 5
OPTIONS:
USE_ACL: False
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
TS1_STATIC:
TS2_STATIC:9990
DEFAULT_REFLECTOR: 0
ANNOUNCEMENT_LANGUAGE: en_GB
GENERATOR: 1
DEFAULT_UA_TIMER: 999
SINGLE_MODE: True
VOICE_IDENT: False

--------------------------------------

nano /opt/FreeDMR/config/rules.py

 --------------------------------------

BRIDGES = {
#'9990': [
#           {'SYSTEM': 'ECHO',   'TS': 2, 'TGID': 9990, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [9990], 'OFF': [],'RESET': []},
#        ],
}

if __name__ == '__main__':
    from pprint import pprint
    pprint(BRIDGES)

 --------------------------------------

Стартираме сървъра за да проверим дали няма някаква грешка в конфигурацията:

python3 ./bridge_master.py -c ./config/FreeDMR.cfg -r ./config/rules.py

Пускаме сървъра като системен процес:

nano /lib/systemd/system/freedmr.service


--------------------------------------
[Unit]
Description=Start FreeDMR
After=multi-user.target

[Service]
ExecStart=/usr/bin/python3 /opt/FreeDMR/bridge_master.py -c /opt/FreeDMR/config/FreeDMR.cfg -r /opt/FreeDMR/config/rules.py

[Install]
WantedBy=multi-user.target
--------------------------------------

systemctl daemon-reload
systemctl start freedmr
systemctl status freedmr

Пускаме hotspot_proxy за да може автоматично да се пуска мастер за всеки спот или репитер които се закачат към сървъра. По подразбиране имаме 100 устройства които могат да се закачат към сървъра.

nano /lib/systemd/system/hotspot_proxy.service

--------------------------------------
[Unit]
Description=Start hotspot_proxy
After=multi-user.target

[Service]
ExecStart=/usr/bin/python3 /opt/FreeDMR/hotspot_proxy_v2.py

[Install]
WantedBy=multi-user.target
--------------------------------------

systemctl daemon-reload
systemctl start hotspot_proxy
systemctl status hotspot_proxy

Добавяме папагал за ехотест.

nano /opt/FreeDmr/config/FreeDMR.cfg

В секция  [ECHO] променяме ENABLED: False на ENABLED: True

nano /opt/FreeDMR/playback.cfg

 --------------------------------------

[GLOBAL]
PATH: ./
PING_TIME: 10
MAX_MISSED: 3
USE_ACL: True
REG_ACL: PERMIT:ALL
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
GEN_STAT_BRIDGES: False
ALLOW_NULL_PASSPHRASE: False
ANNOUNCEMENT_LANGUAGES: es_ES
SERVER_ID: 9990
DATA_GATEWAY: False
VALIDATE_SERVER_IDS: False

[REPORTS]
REPORT: False
REPORT_INTERVAL: 60
REPORT_PORT: 4821
REPORT_CLIENTS: 127.0.0.1

[LOGGER]
LOG_FILE: /dev/null
LOG_HANDLERS: console-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
TGID_URL: http://downloads.freedmr.uk/downloads/talkgroup_ids.json
LOCAL_SUBSCRIBER_FILE: local_subscriber_ids.json
STALE_DAYS: 7
SUB_MAP_FILE:
SERVER_ID_FILE:
SERVER_ID_URL:

[MYSQL]

ENABLED: False
USE_MYSQL: False
USER: hblink
PASS: mypassword
DB: hblink
SERVER: 127.0.0.1
PORT: 3306
TABLE: repeaters

[OBP-TEST]
MODE: OPENBRIDGE
ENABLED: False
IP:
PORT: 62044
NETWORK_ID: 1
PASSPHRASE: mypass
TARGET_IP:
TARGET_PORT: 62044
USE_ACL: True
SUB_ACL: DENY:1
TGID_ACL: PERMIT:ALL
RELAX_CHECKS: False

[PARROT]
MODE: MASTER
ENABLED: False
REPEAT: True
MAX_PEERS: 1
EXPORT_AMBE: False
IP: bmproject.freedmr.uk
PORT: 54915
PASSPHRASE: passw0rd
GROUP_HANGTIME: 5
USE_ACL: True
REG_ACL: DENY:1
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
DEFAULT_UA_TIMER: 10
SINGLE_MODE: True
VOICE_IDENT: False
TS1_STATIC:
TS2_STATIC:
DEFAULT_REFLECTOR: 0
GENERATOR: 1
ANNOUNCEMENT_LANGUAGE:es_ES
ALLOW_UNREG_ID: True
PROXY_CONTROL: False


[PLAY]
MODE: PEER
ENABLED: True
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54002
MASTER_IP: localhost
MASTER_PORT: 54001
PASSPHRASE: homebrew
CALLSIGN: M0XFD
RADIO_ID: 2340210
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: play_file.py
URL: www.w1abc.org
SOFTWARE_ID: 20170620
PACKAGE_ID: MMDVM_FreeDMR
GROUP_HANGTIME: 5
OPTIONS:
USE_ACL: True
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
ANNOUNCEMENT_LANGUAGE: en_GB

 --------------------------------------

nano /opt/FreeDMR/config/rules.py

 --------------------------------------

BRIDGES = {
'9990': [
           {'SYSTEM': 'ECHO',   'TS': 2, 'TGID': 9990, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [9990], 'OFF': [],'RESET': []},
        ],
}

if __name__ == '__main__':
    from pprint import pprint
    pprint(BRIDGES)

 --------------------------------------

Пускаме папагала като системна услуга:

nano /lib/systemd/system/parrot.service

 --------------------------------------

[Unit]
Description = HB bridge all Service
After = network-online.target syslog.target
Wants = network-online.target

[Service]
StandardOutput = null
WorkingDirectory = /opt/FreeDMR
RestartSec = 3
ExecStart = /usr/bin/python3 /opt/FreeDMR/playback.py -c /opt/FreeDMR/playback.cfg
Restart = on-abort
 

[Install]
WantedBy = multi-user.target

 --------------------------------------

systemctl enable parrot
systemctl start parrot
systemctl status parrot

Инсталираме дашборд.

За да виждаме какво става във сървъра инсталираме дашборд който работи със Apache2 или webserver-python:

cd /opt/
git clone https://github.com/sp2ong/HBMonv2.git
cd HBMonv2
git checkout webserver-python
chmod +x install.sh
./install.sh
cp config_SAMPLE.py config.py

Редактираме config.py където може да променим порта и паролата за достъп до дашборда а и други неща ;)

nano /opt/HBMonv2/config.py

Пускаме монитора като сървис на системата:

cp utils/hbmon.service /lib/systemd/system/
systemctl enable hbmon
systemctl start hbmon
systemctl status hbmon

Пренасочваме TCP port 9000 и web server port 8080 във firewall на рутера за да се виждат отвън а така също и UDP port 62031 на който се извършва комуникацията между клиентите и сървъра.

Друга версия за дашборд:

https://github.com/yuvelq/FDMR-Monitor

 

Бакъп на моят FreeDMR сървър

Сървърът вече не е част от мрежата FreeDMR. Делистнат е и се ползва като личен сървър. Дашборда му се вижда тук.  

За FreeDMR

FreeDMR

Широко се рекламира сред радиолюбителите един нов DMR сървър - FreeDMR.

Бил свободен стабилен сървър.

Първообразът на този сървър е HBlink. Свободен DMR сървър който може да се използва за изграждане на малки DMR мрежи от няколко репитера или хотспота и позволява да се регулира трафика идващ от различни сървъри като IPSC2, XLX, BrandMeister. Pi-Star също има подобни възможности но HBlink притежава някои екстри в повече.

И така реших да го пробвам.

След доста ровене из нета попаднах на описание за инсталация и конфигурация на този сървър. Там имаше линк от където можеше да се свали имидж на сървъра. (Това описание за инсталация вече не е валидно.)

Какво представлява инсталацията на този сървър? В имиджа има един файл install.sh който инсталира група от пакети необходими на имиджа за да работи. След което сървърът се стартира от един файл в имиджа.

Дашборда се инсталира по подобен начин.

Оказа се че във описанието умишлено са допуснати много синтактични грешки които явно целят да объркат по-незапознатите със синтаксиса на променливите използвани в конфигурационните файлове.

След доста борба със грешките в крайна сметка сървърът тръгна.

Опитах да свържа Pi-Star към него. Pi-Star отчита, че е свързан но сървърът не отчита подобна връзка.

Тогава пробвах да свържа HBlink. Връзката се оказа успешна но до тук.

Инсталирах ехотест. Ехотеста е самостоятелен процес който работи на определен порт и слуша за определена толк група. Ехотеста работи но няма комуникация между ехотеста и сървъра.

Очевидно и тук разработчиците са заложили капанчета които за сега не успявам да открия.

Накрая реших да инсталирам сървъра от нулата на друга машина която е свързана към друг доставчик на Интернет и тук вече ударих на камък.

Оказа се че мястото от което свалих имиджа вече не съществува. Вече не може да се свали имиджа на този сървър и да се инсталира.

След проверка се оказа, че има друг метод на инсталация чрез Docker. Какво е това чудо? Ами това е (образно казано) кутия във която е поставен сървърът и в която той работи. Извън кутията се намират само някои от конфигурационните файлове и са достъпни без да има нужда кутията да се отваря.

Позаинтересувах се от въпросният Docker и останах направо шокиран. Docker се използва от приложения като Adobe, PayPal, Netflix... Приложения които използват затворен код.

Значи, апапите които разработват „свободният“ сървър за DMR са взели свободният HBlink преработили са го и сега го набутват в кутия в която не всеки може да види какво има и да го промени и настрои към собствените си нужди.

Е това вече не е свободен софтуер. Това е софтуер който е достъпен само за тесен кръг от посветени хора. На страницата за инсталиране на сървъра има въпрос, има ли FreeDMR сървър във вашата страна? Ако има не е необходимо да инсталирате друг... С други думи казано, ще работим само с един представител на държава...

Такова е положението и в IPSC2 и във BrandMeister. И така за нашего брата остава само HBlink.

В момента може да се инсталира FreeDMR чрез докер НО!!! За целта ще ви трябва самостоятелна машина без никакви други сървъри инсталирани на нея, отделен IP адрес и домейн.

Е... мерси съм ама няма да отделям машина и домейн само за един сървър. Към момента Българският „FreeDMR“ е бриджнат с мрежата IPSC2 BG. Какво означава това? Ами това вече не е свободен самостоятелен сървър а просто една толк група от мрежата на IPSC2 BG. Към този сървър няма свързани репитри а само спотове. Използва се репитерната мрежа на IPSC2 BG.

При това положение за какво ми е да правя връзка към българският „FreeDMR“ който използва репитерната мрежа на IPSC2 BG? За какво да тормозя малкият Pi-Star с още мрежи? За България е достатъчно на Pi-Star да се активират само две DMR мрежи - IPSC2 BG (която е бриджната с FreeDMR) и BrandMeister (която е бриджната с XLX 359) Дето има една дума с един куршум два заека, е в случая четири.

 

Борбата за пускане на FreeDMR сървъра продъжава да видим до къде ще стигна. 

п.п.

Оказа се, че нещата са преместени, вижте следващата статия. Все още може да се инсталира без Докер но няма добри инструкции как това се прави.


73 de LZ5PN


За цифровизацията и авторитаризма в радио-любителското движение

В началото бе Ехолинк.

Сървър който позволяваше свързването на аналогов ретранслатор към софтуерен клиент. По този начин радиолюбителите придобиха възможността да използват компютър свързан към интернет за да комуникират помежду си.

Следващото нещо бе Зело.

Софтуерно радио при което идеята бе сходна с тази на Ехолинк.

Накрая дойдоха Д-Стар, ДМР, Фюжън радиостацийте които имат цифров режим на работа.

С тях се появиха и сървъри които свързваха ретранслаторите в мрежа подобно на GSM мрежите.

Възможностите за комуникация се увеличиха.

Но цифровите системи така също дават възможност и за контрол. Контролът от своя страна води до цензура. Цензурата е инструмент на авторитарните управления.

И така някои радиолюбители стоящи в управлението на БФРЛ решават да определят кой с кого да прави радио връзки което противоречи на принципите на радиолюбителското движение.

Стигна се до там, да се отказва провеждането на изпити организирани от групи радиолюбители и да се налага провеждането на изпитите да става под контрола на БФРЛ и само в столицата.

Администраторите на сървъри започнаха да банват радиолюбители за щяло и нещяло. За изказвания в публичното пространство противоречащи на мнението на опеделени хора в БФРЛ.

Други админи не допускаха Зело или Ехолинк до техните мрежи усложнявайки процедурите по свързването.

Тогава започна търсенете на алтернативи.

Една такава бе ХБлинк. За нещастие много админи на БрандМастер предимно от САЩ се опитаха да нап

 цифровизацията

равят ХБлинк система извън "закона" С непрекъснати атаки срещу създателя на ХБлинк го принудиха да затвори хранилището в ГитХъб.

Отговорът бе създаване на копия на този софтуер в ГитХъб. И така ХБлинк не умря но остана без съпорт.

По това време админа на Английският БрандМастер който набриджвал света към ХБлинк бива изгонен от БрандМастер и създава на базата на ХБлинк ФриДМР.

Ние помислихме, че това е продължението на ХБлинк и аз заедно с още двама колеги го пробвахме. За мен лично се оказа че разлика във функционалността почти няма и се отказах от този проект.

Остана само сървърът на LZ1GSP.

Радиолюбителите обаче не обичат ограниченията налагани от разни авторитарни личности. В търсене на свобода те обаче се разделиха на фракции които започнаха война за надмощие и така се стигна до така наречените репитерни войни.

БФРЛ като собственик на по-голяма част от ретранслаторите разположени по високи върхове и обекти на НУРТС започна да използва ИПСЦ2 сървър отделяйки се от БрандМастер.

Радиолюбителите които си комуникираха през БрандМастер бяха оставени без ретранслатори и се наложи да работят през персонални спотове (микро ретранслатори)

Ограничаването на свободата доведе до използването на ХБлинк а в последствие на ФриДМР но ретранслаторите поддържащи връзка към тези сървъри се брояха на пръстите на едната ръка.

Това разцепление доведе до това основно комуникацията да става чрез персонални спотове на ФриДМР.

И така имаме мрежа от ретранслатори свързани към ИПСЦ2 сървър но там не е интересно и се комуникира на сървър без ретранслатори. Тогава от БФРЛ собствениците на ИПСЦ2 сървъра и ретранслаторната мрежа влизат в съглашателство със ФриДМР и правят обединение.

Тук именно е грешката на админа на ФриДМР който прави бридж между ИПСЦ2 и ФриДМР на националната група на ФриДМР ТГ284. Това довежда до насилствено обединение което като отговор довежда до загубата на един от деата ретранслатора на които имаше ФриДМР. Но на война като на война. Губиш един за да спечелиш много.

От авторитаризъм към тоталитаризъм.

Уроците на историята обаче показват друго.

Когато на времето БФРЛ се отцепи от БМ и премина към ИПСЦ2 се получи затихване на комуникацийте на ИПСЦ2. БФРЛ чрез техният сървър ИПСЦ2 погълнаха независимите ретранслатори които бяха към БМ но не успяха да погълнат отделните радиолюбители. Сливането на ИПСЦ2 и ФриДМР се очкваше да присъедини отцепилите се по други сървъри радиолюбители. След първоначалната еуфория и краткият бум на комуникация, въпреки неистовите опити на някои радиолюбители стоящи в основата на това "обединение", комуникацията започна да затихва. Така както на времето затихна след отделянето на БФРЛ от БМ.

Какви изводи можем да направим?

Налагането на авторитарно управление на хора които имат свободен дух в крайна сметка води до разпад на това авторитарно управление.

Ако погледнем назад в историята, робовладелският строй отстъпва място на по-либералният феодален строй, който от своя страна отстъпва място на капиталистическият строй. Комунистическата диктатура се явява съвременен опит за възстановяване на феодалният строй със някакви псевдосоциални нюанси. Но тази утопия също търпи крах.

И така нещата се повтарят много сходни и във радиолюбителското движение.

Не може да има обедидение базирано на диктатура. Това не е обедидинение, това е тоталитарна диктатура.

Ако някой иска обединение най-лесно това може да стане през БрандМастер като се направят бриджове между мрежите. Такъв успешен бридж работи от преди началото на репитерните войни между сървърът ХЛХ359 и БрандМастер на ТГ284359.

Нищо не пречи на админите на сървърите ако понамалят малко егото си и обединят ИПСЦ2 на БФРЛ които имат и ХЛХ сървър 023 на ТГ284023 на БМ. Сървърът ФриДМР също има ХЛХ - 799, могат да го обединят на ТГ284799.

Технически е възможно.

Няма директна връзка, мрежите запазват своята независимост и функционалност но има врата през която може да се комуникира. По същият начин може да се изградят кръстосани връзки между мрежите и накрая неизбежно всички може да се обединят на националната група ТГ284.

Този сценарий е възможен. Единственото което пречи на изпълнението му е егото и авторитаризма на някои админи и някои ръководители на БФРЛ.

Дано разумът надделее и в крайна сметка да получим свободна комуникация между сървърите и тази репитерна война най-после да приключи.

73 de LZ5PN