Un décodeur et codeur de charge utile à faible puissance Cayenne (Cayennelpp) écrits en python.
Pycayennelpp offre une interface concise avec une fonctionnalité de codage et de décodage appropriée pour le format Cayennelpp, en soutenant de nombreux types de capteurs. Le projet vise une qualité globale de code élevée et une bonne couverture de test.
Voir aussi MyDevicesioT / Cayennelpp pour plus d'informations sur le format et une implémentation de référence en C ++.
Le projet est en cours de développement actif. Les sorties seront publiées à la volée dès qu'un certain nombre de nouvelles fonctionnalités et correctifs ont été effectuées.
Le tableau suivant répertorie les types de données actuellement pris en charge avec le code LPP (qui équivaut au code IPSO - 3200), la taille des données en octets, les dimensions, la signature et la résolution des données.
| Nom de type | LPP | Taille | Faible | Signé | Résolution |
|---|---|---|---|---|---|
| Entrée numérique | 0 | 1 | 1 | FAUX | 1 |
| Sortie numérique | 1 | 1 | 1 | FAUX | 1 |
| Entrée analogique | 2 | 2 | 1 | Vrai | 0,01 |
| Sortie analogique | 3 | 2 | 1 | Vrai | 0,01 |
| Capteur générique | 100 | 4 | 1 | FAUX | 1 |
| Éclairage | 101 | 2 | 1 | FAUX | 1 lux |
| Présence | 102 | 1 | 1 | FAUX | 1 |
| Température | 103 | 2 | 1 | Vrai | 0,1 ° C |
| Humidité | 104 | 1 | 1 | FAUX | 0,5% |
| Accéléromètre | 113 | 6 | 3 | Vrai | 0,001 g |
| Baromètre | 115 | 2 | 1 | FAUX | 0,1 hpa |
| Tension | 116 | 2 | 1 | FAUX | 0,01 V |
| Actuel | 117 | 2 | 1 | FAUX | 0,001 A |
| Fréquence | 118 | 4 | 1 | FAUX | 1 Hz |
| Pourcentage | 120 | 1 | 1 | FAUX | 1% |
| Altitude | 121 | 2 | 1 | Vrai | 1 m |
| Charger | 122 | 3 | 1 | Vrai | 0,001 kg |
| Concentration | 125 | 2 | 1 | FAUX | 1 |
| Pouvoir | 128 | 2 | 1 | FAUX | 1 |
| Distance | 130 | 4 | 1 | FAUX | 0,001 km |
| Énergie | 131 | 4 | 1 | FAUX | 0,001 kJ |
| Direction | 132 | 2 | 1 | FAUX | 1 ° |
| Temps | 133 | 4 | 1 | FAUX | 1 s |
| Gyromètre | 134 | 6 | 3 | Vrai | 0,01 ° / s |
| Couleur | 135 | 3 | 3 | FAUX | 1 RVB |
| Emplacement | 136 | 9 | 3 | Vrai | 0,00001 lat |
| 0,00001 LON | |||||
| 0,01 alt | |||||
| Changer | 142 | 1 | 1 | FAUX | 1 marche / arrêt |
Pycayennelpp n'a pas de dépendances externes et n'utilise que des fonctions et des types intégrés de Python 3. Il est compatible avec toutes les versions Python 3.6 et supérieures aux dernières et officiellement prises en charge, bien que même Python 3.4 fera l'affaire.
Étant donné que Pycayennelpp 1.2.0 Micropython est officiellement pris en charge et publié en tant que package séparé sous micropython-pycayennelpp .
Le package Pycayennelpp est disponible via PYPI à l'aide de pip . Pour l'installer Run:
pip3 install pycayennelpp L'utilisation du module MicropyThons upip PycayennelP peut être installée comme suit dans Micropython:
import upip
upip . install ( "micropython-pycayennelpp" )Ou courir alternativement dans un shell:
micropython -m upip install micropython-pycayennelppLes suivants montrent comment utiliser PycayennelP dans votre propre application pour coder et décoder les données dans et depuis Cayennelpp. Les extraits de code fonctionnent avec Python 3 standard ainsi que MicropyThon, en supposant que vous avez installé le package Pycayennelpp comme indiqué ci-dessus.
Codage
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 ) Remarque: MicropyThon ne prend pas en charge bytes(frame) en utilisant la méthode interne LppFrame.__bytes__(self) (encore). Par conséquent, vous devez plutôt utiliser LppFrame.to_bytes(self) .
Décodage
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 )Encodage JSON
La classe Lpputil fournit une fonction d'assistance pour le codage JSON approprié des types de pycayennelpp, c'est-à-dire LPPFrame, LPPDATA et 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 )) Il y a deux fonctions wrapper pour coder explicitement le type LPP en tant que nombre ou chaîne, le nombre étant par défaut pour LppUtil.json_encode (voir ci-dessus):
# 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 ))La contribution à un projet de logiciel open source gratuit peut avoir lieu de différentes manières. N'hésitez pas à ouvrir des problèmes et à créer des demandes de traction pour aider à améliorer ce projet. Chaque demande de traction doit passer quelques tests et vérifications automatiques exécutés par Travis-CI avant d'être fusionnés dans la branche maître.
Veuillez prendre note des directives contributives et du code de conduite.
Il s'agit d'un projet de logiciel open source gratuit publié sous la licence MIT.