{ "info": { "author": "Rui Silva", "author_email": "ruisilva.real@sapo.pt", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Natural Language :: Portuguese", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator" ], "description": "# This fork - pyLoRa\nThis fork is an adaptation and an improved version of the original mayeranalytic work (mayeranalytics/pySX127x)\npyLoRa can be used to communicate with the Arduino through the RADIOHEAD library, for more information see these examples -> [rpsreal/LoRa_Ra-02_Arduino](https://github.com/rpsreal/LoRa_Ra-02_Arduino). \n\n**Update 05/2018 - Added encrypted versions** \nFor security reasons it is advisable to use the encrypted versions that use [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES). You can also use them to communicate with the Arduino.\n\n\n**Update 08/2018 - Added support for 2 modules at the same time** Now it is possible to use 2 radio modules at the same time in Raspberry Pi. To do this, simply use the BOARD2 settings like this:\n```python\n# Use BOARD 2 (you can use BOARD1 and BOARD2 at the same time just give another name)\nfrom SX127x.LoRa import LoRa2 as LoRa\nfrom SX127x.board_config import BOARD2 as BOARD\n```\n\n**Update 04/2019 - Clarification on the use of different communication frequencies** It is possible to use several different communication frequencies using pyLora. The default frequency is 868MHz (Europe), but you can change the communication frequency to use Ai-Thinker Ra-02 Modules (433MHz) for example. To do this, look for the \"868\" in the SX127x/LoRa.py file and replace them with the desired frequency.\n\n\nIt supports Python 3 or newer and PyPi. https://pypi.org/project/pyLoRa/\n\n## Easy setup on Raspberry Pi:\n```bash\nsudo raspi-config nonint do_spi 0\nsudo apt-get install python-dev python3-dev\n```\n\n### Installation:\nFor **Install with pip** perform the following installation steps:\n```bash\nsudo apt-get install python-pip python3-pip\npip install RPi.GPIO\npip install spidev\npip install pyLoRa\n```\n\nFor **encrypted versions only** it is necessary to perform the following installation step:\n```bash\npip install pycryptodome\npip install pycrypto\n```\n\n\n### Hardware\nMake the connections as shown below.\nIf it is necessary to change edit the file board_config.py\n\n| Ra-02 LoRa BOARD1 | RaspPi GPIO | Ra-02 LoRa BOARD2 | RaspPi GPIO |\n|:------------------|:--------------|:------------------|:-------------:|\n| MOSI | GPIO 10 | MOSI | GPIO 10 |\n| MISO | GPIO 9 | MISO | GPIO 9 |\n| SCK (SCLK) | GPIO 11 | SCK (SCLK) | GPIO 11 |\n| NSS | GPIO 8 (CE0) | NSS | GPIO 7 (CE1) |\n| DIO0 (IRQ) | GPIO 4 | DIO0 (IRQ) | GPIO 23 |\n| DIO1 | GPIO 17 | DIO1 | GPIO 24 |\n| DIO2 | GPIO 18 | DIO2 | GPIO 25 |\n| DIO3 | GPIO 27 | DIO3 | GPIO 5 |\n| RST (Reset) | GPIO 22 | RST (Reset) | GPIO 6 |\n| LED | GPIO 13 | LED | GPIO 19 |\n\nLED external with 1k ohm or 330ohm (optional)\n\n### How to Use\nView the sample files. \nIf you downloaded the library and sample files, now you can start LORA_SERVER or LORA_CLIENT (encrypted or non-encripted).\nTo work, there must be another LORA_SERVER or LORA_CLIENT running on another device (Raspberry Pi or Arduino)\n\nFor example, if you are running on an [Arduino the LORA_CLIENT](https://github.com/rpsreal/LoRa_Ra-02_Arduino/blob/master/LORA_CLIENT.ino) then start the [LORA_SERVER.py on Raspberry Pi](https://github.com/rpsreal/pySX127x/blob/master/LORA_SERVER.py) like this:\n```bash\ncd pySX127x\npython3 ./LORA_SERVER.py\n```\n\n### Extra \nIf you do not need to install the library you can use it simply in the same directory.\nTo **Download library and example files**:\n```bash\nsudo apt-get install python-rpi.gpio python3-rpi.gpio\nsudo apt-get install python-spidev python3-spidev\nsudo apt-get install git\nsudo git clone https://github.com/rpsreal/pySX127x\n```\n\nIf it is necessary to run the library from anywhere:\n```bash\nnano ~/.bashrc\n```\nPut this at the end of the file: \n> export PYTHONPATH=/home/pi/pySX127x/\n\nAnd then:\n```bash\nsource ~/.bashrc\n```\n\nDeveloped by Rui Silva, Porto, Portugal\n\n\n\n# Forked from mayeranalytics/pySX127x\n# Overview\n\nThis is a python interface to the [Semtech SX1276/7/8/9](http://www.semtech.com/wireless-rf/rf-transceivers/) \nlong range, low power transceiver family.\n\nThe SX127x have both LoRa and FSK capabilities. Here the focus lies on the\nLoRa spread spectrum modulation hence only the LoRa modem interface is implemented so far \n(but see the [roadmap](#roadmap) below for future plans).\n\nSpread spectrum modulation has a number of intriguing features:\n* High interference immunity\n* Up to 20dBm link budget advantage (for the SX1276/7/8/9)\n* High Doppler shift immunity\n\nMore information about LoRa can be found on the [LoRa Alliance website](https://lora-alliance.org).\nLinks to some LoRa performance reports can be found in the [references](#references) section below.\n\n\n# Motivation\n\nTransceiver modules are usually interfaced with microcontroller boards such as the \nArduino and there are already many fine C/C++ libraries for the SX127x family available on \n[github](https://github.com/search?q=sx127x) and [mbed.org](https://developer.mbed.org/search/?q=sx127x).\n\nAlthough C/C++ is the de facto standard for development on microcontrollers, [python](https://www.python.org)\nrunning on a Raspberry Pi is becoming a viable alternative for rapid prototyping.\n\nHigh level programming languages like python require a full-blown OS such as Linux. (There are some exceptions like\n[PyMite](https://wiki.python.org/moin/PyMite) and most notably [MicroPython](https://micropython.org).)\nBut using hardware capable of running Linux contradicts, to some extent, the low power specification of the SX127x family.\nTherefore it is clear that this approach aims mostly at prototyping and technology testing.\n\nPrototyping on a full-blown OS using high level programming languages has several clear advantages:\n* Working prototypes can be built quickly \n* Technology testing ist faster\n* Proof of concept is easier to achieve\n* The application development phase is reached quicker \n\n\n# Hardware\n\nThe transceiver module is a SX1276 based Modtronix [inAir9B](http://modtronix.com/inair9.html). \nIt is mounted on a prototyping board to a Raspberry Pi rev 2 model B.\n\n| Proto board pin | RaspPi GPIO | Direction |\n|:----------------|:-----------:|:---------:|\n| inAir9B DIO0 | GPIO 22 | IN |\n| inAir9B DIO1 | GPIO 23 | IN |\n| inAir9B DIO2 | GPIO 24 | IN |\n| inAir9B DIO3 | GPIO 25 | IN |\n| inAir9b Reset | GPIO ? | OUT |\n| LED | GPIO 18 | OUT |\n| Switch | GPIO 4 | IN |\n\nTodo:\n- [ ] Add picture(s)\n- [ ] Wire the SX127x reset to a GPIO?\n\n\n# Code Examples\n\n### Overview\nFirst import the modules \n```python\nfrom SX127x.LoRa import *\nfrom SX127x.board_config import BOARD\n```\nthen set up the board GPIOs\n```python\nBOARD.setup()\n```\nThe LoRa object is instantiated and put into the standby mode\n```python\nlora = LoRa()\nlora.set_mode(MODE.STDBY)\n```\nRegisters are queried like so:\n```python\nprint lora.get_version() # this prints the sx127x chip version\nprint lora.get_freq() # this prints the frequency setting \n```\nand setting registers is easy, too\n```python\nlora.set_freq(433.0) # Set the frequency to 433 MHz \n```\nIn applications the `LoRa` class should be subclassed while overriding one or more of the callback functions that\nare invoked on successful RX or TX operations, for example.\n```python\nclass MyLoRa(LoRa):\n\n def __init__(self, verbose=False):\n super(MyLoRa, self).__init__(verbose)\n # setup registers etc.\n\n def on_rx_done(self):\n payload = self.read_payload(nocheck=True) \n # etc.\n```\n\nIn the end the resources should be freed properly\n```python\nBOARD.teardown()\n```\n\n### More details\nMost functions of `SX127x.Lora` are setter and getter functions. For example, the setter and getter for \nthe coding rate are demonstrated here\n```python \nprint lora.get_coding_rate() # print the current coding rate\nlora.set_coding_rate(CODING_RATE.CR4_6) # set it to CR4_6\n```\n\n@todo\n\n\n# Installation\n\nMake sure SPI is activated on you RaspberryPi: [SPI](https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/README.md)\n**pySX127x** requires these two python packages:\n* [RPi.GPIO](https://pypi.python.org/pypi/RPi.GPIO\") for accessing the GPIOs, it should be already installed on\n a standard Raspian Linux image\n* [spidev](https://pypi.python.org/pypi/spidev) for controlling SPI\n\nIn order to install spidev download the source code and run setup.py manually:\n```bash\nwget https://pypi.python.org/packages/source/s/spidev/spidev-3.1.tar.gz\ntar xfvz spidev-3.1.tar.gz\ncd spidev-3.1\nsudo python setup.py install\n```\n\nAt this point you may want to confirm that the unit tests pass. See the section [Tests](#tests) below.\n\nYou can now run the scripts. For example dump the registers with `lora_util.py`: \n```bash\nrasp$ sudo ./lora_util.py\nSX127x LoRa registers:\n mode SLEEP\n freq 434.000000 MHz\n coding_rate CR4_5\n bw BW125\n spreading_factor 128 chips/symb\n implicit_hdr_mode OFF\n ... and so on ....\n```\n\n\n# Class Reference\n\nThe interface to the SX127x LoRa modem is implemented in the class `SX127x.LoRa.LoRa`.\nThe most important modem configuration parameters are:\n\n| Function | Description |\n|------------------|---------------------------------------------|\n| set_mode | Change OpMode, use the constants.MODE class |\n| set_freq | Set the frequency |\n| set_bw | Set the bandwidth 7.8kHz ... 500kHz |\n| set_coding_rate | Set the coding rate 4/5, 4/6, 4/7, 4/8 |\n| | |\n| @todo | |\n\nMost set_* functions have a mirror get_* function, but beware that the getter return types do not necessarily match \nthe setter input types.\n\n### Register naming convention\nThe register addresses are defined in class `SX127x.constants.REG` and we use a specific naming convention which \nis best illustrated by a few examples:\n\n| Register | Modem | Semtech doc. | pySX127x |\n|----------|-------|-------------------| ---------------------------|\n| 0x0E | LoRa | RegFifoTxBaseAddr | REG.LORA.FIFO_TX_BASE_ADDR |\n| 0x0E | FSK | RegRssiCOnfig | REG.FSK.RSSI_CONFIG |\n| 0x1D | LoRa | RegModemConfig1 | REG.LORA.MODEM_CONFIG_1 |\n| etc. | | | |\n\n### Hardware\nHardware related definition and initialisation are located in `SX127x.board_config.BOARD`.\nIf you use a SBC other than the Raspberry Pi you'll have to adapt the BOARD class.\n\n\n# Script references\n\n### Continuous receiver `rx_cont.py`\nThe SX127x is put in RXCONT mode and continuously waits for transmissions. Upon a successful read the\npayload and the irq flags are printed to screen.\n```\nusage: rx_cont.py [-h] [--ocp OCP] [--sf SF] [--freq FREQ] [--bw BW]\n [--cr CODING_RATE] [--preamble PREAMBLE]\n\nContinous LoRa receiver\n\noptional arguments:\n -h, --help show this help message and exit\n --ocp OCP, -c OCP Over current protection in mA (45 .. 240 mA)\n --sf SF, -s SF Spreading factor (6...12). Default is 7.\n --freq FREQ, -f FREQ Frequency\n --bw BW, -b BW Bandwidth (one of BW7_8 BW10_4 BW15_6 BW20_8 BW31_25\n BW41_7 BW62_5 BW125 BW250 BW500). Default is BW125.\n --cr CODING_RATE, -r CODING_RATE\n Coding rate (one of CR4_5 CR4_6 CR4_7 CR4_8). Default\n is CR4_5.\n --preamble PREAMBLE, -p PREAMBLE\n Preamble length. Default is 8.\n```\n\n### Simple LoRa beacon `tx_beacon.py`\nA small payload is transmitted in regular intervals.\n```\nusage: tx_beacon.py [-h] [--ocp OCP] [--sf SF] [--freq FREQ] [--bw BW]\n [--cr CODING_RATE] [--preamble PREAMBLE] [--single]\n [--wait WAIT]\n\nA simple LoRa beacon\n\noptional arguments:\n -h, --help show this help message and exit\n --ocp OCP, -c OCP Over current protection in mA (45 .. 240 mA)\n --sf SF, -s SF Spreading factor (6...12). Default is 7.\n --freq FREQ, -f FREQ Frequency\n --bw BW, -b BW Bandwidth (one of BW7_8 BW10_4 BW15_6 BW20_8 BW31_25\n BW41_7 BW62_5 BW125 BW250 BW500). Default is BW125.\n --cr CODING_RATE, -r CODING_RATE\n Coding rate (one of CR4_5 CR4_6 CR4_7 CR4_8). Default\n is CR4_5.\n --preamble PREAMBLE, -p PREAMBLE\n Preamble length. Default is 8.\n --single, -S Single transmission\n --wait WAIT, -w WAIT Waiting time between transmissions (default is 0s)\n```\n\n\n# Tests\n\nExecute `test_lora.py` to run a few unit tests. \n\n\n# Contributors\n\nPlease feel free to comment, report issues, or contribute!\n\nContact me via my company website [Mayer Analytics](http://mayeranalytics.com) and my private blog\n[mcmayer.net](http://mcmayer.net). \n\nFollow me on twitter [@markuscmayer](https://twitter.com/markuscmayer) and\n[@mayeranalytics](https://twitter.com/mayeranalytics).\n\n\n# Roadmap\n\n95% of functions for the Sx127x LoRa capabilities are implemented. Functions will be added when necessary.\nThe test coverage is rather low but we intend to change that soon.\n\n### Semtech SX1272/3 vs. SX1276/7/8/9\n**pySX127x** is not entirely compatible with the 1272.\nThe 1276 and 1272 chips are different and the interfaces not 100% identical. For example registers 0x26/27. \nBut the pySX127x library should get you pretty far if you use it with care. Here are the two datasheets:\n* [Semtech - SX1276/77/78/79 - 137 MHz to 1020 MHz Low Power Long Range Transceiver](http://www.semtech.com/images/datasheet/sx1276_77_78_79.pdf)\n* [Semtech SX1272/73 - 860 MHz to 1020 MHz Low Power Long Range Transceiver](http://www.semtech.com/images/datasheet/sx1272.pdf)\n\n### HopeRF transceiver ICs ###\nHopeRF has a family of LoRa capable transceiver chips [RFM92/95/96/98](http://www.hoperf.com/)\nthat have identical or almost identical SPI interface as the Semtech SX1276/7/8/9 family.\n\n### Microchip transceiver IC ###\nLikewise Microchip has the chip [RN2483](http://ww1.microchip.com/downloads/en/DeviceDoc/50002346A.pdf)\n\nThe [pySX127x](https://github.com/mayeranalytics/pySX127x) project will therefore be renamed to pyLoRa at some point.\n\n# LoRaWAN\nLoRaWAN is a LPWAN (low power WAN) and, and **pySX127x** has almost no relationship with LoRaWAN. Here we only deal with the interface into the chip(s) that enable the physical layer of LoRaWAN networks.\n\n\n# References\n\n### Hardware references\n* [Semtech SX1276/77/78/79 - 137 MHz to 1020 MHz Low Power Long Range Transceiver](http://www.semtech.com/images/datasheet/sx1276_77_78_79.pdf)\n* [Modtronix inAir9](http://modtronix.com/inair9.html)\n* [Spidev Documentation](http://tightdev.net/SpiDev_Doc.pdf)\n* [Make: Tutorial: Raspberry Pi GPIO Pins and Python](http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/)\n\n### LoRa performance tests\n* [Extreme Range Links: LoRa 868 / 900MHz SX1272 LoRa module for Arduino, Raspberry Pi and Intel Galileo](https://www.cooking-hacks.com/documentation/tutorials/extreme-range-lora-sx1272-module-shield-arduino-raspberry-pi-intel-galileo/)\n* [UK LoRa versus FSK - 40km LoS (Line of Sight) test!](http://www.instructables.com/id/Introducing-LoRa-/step17/Other-region-tests/)\n* [Andreas Spiess LoRaWAN World Record Attempt](https://www.youtube.com/watch?v=adhWIo-7gr4)\n\n### Spread spectrum modulation theory\n* [An Introduction to Spread Spectrum Techniques](http://www.ausairpower.net/OSR-0597.html)\n* [Theory of Spread-Spectrum Communications-A Tutorial](http://www.fer.unizg.hr/_download/repository/Theory%20of%20Spread-Spectrum%20Communications-A%20Tutorial.pdf)\n(technical paper)\n\n\n# Copyright and License\n\n© 2015 Mayer Analytics Ltd., All Rights Reserved.\n\n### Short version\nThe license is [GNU AGPL](http://www.gnu.org/licenses/agpl-3.0.en.html).\n\n### Long version\npySX127x is free software: you can redistribute it and/or modify it under the terms of the \nGNU Affero General Public License as published by the Free Software Foundation, \neither version 3 of the License, or (at your option) any later version.\n\npySX127x is distributed in the hope that it will be useful, \nbut WITHOUT ANY WARRANTY; without even the implied warranty of \nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \nSee the GNU Affero General Public License for more details.\n\nYou can be released from the requirements of the license by obtaining a commercial license. \nSuch a license is mandatory as soon as you develop commercial activities involving \npySX127x without disclosing the source code of your own applications, or shipping pySX127x with a closed source product.\n\nYou should have received a copy of the GNU General Public License\nalong with pySX127. If not, see .\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rpsreal/pySX127x", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pyLoRa", "package_url": "https://pypi.org/project/pyLoRa/", "platform": "", "project_url": "https://pypi.org/project/pyLoRa/", "project_urls": { "Homepage": "https://github.com/rpsreal/pySX127x" }, "release_url": "https://pypi.org/project/pyLoRa/0.3.1/", "requires_dist": null, "requires_python": "", "summary": "(LoRa communication 868MHz VERSION) This is a python interface to the Semtech SX1276/7/8/9 long range, low power transceiver family.", "version": "0.3.1" }, "last_serial": 5178533, "releases": { "0.1.5": [ { "comment_text": "", "digests": { "md5": "300869e73e50a1e872f4f9743fced6e4", "sha256": "67958f85b5b665d016d0263fd171d1e3e7b49318ffdcca98eccb56b3a8d7bf38" }, "downloads": -1, "filename": "pyLoRa-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "300869e73e50a1e872f4f9743fced6e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22035, "upload_time": "2018-06-09T11:45:02", "url": "https://files.pythonhosted.org/packages/df/54/11a6eb4be0a1a4a47b76054b071cdf8d37f97df3e237d54a7e3b9e598e20/pyLoRa-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "feb3aa53e7847e56fdb1d08f3e3016c1", "sha256": "36c426827c935b460efd41d0fd6c1ad9637b725b36edd2bf736bb4a2f2e184ea" }, "downloads": -1, "filename": "pyLoRa-0.1.5.tar.gz", "has_sig": false, "md5_digest": "feb3aa53e7847e56fdb1d08f3e3016c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26014, "upload_time": "2018-06-09T11:45:04", "url": "https://files.pythonhosted.org/packages/7e/39/d7564e70c2041e583af81984e800b3332131deeb86f414a482b7373a552d/pyLoRa-0.1.5.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "a4a132a9e27aa076a96796b8a85b6ca4", "sha256": "fb59f33b94df596e23b0e5abeb4584b1300bd197d72f6c5c20a216b7ca3718c5" }, "downloads": -1, "filename": "pyLoRa-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a4a132a9e27aa076a96796b8a85b6ca4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22216, "upload_time": "2018-08-29T19:52:25", "url": "https://files.pythonhosted.org/packages/77/4a/12b163a39b5c24a1918445e232aa2abbd4a43536076b8ac7633bd3cc4c7b/pyLoRa-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0e0e3447904f0cd4a808997524408c5", "sha256": "8e6fc103d1a452cb4edd27c165f2a1293d1b9178b08b1d1c94fb23697784acb1" }, "downloads": -1, "filename": "pyLoRa-0.2.1.tar.gz", "has_sig": false, "md5_digest": "c0e0e3447904f0cd4a808997524408c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33020, "upload_time": "2018-08-29T19:52:27", "url": "https://files.pythonhosted.org/packages/bf/86/a3fe012a00d7aa618e33c91c602c6b30f09cdff9e14af81f904cb2857933/pyLoRa-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "06f0e4c15b72e2f330e187223fab8670", "sha256": "bd0b80f31f491db975479c422a891ebed31711b88f0d20ce8b687512e2562f8f" }, "downloads": -1, "filename": "pyLoRa-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "06f0e4c15b72e2f330e187223fab8670", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28942, "upload_time": "2018-08-30T11:23:28", "url": "https://files.pythonhosted.org/packages/e2/ee/22d685cbffe94b43e1673ec18b82b5c6b4a3e3c5a8fd023b4f644874285e/pyLoRa-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "23c1bbf17088e28d5dfab334561a9bc7", "sha256": "b4c416a6969a39e6513c02b3466885f0a57794adcfff4545c08c65d92bdad5da" }, "downloads": -1, "filename": "pyLoRa-0.2.2.tar.gz", "has_sig": false, "md5_digest": "23c1bbf17088e28d5dfab334561a9bc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32996, "upload_time": "2018-08-30T11:23:30", "url": "https://files.pythonhosted.org/packages/da/4f/72d7bb2b7d4919b2d9e95fc3592ce374447b52d4a45222fbbb0bc8ff5769/pyLoRa-0.2.2.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "ff62ce47a046c44e4770c54858c4f0ad", "sha256": "02d6d92ad3e75a17a39959fb71d430e744bcf484f5ffa15c229167da9f4707a6" }, "downloads": -1, "filename": "pyLoRa-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "ff62ce47a046c44e4770c54858c4f0ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40875, "upload_time": "2018-11-26T18:32:32", "url": "https://files.pythonhosted.org/packages/49/39/945be5d93a4e813edd205ca652291415f96dfdd631bf9815120c0187af5e/pyLoRa-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d0b6dec749e093fa6fded6dd7e9e554", "sha256": "967e53bb22ae01ff4c0960cb3bec8d6d6e48631f5c11c41f379f5d82594aa7ab" }, "downloads": -1, "filename": "pyLoRa-0.2.5.tar.gz", "has_sig": false, "md5_digest": "7d0b6dec749e093fa6fded6dd7e9e554", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33032, "upload_time": "2018-11-26T18:32:34", "url": "https://files.pythonhosted.org/packages/a0/45/5c1b4fb7f1db1db248d6cdc89b41fdb2ecbb212c63dac85b42d9cac6a623/pyLoRa-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "0ee3335f04eae7b899d56a5cab92eb9d", "sha256": "53a35697c6a32a61b7701a21e98cf6282a83e31de3f6f91882f122f9f3f4e388" }, "downloads": -1, "filename": "pyLoRa-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "0ee3335f04eae7b899d56a5cab92eb9d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40917, "upload_time": "2018-12-20T16:14:38", "url": "https://files.pythonhosted.org/packages/29/e9/b092d45f42d56fa8c307a6f95796c6ae3f351f20e2fc7d4d63e758dc0a00/pyLoRa-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "838f714cbb47f9351f3a541f9e3a174a", "sha256": "69d8515b56685dda28fb06c89cab0e266f516f522882d971162d610afc347d6d" }, "downloads": -1, "filename": "pyLoRa-0.2.6.tar.gz", "has_sig": false, "md5_digest": "838f714cbb47f9351f3a541f9e3a174a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33106, "upload_time": "2018-12-20T16:14:39", "url": "https://files.pythonhosted.org/packages/74/3e/72031b327adea54341001421acc5a9b359ee7e8c77d9f0c321a880c160d8/pyLoRa-0.2.6.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "924a4aa45ebde0bc2c15efaa73481265", "sha256": "f6d2b75939f337436ac36e43c0a54bee7373092809601ecf0c410876578c1cfe" }, "downloads": -1, "filename": "pyLoRa-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "924a4aa45ebde0bc2c15efaa73481265", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40977, "upload_time": "2019-04-22T19:08:40", "url": "https://files.pythonhosted.org/packages/e5/bf/89a791f0127f1513c5236598600f4afad6b5b4f36bbc16d9a033fbb7d6b0/pyLoRa-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d2c7dfe298ceda867449351fc7d4a17", "sha256": "69ba06f3d25d73f6deaa358298f44077d9b9519bf3c82ca150f3122faec7fc64" }, "downloads": -1, "filename": "pyLoRa-0.3.0.tar.gz", "has_sig": false, "md5_digest": "8d2c7dfe298ceda867449351fc7d4a17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33305, "upload_time": "2019-04-22T19:08:42", "url": "https://files.pythonhosted.org/packages/23/a5/4d4ab0f971a48dffa57a21b174de035eac70790207c90393df5b0ba700b5/pyLoRa-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "a6f11005ece8c39b0f4157cfbc9ef0cc", "sha256": "905f648f21f40d8691a6520dbdbc04755a78db906046e8fc4e49d03a62561a8d" }, "downloads": -1, "filename": "pyLoRa-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a6f11005ece8c39b0f4157cfbc9ef0cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40974, "upload_time": "2019-04-23T17:37:58", "url": "https://files.pythonhosted.org/packages/46/ab/a3ddafd7ab4ca37aad689b8363a31f159026f2be47fd337bb013edaf1f27/pyLoRa-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb51ec0a9b9b97d177b40264bcc28c81", "sha256": "5e188e4ae4a53ce7cc5325bf8864ccadf63b4c8ce3c4800115877d46ef269c5b" }, "downloads": -1, "filename": "pyLoRa-0.3.1.tar.gz", "has_sig": false, "md5_digest": "bb51ec0a9b9b97d177b40264bcc28c81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33293, "upload_time": "2019-04-23T17:38:00", "url": "https://files.pythonhosted.org/packages/25/29/30ff803d2875457f3d67e821bfcf8a201e8f5bc90b8193f6722d69026cd2/pyLoRa-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a6f11005ece8c39b0f4157cfbc9ef0cc", "sha256": "905f648f21f40d8691a6520dbdbc04755a78db906046e8fc4e49d03a62561a8d" }, "downloads": -1, "filename": "pyLoRa-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a6f11005ece8c39b0f4157cfbc9ef0cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40974, "upload_time": "2019-04-23T17:37:58", "url": "https://files.pythonhosted.org/packages/46/ab/a3ddafd7ab4ca37aad689b8363a31f159026f2be47fd337bb013edaf1f27/pyLoRa-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb51ec0a9b9b97d177b40264bcc28c81", "sha256": "5e188e4ae4a53ce7cc5325bf8864ccadf63b4c8ce3c4800115877d46ef269c5b" }, "downloads": -1, "filename": "pyLoRa-0.3.1.tar.gz", "has_sig": false, "md5_digest": "bb51ec0a9b9b97d177b40264bcc28c81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33293, "upload_time": "2019-04-23T17:38:00", "url": "https://files.pythonhosted.org/packages/25/29/30ff803d2875457f3d67e821bfcf8a201e8f5bc90b8193f6722d69026cd2/pyLoRa-0.3.1.tar.gz" } ] }