Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/latchdevel/pypicode
Python C extension module to wrap the PiCode library
https://github.com/latchdevel/pypicode
cmake extension module package picode picoder pilight swig wrap wrapper
Last synced: about 1 month ago
JSON representation
Python C extension module to wrap the PiCode library
- Host: GitHub
- URL: https://github.com/latchdevel/pypicode
- Owner: latchdevel
- License: lgpl-3.0
- Created: 2024-02-18T11:07:14.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-04-14T10:34:49.000Z (8 months ago)
- Last Synced: 2024-04-14T12:38:11.710Z (8 months ago)
- Topics: cmake, extension, module, package, picode, picoder, pilight, swig, wrap, wrapper
- Language: C
- Homepage:
- Size: 52.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# pyPiCode
Python C extension module to wrap the PiCode library.[![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)
The [**PiCode library**](http://github.com/latchdevel/PiCode) provides an easy way to handle the wireless protocols of weather stations and radio control switches using 315Mhz/433Mhz radio frequency in ASK/OOK modulation, which have been implemented by the [**"pilight"** project](https://manual.pilight.org/protocols/433.92/index.html)
The PiCode library is a standard C/C++ library, both static and dynamic, that works on any libc/libc++ compatible system, such as macOS, FreeBSD, Linux, and even Windows.
Using [SWIG](https://www.swig.org/), to generate the Python C extension source files that wraps PiCode's static C library:
- [**picode_wrap.c**](picode_wrap.c): CMake compiles the C source file, as does the PiCode library, and they link together to build the Python C extension module.
- [**picode_wrap.py**](pypicode/picode_wrap.py): Python functions of the picode wrapper module are redefined to add basic docstrings and parameter checks in [**__init__.py**](pypicode/__init__.py) package file.## Install
Package installation builds the C extension module, so some OS tools are required like these packages on Debian-based Linux systems:
- Python3 development tools: `python3-dev`
- Python3 package installer: `python3-pip`
- C compiler suite: `build-essential`
- CMake make system: `cmake`
- Git version control system: `git`Command to install from GitHub:
```
$ python3 -m pip install -v --user git+https://github.com/latchdevel/pyPiCode.git
```## Tests
PyPiCode provides a unit tests module to verify its correct operation:
```
$ python3 -m unittest discover -v pypicode
```## Usage
```python
>>> import pypicode as picode
>>>
>>> picode.decodeString("c:011010100101011010100110101001100110010101100110101010101010101012;p:1400,600,6800@")
{'protocols': [{'conrad_rsl_switch': {'id': 1, 'unit': 2, 'state': 'on'}}]}
>>>
```## Functions:
+ **`decodePulseTrain(pulses_list: list)`**
Decodes a list of pulses to a results dict.
Returns a dict always, with a key "protocols" and a list of decoded protocols as its value,
which will be empty if none are decoded, like as { 'protocols': [ ] }+ **`decodeString(pilight_string: str)`**
Decodes a string in pilight format to a results dict.Returns a dict with a key "protocols" and a list of decoded protocols as its value, or None on failure.
+ **`encodeJson(json: dict, repeats: int = 0)`**
Encodes a full json dict to a string in pilight format.
Returns a pilight string or None on failure.
+ **`encodeToPulseTrain(protocol, json_data: dict)`**
Encodes a Swig Object of type 'protocol_t *' and a json data dict to a pulses list.
Returns a pulses list or None on failure.
+ **`encodeToPulseTrainByName(protocol_name: str, json_data: dict)`**
Encodes a protocol name string and a json data dict to a pulses list.
Returns a pulses list or None on failure.
+ **`encodeToString(protocol_name: str, json_data: dict, repeats: int = 0)`**
Encodes a protocol name string and a json data dict to a string in pilight format.
Returns a pilight string or None on failure.
+ **`findProtocol(name: str)`**
Find a protocol among all those initialized by name.
Returns a Swig Object of type 'protocol_t *' or None on failure.
+ **`getPiCodeVersion()`**
Get version of PiCode library.
Returns the full version string of the PiCode library or None on failure.
+ **`pulseTrainToString(pulses_list: list, repeats: int = 0)`**
Converts a list of pulses to a string in pilight format.
Returns a pilight string or None on failure.
+ **`stringToPulseTrain(pilight_string: str)`**
Converts a string in pilight format to a pulses lists.
Returns a pulses list or None on failure.# License
Copyright (c) 2021-2022 Jorge Rivera. All right reserved.License GNU Lesser General Public License v3.0.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.See the [LICENSE](LICENSE.txt) file for license rights and limitations (lgpl-3.0).