NMEA 0183 (海洋 / 船舶)
NMEA 0183 は、米国 National Marine Electronics Association が1983年に標準化した海洋 / 船舶機器向けのASCII通信規約です。GPS / ジャイロコンパス / 風速計 / 魚群探知機 / AIS など、ほぼすべての海洋センサーがこの sentence フォーマットを使用します。
ゲートウェイのNMEAドライバは TCP (NMEA over IP) で sentence stream を受信し、checksum (XOR) を検証した後、sentence type ごとにフィールドをパースして公開します。読み取り専用 です。
船舶統合ブリッジのように IEC 61162-450(Lightweight Ethernet) でセンテンスをマルチキャストする環境では IEC 61162-450 ドライバ を使用してください。センテンスパーサーが同一であるため、タグアドレス表記と alias は本ドキュメントと完全に同じです。
登録フォーム入力値
| 入力欄 | 記入内容 | 例 |
|---|---|---|
| IPアドレス | NMEA多重化装置 / ルーターのIP | 192.168.0.140 |
| ポート | NMEA TCPポート | 10110 (de-facto標準) / 4001 (機器別) |
- 文字セットは US-ASCII 固定 です (フォームオプションなし)。
- 詳細オプション
nmea.port(フォーム非表示 — REST API 登録時にoptionsでのみ指定): 値がある場合、上記フォームのポートの代わりにこの値で接続します。
NMEA 0183 は sentence の単方向 broadcast が一般的です。ゲートウェイは read-only で動作します。機器制御が必要な環境では、NMEA 2000 / Modbus ゲートウェイを別途設置してください。
タグのPLCアドレス表記
アドレスは <sentence-type>.<field-no|alias> — ドット(.)表記 です。フィールド番号は talker 2文字を除いた 1-base インデックスです。
| 表記 | 意味 |
|---|---|
RMC.7 | RMC の7番目のフィールド (対地速力 kn) |
GGA.2 | GGA の2番目のフィールド (緯度) |
RMC.lat | alias — 下表参照 (大文字小文字は無関係) |
RMC | (フィールド省略) 最後に受信した raw センテンス全体 |
alias が定義されていない sentence type もフィールド番号 (XXX.3) でアクセスでき、タイプのみ記入すると raw センテンス全体を文字列として受け取ります。
コロン表記 (RMC:lat) と RAW:<sentence-type> 表記はサポートしません — それぞれ RMC.lat、<sentence-type> (タイプのみ) で登録してください。satellites / windAngle / windSpeed のような長い名前の alias もありません — 実際の alias は sats / angle / speed です (下表がドライバ定義の全体です)。
対応 sentence / alias 全体 (ドライバ定義)
| sentence | alias |
|---|---|
RMC | utc, status, lat, ns, lon, ew, speed (kn), course, date, magvar, magvarew, mode |
GGA | utc, lat, ns, lon, ew, fix, sats (衛星数), hdop, alt, altunit, geoidsep, sepunit, dgpsage, dgpsid |
GLL | lat, ns, lon, ew, utc, status, mode |
VTG | cogtrue, cogmag, speed (kn, = speedkn), speedkm (km/h), mode |
GSA | mode1, mode2, pdop, hdop, vdop |
GSV | totalmsgs, msgnum, satsinview |
HDT | heading (true), t |
HDM | heading (magnetic), m |
MWV | angle (風向角), ref (R/T), speed (風速), units, status |
DBT | depthft, depthm (= depth, m), depthfa |
DPT | depth (m), offset, max |
MTW | temp, units |
VHW | headingt, headingm, speed (kn), speedkm |
ZDA | utc, day, month, year, tzh, tzm |
XDR | type, value, units, id (最初の transducer グループのみ) |
受信ルール (ドライバ動作)
$で始まるセンテンスのみ 処理します —!encapsulation (AIS の AIVDM / AIVDO) は非対応。- checksum (
$~*区間のXOR) が一致しないセンテンスは破棄します。checksum のないセンテンス (一部の旧型機器) は受け入れます。 - talker 2文字 (GP / GN / GL / HC / II …) は自動的に除去されます —
$GPRMCと$GNRMCは同じRMCキーにキャッシュされ、最後に受信した値が公開 されます。proprietary$P...センテンスは talker を分離せずそのままキーになります。
データ形式のマッチング
値は sentence フィールドの ASCII 原文そのまま 公開されます — ドライバは単位 / 座標変換を行いません。
| sentence フィールド | データ形式 | 形式補助 |
|---|---|---|
| 速度 / 水深 / 高度 / DOP などの数値フィールド | Float | REAL |
| Fix品質 / 衛星数 | Integer | (空欄) |
| 緯度 / 経度 (DDMM.MMMM 原文) | Float (+ 計算式による変換を推奨) | REAL |
| UTC時刻 / ステータス文字 (A/V) / raw センテンス | String | STR[80] |
NMEA の緯度経度は「度度分分.分分」フォーマット (例: 4807.038 = 48°07.038′) であり、ドライバは十進度 (decimal degree) に変換しません。 十進度が必要な場合は 計算式の適用 でタグに変換式を設定してください。
よくある問題と解決
| 症状 / メッセージ | 考えられる原因 | 解決 |
|---|---|---|
| “Connection refused” | NMEAルーターのTCPポートが未開放 | 多重化装置 (Brookhouse / Actisense / NavLink2) の設定でTCP serverを有効化 |
| 一部の sentence のみ受信できない | 機器がその sentence を送信していない | 機器マニュアルで送信 sentence 一覧を確認 |
| 緯度経度が異常に大きい数値 | DDMM.MMMM 原文がそのまま公開されている (正常動作 — ドライバは変換しない) | 計算式の適用 で十進度に変換 |
| AIS (AIVDM) の値が受信できない | ! encapsulation 非対応 ($ センテンスのみ処理) | 別途 AIS デコーダを経由 (下記ヒント参照) |
| 同じセンテンスを複数の talker が送信 | talker 除去後は同じキー — 最後に受信した値のみ公開 | ルーターで talker filter を適用 |
| Sentence の受信が速すぎる | NMEA は通常 1Hz~10Hz | タグの polling 周期を1秒にすると最後の値を受け取ります |
よく使う例
船舶の基本GPS + 環境センサーのセット:
| タグ名 | アドレス | データ形式 | 形式補助 |
|---|---|---|---|
| 緯度 (DDMM.MMMM) | RMC.lat | Float | REAL |
| 経度 (DDDMM.MMMM) | RMC.lon | Float | REAL |
| 速度 (knots) | RMC.speed | Float | REAL |
| 衛星数 | GGA.sats | Integer | (空欄) |
| Fix品質 | GGA.fix | Integer | (空欄) |
| 風向角 | MWV.angle | Float | REAL |
| 風速 | MWV.speed | Float | REAL |
| 水深 (m) | DPT.depth | Float | REAL |
| ジャイロヘディング | HDT.heading | Float | REAL |
AIS (船舶識別) は NMEA 0183 の上に載る別個のペイロードです。AIVDM / AIVDO センテンスの binary payload のデコードが必要な場合は、別途 AIS デコーダ (gpsd / aisutils) を経由して取り込むことを推奨します。
さらに詳しい例 / 自動化登録
- 高度 — REST API の NMEA 例
- 技術詳細: NMEA 0183 ドライバ (advanced)