Ein Cayenne -Decoder mit niedriger Stromnutzung (Cayennelpp) und -Codierer, der in Python geschrieben wurde.
Pycayennelpp bietet eine prägnante Schnittstelle mit ordnungsgemäßen Codierungs- und Dekodierungsfunktionen für das Cayennelpp -Format, das viele Sensortypen unterstützt. Das Projekt zielt auf eine insgesamt hohe Codequalität und eine gute Testabdeckung.
Weitere Informationen zum Format und eine Referenzimplementierung in C ++ finden Sie auch mydevicesiot/cayennelpp.
Das Projekt befindet sich unter aktiver Entwicklung. Veröffentlichungen werden im laufenden Fliegen veröffentlicht, sobald eine bestimmte Anzahl neuer Funktionen und Korrekturen vorgenommen wurden.
In der folgenden Tabelle werden die aktuell unterstützten Datentypen mit dem LPP -Code (der IPSO -Code - 3200), Datengröße in Bytes, Dimensionen, Unterschriften und Datenauflösung aufgeführt.
| Geben Sie den Namen ein | LPP | Größe | Düster | Unterzeichnet | Auflösung |
|---|---|---|---|---|---|
| Digitale Eingabe | 0 | 1 | 1 | FALSCH | 1 |
| Digitale Ausgabe | 1 | 1 | 1 | FALSCH | 1 |
| Analogeingabe | 2 | 2 | 1 | WAHR | 0,01 |
| Analogausgang | 3 | 2 | 1 | WAHR | 0,01 |
| Generischer Sensor | 100 | 4 | 1 | FALSCH | 1 |
| Beleuchtung | 101 | 2 | 1 | FALSCH | 1 Lux |
| Gegenwart | 102 | 1 | 1 | FALSCH | 1 |
| Temperatur | 103 | 2 | 1 | WAHR | 0,1 ° C. |
| Luftfeuchtigkeit | 104 | 1 | 1 | FALSCH | 0,5 % |
| Beschleunigungsmesser | 113 | 6 | 3 | WAHR | 0,001 g |
| Barometer | 115 | 2 | 1 | FALSCH | 0,1 hpa |
| Stromspannung | 116 | 2 | 1 | FALSCH | 0,01 V |
| Aktuell | 117 | 2 | 1 | FALSCH | 0,001 a |
| Frequenz | 118 | 4 | 1 | FALSCH | 1 Hz |
| Prozentsatz | 120 | 1 | 1 | FALSCH | 1 % |
| Höhe | 121 | 2 | 1 | WAHR | 1 m |
| Laden | 122 | 3 | 1 | WAHR | 0,001 kg |
| Konzentration | 125 | 2 | 1 | FALSCH | 1 |
| Leistung | 128 | 2 | 1 | FALSCH | 1 |
| Distanz | 130 | 4 | 1 | FALSCH | 0,001 km |
| Energie | 131 | 4 | 1 | FALSCH | 0,001 kJ |
| Richtung | 132 | 2 | 1 | FALSCH | 1 ° |
| Zeit | 133 | 4 | 1 | FALSCH | 1 s |
| Gyrometer | 134 | 6 | 3 | WAHR | 0,01 °/s |
| Farbe | 135 | 3 | 3 | FALSCH | 1 RGB |
| Standort | 136 | 9 | 3 | WAHR | 0,00001 lat |
| 0,00001 Lon | |||||
| 0,01 Alt | |||||
| Schalten | 142 | 1 | 1 | FALSCH | 1 Ein/Aus |
Pycayennelpp hat keine externen Abhängigkeiten und verwendet nur integrierte Funktionen und Arten von Python.
Seit Pycayennelpp 1.2.0 Micropython wird offiziell unterstützt und als separates Paket unter micropython-pycayennelpp veröffentlicht.
Das Pycayennelpp -Paket ist über PYPI mit pip erhältlich. Um es zu installieren:
pip3 install pycayennelpp Mit Micropythons upip -Modul Pycayennelpp kann wie folgt in Micropython installiert werden:
import upip
upip . install ( "micropython-pycayennelpp" )Oder alternativ mit einer Schale laufen:
micropython -m upip install micropython-pycayennelppIn der folgenden Ansicht, wie Sie PyCayennelpp in Ihrer eigenen Anwendung verwenden, um Daten in und aus Cayennelpp zu codieren und zu dekodieren. Die Code -Snippets arbeiten mit Standard -Python 3 sowie Micropython, vorausgesetzt, Sie haben das Pycayennelpp -Paket wie oben gezeigt installiert.
Codierung
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 ) Hinweis: Micropython unterstützt bytes(frame) unter Verwendung des internen Methode LppFrame.__bytes__(self) (noch). Daher müssen Sie stattdessen LppFrame.to_bytes(self) verwenden.
Dekodierung
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 -Codierung
Die LPPUTIL -Klasse bietet eine Helferfunktion für die ordnungsgemäße JSON -Codierung von Pycayennelpp -Typen, IE LPPFrame, LPPData und LPPTYPE.
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 )) Es gibt zwei Wrapper -Funktionen, um den LPP -Typ explizit als eine Nummer oder LppUtil.json_encode Zeichenfolge zu codieren.
# 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 ))Der Beitrag zu einem kostenlosen Open -Source -Softwareprojekt kann auf viele verschiedene Arten stattfinden. Fühlen Sie sich frei, Probleme zu öffnen und Pull -Anfragen zu erstellen, um dieses Projekt zu verbessern. Jede Pull-Anfrage muss einige automatische Tests und Schecks bestehen, die von Travis-CI durchgeführt werden, bevor sie in den Master-Zweig verschmolzen werden.
Bitte beachten Sie die beitragenden Richtlinien und den Verhaltenskodex.
Dies ist ein kostenloses Open -Source -Softwareprojekt, das unter der MIT -Lizenz veröffentlicht wurde.