Pythonで記述されたCayenne Low Power Payload(CayenNelp)デコーダーとエンコーダー。
Pycayennelplは、多くのセンサータイプをサポートするCayenNelp形式の適切なエンコードおよびデコード機能を備えた簡潔なインターフェイスを提供します。このプロジェクトは、全体的なコードの品質と優れたテストカバレッジを目指しています。
C ++での形式と参照実装の詳細については、mydevicesiot/cayennelppも参照してください。
このプロジェクトは積極的な開発中です。リリースは、特定の数の新機能と修正が行われるとすぐに、その場で公開されます。
次の表には、LPPコード(IPSOコード-3200に等しい)、バイトのデータサイズ、寸法、署名、およびデータ解像度を使用して、現在サポートされているデータ型を示します。
| タイプ名 | LPP | サイズ | 薄暗い | 署名 | 解決 |
|---|---|---|---|---|---|
| デジタル入力 | 0 | 1 | 1 | 間違い | 1 |
| デジタル出力 | 1 | 1 | 1 | 間違い | 1 |
| アナログ入力 | 2 | 2 | 1 | 真実 | 0.01 |
| アナログ出力 | 3 | 2 | 1 | 真実 | 0.01 |
| ジェネリックセンサー | 100 | 4 | 1 | 間違い | 1 |
| イルミネンス | 101 | 2 | 1 | 間違い | 1 Lux |
| 面前 | 102 | 1 | 1 | 間違い | 1 |
| 温度 | 103 | 2 | 1 | 真実 | 0.1°C |
| 湿度 | 104 | 1 | 1 | 間違い | 0.5% |
| 加速度計 | 113 | 6 | 3 | 真実 | 0.001 g |
| バロメーター | 115 | 2 | 1 | 間違い | 0.1 HPA |
| 電圧 | 116 | 2 | 1 | 間違い | 0.01 v |
| 現在 | 117 | 2 | 1 | 間違い | 0.001 a |
| 頻度 | 118 | 4 | 1 | 間違い | 1 Hz |
| パーセンテージ | 120 | 1 | 1 | 間違い | 1% |
| 高度 | 121 | 2 | 1 | 真実 | 1 m |
| 負荷 | 122 | 3 | 1 | 真実 | 0.001 kg |
| 集中 | 125 | 2 | 1 | 間違い | 1 |
| 力 | 128 | 2 | 1 | 間違い | 1 |
| 距離 | 130 | 4 | 1 | 間違い | 0.001 km |
| エネルギー | 131 | 4 | 1 | 間違い | 0.001 kj |
| 方向 | 132 | 2 | 1 | 間違い | 1° |
| 時間 | 133 | 4 | 1 | 間違い | 1 s |
| ジャイロメーター | 134 | 6 | 3 | 真実 | 0.01°/s |
| 色 | 135 | 3 | 3 | 間違い | 1 RGB |
| 位置 | 136 | 9 | 3 | 真実 | 0.00001 lat |
| 0.00001 LON | |||||
| 0.01 alt | |||||
| スイッチ | 142 | 1 | 1 | 間違い | 1オン/オフ |
Pycayennelpは、外部依存関係がなく、Python 3の組み込み関数とタイプのみを使用します。これは、Python 3.4でさえも、最新の公式にサポートされているすべてのPythonバージョン3.6以降と互換性があります。
Pycayennelpn 1.2.0 Micropythonが正式にサポートされており、 micropython-pycayennelppの下で別のパッケージとして公開されているため。
Pycayennelppパッケージは、 pipを使用してPYPIを介して利用できます。実行するには:
pip3 install pycayennelppMicroPythonsの使用upipモジュールPycayennelpenは、Micropython内に次のようにインストールできます。
import upip
upip . install ( "micropython-pycayennelpp" )または、シェル内で実行されます。
micropython -m upip install micropython-pycayennelpp以下のことは、独自のアプリケーションでPycayennelppを利用して、Cayennelppにデータをエンコードおよびデコードする方法を示しています。コードスニペットは、上記のようにPycayenNelpパッケージをインストールしたと仮定して、標準のPython 3とMicropythonで動作します。
エンコーディング
from cayennelpp import LppFrame
# create empty frame
frame = LppFrame ()
# add some sensor data
frame . add_temperature ( 0 , - 1.2 )
frame . add_humidity ( 6 , 34.5 )
# get byte buffer in CayenneLPP format
buffer = bytes ( frame )注: Micropythonは、内部メソッドLppFrame.__bytes__(self) (まだ)を使用してbytes(frame)をサポートしていません。したがって、代わりにLppFrame.to_bytes(self)を使用する必要があります。
デコード
from cayennelpp import LppFrame
# byte buffer in CayenneLPP format with 1 data item
# i.e. on channel 1, with a temperature of 25.5C
buffer = bytearray ([ 0x01 , 0x67 , 0x00 , 0xff ])
# create frame from bytes
frame = LppFrame (). from_bytes ( buffer )
# print the frame and its data
print ( frame )JSONエンコーディング
Lpputilクラスは、Pycayennelppタイプ、つまりLPPFrame、LPPDATA、LPPTYPEの適切なJSONエンコードのヘルパー関数を提供します。
import json
from cayennelpp import LppFrame , LppUtil
# create empty frame
frame = LppFrame ()
# add some sensor data
frame . add_temperature ( 0 , - 1.2 )
frame . add_humidity ( 6 , 34.5 )
# json encoding
print ( json . dumps ( frame , default = LppUtil . json_encode , indent = 2 )) LPPタイプを数字または文字列として明示的にエンコードする2つのラッパー関数があり、 LppUtil.json_encodeのデフォルトです(上記参照):
# type as number
print ( json . dumps ( frame , default = LppUtil . json_encode_type_int , indent = 2 ))
# type as string
print ( json . dumps ( frame , default = LppUtil . json_encode_type_str , indent = 2 ))無料のオープンソースソフトウェアプロジェクトに貢献することは、さまざまな方法で行われます。このプロジェクトの改善に役立つ問題を自由に開き、プルリクエストを作成してください。各プル要求は、マスターブランチにマージされる前に、Travis-CIが実行するいくつかの自動テストとチェックに合格する必要があります。
貢献ガイドラインと行動規範に注意してください。
これは、MITライセンスの下で公開されている無料のオープンソースソフトウェアプロジェクトです。