Un decodificador y codificador de carga útil de baja potencia de Cayenne (Cayennelpp) escrito en Python.
Pycayennelpp ofrece una interfaz concisa con la funcionalidad de codificación y decodificación adecuada para el formato Cayennelpp, que admite muchos tipos de sensores. El proyecto apunta a la calidad general de la alta calidad del código y la buena cobertura de prueba.
Consulte también MyDevicesiot/Cayennelpp para obtener más información sobre el formato y una implementación de referencia en C ++.
El proyecto está bajo desarrollo activo. Los lanzamientos se publicarán sobre la marcha tan pronto como se haya realizado una cierta cantidad de nuevas características y soluciones.
La siguiente tabla enumera los tipos de datos compatibles actualmente con el código LPP (que equivale al código IPSO - 3200), el tamaño de los datos en bytes, dimensiones, firmeza y resolución de datos.
| Tipo de nombre | LPP | Tamaño | Oscuro | Firmado | Resolución |
|---|---|---|---|---|---|
| Entrada digital | 0 | 1 | 1 | FALSO | 1 |
| Salida digital | 1 | 1 | 1 | FALSO | 1 |
| Entrada analógica | 2 | 2 | 1 | Verdadero | 0.01 |
| Salida analógica | 3 | 2 | 1 | Verdadero | 0.01 |
| Sensor genérico | 100 | 4 | 1 | FALSO | 1 |
| Iluminación | 101 | 2 | 1 | FALSO | 1 lux |
| Presencia | 102 | 1 | 1 | FALSO | 1 |
| Temperatura | 103 | 2 | 1 | Verdadero | 0.1 ° C |
| Humedad | 104 | 1 | 1 | FALSO | 0.5 % |
| Acelerómetro | 113 | 6 | 3 | Verdadero | 0.001 g |
| Barómetro | 115 | 2 | 1 | FALSO | 0.1 HPA |
| Voltaje | 116 | 2 | 1 | FALSO | 0.01 V |
| Actual | 117 | 2 | 1 | FALSO | 0.001 A |
| Frecuencia | 118 | 4 | 1 | FALSO | 1 Hz |
| Porcentaje | 120 | 1 | 1 | FALSO | 1 % |
| Altitud | 121 | 2 | 1 | Verdadero | 1 m |
| Carga | 122 | 3 | 1 | Verdadero | 0.001 kg |
| Concentración | 125 | 2 | 1 | FALSO | 1 |
| Fuerza | 128 | 2 | 1 | FALSO | 1 |
| Distancia | 130 | 4 | 1 | FALSO | 0.001 km |
| Energía | 131 | 4 | 1 | FALSO | 0.001 KJ |
| Dirección | 132 | 2 | 1 | FALSO | 1 ° |
| Tiempo | 133 | 4 | 1 | FALSO | 1 s |
| Girómetro | 134 | 6 | 3 | Verdadero | 0.01 °/s |
| Color | 135 | 3 | 3 | FALSO | 1 RGB |
| Ubicación | 136 | 9 | 3 | Verdadero | 0.00001 Lat |
| 0.00001 Lon | |||||
| 0.01 Alt | |||||
| Cambiar | 142 | 1 | 1 | FALSO | 1 encendido/apagado |
Pycayennelpp no tiene dependencias externas y solo utiliza funciones y tipos de Python 3.
Dado que Pycayennelpp 1.2.0 Micrypthon es compatible oficialmente y se publica como un paquete separado bajo micropython-pycayennelpp .
El paquete PyCayennelp está disponible a través de PYPI usando pip . Para instalarlo Ejecutar:
pip3 install pycayennelpp Uso del módulo upip de micrythons Pycayennelpp se puede instalar de la siguiente manera dentro de Micopython:
import upip
upip . install ( "micropython-pycayennelpp" )O alternativamente ejecutar en un caparazón:
micropython -m upip install micropython-pycayennelppA continuación se muestran cómo utilizar PyCayennelpp en su propia aplicación para codificar y decodificar datos dentro y desde Cayennelpp. Los fragmentos de código funcionan con Python 3 estándar y Micopython, suponiendo que haya instalado el paquete PyCayennelpp como se muestra arriba.
Codificación
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 ) Nota: Micrypthon no admite bytes(frame) utilizando el método interno LppFrame.__bytes__(self) (todavía). Por lo tanto, debe usar LppFrame.to_bytes(self) en su lugar.
Descodificación
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 Codificación
La clase LPPUTIL proporciona la función auxiliar para la codificación JSON adecuada de los tipos de Pycayennelpp, es decir, LPPFRAME, LPPDATA y 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 )) Hay dos funciones de envoltura para codificar explícitamente el tipo LPP como un número o cadena, siendo el número predeterminado para LppUtil.json_encode (ver arriba):
# 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 ))Contribuir a un proyecto de software de código abierto gratuito puede tener lugar de muchas maneras diferentes. Siéntase libre de abrir problemas y crear solicitudes de extracción para ayudar a mejorar este proyecto. Cada solicitud de extracción tiene que pasar algunas pruebas automáticas y cheques ejecutados por Travis-Ci antes de fusionarse en la rama maestra.
Tenga en cuenta las pautas contribuyentes y el código de conducta.
Este es un proyecto de software de código abierto gratuito publicado bajo la licencia MIT.