Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2022 when it's begining after/with CORONA Virus.

MMDVMホットスポットのメンテナンス

3月
11
2023
Back
Alt+HOME


車のハンドルコラムにセットしてハンディ機でアクセスしているホットスポット(アクセスポイント)が全く立ち上がらなくなってしまいました。シャットダウンせずに車の電源を落としたりすること度々で致し方ない事ではあります。microSDのバックアップを残す人は多いとは思うのですが、私の場合そうなった時は、練習のためにリビルドしようというのが考え方ではあります。しかしこれに関してきっちりしたブログを残していなかったため結構手間取ってしまいました。

Raspberry Pi にOSを入れ、アプリケーションをインストール


    使用するアプリケーション : MMDVMHost, ircDDBGateway, NextionDriver, WiringPi


  1. 先ず、OSと主なアプリケーションをインストールします。

  2. 詳しくは、「 最新版 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
    


  3. MMDVMHostのソースファイルの一部を変更します

  4. $ 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);


  5. NextionDriverのソースファイルの一部を変更します。

  6. $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);
    


  7. コンパイルについては今回はCUIベースで使用しますので、各フォルダ(MMDVMHost、ircDDBGateway、NextionDriver)の中で make とするだけです。 $ sudo make install とすると /usr/bin/ に入ってしまいます。今回は手動で mv します。


  8. makeにて出来たバイナリーファイルや関連ファイルをフォルダに移動します。

  9. $ 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
    


それぞれの初期設定ファイルを作成


  1. MMDVM.iniファイルの編集(NextionDriverの設定も含みます)

  2. $ 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
    


  3. ircddbgatewayの編集

  4. $ 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
    


自動起動とタイミングの調整


  1. 最初に起動させるのは NextionDriverです。

  2. この起動タイミングは、今回の場合 systemd-networkd.servicewpa_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)の前に立ち上がります。


  3. MMDVMHostのUnit Fileを作成する

  4. 先の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つの設定によりグッドタイミングでモニターにデータが表示されます。


  5. ircddbgateway の自動起動を設定します。

  6. これはモデムソフトである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