MQTTを介して聞こえるすべてのメシュタスティックノードのマップ。
マップの私のバージョンは、https://meshtastic.liamcottle.netで入手できます
私の新しいMeshtastic WebクライアントであるMeshtxtをご覧ください

mqtt.meshtastic.orgに永続的に接続され、 msh/#トピックにサブスクライブされます。AQ==キーでそれを復号化しようとします。ServiceEnvelopeとしてデコードできない場合、それは無視されます。NODEINFO_APPパケットデータベースにノードを追加します。POSITION_APPパケットデータベース内のノードの位置を更新します。NEIGHBORINFO_APPパケットデータベースのノードで聞いたログネイバー。TELEMETRY_APPパケットデータベース内のノードのバッテリーと電圧メトリックを更新します。TRACEROUTE_APPパケットは、データベースにノードによって実行されるすべてのトレースルートをログに記録します。MAP_REPORT_APPパケットはデータベースに保存されますが、広く採用されていないため、まだ使用されていません。TEXT_MESSAGE_APPパケットを表示するリアルタイムメッセージUIが入ってきます。 NEIGHBORINFO_APPから取得されます。プロジェクトリポジトリをクローンします。
git clone https://github.com/liamcottle/meshtastic-map
cd meshtastic-map
nodejs依存関係をインストールします
npm install
.env環境ファイルを作成します。
touch .env
prismaのデータベース接続文字列を.envファイルに追加します。
DATABASE_URL="mysql://root@localhost:3306/meshtastic-map?connection_limit=100"
注:一部のクエリはMySQL固有です。他のDBプロバイダーはテストされていません。
データベースを移行します。
npx prisma migrate dev
MQTTリスナーを実行して、パケットをデータベースに保存します。
node src/mqtt.js
/apiを提供し、UIをマップするために、Expressサーバーを実行します。
node src/index.js
# Server running at http://127.0.0.1:8080
注:
--port 8123でカスタムポートを使用することもできます
meshtastic-map Repo内から次のコマンドを実行します。
# update repo
git fetch && git pull
# migrate database
npx prisma migrate dev
これで、 index.jsおよびmqtt.jsスクリプトを再起動する必要があります。
デフォルトでは、MQTTコレクターはパブリックMeshtastic MQTTサーバーに接続します。または、以下のヘルプセクションに示す関連オプションを提供して、独自のMQTTサーバーと独自の復号化キーに接続することもできます。
node src/mqtt.js --help
Meshtastic MQTT Collector
Collects and processes service envelopes from a Meshtastic MQTT server.
Options
-h, --help Display this usage guide.
--mqtt-broker-url string MQTT Broker URL (e.g: mqtt://mqtt.meshtastic.org)
--mqtt-username string MQTT Username (e.g: meshdev)
--mqtt-password string MQTT Password (e.g: large4cats)
--mqtt-topic MQTT Topic to subscribe to (e.g: msh/#)
--collect-service-envelopes This option will save all received service envelopes to the database.
--collect-text-messages This option will save all received text messages to the database.
--collect-waypoints This option will save all received waypoints to the database.
--collect-neighbour-info This option will save all received neighbour infos to the database.
--collect-map-reports This option will save all received map reports to the database.
--decryption-keys <base64DecryptionKey> ... Decryption keys encoded in base64 to use when decrypting service envelopes.
--purge-interval-seconds number How long to wait between each automatic database purge.
--purge-nodes-unheard-for-seconds number Nodes that haven't been heard from in this many seconds will be purged from the database.
独自のMQTTサーバーに接続するには、次のようなことをすることができます。
node src/mqtt.js --mqtt-broker-url mqtt://mqtt.example.com --mqtt-username username --mqtt-password password --decryption-keys 1PG7OiApB1nwvP+rz05pAQ==
TODO:このセクションは、この情報が時代遅れになっているため、更新します。 MQTTステータスは、そのノードによってパケットがMQTTにゲートされたときに更新するタイムスタンプに基づいて決定されます。
マップには、MQTTへの接続状態に基づいて、ノードの異なる色のアイコンが表示されます。
Green :オンライン(MQTTに接続)Blue :オフライン(MQTTから切断)これは、MQTTサーバーで/stat/!IDトピックを聴くことで機能します。
ノードがMQTTに接続すると、トピックにonlineで公開され、MQTTサーバーがクライアントが切断された(LWTを介して)検出されると、トピックにoffline公開します。
Meshtasticファームウェアは、MQTTサーバーがクライアントの切断時に公開するLWT(Last Will and Estament)を構成します。
ノードが起動した後、 online状態が公開されるまでに約30秒の遅延があります。 MQTTからノードが切断された後、 offline状態が公開されるまでに約30秒の遅延があります。
これは、ノードがWiFiを介してMQTTに接続する場合に適切に機能しますが、 MQTT Client Proxy機能を使用すると、ノードはAndroid/iOSデバイスにパケットを送信/受信し、デバイスがMQTTに接続してメッセージをプロキシします。
Meshtastic Node <-> Android/iOS <-> MQTT
残念ながら、その機能を使用する場合、 online / offline状態は予想どおりに機能しません。
これらのドキュメントを作成する時点で、モバイルデバイスはプロキシ化されているノードのLWTを正しく構成せず、したがってノードのoffline状態を公開しないため、MQTTからノードが切断されているかどうかは検出できません。
ノードは、MQTTサーバーのonline状態で「立ち往生」し続けます。
docker-compose.ymlが利用可能です。次のコマンドを実行してすべてを起動できます。
docker compose up
これは:
単体テストを実行するには、次のことを実行します。
npm run test
機能リクエストがある場合、またはバグを見つけた場合は、GitHubで問題を開いてください。
mit
このプロジェクトは、Meshtastic Projectと提携しておらず、承認されていません。
Meshtasticロゴは、Meshtastic LLCの商標です。