Closed currycooqoo closed 1 year ago
こんにちは。
# [UnicodeDecodeError] 'utf-8' codec can't decode byte 0xb7 in position 0: invalid start byte
デバイスの出力に '0xb7' が現れるということですね。それを文字にデコードしようとしたけど、文字コードにないので失敗すると。ということは、まずデバイスから正しく NMEA センテンスが出力されていることを確認してくみてださい。例えばこのようなコマンドで。
$ cat /dev/cu.SLAB_USBtoUART
レポートお待ちしています。
さて、EOFの件ですね。echo が終了しているので、そのストリームを受けていた azarashi は Encountered EOF
と出力して終了しています。これは正常な動作です。エラーなく完走したと解釈してください。
間違ってこのイシューをクローズしましたがオープンしましたので、追加レポートお待ちしています。
そうだ。OSはなんでしょうか? 詳細な環境を教えてもらえると解決の助けになれるかもしれません。
ご返信ありがとうございます。
環境 macOS 11.7.5 Bash 5.2.15 Python 3.9.16
echo $LANG
ja_JP.UTF-8
シリアルモニタだと正常に表示されているので何も疑問に思いませんでしたが、catで表示すると文字化けしていたので私のターミナルの問題のようでした。 他に確認すべき点ございますでしょうか?
シリアルモニタ
pio device monitor -b 115200 -p /dev/cu.SLAB_USBtoUART
--- Terminal on /dev/cu.SLAB_USBtoUART | 115200 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
$QZQSM,56,C6ADE2587680060003005A04002F7012CC80FB800000000000000013130DA10*71
$QZQSM,56,53ADF2584C8005047EA178542F32861350C30A18754322A864A000136096554*0B
$QZQSM,56,9AADF2584C8002CBCC5993CB3EF96A002D77AA08214106A823A000139FA1ED0*0D
以下略
上のセンテンスのひとつ
echo '$QZQSM,56,C6ADE2587680060003005A04002F7012CC80FB800000000000000013130DA10*71' | azarashi nmea
2023-04-22T15:03:23.155147 --------------------------------
防災気象情報(台風)(発表)(通常)
台風解析・予報情報が発表されました。
発表時刻: 4月22日12時45分
台風番号: 1号
基点時刻: 24日9時0分
基点時刻分類: 予報
情報の基点時刻からの経過時間: 45時間後
大きさ: なし
強さ: なし
緯度・経度: 北緯11度55分0秒 東経150度25分0秒
中心気圧: 1006hPa
最大風速: 不明
最大瞬間風速: 不明
Encountered EOF
cat
cat /dev/cu.SLAB_USBtoUART
�
��
��
������
���
�J!���
�$�
���
�������
以下略
シリアルモニタで通信速度を指定しない場合はcatと同様文字化けしていました。
pio device monitor -p /dev/cu.SLAB_USBtoUART
--- Terminal on /dev/cu.SLAB_USBtoUART | 9600 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
�
������
���
��␌��
README、I/O StreamのExamplesを実行した場合ももちろんエラーが出ます。
azarashi-test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# https://github.com/nbtk/azarashi
import azarashi
import sys
def example():
with open('/dev/cu.SLAB_USBtoUART', mode='r') as f:
while True:
try:
azarashi.decode_stream(f, msg_type='spresense', callback=print)
except azarashi.QzssDcrDecoderException as e:
print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
except azarashi.QzssDcrDecoderNotImplementedError as e:
print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
except EOFError as e:
print(f'{e}', file=sys.stderr)
return 0
except Exception as e:
print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
return 1
exit(example())
python /azarashi-test.py
# [UnicodeDecodeError] 'utf-8' codec can't decode byte 0xb7 in position 0: invalid start byte
READMEのAPI、decord()やget_params()Exampleは正常に表示されていました。
Encountered EOF
の件は承知しました。
何度もすみません。
azarashi-test.py
の中の msg_type='spresense',
はPython 3.7で試していたのをそのままコピペしていました。 Python 3.9で msg_type='nmea
でも同様です。
pipで pyserial
をインストール後、通信速度を指定した以下を実行した場合は無事表示されました。
azarashi-test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# https://github.com/nbtk/azarashi
import azarashi
import sys
import serial
def example():
ser = serial.Serial("/dev/cu.SLAB_USBtoUART", 115200)
while True:
try:
azarashi.decode_stream(ser, msg_type='nmea', callback=print)
except azarashi.QzssDcrDecoderException as e:
print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
except azarashi.QzssDcrDecoderNotImplementedError as e:
print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
except EOFError as e:
print(f'{e}', file=sys.stderr)
return 0
except Exception as e:
print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
return 1
exit(example())
python ./azarashi-test.py
防災気象情報(海上)(発表)(通常)
海上警報が発表されました。
発表時刻: 4月22日11時25分
警報等情報要素: 海上風警報
檜山津軽沖
警報等情報要素: 海上風警報
関東海域北部
警報等情報要素: 海上風警報
関東海域南部
警報等情報要素: 海上風警報
沿海州南部沖
警報等情報要素: 海上風警報
秋田沖
警報等情報要素: 海上風警報
佐渡沖
警報等情報要素: 海上風警報
東海海域東部
警報等情報要素: 海上風警報
東海海域西部
防災気象情報(海上)(発表)(通常)
海上警報が発表されました。
発表時刻: 4月22日11時25分
警報等情報要素: 海上濃霧警報
関東海域南部
警報等情報要素: 海上濃霧警報
東海海域南部
警報等情報要素: 海上濃霧警報
四国沖南部
警報等情報要素: 海上濃霧警報
長崎西海上
警報等情報要素: 海上濃霧警報
東シナ海南部
警報等情報要素: 海上風警報
宗谷海峡
警報等情報要素: 海上風警報
北海道西方海
通信速度を指定する場事で無事表示出来ました。
stty -F /dev/cu.SLAB_USBtoUART 115200
cat /dev/cu.SLAB_USBtoUART | azarashi nmea
ご迷惑おかけ致しました。 とても便利そうなので使わせて頂きます! ありがとうございました。
要望ですが、get_params()のパラメータのドキュメント作って頂けるととてもありがたいです。 よろしくお願い致します。
ボーレートを指定していなかったため、デフォルトの 9600 が使われて同期できていなかったということですね。解決してよかったですね。がんばってください。
気に入ってもらえたならぜひ ☆ をください。☆ の数は開発を続ける上でとても重要なんです。押すだけで貢献できるのでお願いします。
要望ですが、get_params()のパラメータのドキュメント作って頂けるととてもありがたいです。
get_params() メソッドが返すレポートオブジェクトのメンバ変数が知りたいということですよね? とりあえずこのあたりを見てください。 https://github.com/nbtk/azarashi/blob/main/azarashi/qzss_dcr_lib/report/qzss_dc_report.py
テストデータがここに入っているので実際に動かしてみるとよいかと思います。 https://github.com/nbtk/azarashi/tree/main/tests
値の意味は みちびき 災害・危機管理通報サービス のインタフェース仕様書が詳しいです。 https://qzss.go.jp/technical/download/ps-is-qzss.html
ドキュメントは時間がないのですぐにできるかはわかりませんが検討します。オープンソースウェアなのでプルリクしてもらっても大丈夫です。とはいえ、そこまでのコントリビューションを求めるのは酷なので、よかったら ☆ をください。☆ に飢えてます。
問題の管理が複雑になるので、つぎからは1つのイシューに1つの問題でお願いします。 それではよいアプリが完成するといいですね。応援しています。Happy Hacking!
Spresenseで動作確認中ですが、デコードに失敗します。 Python 3.9.16です。
Spresenseにはこちらを書き込んであります。 https://developer.sony.com/develop/spresense/docs/arduino_tutorials_ja.html#_qzss_災危通報を出力する
また、以下の場合は最後に
Encountered EOF
が表示されるようです。 これらは私の環境でしょうか?HEXでも
Python 3.9.16