mwings.parsers.app_uart_ascii_extended モジュール
mwings.parsers.app_uart_ascii_extendedシリアル通信アプリ(書式モード:拡張形式)から送信されたデータを表すパケットを解釈するパーサと、そのデータを扱います。
PacketParser
シリアル通信アプリ(書式モード:拡張形式)から送信されたデータを表すパケットを解釈するパーサの静的クラス
継承元のメンバを記載します。
is_valid()
is_valid(bare_packet)
与えられた素のパケットが有効であるか否かを確認します。
引数
| 名称 | 型 | 内容 |
|---|---|---|
bare_packet | common.BarePacket | 素のパケットデータ |
戻り値
| 型 | 値 | 内容 |
|---|---|---|
bool | True | 有効、パース可 |
False | 無効、パース不可 |
parse()
parse(bare_packet)
与えられた素のパケットをパースします。
引数
| 名称 | 型 | 内容 |
|---|---|---|
bare_packet | common.BarePacket | 素のパケットデータ |
戻り値
| 型 | 値 | 内容 |
|---|---|---|
optional ParsedPacket | ParsedPacketの型をもつデータ | パースしたデータ |
None | パース不可 |
ParsedPacket
シリアル通信アプリ(書式モード:拡張形式)から送信されたデータを表すパケットを解釈した結果を格納するための構造体
継承元のメンバも合わせて記載します。
ParsedPacket()
ParsedPacket(*, time_parsed=None, packet_type=PacketType.BARE, sequence_number=None, source_serial_id=0, source_logical_id=0, lqi=None, supply_voltage=None, destination_serial_id=120, command_id=0, data=b'')
引数
継承元のプロパティも合わせて表記します。
| 名称 | 型 | 内容 |
|---|---|---|
time_parsed | optional AwareDatetime | パース時刻 |
packet_type | common.PacketType | パケット種別 |
sequence_number | optional common.UInt16 | 取得不可、常にNone |
source_serial_id | common.UInt32 | 送信元のシリアルID |
source_logical_id | common.UInt8 | 送信元の論理デバイスID |
lqi | common.UInt8 | 電波通信品質 |
supply_voltage | optional common.UInt16 | 取得不可、常にNone |
destination_serial_id | common.UInt32 | 送信先のシリアルID |
commnad_id | common.UInt8 | コマンドID |
data | bytes | データ |
**で unpack した辞書を渡すことができます。
コンストラクタの引数へ指定する変数に加えて、次の @computed_field を持ちます。
| 名称 | 型 | 内容 |
|---|---|---|
mwings_implementation | str | MWings の実装("python"のみ) |
mwings_version | str | MWings のバージョン(PEP440形式) |
hostname | str | ホストマシン名 |
system_type | str | システム種別("Linux"など) |
data_base64 | str | データのBase64表記 |
data_hexstr | str | データの16進数表記 |
dataはJSON等に含まれません。data_base64やdata_hexstrを利用してください。適用される field_validator
source_logical_id:値の範囲を自動的に検証しますcheck_source_logical_id(lid)
time_parsed:タイムゾーンが付与されているかを自動的に検証しますdatetime_must_be_clear(dt)
sampling_frequency:値を検証しますcheck_sampling_frequency(freq)
data:長さを自動的に検証しますcheck_data(data)
適用される field_serializer
packet_type:列挙子の名前をそのままJSON等に適用しますserialize_packet_type(packet_type)
source_serial_id:16進表記の文字列をJSON等に適用しますserialize_source_serial_id(source_serial_id)
time_parsed:ISO 8601形式の文字列をJSON等に適用しますserialize_time_parsed(dt)
- ``
to_df()
to_df(include=None, exclude=None, verbose=True)
パースしたデータを pandas のデータフレーム形式へ変換します。
引数
| 名称 | 型 | 内容 |
|---|---|---|
include | optional set[str] | データフレームへ含めるカラム(メンバ)の集合 |
exclude | optional set[str] | データフレームへ含めないカラム(メンバ)の集合 |
verbose | bool | システム情報の有無(他の引数がNoneの場合のみ) |
戻り値
| 型 | 値 | 内容 |
|---|---|---|
pd.DataFrame | - | 変換したデータフレーム |
例外
EnvironmentErrorpandas のない場合
to_dict()
to_dict(include=None, exclude=None, verbose=True, spread=False, sort_keys=False)
パースしたデータを辞書形式へ変換します。
引数
| 名称 | 型 | 内容 |
|---|---|---|
include | optional set[str] | 辞書へ含めるキー(メンバ)の集合 |
exclude | optional set[str] | 辞書へ含めないキー(メンバ)の集合 |
verbose | bool | システム情報の有無(他の引数がNoneの場合のみ) |
spread | bool | 時系列でないlist-likeデータの分割の有無 |
sort_keys | bool | キーによるソートの有無 |
戻り値
| 型 | 値 | 内容 |
|---|---|---|
dict[str, Any] | - | 変換した辞書 |
to_json()
to_json(include=None, exclude=None, verbose=True, spread=False, indent=2, sort_keys=False)
パースしたデータをJSON形式へ変換します。
引数
| 名称 | 型 | 内容 |
|---|---|---|
include | optional set[str] | JSONへ含めるキー(メンバ)の集合 |
exclude | optional set[str] | JSONへ含めないキー(メンバ)の集合 |
verbose | bool | システム情報の有無(他の引数がNoneの場合のみ) |
spread | bool | 時系列でないlist-likeデータの分割の有無 |
indent | optional int | インデントの数(Noneで改行なし) |
sort_keys | bool | キーによるソートの有無 |
戻り値
| 型 | 値 | 内容 |
|---|---|---|
str | - | 変換したJSON文字列 |
model_*()
上記に加えて、
pydantic.BaseModelの各メソッドを利用できます。