{"id":51206669,"url":"https://github.com/badgerloop-software/telem-enclosure","last_synced_at":"2026-06-28T03:30:31.413Z","repository":{"id":363685927,"uuid":"1248754252","full_name":"badgerloop-software/telem-enclosure","owner":"badgerloop-software","description":"Telemetry Enclosure for Software Team's Pi, Radio, LTE system","archived":false,"fork":false,"pushed_at":"2026-06-20T12:55:01.000Z","size":5858,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T14:34:59.094Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/badgerloop-software.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T02:47:36.000Z","updated_at":"2026-06-20T12:55:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/badgerloop-software/telem-enclosure","commit_stats":null,"previous_names":["badgerloop-software/telem-enclosure"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/badgerloop-software/telem-enclosure","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Ftelem-enclosure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Ftelem-enclosure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Ftelem-enclosure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Ftelem-enclosure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/badgerloop-software","download_url":"https://codeload.github.com/badgerloop-software/telem-enclosure/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Ftelem-enclosure/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34876271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"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":[],"created_at":"2026-06-28T03:30:30.044Z","updated_at":"2026-06-28T03:30:31.385Z","avatar_url":"https://github.com/badgerloop-software.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Telemetry Enclosure\n\n![Car 2 enclosure preview](exports/car-2/enclosure_preview.gif)\n\n3D-printable enclosure for an airborne / ground-station telemetry stack:\n\n| Component | Notes |\n|-----------|-------|\n| Raspberry Pi 4B | Bottom layer, M2.5 standoffs |\n| RFD900A telemetry radio | Adhesive-mounted to left interior wall |\n| Quectel EG25-G LTE module | 4× M3 wall-boss screws via Mini PCIe-to-USB adapter |\n| Adafruit DS3231 RTC | Sits directly on Pi GPIO pins (no separate mount) |\n\n| Version | Dimensions (L × W × H) | Role |\n|---------|------------------------|------|\n| **car-2** (active) | 228.6 × 223.5 × 57.2 mm | Working redesign — edit these exports |\n| **car-1.5** (archive) | 228.6 × 223.5 × 57.2 mm | Pristine recovered SolidWorks 2023 STEP baseline |\n\nPrintable in PLA or PETG. See [`exports/README.md`](exports/README.md) for file layout.\n\n---\n\n## Repository layout\n\n```\nREADME.md                        ← you are here\ntelem-enclosure-components.pdf   ← component datasheets / spec reference\ncad/\n  import_legacy.py        ← import car-1.5 STEP → exports/car-1.5/\n  analyze_step.py         ← inspect bounding boxes and hole sizes\n  render_gif.py           ← turntable GIF (arg: car-1.5 or car-2)\n  smooth_floor.py         ← car-2 interior floor cleanup (from car-1.5 baseline)\n  update_assembly.py      ← rebuild telem_enclosure_assembly.FCStd after body/lid edits\n  face_templates.py       ← 1:1 print templates (legacy compact layout)\n  enclosure.py / params.py  ← experimental compact parametric model (not current car-2)\n  README.md               ← design notes and print settings\nexports/\n  README.md               ← version layout guide\n  car-1.5/                ← recovered SolidWorks archive (do not edit)\n  car-2/                  ← active working folder (legacy-based redesign)\nviewer/                   ← lightweight STL web viewer (face select, no FreeCAD GUI)\n  server.py\n  static/                 ← Three.js UI\ntools/\n  freecad-mcp/          ← contextform/freecad-mcp bridge for Cursor MCP\n  render-venv/          ← gitignored Python venv for render_gif.py\n  FreeCAD.AppImage      ← gitignored (download separately, see below)\n  squashfs-root/        ← gitignored (extracted AppImage runtime)\n.cursor/\n  mcp.json              ← FreeCAD MCP server config for Cursor\n```\n\n## Quick start\n\n1. **Get FreeCAD 1.0+** — either via apt or AppImage:\n   ```bash\n   sudo apt install freecad          # Ubuntu / Debian\n   # or download the AppImage from https://freecad.org/downloads.php\n   # and place it at tools/FreeCAD.AppImage\n   ```\n\n2. **Regenerate the car-1.5 archive** (only if source STEP files changed):\n   ```bash\n   echo 'exec(open(\"cad/import_legacy.py\").read())' | \\\n     ./tools/squashfs-root/usr/bin/freecadcmd\n   ```\n   Reads `exports/car-1.5/SoftwareEnclosure*Car1.5.STEP`, aligns the body to\n   origin, and writes `enclosure_body.{FCStd,step,stl}`, `enclosure_lid.*`, and\n   `telem_enclosure_assembly.FCStd` into `exports/car-1.5/`.\n\n3. **Work in `exports/car-2/`** — the active redesign. Copy fresh exports from\n   `car-1.5/` when resetting, then edit `enclosure_body.{FCStd,step,stl}` (and lid\n   as needed) in FreeCAD GUI or via the MCP bridge below.\n\n4. **Regenerate the README preview GIF** after car-2 changes:\n   ```bash\n   tools/render-venv/bin/python cad/render_gif.py car-2\n   ```\n\n5. **Sync the FreeCAD assembly** after body or lid STEP/STL changes:\n   ```bash\n   ./tools/squashfs-root/usr/bin/freecadcmd cad/update_assembly.py car-2\n   ```\n\nSee [`cad/README.md`](cad/README.md) for design notes and print settings.\n\n## Web viewer (STL + face IDs)\n\nA lightweight browser viewer lives in [`viewer/`](viewer/) — useful for inspecting\nexports without opening FreeCAD.\n\n```bash\npython3 viewer/server.py\n# open http://127.0.0.1:8765\n```\n\n| Feature | Notes |\n|---------|--------|\n| Model picker | All `exports/**/*.stl` (defaults to `car-2/enclosure_body.stl`) |\n| Auto-reload | Polls file mtime every 1.5 s when STL on disk changes |\n| Face IDs | First click on a flat patch assigns **#1, #2, …**; reuse when re-selected |\n| Orientation | Body sits on its bottom face; **+X / +Y / +Z** axis labels on the grid |\n| Save | Writes binary STL back to `exports/` (creates `.bak` first) |\n\n**Regenerate body exports** (smooth interior floor, etc.):\n\n```bash\n./tools/squashfs-root/usr/bin/freecadcmd cad/smooth_floor.py\n./tools/squashfs-root/usr/bin/freecadcmd cad/update_assembly.py car-2\n```\n\nThe viewer reloads automatically when `enclosure_body.stl` changes.\n\n## Working with Google Antigravity\n\nUse the viewer and chat together so you can point at geometry by name:\n\n1. **Start the viewer** (`python3 viewer/server.py`) and open the car-2 body STL.\n2. **Click faces** in the model — each gets a stable number in the sidebar (e.g. **Face #2**).\n3. **Tell the agent** what to change using those IDs: *“smooth face #2”*, *“remove bosses above face #3”*, etc.\n4. The agent edits CAD scripts (e.g. `cad/smooth_floor.py`) or drives **FreeCAD MCP** (below), re-exports STEP/STL, and the viewer picks up the new mesh.\n\nFor live boolean edits in FreeCAD GUI, use the MCP bridge. For quick visual review and\nface naming, use the web viewer — no FreeCAD window required.\n\n## Antigravity MCP (drive FreeCAD from chat)\n\nThe repo ships a `.cursor/mcp.json` pointing to the bundled `freecad-mcp` bridge. You can add this configuration to your Antigravity setup to use it.\n\n1. Install the Python `mcp` package (already done if you cloned this repo with the venv):\n   ```bash\n   cd tools/freecad-mcp \u0026\u0026 python3 -m venv .venv \u0026\u0026 .venv/bin/pip install mcp\n   ```\n2. In Antigravity: **add the MCP server** — a `freecad` server should appear.\n3. Launch FreeCAD GUI, open `exports/car-2/enclosure_body.FCStd` or `enclosure_lid.FCStd`,\n   then ask the agent to make changes; it drives FreeCAD live over the Unix socket.\n\n## Printing\n\n| | Body | Lid |\n|---|---|---|\n| Material | PETG (preferred) or PLA | PETG or PLA |\n| Layer height | 0.2 mm | 0.2 mm |\n| Infill | 20% gyroid | 20% gyroid |\n| Walls | 3 perimeters | 3 perimeters |\n| Supports | Tree — I/O cutouts only | None |\n| Orientation | Open side up | Top face down |\n\nUse M2.5 brass heat-set inserts in the Pi standoffs and lid-corner screw bosses  \nfor reusability. M3 × 6 mm self-tappers secure the Quectel adapter to its posts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadgerloop-software%2Ftelem-enclosure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbadgerloop-software%2Ftelem-enclosure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadgerloop-software%2Ftelem-enclosure/lists"}