Um decodificador e codificador Cayenne Baixa potência (Cayennelpp) escrito em Python.
O PyCayennelpp oferece uma interface concisa com a funcionalidade de codificação e decodificação adequada para o formato Cayennelpp, apoiando muitos tipos de sensores. O projeto visa a alta qualidade geral do código e a boa cobertura de teste.
Consulte também MyDevicesiot/Cayennelpp para obter mais informações sobre o formato e uma implementação de referência no C ++.
O projeto está sob desenvolvimento ativo. Os lançamentos serão publicados em tempo real assim que um certo número de novos recursos e correções forem feitos.
A tabela a seguir lista os tipos de dados atualmente suportados com o código LPP (que é igual ao código IPSO - 3200), tamanho de dados em bytes, dimensões, assinatura e resolução de dados.
| Nome do tipo | Lpp | Tamanho | Escurecido | Assinado | Resolução |
|---|---|---|---|---|---|
| Entrada digital | 0 | 1 | 1 | Falso | 1 |
| Saída digital | 1 | 1 | 1 | Falso | 1 |
| Entrada analógica | 2 | 2 | 1 | Verdadeiro | 0,01 |
| Saída analógica | 3 | 2 | 1 | Verdadeiro | 0,01 |
| Sensor genérico | 100 | 4 | 1 | Falso | 1 |
| Iluminância | 101 | 2 | 1 | Falso | 1 lux |
| Presença | 102 | 1 | 1 | Falso | 1 |
| Temperatura | 103 | 2 | 1 | Verdadeiro | 0,1 ° C. |
| Umidade | 104 | 1 | 1 | Falso | 0,5 % |
| Acelerômetro | 113 | 6 | 3 | Verdadeiro | 0,001 g |
| Barômetro | 115 | 2 | 1 | Falso | 0,1 hPa |
| Tensão | 116 | 2 | 1 | Falso | 0,01 v |
| Atual | 117 | 2 | 1 | Falso | 0,001 a |
| Freqüência | 118 | 4 | 1 | Falso | 1 Hz |
| Percentagem | 120 | 1 | 1 | Falso | 1 % |
| Altitude | 121 | 2 | 1 | Verdadeiro | 1 m |
| Carregar | 122 | 3 | 1 | Verdadeiro | 0,001 kg |
| Concentração | 125 | 2 | 1 | Falso | 1 |
| Poder | 128 | 2 | 1 | Falso | 1 |
| Distância | 130 | 4 | 1 | Falso | 0,001 km |
| Energia | 131 | 4 | 1 | Falso | 0,001 KJ |
| Direção | 132 | 2 | 1 | Falso | 1 ° |
| Tempo | 133 | 4 | 1 | Falso | 1 s |
| Girômetro | 134 | 6 | 3 | Verdadeiro | 0,01 °/s |
| Cor | 135 | 3 | 3 | Falso | 1 RGB |
| Localização | 136 | 9 | 3 | Verdadeiro | 0,00001 Lat |
| 0,00001 LON | |||||
| 0,01 alt | |||||
| Trocar | 142 | 1 | 1 | Falso | 1 ON/OFF |
O PyCayennelpp não possui nenhuma dependência externa e usa apenas funções e tipos de Python 3. É compatível com todas as mais recentes e oficialmente suportadas versões Python 3.6 e acima, embora mesmo o Python 3.4 seja.
Como o PyCayennelpp 1.2.0 Micropython é oficialmente suportado e publicado como um pacote separado sob micropython-pycayennelpp .
O pacote pyCayennelp está disponível via Pypi usando pip . Para instalá -lo, execute:
pip3 install pycayennelpp Usando o MicropyThons upip Módulo PyCayennelpp pode ser instalado da seguinte forma no Micropython:
import upip
upip . install ( "micropython-pycayennelpp" )Ou, alternativamente, execute com um shell:
micropython -m upip install micropython-pycayennelppA seguir, mostram como utilizar o PyCayennelp em seu próprio aplicativo para codificar e decodificar dados para e a partir do CayenNELPP. Os trechos de código funcionam com o Python 3 padrão, bem como o Micropython, supondo que você tenha instalado o pacote pyCayennelp, como mostrado acima.
Codificação
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: O Micropython não suporta bytes(frame) utilizando o método interno LppFrame.__bytes__(self) (ainda). Portanto, você precisa usar LppFrame.to_bytes(self) .
Decodificação
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 )Codificação JSON
A classe Lpputil fornece função auxiliar para a codificação JSON adequada dos tipos pyCayennelp, ou seja, lppframe, lppdata e 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 )) Existem duas funções de invólucro para codificar explicitamente o tipo LPP como um número ou string, sendo o número padrão para LppUtil.json_encode (veja acima):
# 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 para um projeto de software de código aberto gratuito pode ocorrer de várias maneiras diferentes. Sinta -se à vontade para abrir problemas e criar solicitações de tração para ajudar a melhorar este projeto. Cada solicitação de tração deve passar em alguns testes e verificações automáticas executadas pelo Travis-CI antes de serem mescladas na filial principal.
Observe as diretrizes contribuintes e o código de conduta.
Este é um projeto de software de código aberto gratuito publicado sob a licença do MIT.