{"id":23291529,"url":"https://github.com/guycole/mellow-heeler","last_synced_at":"2026-04-17T08:02:18.688Z","repository":{"id":16892828,"uuid":"19653552","full_name":"guycole/mellow-heeler","owner":"guycole","description":"Collect and store WiFi AP beacons","archived":false,"fork":false,"pushed_at":"2026-03-02T06:34:39.000Z","size":11728,"stargazers_count":2,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-02T08:51:42.242Z","etag":null,"topics":["postgresql","python3","raspberry-pi","sqlalchemy","wifi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guycole.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null}},"created_at":"2014-05-10T22:33:41.000Z","updated_at":"2026-03-02T06:34:42.000Z","dependencies_parsed_at":"2022-08-25T11:51:15.802Z","dependency_job_id":"9ec8a704-a52a-46c0-ac69-2dbba15dcd3a","html_url":"https://github.com/guycole/mellow-heeler","commit_stats":{"total_commits":117,"total_committers":1,"mean_commits":117.0,"dds":0.0,"last_synced_commit":"e5497f047d4a1c0a464c0b57a9a382d76da3b1f9"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/guycole/mellow-heeler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycole%2Fmellow-heeler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycole%2Fmellow-heeler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycole%2Fmellow-heeler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycole%2Fmellow-heeler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guycole","download_url":"https://codeload.github.com/guycole/mellow-heeler/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guycole%2Fmellow-heeler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31920518,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["postgresql","python3","raspberry-pi","sqlalchemy","wifi"],"created_at":"2024-12-20T05:18:20.352Z","updated_at":"2026-04-17T08:02:18.602Z","avatar_url":"https://github.com/guycole.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"mellow-heeler\n=============\n\n[Wireless Access Point](https://en.wikipedia.org/wiki/Wireless_access_point) collection, processing and reporting applications.\n\n## Introduction\n\nA Mellow Heeler collector observes [wireless beacons](https://en.wikipedia.org/wiki/Beacon_frame) and shares the observation w/a Mellow Heeler backend for parsing, storage and reporting.\n\nFixed site collectors assets use a dedicated [Raspberry Pi](https://www.raspberrypi.org/) which periodically write WAP observations to AWS S3 for storage.  Mobile collection is performed using a [Raspberry Pi](https://www.raspberrypi.org/) augmented w/a [GPS](https://en.wikipedia.org/wiki/Global_Positioning_System) [HAT](https://www.raspberrypi.com/news/introducing-raspberry-pi-hats/) for location and time reporting, and also writes observations to AWS S3.\n\nBack end processing reads collected observations from AWS S3 and loads the results into [postgresql](https://www.postgresql.org/) for analysis and reporting.  [Here](https://github.com/guycole/mellow-heeler/tree/master/reports) are some report examples.\n\n## Deployment\n![deployment](https://github.com/guycole/mellow-heeler/blob/master/md-uml/heeler-deployment.png)\n\n## Features\n1. Autonomous collection of wireless beacons. \n1. Beacon database.\n1. Markdown based summary of observations.\n\n## Notes\n1.  All times UTC\n1.  Location are +North, +East and truncated to fit a PostGreSQL float.\n1.  Collectors typically have two WLAN devices: wlan0 is organic to rPi and wlan1 is a TP-Link AC-1300  wlan0 is configured for local WAP, and wlan1 is used for collection.\n\n## Collection Applications\n1.  bin/iwlist-header.sh reads the output of iwlist-scan.sh and produces a file with timestamp, location and other configuration details.\n1.  bin/iwlist-scan.sh invokes iwlist(8) to scan for WAP and write to file\n1.  bin/wombat*-to-s3.sh copy collected observations to AWS S3\n1.  bin/skunk-post.sh updates local mellow skunk instance.\n\n## Backend Applications\n1.  bin/fresh-from-s3.sh copies from S3 to local file system\n1.  bin/full_cycle.sh performs full downlowd, parse/load and report cycle\n1.  bin/archiver.sh collects processed files into a tar(1) and save to AWS S3\n \n## History\n\n| Date       | Device | Site      | Version |\n| ---------- | ------ | --------- | ------- |\n| 2025-01-05 | rpi3c  | anderson1 | xxx     |\n| 2025-02-14 | rpi3d  | mobile1   | xxx     |\n| 2025-02-19 | rpi3a  | vallejo1  | xxx     |\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguycole%2Fmellow-heeler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguycole%2Fmellow-heeler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguycole%2Fmellow-heeler/lists"}