{"id":50336601,"url":"https://github.com/knifter/canboat_explorer","last_synced_at":"2026-05-29T14:00:38.008Z","repository":{"id":355605764,"uuid":"1228726454","full_name":"knifter/canboat_explorer","owner":"knifter","description":"Application to explore what is happening on a NMEA2000","archived":false,"fork":false,"pushed_at":"2026-05-28T10:20:19.000Z","size":948,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T10:26:24.795Z","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":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/knifter.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-04T10:06:10.000Z","updated_at":"2026-05-27T11:12:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/knifter/canboat_explorer","commit_stats":null,"previous_names":["knifter/canboat_explorer"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/knifter/canboat_explorer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knifter%2Fcanboat_explorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knifter%2Fcanboat_explorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knifter%2Fcanboat_explorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knifter%2Fcanboat_explorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/knifter","download_url":"https://codeload.github.com/knifter/canboat_explorer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knifter%2Fcanboat_explorer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33655441,"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-05-29T02:00:06.066Z","response_time":107,"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-05-29T14:00:23.827Z","updated_at":"2026-05-29T14:00:38.001Z","avatar_url":"https://github.com/knifter.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Canboat Explorer\n\nA desktop application for exploring, debugging, and recording CAN / NMEA 2000 bus traffic received via python-can. Currently only tested with the Waveshare USB-CAN-A (~25 usd) and cheap AliExpress PCAN clones (~8 usd) adapters.\n\n![tab4](images/tab4.png \"Messsages overview\")\n\n## What it does\n\n- **Verify** what a bus is and isn't transmitting\n- **Discover** and reverse-engineer proprietary or obscure manufacturer messages\n- **Record** traffic persistently across sessions, including through crashes\n\n## Requirements\n\n- Python 3.11+\n- A supported CAN adapter: Waveshare USB-CAN-A, or maybe any adapter supported by python-can (`slcan`, `gs_usb`, `pcan`, `socketcan`)\n- A live NMEA 2000 bus (default bitrate: 250 kbps)\n\n## Installation\n### Release\nJust download the pre-build .exe file from the latest Release to the right. Settings and data/ files are stored next to the executable.\n\n### From source\nWith uv:\n\n```\nuv pip install -e .\n```\n\n## Running\n\n```\nuv run canboat_explorer\n```\n\nSettings are written to `canboat_explorer.ini` at the project root on first run. Session logs are saved to `data/` next to the project root.\n\n## Tabs\n\n| Tab | Description |\n|-----|-------------|\n| **Raw CAN** | All incoming frames. Time view (newest first) or accumulated view grouped by Arb ID, PGN+SA, or PGN. |\n| **NMEA 2000** | Assembled NMEA 2000 messages including fast-packet reassembly. Time and accumulated views. |\n| **Network** | Device tree — one node per source address. Shows TX/RX PGN lists, observed traffic, collision markers, product info, and address negotiation events. Devices silent for \u003e60 s are dimmed. |\n| **Decoded Values** | Live signal values decoded via the `nmea2000` library. 3-level tree (PGN → SA → qualifier variant) with update rates and message history. |\n\n![tab1](images/tab1.png \"Raw CAN frames\")\n![tab2](images/tab2.png \"NMEA Assembled messages\")\n![tab3](images/tab3.png \"Network overview\")\n![tab4](images/tab4.png \"Messsages overview\")\n\n## Session files\n\nFrames are written to `data/session.canlog` on receipt, before any UI processing. The file survives crashes and is reopened automatically on the next start.\n\n- **Save as** — export the current session to a named `.canlog` file\n- **Open** — load a saved file for offline browsing\n- **Clear** — discard the current session (requires confirmation)\n\n## Supported adapters\n\nConfigure the interface type and port via **Settings** in the toolbar. The connection uses NMEA 2000's standard 250 kbps CAN bitrate.\n\n### Waveshare USB-CAN-A\n\n![waveshare USB-CAN-A](images/device-waveshare-usb-can-a.png \"Waveshare USB-CAN-A\")\n\nA cheap and widely available USB-to-CAN adapter based on a CH340 serial bridge. Enumerates as a virtual COM port on Windows and Linux.\n\n- **USB ID:** `1A86:7523`\n- **Driver:** CH340 (built into modern Windows; `ch341` on Linux)\n- **Interface in Settings:** `waveshare`\n- **Port:** pick the device's COM port (e.g. `COM5`) from the dropdown\n- **Serial baudrate:** `2_000_000` (the adapter's default — do not confuse with the CAN bitrate)\n\nNo extra libraries required.\n\n### PCAN / PCAN clone\n\n![pcan_clone1](images/device-pcan1.png \"PCAN Clone\")\n![pcan_clone2](images/device-pcan2.png \"PCAN Clone\")\n\nPeak-System PCAN-USB and the many compatible clones. More robust than the Waveshare for high-traffic buses, but needs a vendor DLL on Windows.\n\n- **USB ID:** `0C72:000C`\n- **Interface in Settings:** `pcan`\n- **Port:** select the PCAN channel from the dropdown (typically `PCAN_USBBUS1`)\n- **Required library (Windows):** PCAN-Basic API DLL from Peak-System\n  1. Download and unpack [PCAN-Basic](https://www.peak-system.com/products/software/development-packages/pcan-basic/)\n  2. Copy `PCANBasic.dll` to `C:\\Windows\\System32`\n     - Use `x86/PCANBasic.dll` for 32-bit Python\n     - Use `x64/PCANBasic.dll` for 64-bit Python (most common)\n\n\n## Credits\n\nCanboat Explorer © Tijs van Roon — [github.com/knifter](https://github.com/knifter) — GPL-3.0\n\nBuilt on parts from others:\n\n- **The CANboat Project** PGN database © 2009-2025 Kees Verruijt — Apache 2.0 — [github.com/canboat](https://github.com/canboat)\n- **nmea2000** © Tomer-w — Apache 2.0 — [github.com/tomer-w/nmea2000](https://github.com/tomer-w/nmea2000)\n- **python-can** © python-can contributors — LGPL-3.0 — [github.com/hardbyte/python-can](https://github.com/hardbyte/python-can)\n- **PyQt6** © Riverbank Computing — GPL-3.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknifter%2Fcanboat_explorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fknifter%2Fcanboat_explorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknifter%2Fcanboat_explorer/lists"}