ハムログ SOTA-DB 変換ツール(ruby)

はじめに

 このスクリプトは2年前に公開したものの機能追加版です。Rubyもバージョンが進んで機能もよくなってきたのでバージョン2.6でモードや周波数(バンド)をテーブルで変換する機能を追加し、内部処理もHashからCSVモジュールを使って変更してみました。自分のHamLogデータ用なので、汎用性がありませんし、Actiator用だけの機能しかありませんが、変換テーブルを外付けのテキストファイルにしてありますので各局の運用形態に合わせて変更ができます。まあ、スクリプトなのでいかようにも変更できますが。

 SOTA日本支部のHPに掲載されている、WindowsソフトではなくDOSのコマンドプロンプトでの動作なので、一般的で誰でもが使えるようなものではないのですが、SOTAに参加している人でRubyに興味をもっていただければと思い公開します。個人的な興味で作成していますので内容はいまいちです。最近はPythonで記述することが多くなっていますが、たまにはRubyもわすれない程度に触っておかなければ。GUIについては面倒なのでやめました。(2019/01/26)

修正履歴

Ver2.2 (2019年1月26日)HashからCSV.Tableに変更
Ver2.1 (2019年1月24日)ver1.0よりPython版に合わせて下記の点を変更しました。
                ruby(2.6)、Windows10で確認しました。

変更内容

・SOTA-DB登録用のコールサイン,Remarks欄の位置,ハムログ出力のcvsファイル名は、定義ファイルに記述して読みこむ方式に変更。 運用上、この指定情報はほとんど変わらないため 
・SOTA-DB登録で使うモードとハムログで投入するモードが違う場合があるようなので、変換テーブルで変換する方式とした。変換テーブルはテキストファイルなので、各局が運用に合わせて追加、修正が可能。
・SOTA-DB登録で使用するバンド(周波数)とハムログに投入している周波数が細部まで入力している場合に、JARL制定のバンドプランの周波数範囲に合わせて変換するように変換テーブルで変換する方式とした。変換テーブルはテキストファイルなので修正可能。

ファイル構成図

A)定義ファイルの内容 Config.txt

 構成
   SOTA-DB登録用コールサイン,Remarks欄位置,ハムログCSVファイル名(入力ファイル
 内容
  先頭行はHeaderです。削除しないこと

Mycall,RmksPoint,HamlogFileName    
8J1JRL,2,Loglist.csv

B)モード変換テーブルの内容 mod_tbl.txt

 構成
   ハムログ上のモード,SOTA-DBでのモード
 内容
   先頭行はHeaderです。削除しないこと

Hamlog_mode,SOTA_mode   
AM,AM
SSB,SSB
CW,CW
FM,FM
ATV,Data
FAX,Data
SSTV,Data
RTTY,Data
RTY,Data
PSK,Data
PSK31,Data
PSK-31,Data
DIG,Data
DATA,Data
PSK63,Data
JT9,Data
JT65,Data
FT8,Data
FSQ,Data
DV,DV
FUSION,DV
DSTAR,DV
D-STAR,DV
DMR,DV
C4FM,DV

C)バンド変換テーブルの内容 frq_tbl.txt

 構成
  SOTA-DBでのバンド名,開始周波数,終了周波数
 内容
   先頭行はHeaderです。削除しないこと

SOTA-BAND,start-frq,end-frq   
1.8,1.810,1.9125
3.5,3.5,3.687
7,7.0,7.2
10,10.1,10.15
14,14.0,14.35
18,18.068,18.168
21,21.0,21.450
24,24.890,24.990
28,28.0,29.70
50,50.0,54.0
144,144.0,146.0
433,430.0,440.0
1240,1200,1300
2.3G,2400,2450
5.6G,5650,5850

  *変換テーブルの内容については、SOTA日本支部のHOTACAの説明文を参考にしました。

D)実行例

ハムログから出力した下記(ダミーです)のファイルを一括で読むと

8J1ABC,19/01/05,10:28J,59,59,1.82,CW,,,J,東村,小平市,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32
8J1DEF/1,19/01/05,10:33J,59,59,50,AM,,,J,木村,つくば市 丸山移動,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32
8J2ABC,19/01/05,10:37J,59,59,50,SSB,,,J,鈴木,足立区,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32
8J2DEF/1,19/01/05,10:44J,59,59,50,RTTY,,,J,小高,神奈川県中郡大磯町移動,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32
8J3ABC,19/01/05,10:46J,59,59,433.82,C4FM,,,J,松木,千葉市,,栃木県芳賀郡茂木町 高峯(520m) SOTA:JA/IB-010,32
8J3IHC,19/01/07,09:52J,59,59,50,SSB,,,J,佐々木,東京都小平,,HOME,32
8J3SFR,19/01/14,09:55J,59,59,50,A1,,,J,和田,荒川区,”FT-817+2.5mH SKYDOOR”,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J5CXT,19/01/14,09:59J,59,59,50.200,SSB,,,J,矢代,成田市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J0QOP/1,19/01/14,10:03J,59,59,50,SSB,,,J,神田,船橋市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J1TFL,19/01/14,10:05J,51,51,50,CW,,,J,大須,茅ヶ崎市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J1UJG,19/01/14,10:10J,59,59,50,RTTY,,,J,北,鎌倉市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8H1UJA,19/01/14,10:11J,59,59,50,SSB,,,J,山崎,川崎市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J5FDB,19/01/14,10:14J,59,59,50,FT8,,,J,安西,栃木市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J8QXS,19/01/14,10:17J,59,59,50,SSB,,,J,須藤,銚子市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J9DBJ,19/01/14,10:20J,59,59,50,C4FM,,,J,志田,鎌倉市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J3HHW,19/01/14,10:22J,59,59,50,SSB,,,J,崎山,藤沢市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J7WSU,19/01/14,10:24J,59,59,50,DSTAR,,,J,伊藤,東京都中野区,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J9TKK,19/01/14,10:28J,59,59,50,SSB,,,J,久保田,鎌ヶ谷市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J5AYT,19/01/14,10:29J,59,59,50,SSB,,,J,大久保,木更津市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J4RXX,19/01/14,10:31J,59,59,50.622,AM,,,J,奥田,印西市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J0OUR,19/01/14,10:35J,59,59,50,SSB,,,J,今坂,東京都千代田区,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J1VIJ,19/01/14,10:45J,59,59,50,SSB,,,J,乾,行田市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8H5EDM,19/01/14,10:46J,59,59,1260,SSB,,,J,南風,柏市,”No QSL”,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8K1GJY/1,19/01/14,10:49J,59,59,432.86,SSB,,,J,川田,相模原市緑区,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J31VHS,19/01/14,10:55J,59,59,144.205,SSB,,,J,川上,熊谷市,,茨城県つくば市 筑波山(877m) SOTA:JA/IB-003,32
8J9HXA,19/01/18,10:22J,58,59,430,FM,,,J,安藤,鴨川市,”RH-770 C520″,鴨川市 高鶴山(326m) ,32
8J9GRK,19/01/21,10:20J,59,59,7.120,SSB,,,J,上田,相模原市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J5AGK,19/01/21,10:24J,59,59,3.512,CW,,,J,杉,厚木市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J4SBM/1,19/01/21,10:28J,59,59,14.12,SSB,,,J,上岡,茨城県稲敷郡河内町,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J2XXC/1,19/01/21,10:31J,56,58,10.12,CW,,,J,川上,相模原市緑区,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J7FBD/1,19/01/21,10:38J,59,59,14.15,SSB,,,J,香取,霞ヶ浦市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J9PXD,19/01/21,10:46J,59,59,21.211,SSB,,,J,小林,かとり市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J8TUG,19/01/21,10:52J,59,59,24.891,SSB,,,J,上戸,常総市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J6AIG,19/01/21,10:55J,59,59,28.51,SSB,,,J,佐々木,佐野市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48
8J5VMM,19/01/21,10:59J,59,59,50.205,SSB,,,J,中村,日立市,,茨城県つくば市 宝篋山(461m) SOTA:JA/IB-022,48

下記のファイルが「sotacsv」フォルダ内に作成されます。ファイル名は運用日(UTC)と運用場所で構成されます。
読み込んだファイルの中にあるSOTA運用以外のデータは無視されます。モードとバンドはテーブルにより変換されます。

ファイル名:2019_01_05_JA_IB-010.CSV

V2,8J1JRL/1,JA/IB-010,05/01/19,0128,1.8MHz,CW,8J1ABC
V2,8J1JRL/1,JA/IB-010,05/01/19,0133,50MHz,AM,8J1DEF/1
V2,8J1JRL/1,JA/IB-010,05/01/19,0137,50MHz,SSB,8J2ABC
V2,8J1JRL/1,JA/IB-010,05/01/19,0144,50MHz,Data,8J2DEF/1
V2,8J1JRL/1,JA/IB-010,05/01/19,0146,433MHz,DV,8J3ABC

ファイル名:2019_01_14_JA_IB-003.CSV

V2,8J1JRL/1,JA/IB-003,14/01/19,0055,50MHz,Other,8J3SFR
V2,8J1JRL/1,JA/IB-003,14/01/19,0059,50MHz,SSB,8J5CXT
V2,8J1JRL/1,JA/IB-003,14/01/19,0103,50MHz,SSB,8J0QOP/1
V2,8J1JRL/1,JA/IB-003,14/01/19,0105,50MHz,CW,8J1TFL
V2,8J1JRL/1,JA/IB-003,14/01/19,0110,50MHz,Data,8J1UJG
V2,8J1JRL/1,JA/IB-003,14/01/19,0111,50MHz,SSB,8H1UJA
V2,8J1JRL/1,JA/IB-003,14/01/19,0114,50MHz,Data,8J5FDB
V2,8J1JRL/1,JA/IB-003,14/01/19,0117,50MHz,SSB,8J8QXS
V2,8J1JRL/1,JA/IB-003,14/01/19,0120,50MHz,DV,8J9DBJ
V2,8J1JRL/1,JA/IB-003,14/01/19,0122,50MHz,SSB,8J3HHW
V2,8J1JRL/1,JA/IB-003,14/01/19,0124,50MHz,DV,8J7WSU
V2,8J1JRL/1,JA/IB-003,14/01/19,0128,50MHz,SSB,8J9TKK
V2,8J1JRL/1,JA/IB-003,14/01/19,0129,50MHz,SSB,8J5AYT
V2,8J1JRL/1,JA/IB-003,14/01/19,0131,50MHz,AM,8J4RXX
V2,8J1JRL/1,JA/IB-003,14/01/19,0135,50MHz,SSB,8J0OUR
V2,8J1JRL/1,JA/IB-003,14/01/19,0145,50MHz,SSB,8J1VIJ
V2,8J1JRL/1,JA/IB-003,14/01/19,0146,1240MHz,SSB,8H5EDM
V2,8J1JRL/1,JA/IB-003,14/01/19,0149,433MHz,SSB,8K1GJY/1
V2,8J1JRL/1,JA/IB-003,14/01/19,0155,144MHz,SSB,8J31VHS

ファイル名:2019_01_21_JA_IB-022.CSV

V2,8J1JRL/1,JA/IB-022,21/01/19,0120,7MHz,SSB,8J9GRK
V2,8J1JRL/1,JA/IB-022,21/01/19,0124,3.5MHz,CW,8J5AGK
V2,8J1JRL/1,JA/IB-022,21/01/19,0128,14MHz,SSB,8J4SBM/1
V2,8J1JRL/1,JA/IB-022,21/01/19,0131,10MHz,CW,8J2XXC/1
V2,8J1JRL/1,JA/IB-022,21/01/19,0138,14MHz,SSB,8J7FBD/1
V2,8J1JRL/1,JA/IB-022,21/01/19,0146,21MHz,SSB,8J9PXD
V2,8J1JRL/1,JA/IB-022,21/01/19,0152,24MHz,SSB,8J8TUG
V2,8J1JRL/1,JA/IB-022,21/01/19,0155,28MHz,SSB,8J6AIG
V2,8J1JRL/1,JA/IB-022,21/01/19,0159,50MHz,SSB,8J5VMM

 

 

——————————————————————————————————————

ver1.0 (2016年1月)
ソースファイル(スクリプト)にSOTAID(コールサイン)を埋め込んでいるので、その後の手間はかかりませんが、ツールの位置づけレベルです。GUIなし、例外処理もしていません。

ハムログのRemaksに記述されている情報からSOTAのデータを自動判断

  • したがって読み込ませるデータにSOTA以外のデータがあってもOK、まとめて複数の移動ファイル作成に対応
  • SOTAにアップロードするデータのIDの移動地/nはRemarksから自動作成
  • JSTからUTCに自動変換して、ファイルは自動的に日付を分離して作成する
  • 作成されるSOTAアップロード用ファイル名は、リージョンコード、日付をつけて自動作成(同時に複数作成可能)
  • 作成するCSVファイルのデータは、時間でソートして、結果を外部ファイルを起動して確認、修正が可能。(時間でソートしていないとSOTA-DBにアップロード時点に確認メッセージが表示される)

 

ダウンロード

添付しているスクリプトは、公開するようなものではないのですが、参考のために公開しますが内容は、Rubyの初心者レベルです。

ver2.2 添付したファイル
 ◆sota.rb Rubyのスクリプトファイル  (テキスト形式)
 ◆config.txt コールサイン,Remarksへの投入位置,ハムログのCSVファイル名
 ◆regions_code.csv 県名,支部コードとリージョンコード,エリア数値の対応表
 ◆mod_tbl.txt  モード,ハムログ投入モードの対応表
 ◆frq_tbl.txt  バンド,周波数範囲(開始,終了)の対応表

ver1.0 添付したファイル内容
 ◆sota.rb Rubyのスクリプトファイル  (テキスト形式)
 ◆regions_code.CSV 県名,支部コードとリージョンコード,数値の対応表
 ◆Hamlogo変換説明書.pdf 簡単な説明と実行例

免責・注意事項

このスクリプトの動作により不具合が発生しても一切の責任は当方にはありません。本スクリプトの著作権は、little-ctc.comが所有しますが、改造は自由に行ってください。

なお、外部読み込みファイ(regions_code.CSV)を構成する、SOTAのリージョンコードの権利は、SOTA日本支部に帰属します。