APRSに気象局としてデータをどう流すか?考える

この記事を読む およそ時間 4

今自宅で、気象観測プロジェクトをおこなっておりますが、もうかなり前から観測は続けています。

そこで、最近アマチュア無線の免許状を再取得(もうかなり前に開局してたんですが、時代の流れで有効期間を切らせ自動閉局しました)しましたので、色々運用に向けて再度準備をしていっている最中です。

APRSといえば、アマチュア無線のパケット通信AX.25の方式を使って、位置情報を送信して、トラッキングシステムなどを提供している通信網になります。

この辺りをみると免許を持ってない方でも楽しめるかと。
船の位置とかも取り込まれてますね。
https://aprs.fi/

気象局は?

上記の様なデータを流せるようです。自宅で計測しているデータは上記を全て網羅しているので、これらをどうにか流せないかを考えます。下記が観測しているデータです。

・外気温
・気圧
・湿度
・降水量
・風速
・風向き
・PM2.5(室内・野外)
・ライトニング(雷)
・放射線量

APRS連携の仕組みを考える

これら、稼働しているweatherStationの仕組みから直接は行けないんです。
色々な局面が、直接行ける方法を模索したのですが、現段階としては直接データをAPRS網へ投入する事は出来ない事が分かりました。

では、どうするの?

ここから先は、システムエンジニアの上での見せ所じゃないですか!?
そうですよ。どうにかするですよ。

1つ考えたのが、weatherStationから各Cloudに気象情報をアップロードしています。これは、数秒に1度アップロードしています。

そこのサイトを介して、API経由でデータを取得して、shellプログラムなどを駆使して、APRSで送信出来るデータに変換して、APRS網にデータを投入するパターンを考えています。

よって、まずは、センサーからMasterのコンソールへRFが送られているので、その電波を別の受信機用意して受信してデコードします。

次に、そのデコードしたデータをラズベリーパイをつかって、受信機でデコードしたデータを受信して変換処理をかけます。

その変換したデータを、TXTで書き出し、i-geteが動作しているPCにSMBプットしてやります。プットしたデータをi-geteであるUI-View32に渡してあげて、DR-120Xに内蔵しているTNCユニットにKISSモードで送信して、ファイナルより変調かけてデータを送信します。

使用するオープンソース

Weewxを使って、そこは攻め込んでいこうと思っています。
http://weewx.com/

なので、さっくりこの子をラズベリーパイに乗せていく作業を行います。
また、RFを受信している機材も良くて、このWeewxにプットしてくれる機能をもっているので、そいつを使って旨いことデータ連係をしていけば、最後はキット良い感じなシステムとして実現できると思います。

設計と構築は、これからやります。暇を見つけてやる感じになるかと思います。

ラズベリーパイを使う前に、サクッとVMの上のCentOS7でテストしてみましょう。というか、Esxiは常に起動しているので、ラズベリーパイを使う迄も無い気がしますけどね。

さくっとOSを入れてしまいます。CentOS7の64Bit版です。

ESXiのホストには、64GBのメモリーと16の物理コアを積んでいます。
なので、1つくらいインスタンスが増えてもびくともしません。

OSをインストールして、アップデートするところまできました。
あとは、この状態でスナップショットを作成して、ここまですぐ戻せる用に準備しましょう。

サクッとWeewxをインストールする

sudo yum install epel-release
sudo yum install pyserial pyusb
sudo yum install python2-pip#(オプション)
Tell your system to trust weewx.com:
sudo rpm --import http://weewx.com/keys.html

For Redhat 7, using Python 2
curl -s http://weewx.com/yum/weewx-el7.repo | sudo tee /etc/yum.repos.d/weewx.repo

Install WeeWX using yum (or dnf ).
sudo yum install weewx

GWとしてStationからのプッシュを受け入れるように機能拡張をする

Installation
 0) install weewx, select 'Simulator' driver
 http://weewx.com/docs/usersguide.htm#installing

 1) download the interceptor driver
 wget -O weewx-interceptor.zip https://github.com/matthewwall/weewx-interceptor/archive/master.zip

 2) install the driver
 sudo wee_extension --install weewx-interceptor.zip

 3) configure the driver
 sudo wee_config --reconfigure --driver=user.interceptor --no-prompt

 4)weewx config modify
 vi /etc/weewx/weewx.conf
 [Interceptor]
     driver = user.interceptor
     device_type = fineoffset-bridge
     port = 8000

 5) start weewx
 sudo systemctl restart weewx

 [root@localhost weewx]# netstat -an -tcp
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      18911/python2

これで、8000ポートを使ってStationからのデータプッシュが出来る様になります。

動作しているか確認する

適当にapacheでもnginxでもいれて、weewxがデータを書き出すディレクトリをドキュメントルートとして設定する。

/var/www/html/weewx/配下にhtmlを吐いているので、そこを見せてあげるとよい。

ブラウザーでhttp://IPアドレスで叩いてあげると、下記の様に動作している事が確認出来る。いったん、シュミレーターモードで値は適当である事に注意したい。最終的にGWからプッシュをして、ここに反映されるこまでを確認できれば、いったんここまではOKとなる。

GWの設定

スマホのアプリから該当のデバイスに接続して設定を行う。

だいたいこんな感じでいい気がする。

WeeWXに連携されているか確認する

Jan 10 21:13:06 localhost journal: weewx[15487] INFO user.interceptor: sensor map: {‘extraTemp2’: ‘temperature_2’, ‘pm2_5’: ‘pm2_5’, ‘soilTemp1’: ‘soil_temperature_1’, ‘soilTemp2’: ‘soil_temperature_2’, ‘soilTemp3’: ‘soil_temperature_3’, ‘soilTemp4’: ‘soil_temperature_4’, ‘txBatteryStatus’: ‘battery’, ‘outTemp’: ‘temperature_out’, ‘windSpeed’: ‘wind_speed’, ‘windGust’: ‘wind_gust’, ‘outHumidity’: ‘humidity_out’, ‘windDir’: ‘wind_dir’, ‘radiation’: ‘solar_radiation’, ‘inTemp’: ‘temperature_in’, ‘windGustDir’: ‘wind_gust_dir’, ‘barometer’: ‘barometer’, ‘windchill’: ‘windchill’, ‘dewpoint’: ‘dewpoint’, ‘rain’: ‘rain’, ‘extraHumid6’: ‘humidity_6’, ‘pressure’: ‘pressure’, ‘extraHumid4’: ‘humidity_4’, ‘extraHumid5’: ‘humidity_5’, ‘extraHumid2’: ‘humidity_2’, ‘extraHumid3’: ‘humidity_3’, ‘extraTemp8’: ‘temperature_8’, ‘extraHumid1’: ‘humidity_1’, ‘extraTemp6’: ‘temperature_6’, ‘extraTemp7’: ‘temperature_7’, ‘extraTemp4’: ‘temperature_4’, ‘extraTemp5’: ‘temperature_5’, ‘rainRate’: ‘rain_rate’, ‘extraTemp3’: ‘temperature_3’, ‘extraHumid8’: ‘humidity_8’, ‘extraTemp1’: ‘temperature_1’, ‘leafWet1’: ‘leafwetness_1’, ‘leafWet2’: ‘leafwetness_2’, ‘extraHumid7’: ‘humidity_7’, ‘UV’: ‘uv’, ‘soilMoist3’: ‘soil_moisture_3’, ‘soilMoist2’: ‘soil_moisture_2’, ‘soilMoist1’: ‘soil_moisture_1’, ‘inHumidity’: ‘humidity_in’, ‘soilMoist4’: ‘soil_moisture_4’}

なんか、JSONぽいフォーマットってJSONですねで、送り込まれている気がする。そして、データを見て見ると来てる来てる。

GWでセンサーからのRFを横取り?いい方が悪いデスね。横から通信内容を受信してデコードして、DBに格納していく所まで完了しました。

微調整は必要

単位がずれているのでグラフがおかしな事になっているのと、したの2021年とかが文字化けをしてるので、その当たりを微調整はしないと行けないですね。

どうも、画像に張り込まれている日本語が文字化けしているようなので、いったんそこは日本語化はあきらめて、CentOSのLangをenに切り替えて見た目上文字化けの無い様に設定をいったん変更しました。

こちらの方が精神衛生上良い感じですね。それに、各種単位を変更しました。風速m/s 気圧はhPaなどなど。

問題点

やはり、このツールを使っても、APRSのUI-View32に共有するデータは生成出来ないので、ちょっと+α別のツールを使います。

誤解がないように書いておくと、UI-View32への共有データは作成できないけど、APRSシステムへデータを流す機能としては、実装されているようです。

ただ、今回は無線側に流したいという想定なので、UI-VIEW32に解釈が出来るデータ用のテキストファイルを作成して、インプットしてあげないと行けないという状況でした。

それでは、まずはDBから直製直近のデータをエクスポートして、CSVに変換して取り出すことにしました。shellとかを使ってサクッと作りました。

weeWXのhtmlが保存されているdirectoryにCSVデータを書き出す事にしました。これらは、crontab経由で10分おきに作成して、上書きをする感じの設定にしました。

これで気象データが、CSVで出力出来る様になりました。
次に、データ共有用にWindowsにwgetを入れてあげます。

Wget for Windows http://gnuwin32.sourceforge.net/packages/wget.htm

上記のサイトから、下記の2つをダウンロードします。

かくそれぞれ、1番目に落としたなかには、wget.exeが./binの中にはいっているので、それをwgetなどのフォルダーを作成して入れてあげます。

2番目の圧縮ファイルからは、bin/のなかにライブラリーが5つほどはいっているので、それらをさっき作成したフォルダーに入れてあげます。

だいたいは、こんな感じです。

環境変数のPathに登録すると、どこでも使用可能になるので、かなり便利になります。当初SMBputを考えて居ましたが、SAMBAを入れないと行けない事と、IDというか、ユーザなども作らないと行けない為、ホスト側にCSVの抽出スクリプトを書いて、さらに、crontabで10分おきに上書きの設定をして、さらにWindowsの方でbatを使って、apach経由でさっきのCSVをwgetしてきて共有する方式にしました。

こんな感じで、サクッと気象情報のCSVがAPRS用のサーバに取り込まれるようになりました。

さて、これをですね。直接UI-View32で取り扱うことができないので、少し有料ソフトをつかって、コンバートしていくテストに移ります。

使うのはこのツール

https://www.weather-display.com/index.php

58ドルくらいのツールです。とりあえず、これでさっきのCSVが気象情報として読み込んでグラフに出来るかをテストします。一応30日間は無償で使えると書いてあります。

とまあ、難しい事はないです。最後に機動させると画面はでました。

めぼしい機能がここにありますね。WXNOW.TXTが作成したいのです。直接USBとかで接続出来れば、なんの苦労もなかったんですけどね。愚痴っても仕方がありません。

問題無く取れましたね。そして、例のWXNOW.TXTを書き出して見ます。

なにやら書き出されましたね。これにデータがのっているのか?どうかは分かりませんが、とりま出来た事には間違いないですね。

長くなりましたが、これで、weatherStation局としてのAPRS運用をどうにかなりそうですね。

あとは、30日後までに58ドルを支払って、レジストレーションしたらOKです。といっても、まだ無線局の免許状がおりてきてないので、何もできないんですけどね。そもそも、TNC内蔵しちゃったので、リグの申請も2段階でしないといけないので、まだまだ先ですね。

1日でかなり、集中して構築してきたので、頭がちょっと疲れました。これで、いったん寝ようと思います。明日は、ちょっと今の臭い案件の仕事をしないといけないので、今日くらいです。遊べるのは!!

Related posts

Leave a Comment