{"id":28183201,"url":"https://github.com/kengu/foxping","last_synced_at":"2025-05-16T04:15:42.068Z","repository":{"id":291018918,"uuid":"976222962","full_name":"kengu/foxping","owner":"kengu","description":"A simple bait alert system for 433 MHz transmitters","archived":false,"fork":false,"pushed_at":"2025-05-01T22:39:43.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-01T23:26:40.716Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kengu.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":"2025-05-01T18:09:52.000Z","updated_at":"2025-05-01T22:39:46.000Z","dependencies_parsed_at":"2025-05-01T23:36:53.820Z","dependency_job_id":null,"html_url":"https://github.com/kengu/foxping","commit_stats":null,"previous_names":["kengu/foxping"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kengu%2Ffoxping","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kengu%2Ffoxping/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kengu%2Ffoxping/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kengu%2Ffoxping/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kengu","download_url":"https://codeload.github.com/kengu/foxping/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254464874,"owners_count":22075572,"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":[],"created_at":"2025-05-16T04:15:29.524Z","updated_at":"2025-05-16T04:15:42.056Z","avatar_url":"https://github.com/kengu.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FoxPing 🦊\n\nFoxPing is a robust and flexible bait alert system designed to listen for 433 MHz transmitters — \nespecially compatible with the driveway alarm from Biltema:\n\n🔗 [https://www.biltema.no/hjem/sikkerhet-i-hjemmet/alarm/alarm-til-innkjorselen-2000033277](https://www.biltema.no/hjem/sikkerhet-i-hjemmet/alarm/alarm-til-innkjorselen-2000033277)\n\n## 🚀 Features\n\n- Automatic learning of new codes and channel assignments\n- Per-channel sound alerts (CH01–CH16)\n- Timeout notification if no input is received for 10 seconds\n- Logging of unknown and suspicious signals\n- JSON-based persistence for manual editing and inspection\n- Works on Raspberry Pi, Linux, macOS, and Windows\n\n## Supported detectors\nI have only tested this with Biltema driveway alarm detectors labeled with `CH13`, `CH14` and `CH15`. \nYou can find the actual codes decoded using `433_rtl` in the [test](test/) folder. \n\n## Usage\n```bash\npython3 foxping.py -h\nusage: foxping.py [-h] [-F {log,json,csv}] [-s] [-A] [-L {FINE,INFO,LOG,ERROR}] [files ...]\n\nFoxPing - 433_rtl based Bait Alert Tracking Service\n\npositional arguments:\n  files                 Optional input file(s). If omitted, reads from stdin.\n\noptions:\n  -h, --help            show this help message and exit\n  -F, --format {log,json,csv}\n                        Input format to parse (default: log)\n  -s, --sound           Enable sound playback (off by default)\n  -A, --analyze {K,L,S,U,E}\n                        Print code analysis and exit (default is K for known codes). Support -F json for K,L,S and U.\n  -L, --log-level {FINE,INFO,LOG,ERROR}\n                        Set minimum log level (default: INFO)\n\nUse -F log for console output or -F json for structured logging.\n\n```\n\nThis will run FoxPing with known channels 13, 14 and 15 with format `JSON`\n```bash\npython3 foxping.py -F json test/ch13.json test/ch14.json test/ch15.json\n```\nThe output is\n```json\n{\"msg_time\": \"2025-05-01 22:15:00\", \"channel\": \"CH13\", \"code\": \"bfafaa8\", \"count\": 0}\n{\"msg_time\": \"2025-05-01 22:15:00\", \"channel\": \"CH14\", \"code\": \"efafaa8\", \"count\": 0}\n{\"msg_time\": \"2025-05-01 22:15:00\", \"channel\": \"CH15\", \"code\": \"fbafaa8\", \"count\": 0}\n```\n\nYou can analyze current state with\n```bash\npython3 foxping.py --analyze \n```\n\nThis will show something similar to this after running some time\n```bash\npython3 foxping.py --analyze A\n=== Known IDs ===\nCode       Channel  Count  First seen                           Last seen                           \n----------------------------------------------------------------------------------------------------\nbfafaa8    CH13     1      2025-05-01 22:15:00 (21 hours and 40 minutes ago) never                               \nefafaa8    CH14     1      2025-05-01 22:15:00 (21 hours and 40 minutes ago) never                               \nfbafaa8    CH15     1      2025-05-01 22:15:00 (21 hours and 40 minutes ago) never                               \n\n=== Learned Codes ===\n05afaa8 (estimated=CH03?, count=3, first_seen=2025-05-01 22:15:00)\n\n=== Suspicious Codes Grouped by Known Code ===\nefafaa8 (CH14):\n  ↳ cfafaa8 (count=3, distance=1, first_seen=2025-05-01 22:15:01)\n     ↳ correlated at Δ=1.0s (t=2025-05-01T22:15:01)\n\n=== Unknown Codes ===\ncfafaa9 (count=1, first_seen=2025-05-01 22:15:01, estimated=CH16?)\n  ↳ correlated with bfafaa8 (CH13, Δ=1.0s) (t=2025-05-01T22:15:01)\n\n=== Estimated IDs (based on fixed offsets) ===\n\nChannel  Estimate   Known      Hamming   \n--------------------------------------\nCH01     07afaa8    -          -         \nCH02     06afaa8    -          -         \nCH03     05afaa8    -          -         \nCH04     04afaa8    -          -         \nCH05     03afaa8    -          -         \nCH06     02afaa8    -          -         \nCH07     01afaa8    -          -         \nCH08     00afaa8    -          -         \nCH09     0fafaa8    -          -         \nCH10     0eafaa8    -          -         \nCH11     0dafaa8    -          -         \nCH12     0cafaa8    -          -         \nCH13     0bafaa8    bfafaa8    2         \nCH14     0aafaa8    efafaa8    3         \nCH15     09afaa8    fbafaa8    3         \nCH16     08afaa8    -          -         \n```\n\n## ⚙️ Setup\n\nInstall `rtl_433` and connect a compatible RTL-SDR USB receiver.\n\nStart FoxPing with:\n\n```bash\nrtl_433 -f 433920000 -R 0 -X 'n=biltema,m=OOK_PWM,s=480,l=1500,r=1450,t=450,g=0,y=0' -F json | python3 foxping.py\n```\n\n## 📁 Storage Files\n\n| File                    | Description                              |\n| ----------------------- | ---------------------------------------- |\n| `known_ids.json`        | Manually assigned codes to channel names |\n| `learned_codes.json`    | Codes automatically learned by FoxPing   |\n| `unknown_codes.json`    | Codes that could not be classified       |\n| `suspicious_codes.json` | Codes suspiciously close to known codes  |\n\n## 🔊 Sound Support\n\n- **macOS**: Uses `afplay` to play system sounds\n- **Linux**: Uses `canberra-gtk-play`\n- **Windows**: Uses `winsound.Beep` with tone per channel\n\n## 📡 Range Improvement\n\nFor better performance and range, it is recommended to slightly modify the antenna on the Biltema unit, as described in this Norwegian guide:\n\n🔧 [https://viltfall.wordpress.com/2020/04/15/biltema-aatevarsler/](https://viltfall.wordpress.com/2020/04/15/biltema-aatevarsler/)\n\n## 🔧 Planned Improvements\n\n- MQTT integration for remote alerting\n- Auto-pruning of inactive or noisy codes\n- Web dashboard for live monitoring and log inspection\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkengu%2Ffoxping","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkengu%2Ffoxping","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkengu%2Ffoxping/lists"}