{"id":15063470,"url":"https://github.com/hiveeyes/beradio","last_synced_at":"2025-04-10T11:09:39.351Z","repository":{"id":51852878,"uuid":"63002804","full_name":"hiveeyes/beradio","owner":"hiveeyes","description":"The BERadio specification and implementation for Arduino and Python. Transmit data in Bencode format over radio links, decode and publish to MQTT.","archived":false,"fork":false,"pushed_at":"2025-03-01T13:41:05.000Z","size":326,"stargazers_count":4,"open_issues_count":7,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-24T09:52:55.486Z","etag":null,"topics":["bencode","csv","kotori-daq","mqtt"],"latest_commit_sha":null,"homepage":"https://hiveeyes.org/docs/beradio/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hiveeyes.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-07-10T14:34:12.000Z","updated_at":"2025-02-17T21:53:28.000Z","dependencies_parsed_at":"2024-09-29T08:40:48.330Z","dependency_job_id":"134a7b5a-fda0-457d-9903-f49fd0935022","html_url":"https://github.com/hiveeyes/beradio","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiveeyes%2Fberadio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiveeyes%2Fberadio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiveeyes%2Fberadio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiveeyes%2Fberadio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hiveeyes","download_url":"https://codeload.github.com/hiveeyes/beradio/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248017995,"owners_count":21034042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bencode","csv","kotori-daq","mqtt"],"created_at":"2024-09-24T23:58:03.710Z","updated_at":"2025-04-10T11:09:39.335Z","avatar_url":"https://github.com/hiveeyes.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"#######\nBERadio\n#######\n\n|\n\n.. start-badges\n\n|ci-tests| |ci-coverage| |license| |pypi-downloads|\n|python-versions| |status| |pypi-version|\n\n.. |ci-tests| image:: https://github.com/hiveeyes/beradio/actions/workflows/tests.yml/badge.svg\n    :target: https://github.com/hiveeyes/beradio/actions/workflows/tests.yml\n    :alt: CI outcome\n\n.. |ci-coverage| image:: https://codecov.io/gh/hiveeyes/beradio/branch/main/graph/badge.svg\n    :target: https://codecov.io/gh/hiveeyes/beradio\n    :alt: Test suite code coverage\n\n.. |pypi-downloads| image:: https://static.pepy.tech/badge/beradio/month\n    :target: https://pepy.tech/project/beradio\n    :alt: PyPI downloads per month\n\n.. |pypi-version| image:: https://img.shields.io/pypi/v/beradio.svg\n    :target: https://pypi.org/project/beradio/\n    :alt: Package version on PyPI\n\n.. |status| image:: https://img.shields.io/pypi/status/beradio.svg\n    :target: https://pypi.org/project/beradio/\n    :alt: Project status (alpha, beta, stable)\n\n.. |python-versions| image:: https://img.shields.io/pypi/pyversions/beradio.svg\n    :target: https://pypi.org/project/beradio/\n    :alt: Support Python versions\n\n.. |license| image:: https://img.shields.io/pypi/l/beradio.svg\n    :target: https://github.com/hiveeyes/beradio/blob/main/LICENSE\n    :alt: Project license\n\n.. end-badges\n\n.. tip::\n\n    You might want to continue reading at the official `BERadio documentation`_,\n    all inline links will be working there.\n\n*****\nAbout\n*****\n\n*BERadio* is an encoding specification and implementation for efficient\ncommunication in constrained radio link environments. It is conceived and used\nfor over-the-air communication within the `Hiveeyes project`_.\n\nTogether with `Kotori`_, a multi-channel, multi-protocol data acquisition and\ngraphing toolkit for building flexible telemetry solutions, it powers the\n`Hiveeyes system`_ on the gateway side, which you can enjoy by visiting the\n`Hiveeyes platform`_.\n\n\n*****\nUsage\n*****\n\nHandbook\n========\n\nThe ``beradio`` Python distribution provides convenient commandline-based\ndecoding tools for working with messages in *Bencode* and *BERadio* formats,\ncalled ``beradio``, ``bdecode``, ``bencode``, and ``bemqtt``.\n\nFor more information, have a look at the `BERadio handbook`_.\n\nSynopsis\n========\n\nDecoding an example message on the command line.\n\n::\n\n    $ bdecode d1:#i999e1:_2:h11:hli488ei572ee1:tli2163ei1925ei1092ei1354ee1:wi10677ee\n    OrderedDict([('#', 999), ('_', 'h1'), ('h', [488, 572]), ('t', [2163, 1925, 1092, 1354]), ('w', 10677)])\n\n::\n\n    $ beradio decode d1:#i999e1:_2:h11:hli488ei572ee1:tli2163ei1925ei1092ei1354ee1:wi10677ee --protocol=2\n    {\n        \"meta\": {\n            \"protocol\": \"beradio2\",\n            \"network\": \"b6a6b04c-a929-4a6c-9238-185e9af79eed\",\n            \"gateway\": \"deh22\",\n            \"node\": \"999\",\n            \"time\": 1659487642526373120,\n            \"profile\": \"h1\"\n        },\n        \"data\": {\n            \"hum1\": 4.88,\n            \"hum2\": 5.72,\n            \"temp1\": 21.63,\n            \"temp2\": 19.25,\n            \"temp3\": 10.92,\n            \"temp4\": 13.54,\n            \"wght1\": 106.77\n        }\n    }\n\n\n\n\n***********\nEnvironment\n***********\n\nThere are a number of Arduino sensor nodes in the field communicating unidirectional\nvia radio link to a central Arduino acting as a gateway. The gateway Arduino receives\nmessage payloads and writes them verbatim to the serial port connected to a Raspberry Pi,\nwhich transforms and forwards the messages to a MQTT bus.\n\nThe data now being on the bus, arbitrary systems can consume information by subscribing\nto specific MQTT topics where measurement events are delivered.\n\nThe Kotori multichannel DAQ subscribes to topics on the MQTT bus, receives telemetry data\npayloads and stores the measurements into a contemporary time-series database.\nAfter that, Grafana is used to display the measurement information.\n\n\n*******\nDetails\n*******\n\nFeatures\n========\n*BERadio* is a specification and also provides reference implementations for Arduino and Python.\n\n- Some details have been written down in the `BERadio specification`_ document.\n- It uses the ``Bencode`` format on the wire to provide space-efficient data encoding.\n- ``beradio forward`` processes data messages received over the air and forwards them to MQTT.\n- ``libberadio`` will be an appropriate C++ library for Arduino.\n\n\nThe main workhorse\n==================\n``beradio forward`` ingests message payloads from a serial interface, sanitizes and\ndecodes them from ``Bencode`` format and republishes the data to a MQTT topic.\n\nThe MQTT topic name used for publishing is derived from some parameters contained\nin the data of the message, the topic template used for this is currently programmed\nto ``{realm}/{network}/{gateway}/{node}/{field}``.\nThe actual values will get separated, mapped and formatted in different\nvariants before republishing them to MQTT.\n\n\n*******************\nProject information\n*******************\n\nContributing\n============\nWe are always happy to receive code contributions, ideas, suggestions\nand problem reports from the community.\nSpend some time taking a look around, locate a bug, design issue or\nspelling mistake and then send us a pull request or create an issue ticket.\n\nThanks in advance for your efforts, we really appreciate any help or feedback.\n\nLicense\n=======\nThis software is copyright © 2015-2025 The Hiveeyes developers. All rights reserved.\n\nUse of the source code included here is governed by the\n`GNU Affero General Public License \u003cGNU-AGPL-3.0_\u003e`_ and the\n`European Union Public License \u003cEUPL-1.2_\u003e`_.\nThe software is and will always be **free and open source software**.\n\n\n\n.. _Bencode: https://en.wikipedia.org/wiki/Bencode\n.. _BERadio documentation: https://hiveeyes.org/docs/beradio/\n.. _BERadio handbook: https://hiveeyes.org/docs/beradio/handbook.html\n.. _BERadio specification: https://hiveeyes.org/docs/beradio/beradio.html\n.. _EUPL-1.2: https://opensource.org/licenses/EUPL-1.1\n.. _GNU-AGPL-3.0: https://www.gnu.org/licenses/agpl-3.0-standalone.html\n.. _Hiveeyes platform: https://swarm.hiveeyes.org/\n.. _Hiveeyes project: https://hiveeyes.org/\n.. _Hiveeyes system: https://hiveeyes.org/docs/system/\n.. _Kotori: https://getkotori.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhiveeyes%2Fberadio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhiveeyes%2Fberadio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhiveeyes%2Fberadio/lists"}