{"id":24367790,"url":"https://github.com/p2p-industries/hyveos","last_synced_at":"2025-04-05T14:04:56.877Z","repository":{"id":271936393,"uuid":"896499889","full_name":"p2p-industries/hyveos","owner":"p2p-industries","description":"Robot communication and coordination network.","archived":false,"fork":false,"pushed_at":"2025-03-25T01:52:31.000Z","size":2075,"stargazers_count":63,"open_issues_count":26,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T13:09:44.858Z","etag":null,"topics":["batman-adv","libp2p","mesh","mesh-networks","p2p","p2p-network","robotframework","robots","swarms"],"latest_commit_sha":null,"homepage":"https://p2p.industries","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/p2p-industries.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2024-11-30T14:27:22.000Z","updated_at":"2025-02-24T20:42:51.000Z","dependencies_parsed_at":"2025-02-24T02:00:34.192Z","dependency_job_id":"74d5ff60-29a9-4682-b54d-ae14d70d39dd","html_url":"https://github.com/p2p-industries/hyveos","commit_stats":null,"previous_names":["p2p-industries/hyveos"],"tags_count":63,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2p-industries%2Fhyveos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2p-industries%2Fhyveos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2p-industries%2Fhyveos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2p-industries%2Fhyveos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/p2p-industries","download_url":"https://codeload.github.com/p2p-industries/hyveos/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247345850,"owners_count":20924102,"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":["batman-adv","libp2p","mesh","mesh-networks","p2p","p2p-network","robotframework","robots","swarms"],"created_at":"2025-01-19T02:55:07.276Z","updated_at":"2025-04-05T14:04:56.847Z","avatar_url":"https://github.com/p2p-industries.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![P2P Industries Logo Light](logo_light.png#gh-light-mode-only)\n\n# ![Logo Dark](logo_dark.png#gh-dark-mode-only)\n\n[![Crates.io Version](https://img.shields.io/crates/v/hyveos-sdk)](https://crates.io/crates/hyveos-sdk)\n[![NPM Version](https://img.shields.io/npm/v/%40hyveos%2Fsdk)](https://www.npmjs.com/package/@hyveos/sdk)\n[![JSR](https://jsr.io/badges/@hyveos/sdk)](https://jsr.io/@hyveos/sdk)\n[![PyPI - Version](https://img.shields.io/pypi/v/hyveos-sdk)](https://pypi.org/project/hyveos-sdk/)\n\n## P2P Industries builds the first decentralized robot communication system\n\n## [Documentation](https://docs.p2p.industries)\n\n[https://docs.p2p.industries](https://docs.p2p.industries).\n\nWe've tried to provide comprehensive documentation for everything that you can do with hyveOS!\n\n## Example Use Cases\n\nWhile the provided abstractions are universally useful, hyveOS is ideally suited for robot swarms.\n\n### Live Video to first Responders\n\nToday many search and rescue operators already use drones to save lives. With hyveOS's [File Transfer](https://docs.p2p.industries/sdk/file_transfer/) the video feed can be\nbroadcastet to countless on-the-ground operators even while the cellular network is down.\n\n### Warehouse\n\nAny time robots come together, like in a warehouse, communication is key. Instead of relying on a central server that distributes tasks\nor provides information about roles (who can do what), with hyveOS the robots can exchange that information between each other.\n\nThink of a warehouse where robots move individual parcels, but sometimes they need to come together to carry a pallet or a bit item.\n\nWith hyveOS one robot that took up the task can publish a message in the `carry-stuff` topic of our [Pub-Sub](https://docs.p2p.industries/sdk/pub_sub/), asking robots that are in [proximity](https://docs.p2p.industries/sdk/discovery/) for assitance.\nThey can [respond to the request](https://docs.p2p.industries/sdk/request_response/) and once they are enough, they can proceed together.\n\n### Infrastructure Interaction\n\nThink of a service robot that wants to deliver a coffee to you, while you are sitting at your desk.\n\nWith hyveOS the service robot can directly talk to your computer (or a website where you ordered the coffee), the coffee machine, the doors in the way\nand the elevator that takes it to the right floor. Made possible by our [Key Value Store](https://docs.p2p.industries/sdk/dht/) (find a coffee machine) and [request-response](https://docs.p2p.industries/sdk/request_response/) (open the door for me please).\n\n## Installation\n\n## Install in One Line\n\n\u003e **This script will make changes to the network configuration of your device.**\n\u003e It's possible that you will loose access to the device during the installation. If that happens it's usually safe to log back into the device and run the script again.\n\u003e Don't use this on devices you don't have physical access to, contains important data or is in production.\n\u003e\n\u003e The best configuration during **setup** is an ethernet cable plugged into the device over which you ssh into the device and a wifi chip on the device.\n\u003e We tested the script on Ubuntu Server 24.04 LTS and Raspberry Pi 5. Different devices and somewhat recent Debian derivates should work as well.\n\n```bash\nbash \u003c(curl -ssL https://install.p2p.industries)\n```\n\nThis will run our installation script where everything is preconfigured for you.\nIf you want to or need to have some more control, keep to the following 4 steps:\n\n## Install through APT Repository\n\n1. Set up hyve `apt` repository:\n   ```bash\n   wget -qO - https://apt.p2p.industries/key.gpg | sudo gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/p2p-industries.gpg\n   echo \"deb https://apt.p2p.industries /\" | sudo tee /etc/apt/sources.list.d/p2p-industries.list\n   sudo apt update \u0026\u0026 sudo apt upgrade -y\n   ```\n\n2. Install `docker` (If you need to):\n   ```bash\n   curl -sSL https://get.docker.com | sh\n   ```\n\n3. Install `B.A.T.M.A.N.-adv`:\n   ```bash\n   sudo apt install -y batctl\n   ```\n\n4. Install `hyved` and `hyvectl`:\n   ```bash\n   sudo apt install -y hyved hyvectl\n   ```\n\n### Choose a WiFi network interface for the mesh\n\nYou need to choose a WiFi network interface for the mesh.\nThis interface will be configured using `wpa_supplicant`, so you have to ensure that it isn't managed by any other networking service like `Netplan` or `NetworkManager` before continuing.\n\n\u003e On a recent Raspberry Pi, the WiFi interface is usually called `wlan0`.\n\u003e\n\u003e In the rest of this guide, we will assume that `wlan0` is the WiFi interface you want to use for the mesh.\n\u003e Otherwise, replace `wlan0` with the name of your WiFi interface in the following steps.\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to stop `Netplan` from managing the `wlan0` interface on a default Raspberry Pi Ubuntu 24.04 installation\u003c/summary\u003e\nOn a default Raspberry Pi Ubuntu 24.04 installation, installed using the Raspberry Pi Imager, `Netplan` is configured by `cloud-init` to manage the `wlan0` interface.\nTo stop `Netplan` from managing the interface, you should be able to follow these steps:\n\n1. Make sure, that you are either working on the device directly (e.g. with a keyboard and monitor connected to the Pi) or that you are connected over SSH using the ethernet port.\n\n2. Check if `cloud-init` is enabled:\n   ```bash\n   sudo systemctl status cloud-init\n   ```\n\n   If it is enabled, you should see something like `Active: active` in the output.\n   In that case, you can disable it permanently by creating an empty file at `/etc/cloud/cloud-init.disabled`:\n\n   ```bash\n   sudo touch /etc/cloud/cloud-init.disabled\n   ```\n\n3. Check, which network configuration files are present:\n   ```bash\n   ls /etc/netplan\n   ```\n\n   If `cloud-init` was enabled, you should see a file called something like `50-cloud-init.yaml`. Otherwise, other configuration files might be present.\n   Check, which of these files contains the configuration for the `wlan0` interface:\n\n   ```bash\n   cat /etc/netplan/50-cloud-init.yaml\n   # maybe cat other files as well, until you find the one with the `wlan0` configuration\n   ```\n\n   The file should look somewhat like this:\n\n   ```yaml\n   network:\n     version: 2\n     wifis:\n       renderer: networkd\n       wlan0:\n         access-points:\n           SOME_SSID:\n             password: SOME_PASSWORD_HASH\n         dhcp4: true\n         optional: true\n     ethernets:\n       eth0:\n         dhcp4: true\n   ```\n\n4. Remove the configuration for the `wlan0` interface from the file:\n   ```bash\n   sudo nano /etc/netplan/50-cloud-init.yaml\n   ```\n\n   Remove the section for the `wlan0` interface. The example above would look like this after removing the `wlan0` section:\n\n   ```yaml\n   network:\n     version: 2\n     ethernets:\n       eth0:\n         dhcp4: true\n   ```\n\n   If none of the configuration file you find in step 3 contains an ethernet configuration, but you are connected over ethernet, you might need to add an ethernet configuration like the one above, to keep the ethernet connection working.\n\n5. Apply the changes:\n   ```bash\n   sudo netplan apply\n   ```\n   If you are connected over SSH, you might lose the connection at this point. If you do, just try to reconnect after a few seconds.\n   If reconnecting doesn't work, you might need to restart the device.\n\n\u003c/details\u003e\n\n### Configure `hyved` before Running\n\nBefore you can run `hyved`, you need to configure it.\nYou can do this by editing `/etc/hyved/config.toml`,\nwhich should at least configure the network interfaces (using the interfaces key).\n\nIn the following example, `wlan0` is the wireless interface used for\nthe **B.A.T.M.A.N.-adv** mesh, and `bat0` is the **B.A.T.M.A.N.-adv** virtual interface:\n\n```toml\ninterfaces = [\"bat0\", \"wlan0\"]\nbatman-interface = \"bat0\"\n```\n\n\u003e You should see other possible configuration options in the comments in the config file.\n\nBefore running hyved you need to setup its prerequisites.\nThe easiest way to do this is to use the provided systemd services:\n\n```bash\nsudo systemctl enable --now docker\nsudo systemctl enable --now wpa_supplicant@wlan0\nsudo systemctl enable --now hyveos-batman@wlan0\nsudo systemctl enable --now batman-neighbours-daemon\n```\n\n### Starting `hyved`\n\n```bash\nsudo systemctl start hyved\n```\n\nNow `hyved` is running on your machine.\n\n### Running `hyved` at Boot\n\nIf you want to run `hyved` at boot, enable the `systemd` service:\n\n```bash\nsudo systemctl enable --now hyved\n```\n\n### Adding your user to the `hyveos` group\n\nTo run `hyvectl` without `sudo`, you need to add your user to the `hyveos` group:\n\n```bash\nsudo usermod -aG hyveos $USER\n```\n\n## Verify the installation\n\nVerify your installation by running\n\n```bash\nhyvectl whoami\n```\n\nYou should see something like\n\n```bash\n🤖 You are { 12D3KooWJtoSLKL5H7GJsx9rExxwL4ZdckgX2ENagSHDrMSdxt7A }\n```\n\nIf it succeeds, that's it! Your machine is ready to join multi-node swarms!\n\nContinue with the [Quickstart](https://docs.p2p.industries/concepts/quickstart) or learn about [hyveOS concepts](https://docs.p2p.industries/concepts/concepts)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp2p-industries%2Fhyveos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fp2p-industries%2Fhyveos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp2p-industries%2Fhyveos/lists"}