MMDVMホットスポットのメンテナンス
Back
Alt+HOME
車のハンドルコラムにセットしてハンディ機でアクセスしているホットスポット(アクセスポイント)が全く立ち上がらなくなってしまいました。シャットダウンせずに車の電源を落としたりすること度々で致し方ない事ではあります。microSDのバックアップを残す人は多いとは思うのですが、私の場合そうなった時は、練習のためにリビルドしようというのが考え方ではあります。しかしこれに関してきっちりしたブログを残していなかったため結構手間取ってしまいました。
Raspberry Pi にOSを入れ、アプリケーションをインストール
使用するアプリケーション : MMDVMHost, ircDDBGateway, NextionDriver, WiringPi
- 先ず、OSと主なアプリケーションをインストールします。
詳しくは、「
最新版 ircDDBGateway と DStarRepeater のインストール (Pi OS)」を参照してください。
但し、今回は DStarRepeater の代わりに MMDVMHost を使用しますので下記のように読み替えてください。
また、GPIOを使用するために WiringPi のインストールも必要となりますので「
Wiring Pi(ワイヤリング・パイ)が必要!!?」をご参照ください。
$ git clone https://github.com/g4klx/DStarRepeater.git
↓
$ git clone https://github.com/g4klx/MMDVMHost.git
$ git clone https://github.com/g4klx/ircDDBGateway.git
$ git clone https://github.com/ON7LDS/NextionDriver.git
$ sudo apt -y install wx3.0-headers wx-common libwxgtk3.0-gtk3-0v5 libwxgtk3.0-gtk3-dev libwxbase3.0-0v5 libwxbase3.0-dev portaudio19-dev libportaudio2 build-essential libusb-dev libusb-1.0-0 libusb-1.0-0-dev
- MMDVMHostのソースファイルの一部を変更します
$ cd MMDVMHost
$ nano Nextion.cpp
GNU nano 5.4 Nextion.cpp
setlocale(LC_TIME,"");
char text[50U];
964行 strftime(text, 50, "t2.txt=\"%x %X\"", Time);
↓
strftime(text, 50, "t2.txt=\"%Y.%m.%d %X\"", Time);
sendCommand(text);
- NextionDriverのソースファイルの一部を変更します。
$cd NextionDriver
$ nano basicFunctions.c
GNU nano 5.4 basicFunctions.c
if (tempInF==0) {
134行目 sprintf(text, "t20.txt=\"%.1f%cC\"", val, 176); // 表示桁数変更(スペース無し>
} else {
val=(val*1.8)+32;
sprintf(text, "t20.txt=\"%2.1f %cF\"", val, 176);
}
//RXFrequency
double fx;
fx=RXfrequency;
fx/=1000000;
181行目 sprintf(text, "t30.txt=\"%.3fMHz\"",fx); // 表示桁数変更(MHz挿入)
sendCommand(text);
- コンパイルについては今回はCUIベースで使用しますので、各フォルダ(MMDVMHost、ircDDBGateway、NextionDriver)の中で make とするだけです。
$ sudo make install とすると /usr/bin/ に入ってしまいます。今回は手動で mv します。
- makeにて出来たバイナリーファイルや関連ファイルをフォルダに移動します。
$ cd MMDVMHost
$ sudo mv MMDVMHost /usr/local/bin/
$ sudo mkdir /usr/local/share/MMDVMHost
$ sudo cp DMRIds.dat RSSI.dat /usr/local/share/MMDVMHost/ // RSSI.datは空ファイルです。使用する無線機に該当する内容をコピー(どこかから)
$ sudo cp MMDVMHost.ini /etc/
$ sudo mkdir /var/log/MMDVM
$ cd ../ircDDBGateway/ircDDBGateway
$ sudo mv ircddgatewayd /usr/local/bin/
$ sudo cp ircddbgateway-emptyconfig /etc/ircddbgateway
$ cd ../Data
$ sudo mkdir /usr/local/share/ircDDBGateway
$ sudo cp *.* /usr/local/share/ircDDBGateway
$ cd && cd NextionDriver
$ make
$ sudo mv NextionDriver /usr/local/bin/
$ sudo mkdir /usr/local/share/NextionDriver/
$ sudo cp groups.txt users.csv /usr/local/share/NextionDriver
それぞれの初期設定ファイルを作成
- MMDVM.iniファイルの編集(NextionDriverの設定も含みます)
$ sudo nano /etc/MMDVM.ini
GNU nano 5.4 /etc/MMDVM.ini
[General]
Callsign=JL3ZBS
Id=4413004
Timeout=300
Duplex=0
# ModeHang=10
RFModeHang=1 # D-STARのみの使用なので default 10
NetModeHang=1 # 〃 default 3
Display=Nextion # ディスプレイとしてNextionを使用する
Daemon=0
[Info]
RXFrequency=438990000
TXFrequency=438990000
Power=1
# The following lines are only needed if a direct connection to a DMR master is being used
Latitude=0.0000
Longitude=0.0000
Height=0
Location=Nowhere
Description=Multi-Mode Repeater
URL=www.google.co.jp
[Log]
# Logging levels, 0=No logging
DisplayLevel=1
FileLevel=1
FilePath=/var/log/MMDVM/ # インストール時作成したフォルダ(自由)
FileRoot=MMDVM # ログファイルの頭文字
FileRotate=1 # ログローテイトします
[CW Id]
Enable=0
Time=10
# Callsign=
[DMR Id Lookup]
File=/usr/local/share/MMDVMHost/DMRIds.dat # インストール時作成ファイル移動
Time=24
[Modem]
# Valid values are "null", "uart", "udp", and (on Linux) "i2c"
Protocol=uart
# The port and speed used for a UART connection
# UARTPort=\\.\COM4
# UARTPort=/dev/ttyACM0
UARTPort=/dev/ttyAMA0
#UARTSpeed=460800
# The port and address for an I2C connection
#I2CPort=/dev/i2c
#I2CAddress=0x22
# IP parameters for UDP connection
#ModemAddress=127.0.0.1
#ModemPort=3334
#LocalAddress=127.0.0.1
#LocalPort=3335
TXInvert=1
RXInvert=0
PTTInvert=0
TXDelay=100
RXOffset=0
TXOffset=0
DMRDelay=0
RXLevel=50
TXLevel=50
RXDCOffset=0
TXDCOffset=0
RFLevel=100
# CWIdTXLevel=50
# D-StarTXLevel=50
# DMRTXLevel=50
# YSFTXLevel=50
# P25TXLevel=50
# NXDNTXLevel=50
# M17TXLevel=50
# POCSAGTXLevel=50
# FMTXLevel=50
# AX25TXLevel=50
RSSIMappingFile=/usr/local/share/MMDVMHost/RSSI.dat
UseCOSAsLockout=0
Trace=0
Debug=0
[Transparent Data]
Enable=1 # 後ほど説明する NextionDriverにて使用
RemoteAddress=127.0.0.1
RemotePort=40094
LocalPort=40095
SendFrameType=1
[D-Star]
Enable=1
Module=P
SelfOnly=0
AckReply=1
AckTime=750
AckMessage=0
ErrorReply=1
RemoteGateway=0
# ModeHang=10
WhiteList=
[DMR]
Enable=0 # 今回は使用せず(設定はそのまま使用可)
Beacons=0
BeaconInterval=60
BeaconDuration=3
ColorCode=1
SelfOnly=0
EmbeddedLCOnly=0
DumpTAData=1
# Prefixes=234,235
# Slot1TGWhiteList=
# Slot2TGWhiteList=
CallHang=3
TXHang=4
# ModeHang=10
# OVCM Values, 0=off, 1=rx_on, 2=tx_on, 3=both_on, 4=force off
# OVCM=0
[D-Star Network]
Enable=1
LocalAddress=127.0.0.1
LocalPort=20011
GatewayAddress=127.0.0.1
GatewayPort=20010
# ModeHang=3
Debug=0
[DMR Network]
Enable=0 # 今回は使用せず(設定はそのまま使用可)
# Type may be either 'Direct' or 'Gateway'. When Direct you must provide the Master's
# address as well as the Password, and for DMR+, Options also.
#Type=Direct
Type=Gateway
LocalAddress=127.0.0.1
#LocalPort=62032
LocalPort=3352 # DMRGatewayを使用する設定
RemoteAddress=127.0.0.1
#RemotePort=62031
RemotePort=3351 # DMRGatewayを使用する設定
#Password=P@ssw0rd1234
#Password=passw0rd
Jitter=360
Slot1=1
Slot2=1
# Options=
# ModeHang=3
Debug=0
[Nextion]
#Port=modem # NextionDriverを使用しない時の設定
Port=/dev/ttyNextionDriver # MMDVMHostからNextionDriverを通し・・・・・A
Brightness=100 # 液晶の明るさ設定(Full=100)
DisplayClock=1
UTC=0
#Screen Layout: 0=G4KLX 2=ON7LDS
ScreenLayout=2 # NextionDriverを使用するので ON7LDS
IdleBrightness= # 車での使用で暗くならないよう指定せず
[Lock File]
Enable=0
File=/tmp/MMDVM_Active.lck
[Remote Control]
Enable=0
Address=127.0.0.1
Port=7642
[NextionDriver]
#Port=/dev/ttyAMA0
Port=modem # NextionDriverからHS_HAT/JumboSPOTへ・・・B
LogLevel=2
DataFilesPath=/usr/local/share/NextionDriver/ # NextionDriverの項で説明
GroupsFile=groups.txt
DMRidFile=users.csv
RemoveDim=
SleepWhenInactive=600
ShowModesStatus=0
- ircddbgatewayの編集
$ sudo nano /etc/ircddbgateway
GNU nano 5.4 /etc/ircddbgateway
gatewayType=1
gatewayCallsign=JL3ZBS
gatewayAddress=
icomAddress=127.0.0.1
icomPort=20009
hbAddress=127.0.0.1
hbPort=20010
latitude=0.000000
longitude=0.000000
description1=
description2=
url=
repeaterCall1=
repeaterBand1=P
repeaterType1=0
repeaterAddress1=127.0.0.1
repeaterPort1=20011
reflector1=REF047 C
atStartup1=1
reconnect1=0
frequency1=0.00000
offset1=0.0000
rangeKms1=0.000
latitude1=0.000000
longitude1=0.000000
agl1=0.000
description1_1=
description1_2=
url1=
band1_1=0
band1_2=0
band1_3=0
repeaterCall2=
repeaterBand2=
repeaterType2=0
repeaterAddress2=127.0.0.1
repeaterPort2=20012
reflector2=
atStartup2=0
reconnect2=0
frequency2=0.00000
offset2=0.0000
rangeKms2=0.000
latitude2=0.000000
longitude2=0.000000
agl2=0.000
description2_1=
description2_2=
url2=
band2_1=0
band2_2=0band2_3=0
repeaterCall3=
repeaterBand3=
repeaterType3=0
repeaterAddress3=127.0.0.1
repeaterPort3=20013
reflector3=
atStartup3=0
reconnect3=0
frequency3=0.00000
offset3=0.0000
rangeKms3=0.000
latitude3=0.000000
longitude3=0.000000
agl3=0.000
description3_1=
description3_2=
url3=
band3_1=0
band3_2=0
band3_3=0
repeaterCall4=
repeaterBand4=
repeaterType4=0
repeaterAddress4=127.0.0.1
repeaterPort4=20014
reflector4=
atStartup4=0
reconnect4=0
frequency4=0.00000
offset4=0.0000
rangeKms4=0.000
latitude4=0.000000
longitude4=0.000000
agl4=0.000
description4_1=
description4_2=
url4=
band4_1=0
band4_2=0
band4_3=0
ircddbEnabled=0
ircddbHostname=rr.openquad.net
ircddbUsername=
ircddbPassword=
ircddbEnabled2=0
ircddbHostname2=rr.openquad.net
ircddbUsername2=
ircddbPassword2=
ircddbEnabled3=0
ircddbHostname3=
ircddbUsername3=
ircddbPassword3=
ircddbEnabled4=0
ircddbHostname4=
ircddbUsername4=
ircddbPassword4=
aprsEnabled=0
aprsHostname=rotate.aprs2.net
aprsPassword=
aprsPort=14580
dextraEnabled=0
dextraMaxDongles=5
dplusEnabled=1
dplusMaxDongles=2
dplusLogin=JL3ZBS P
dcsEnabled=1
ccsEnabled=0
ccsHost=CCS704
xlxEnabled=1
xlxHostsFileUrl=http://xlxapi.rlx.lu/api.php?do=GetXLXDMRMaster
starNetBand1=A
starNetCallsign1=
starNetLogoff1=
starNetInfo1=
starNetPermanent1=
starNetUserTimeout1=300
starNetGroupTimeout1=300
starNetCallsignSwitch1=0
starNetTXMsgSwitch1=1
starNetReflector1=
starNetBand2=A
starNetCallsign2=
starNetLogoff2=
starNetInfo2=
starNetPermanent2=
starNetUserTimeout2=300
starNetGroupTimeout2=300
starNetCallsignSwitch2=0
starNetTXMsgSwitch2=1
starNetReflector2=
starNetBand3=A
starNetCallsign3=
starNetLogoff3=
starNetInfo3=
starNetPermanent3=
starNetUserTimeout3=300
starNetGroupTimeout3=300
starNetCallsignSwitch3=0
starNetTXMsgSwitch3=1
starNetReflector3=
starNetBand4=A
starNetCallsign4=
starNetLogoff4=
starNetInfo4=
starNetPermanent4=
starNetUserTimeout4=300
starNetGroupTimeout4=300
starNetCallsignSwitch4=0
starNetTXMsgSwitch4=1
starNetReflector4=
starNetBand5=A
starNetCallsign5=
starNetLogoff5=
starNetInfo5=
starNetPermanent5=
starNetUserTimeout5=300
starNetGroupTimeout5=300
starNetCallsignSwitch5=0
starNetTXMsgSwitch5=1
starNetReflector5=
remoteEnabled=1
remotePassword=
remotePort=54321
language=0
infoEnabled=1
echoEnabled=1
logEnabled=1
dratsEnabled=0
dtmfEnabled=1
windowX=-1
windowY=-1
自動起動とタイミングの調整
- 最初に起動させるのは NextionDriverです。
この起動タイミングは、今回の場合 systemd-networkd.serviceのwpa_supplicant@wlan0.serviceを使用しているので、次のようになります。
$ sudo nano /etc/systemd/system/nextiondriver.service
GNU nano 5.4 /etc/systemd/system/nextiondriver.service
[Unit]
Description=NextionDriver service
DefaultDependencies=no
After=wpa_supplicant@wlan0.service
[Service]
User=root
Type=forking
ExecStart=/usr/local/bin/NextionDriver -i -c /etc/MMDVM.ini -vvv
[Install]
WantedBy=multi-user.target
RequiredBy=mmdvmhost.service
但し、この起動ファイルは自動起動にしないで、mmdvmhost.service が立ち上がる時に Requires で呼び起こします。
このようにして呼び出されたサービス(nextiondriver.service)は、呼び出したサービス(mmdvmhost.service)の前に立ち上がります。
- MMDVMHostのUnit Fileを作成する
先のNextionDriverもMMDVMHostもUnit Fileのサンプルは、ダウンロードしたNextionDriverの README ファイルに載っていますが、
事情に合わせて変更しています。
$ sudo nano /etc/systemd/system/mmdvmhost.service
GNU nano 5.4 /etc/systemd/system/mmdvmhost.service
[Unit]
Description=MMDVMHost Daemon (20210217)
After=wpa_supplicant@wlan0.service
Requires=nextiondriver.service
[Service]
User=root
ExecStartPre=/bin/sleep 3
ExecStart=/usr/local/bin/MMDVMHost /etc/MMDVM.ini
[Install]
WantedBy=multi-user.target
ここでも一応 wpa_supplicant@wlan0.service の後で起動する設定はしていますが、ポイントは Requires=nextiondriver.service としていることです。
これで、このファイルを自動起動にすれば、自身が起動する前に自動起動設定していないにも関わらず nextiondriver.service を起動します。
更に、それから sleep 3 して mmdvmhost.service が起動します。
この2つの設定によりグッドタイミングでモニターにデータが表示されます。
- ircddbgateway の自動起動を設定します。
これはモデムソフトであるMMDVMHostが起動してからのタイミング次第で、予め設定してある接続が即座に実行されるので、大事なポイントです。
$ sudo nano /etc/systemd/system/ircddbgateway.service
GNU nano 5.4 /etc/systemd/system/ircddbgateway.service
[Unit]
Description=D-STAR ircDDBGateway Daemon (20210217)
After=mmdvmhost.service
[Service]
ExecStartPre=/bin/sleep 4
ExecStart=/usr/local/bin/ircddbgatewayd
ExecStop=/usr/bin/killall ircddbgatewayd
Restart=on-failure
[Install]
WantedBy=multi-user.target
mmdvmhost.service の起動後 4秒置いて立ち上がります。
モニターの表示から、既存の接続(今回の場合 リフレクタ REF047 C に設定)が完了したアナウンスが聞こえてくるまで、
相当に長い場合などはこの秒数を調整してください。
Back
Alt+HOME
この 作品 は
クリエイティブ・コモンズ 表示 - 非営利 - 改変禁止 4.0 国際 ライセンス
の下に提供されています。
English
Powered by