|
29 September, 2017
DVSP2でPi-Star
DVSP2_on_Rpi-Zero(V1.3)+OLED(128x64)にPi-Starのイメージ(v3.4.5)を一部改変して動くようにした。また以下機能追加。
・ローカルUS-TRUST系レピーターに接続できるように
・OLEDによるヘッダーとショートメッセージ情報を表示できるように
・参考:http://www.pistar.uk/downloads/
・必須事項:ショートメッセージを表示させるためには、DStarRepeater by mkagawa の
パッケージを導入(make and install)して、いくつかの起動スクリプトの修正が必要です。
- serviceの停止*1
rootの権限で
systemctl stop dmrgateway.timer
systemctl disable dmrgateway.timer
systemctl stop dmrgateway.service
systemctl disable dmrgateway.service
systemctl stop ysfgateway.timer
systemctl disable ysfgateway.timer
systemctl stop ysfgateway.service
systemctl disable ysfgateway.service
systemctl stop pistar-upnp.timer
systemctl disable pistar-upnp.timer
systemctl stop pistar-upnp.service
systemctl disable pistar-upnp.service
systemctl stop p25gateway.timer
systemctl disable p25gateway.timer
systemctl stop p25gateway.service
systemctl disable p25gateway.service
systemctl stop p25parrot.timer
systemctl disable p25parrot.timer
systemctl stop p25parrot.services
systemctl disable p25parrot.services
systemctl stop ysfparrot.timer
systemctl disable ysfparrot.timer
systemctl stop ysfparrot.service
systemctl disable ysfparrot.service
systemctl stop mmdvmhost.timer
systemctl disable mmdvmhost.timer
systemctl stop mmdvmhost.service
systemctl disable mmdvmhost.service
systemctl stop minissdpd.service
systemctl disable minissdpd.service
- ノードタイプの選択(Configuration画面)
- ircddbgateway設定(expert→ircddbgateway画面)
- PHP編集
# nano /var/www/dashboard/admin/dstarrepeater/link_manager.php
while (!feof($dplusFile)) {
$dplusLine = fgets($dplusFile);
if (strpos($dplusLine, 'REF') !== FALSE && strpos($dplusLine, '#') === FALSE) {
↓
while (!feof($dplusFile)) {
$dplusLine = fgets($dplusFile);
if ((strpos($dplusLine, 'JP1') !== FALSE || strpos($dplusLine, 'REF') !== FALSE) && strpos($dplusLine, '#') === FALSE) {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^追加 *カッコも忘れないように
------------------------------------------
# nano /var/www/dashboard/admin/admin.php
while (!feof($dplusFile)) {
$dplusLine = fgets($dplusFile);
if (strpos($dplusLine, 'REF') !== FALSE && strpos($dplusLine, '#') === FALSE && strpos($dplusLine, 'REF001') === FALSE)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 削除
↓
while (!feof($dplusFile)) {
$dplusLine = fgets($dplusFile);
if ((strpos($dplusLine, '#') === FALSE) && strpos($dplusLine, 'REF001') === FALSE)
- DPlus_Local.txtを作成・追加
# nano /usr/local/etc/DPlus_Local.txt
JP1YJQ jp1yjq.xxx.yy ← ドメインまたはIPアドレス、デリミタは必ずタブのみにする
JP1YKM jp1ykm.xxx.yy ← ドメインまたはIPアドレス、デリミタは必ずタブのみにする
-----------------------
# nano /root/addlocal.sh
-----------------------
#!/bin/bash
FLAG=`grep JP1YJQ /usr/local/etc/DPlus_Hosts.txt`
if test "$FLAG" = ""; then
cat /usr/local/etc/DPlus_Local.txt >> /usr/local/etc/DPlus_Hosts.txt
pkill ircddbgatewayd
sleep 2
/usr/local/bin/ircddbgatewayd -daemon
fi
-----------------------
を作成して、
# chmod 755 addlocal.sh
と実行権を付与しておき、夜中3時過ぎに、新しい各種Hosts.txtがロードされ更新されてしまうので、
# crontab -e
0 4 * * * /root/addlocal.sh
として毎日4時に、Hostsファイルを追加し、ircddbgatewaydを再起動して読み込ませる。
- 他のcronでの自動起動を制限(コメントアウトしておく)
# nano /etc/crontab
# m h dom mon dow user command
#*/5 * * * * root /usr/local/sbin/pistar-upnp.service start > /dev/null 2>&1
# 17 * * * * root cd / && run-parts --report /etc/cron.hourly
- cronを再起動(念のため)
# /etc/init.d/cron restart
- OLEDへの表示
--- /root/lcdx.py ----
#!/usr/bin/python
#-*- coding:utf-8 -*-
#import RPi.GPIO as GPIO
import re
import subprocess
import json
from datetime import datetime
from oled import OLED
from oled import Font
from oled import Graphics
import sys
import time
# Connect to the display on /dev/i2c-1
dis = OLED(1)
# Start communication
dis.begin()
# Start basic initialization
dis.initialize()
# Do additional configuration
dis.set_memory_addressing_mode(0)
dis.set_column_address(0, 127)
dis.set_page_address(0, 7)
dis.set_inverse_display(0)
#dis.set_memory_addressing_mode(1)
# Clear display
dis.clear()
dis.deactivate_scroll()
# Set font scale x2
f = Font(2)
#from time import time, asctime, sleep, localtime
#def main():
while True:
msg = ""
station = ""
cmd = "tail -500 /var/log/pi-star/dstarrepeaterd.log | grep -e 'Slow' | tail -1 | cut -c43-61"
LastLink = subprocess.check_output(cmd, shell = True )
LastLink = LastLink.replace("Linked to", "")
NowDT = datetime.now().strftime("%H:%M")
cmd = "grep R_ShortMsg /var/log/pi-star/dstarrepeaterd.log | tail -1 | cut -c25-"
RSM = subprocess.check_output(cmd, shell = True )
m = json.loads(RSM)
if m and m['R_ShortMsg']:
match = m['R_ShortMsg']
station = match['station'].strip()
suffix = match['suffix'].strip()
msg = match['msg'].strip()
msg = msg.replace("/", " ")
if msg == '' or msg == '_' or "Not" in msg or "It is" in msg:
msg = NowDT + str.strip(LastLink)
pm1 = str(station)
pm2 = str(msg[0:5])
if "Linked" in msg:
pm3 = str(msg[6:15])
else:
pm3 = str(msg[5:14])
dis.clear()
f.scale = 2
f.print_string(0, 0, pm1)
f.print_string(0, 20, pm2)
f.print_string(0, 36, pm3)
dis.update()
else:
pm1 = str(station)
pm2 = str(msg[0:9])
if "Linked" in msg:
pm3 = str(msg[10:18])
else:
pm3 = str(msg[5:14])
dis.clear()
f.scale = 2
f.print_string(0, 0, pm1)
f.print_string(0, 20, pm2)
f.print_string(0, 36, pm3)
dis.update()
else:
pm1 = str(station)
pm2 = str(msg[0:9])
if "Linked" in msg:
pm3 = str(msg[10:18])
else:
pm3 = str(msg[9:18])
dis.clear()
f.scale = 2
f.print_string(0, 0, pm1)
f.print_string(0, 20, pm2)
f.print_string(0, 36, pm3)
dis.update()
time.sleep(4.1)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
pass
finally:
print "Goodbye!"
-------------------------
確認のため
# /root/lcdx.py &
と、常駐起動して動作確認。OKであれば、/etc/rc.local に追加しておく。
- 表示例
例-1 接続なく待機中の場合 例-2 ノードが接続先へ接続した時
ノードコール/現在の時刻/接続状態 ノードコール/接続状態/接続先
例-3 アクセス局にメッセージが無い場合 例-4 アクセス局にメッセージがある場合
アクセスコール/現在時刻/接続先 アクセスコール/ショートメッセージ(2行)
例-5 アクセス局にメッセージがある場合 例-6 接続後誰もアクセスなしの場合
アクセスコール/ショートメッセージ(2行) ノードコール/現在時刻/接続先
23 September, 2017
omxplayerからBluetoothへ
Raspberry Pi の動画再生で非常になめらかで具合のよいOMXPlayerと言うものがある。
ただ、なかなかBluetooth機器(例えばスピーカーやヘッドセットなど)に音が流れて
行かなかったが、以下サイトで解決した。(ほんとに感謝感謝!)
参考 http://mattintosh.hatenablog.com/entry/20161230/1483104680
- option指定方法
$ omxplayer -o alsa -z video.mp4
dprsのDest.Rpt表示
dprs v00.41でDest.Rptの列が表示されなくなったので、調べたところjdkのバージョン
違いによるものと判明したので、古いバージョンを使うようにlinkし直した。
- 準備
古いjdk-7-oracle-armhfを/usr/lib/jvm/にコピーして置く。(現在はjdk-8)
root@dvmega:~# ls -al /usr/bin/java
lrwxrwxrwx 1 root root /usr/bin/java -> /etc/alternatives/java
また
/etc/alternatives/java -> /usr/lib/jvm/jdk-7-oracle-armhf/jre/bin/java
なので、一度
rm -i /etc/alternatives/java
した後、↓のように再度リンクを張る
ln -s /usr/lib/jvm/jdk-7-oracle-armhf/jre/bin/java /etc/alternatives/java
- 確認
# /etc/init.d/dprs restart
18 September, 2017
OLED(i2c)表示を上下逆転させる方法
pythonでAdafruit_SSD1306を使って上下逆転方法がなかなか見つからなかったのでメモしておく。
- Libraryのインストール
$ git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
$ cd Adafruit_Python_SSD1306/
の後、installする前に
$ sudo jed /home/pi/Adafruit_Python_SSD1306/Adafruit_SSD1306/SSD1306.py
以下2か所を変更してから
#SSD1306_SETCOMPINS = 0xDA
SSD1306_SETCOMPINS = 0xA0
#SSD1306_COMSCANDEC = 0xC8
SSD1306_COMSCANDEC = 0xC0
$ sudo python setup.py install
とlibraryに追加する。
- Exampleを実行
$ cd examples
$ sudo python animate.py
|