{"id":43653463,"url":"https://github.com/nes-lab/shepherd","last_synced_at":"2026-02-04T20:25:21.156Z","repository":{"id":47072148,"uuid":"284725512","full_name":"nes-lab/shepherd","owner":"nes-lab","description":"Infrastructure for the Testbed, mainly focused on the Observers","archived":false,"fork":false,"pushed_at":"2026-01-30T13:37:07.000Z","size":86342,"stargazers_count":5,"open_issues_count":17,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-31T04:18:31.714Z","etag":null,"topics":["batteryless","beaglebone","energyharvesting","pru","solar","testbed"],"latest_commit_sha":null,"homepage":"https://nes-lab.github.io/shepherd","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"geissdoerfer/shepherd","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nes-lab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-03T14:41:56.000Z","updated_at":"2026-01-29T22:49:25.000Z","dependencies_parsed_at":"2025-09-24T15:27:09.393Z","dependency_job_id":null,"html_url":"https://github.com/nes-lab/shepherd","commit_stats":{"total_commits":1450,"total_committers":7,"mean_commits":"207.14285714285714","dds":"0.26275862068965516","last_synced_commit":"ff0eaa43434474c062f2c94dc8bc3cc4ba7cf7a5"},"previous_names":["nes-lab/shepherd"],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/nes-lab/shepherd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nes-lab%2Fshepherd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nes-lab%2Fshepherd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nes-lab%2Fshepherd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nes-lab%2Fshepherd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nes-lab","download_url":"https://codeload.github.com/nes-lab/shepherd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nes-lab%2Fshepherd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29095221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-04T20:17:23.003Z","status":"ssl_error","status_checked_at":"2026-02-04T20:16:36.396Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["batteryless","beaglebone","energyharvesting","pru","solar","testbed"],"created_at":"2026-02-04T20:25:20.410Z","updated_at":"2026-02-04T20:25:21.150Z","avatar_url":"https://github.com/nes-lab.png","language":"C","readme":"# SHEpHERD: SyncHronized Energy Harvesting Emulator RecorDer\n\n[![QA-Tests](https://github.com/nes-lab/shepherd/actions/workflows/quality_assurance.yaml/badge.svg)](https://github.com/nes-lab/shepherd/actions/workflows/quality_assurance.yaml)\n[![Documentation](https://github.com/nes-lab/shepherd/actions/workflows/pages_update.yaml/badge.svg)](https://nes-lab.github.io/shepherd/)\n[![Build Pru](https://github.com/nes-lab/shepherd/actions/workflows/fw_build_gcc.yaml/badge.svg)](https://github.com/nes-lab/shepherd/actions/workflows/fw_build_gcc.yaml)\n[![Code Quality](https://www.codefactor.io/repository/github/nes-lab/shepherd/badge)](https://www.codefactor.io/repository/github/nes-lab/shepherd)\n[![PyPIVersion](https://img.shields.io/pypi/v/shepherd_herd.svg)](https://pypi.org/project/shepherd_herd)\n[![CodeStyle](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n**Testbed-Website**: \u003chttps://nes-lab.github.io/shepherd-nova\u003e\n\n**Python-Tools for Users**: \u003chttps://github.com/nes-lab/shepherd-tools\u003e\n\n**Documentation**: \u003chttps://nes-lab.github.io/shepherd\u003e\n\n**Main Project**: \u003chttps://github.com/nes-lab/shepherd\u003e\n\n**Targets-HW \u0026 -SW**: \u003chttps://github.com/nes-lab/shepherd-targets\u003e\n\n**WebAPI-Repo**: \u003chttps://github.com/nes-lab/shepherd-webapi\u003e\n\n**Dev-Documentation**: \u003chttps://github.com/orgua/shepherd-v2-planning\u003e\n\n---\n\nBatteryless sensor nodes depend on harvesting energy from their environment.\nDeveloping solutions involving groups of batteryless nodes requires a tool to analyze, understand and replicate spatio-temporal harvesting conditions.\n*shepherd* is a testbed for the batteryless Internet of Things, allowing to record harvesting conditions at multiple points in space over time.\nThe recorded data can be replayed to attached wireless sensor nodes, examining their behavior under the constraints of spatio-temporal energy availability.\n\n**Features**\n\n - High-speed, high resolution current and voltage sensing\n - Technology-agnostic: Currently, solar and kinetic energy harvesting are supported\n - Remote programming/debugging of ARM Cortex-M MCUs using Serial-Wire-Debug\n - High resolution, synchronized GPIO tracing\n - Configurable, constant voltage power supply for attached sensor nodes\n - Level-translated serial connection to the attached sensor nodes\n\nFor a detailed description see our [Paper](https://wwwpub.zih.tu-dresden.de/~mzimmerl/pubs/geissdoerfer19shepherd.pdf) or the [official documentation](https://nes-lab.github.io/shepherd/).\n\nA *shepherd* instance consists of a group of spatially distributed *shepherd* nodes that are time-synchronized with each other.\nEach *shepherd* node consists of a [BeagleBone](https://beagleboard.org/bone), the *shepherd* cape and either an energy harvesting source or a target MCU board to test.\n\nThis repository contains the hardware design files for the shepherd cape, the software running on each *shepherd* node as well as the tool to orchestrate a group of *shepherd* nodes connected to a network.\n\n## Quickstart\n\nStart by assembling your *shepherd* nodes, consisting of a BeagleBone Green/Black, a *shepherd* cape, a harvesting capelet and a target capelet.\nThe next step is to manually install the latest Ubuntu Linux on each BeagleBone.\nYou can install it to SD-card or the on-board eMMC flash, following [the official instructions](https://elinux.org/BeagleBoardUbuntu).\nMake sure to follow the instructions for **BeagleBone**. Alternatively there are two more detailed guides in the [shepherd documentation](https://nes-lab.github.io/shepherd/user/getting_started.html).\n\nThe following instructions describe how to install the *shepherd* software on a group of *shepherd* nodes connected to an Ethernet network.\nWe assume that your local machine is connected to the same network, that the nodes have internet access and that you know the IP address of each node.\n\nIf you haven't done it yet, clone this repository to your local machine:\n\n```shell\ngit clone https://github.com/nes-lab/shepherd.git\n```\n\nNext, install the tools used for installing and controlling the *shepherd* nodes.\nWe'll use [Ansible](https://www.ansible.com/) to remotely roll out the basic configuration to each *shepherd* node and *shepherd-herd* to orchestrate recording/emulation across all nodes.\nThe tools are hosted on `PyPI` and require Python version \u003e= 3.6.\nYou'll also need to have `sshpass` installed on your machine, which is available through the package management system of all major distributions.\nInstall the tools using `pip`:\n\n```shell\npip3 install ansible shepherd-herd\n```\n\nThe `inventory/herd.yaml` file shows an example of how to provide the host names and known IP addresses of your BeagleBones.\nAdjust it to reflect your setup.\nYou can arbitrarily choose and assign the hostnames (sheep0, sheep1, in this example) and the ansible_user (jane in this example).\n[**TODO:** update description with roles].\n\n```yaml\nsheep:\n  hosts:\n    sheep0:\n        ansible_host: 192.168.1.100\n    sheep1:\n        ansible_host: 192.168.1.101\n    sheep2:\n        ansible_host: 192.168.1.102\n  vars:\n    ansible_user: jane\n```\n\nNow run the `bootstrap.yml` *Ansible* playbook, which sets the hostname, creates a user and enables passwordless ssh and sudo:\n\n```shell\nansible-playbook deploy/bootstrap.yml\n```\n\nFinally, use the `deploy.yml` playbook to set up the *shepherd* software with the configured roles from inventory:\n\n```shell\nansible-playbook deploy/deploy.yml\n```\n\n## Usage\n\nRecord two minutes of data:\n\n```shell\nshepherd-herd harvester -d 120 -o recording.h5 -a mppt_voc\n```\nThe command starts the recording asynchronously and returns after all nodes have started recording.\nWhile the nodes are still recording (indicated by blinking of LED 1 and 2), prepare a directory on your local machine:\n\n```shell\nmkdir ~/shepherd_recordings\n```\n\nAfter the nodes stop blinking, you can retrieve the data to analyze it on your local machine:\n\n```shell\nshepherd-herd retrieve recording.h5 ~/shepherd_recordings\n```\n\nFor a detailed description of the [HDF5](https://en.wikipedia.org/wiki/Hierarchical_Data_Format) based data format, refer to the [corresponding documentation](https://shepherd-testbed.readthedocs.io/en/latest/user/data_format.html).\n\nFinally, replay the previously recorded data to the attached sensor nodes, recording their power consumption:\n\n```shell\nshepherd-herd emulator -o consumption.h5 recording.h5\n```\n\nTry `shepherd-herd --help` or check out the documentation [here](https://shepherd-testbed.readthedocs.io/en/latest/user/cli.html#shepherd-herd) for a list of all options.\n\n## Problems and Questions\n\nIf you experience issues or require additional features, please get in touch via e-mail or by creating an issue on GitHub. The issue-tab also gives an overview for current roadmaps and milestones.\n\n## People\n\n*shepherd* development is lead at the Networked Embedded Systems Lab at TU Dresden \u0026 TU Darmstadt as part of the DFG-funded project Next-IoT.\n\nThe following people have contributed to *shepherd*:\n\n - [Kai Geissdoerfer](https://www.researchgate.net/profile/Kai_Geissdoerfer)\n - [Mikolaj Chwalisz](https://www.tkn.tu-berlin.de/team/chwalisz/)\n - [Marco Zimmerling](https://wwwpub.zih.tu-dresden.de/~mzimmerl/)\n - [Justus Paulick](https://github.com/kugelbit)\n - [Boris Blokland](https://github.com/borro0)\n - [Jonas Kubicki](https://github.com/jonkub)\n - [Ingmar Splitt](https://github.com/nes-lab)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnes-lab%2Fshepherd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnes-lab%2Fshepherd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnes-lab%2Fshepherd/lists"}