Декодер с низкой мощностью Cayenne (Cayennelpp) и энкодер, записанные на Python.
Pycayennelpp предлагает краткий интерфейс с надлежащей функциональностью кодирования и декодирования для формата Cayennelpp, поддерживая многие типы датчиков. Проект предназначен для общего высокого качества кода и хорошего охвата тестирования.
См. Также MyDevicesiot/Cayennelpp для получения дополнительной информации о формате и справочной реализации в C ++.
Проект находится в активной разработке. Выпуски будут опубликованы на лету, как только будет сделано определенное количество новых функций и исправлений.
В следующей таблице перечислены в настоящее время поддерживаемые типы данных с кодом 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 люкс |
| Присутствие | 102 | 1 | 1 | ЛОЖЬ | 1 |
| Температура | 103 | 2 | 1 | Истинный | 0,1 ° C. |
| Влажность | 104 | 1 | 1 | ЛОЖЬ | 0,5 % |
| Акселерометр | 113 | 6 | 3 | Истинный | 0,001 г. |
| Барометр | 115 | 2 | 1 | ЛОЖЬ | 0,1 гПа |
| Напряжение | 116 | 2 | 1 | ЛОЖЬ | 0,01 В. |
| Текущий | 117 | 2 | 1 | ЛОЖЬ | 0,001 а |
| Частота | 118 | 4 | 1 | ЛОЖЬ | 1 Гц |
| Процент | 120 | 1 | 1 | ЛОЖЬ | 1 % |
| Высота | 121 | 2 | 1 | Истинный | 1 м |
| Нагрузка | 122 | 3 | 1 | Истинный | 0,001 кг |
| Концентрация | 125 | 2 | 1 | ЛОЖЬ | 1 |
| Власть | 128 | 2 | 1 | ЛОЖЬ | 1 |
| Расстояние | 130 | 4 | 1 | ЛОЖЬ | 0,001 км |
| Энергия | 131 | 4 | 1 | ЛОЖЬ | 0,001 кДж |
| Направление | 132 | 2 | 1 | ЛОЖЬ | 1 ° |
| Время | 133 | 4 | 1 | ЛОЖЬ | 1 с |
| Гирометр | 134 | 6 | 3 | Истинный | 0,01 °/с |
| Цвет | 135 | 3 | 3 | ЛОЖЬ | 1 RGB |
| Расположение | 136 | 9 | 3 | Истинный | 0,00001 лат |
| 0,00001 Lon | |||||
| 0,01 Альт | |||||
| Выключатель | 142 | 1 | 1 | ЛОЖЬ | 1 включен/выключен |
Pycayennelpp не имеет никаких внешних зависимостей и использует только встроенные функции и типы Python 3. Он совместим со всеми последними и официально поддерживаемыми версиями Python 3.6 и выше, хотя даже Python 3.4.
Поскольку Pycayennelpp 1.2.0 Micropython официально поддерживается и опубликован в виде отдельного пакета под micropython-pycayennelpp .
Пакет Pycayennelpp доступен через PYPI с использованием pip . Для установки запуска:
pip3 install pycayennelpp Использование модуля upip MicropyThons Pycayennelpp может быть установлено следующим образом в микропитоне:
import upip
upip . install ( "micropython-pycayennelpp" )Или в качестве альтернативы бежать в оболочке:
micropython -m upip install micropython-pycayennelppСледующее показывает, как использовать Pycayennelpp в вашем собственном приложении, чтобы кодировать и декодировать данные в Cayennelpp и обратно. Фрагменты кода работают со стандартным Python 3, а также с микропитоном, предполагая, что вы установили пакет Pycayennelpp, как показано выше.
Кодирование
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 не поддерживает bytes(frame) используя внутренний метод LppFrame.__bytes__(self) (пока). Следовательно, вам нужно вместо этого использовать 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 предоставляет вспомогательную функцию для правильного кодирования JSON типов Pycayennelpp, IE LPPFRAME, LPPDATA и 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 )) Существует две функции обертки, чтобы явно кодировать тип LPP в виде числа или строки, число по умолчанию для 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.