Skip to content
heichaowoPublic

About

开源的无线电日志系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

188 Commits

Folders and files

Repository files navigation

OpenHeard

An amateur radio logbook that automatically records every contact.

OpenHeard captures radio contacts from multiple sources—BrandMeister DMR network and analog repeaters—and assembles them into a structured log. Contacts populate automatically; operators only fill in what the machine cannot know.

Quick Start

Backend + daemon:

cd api && npm install && OPENHEARD_CONFIG=../openheard.config.json npm start
cd daemon && npm install && npm start -- --config ../openheard.config.json

Web UI + public page:

cd web && npm install && npm run dev
cd public && npm install && npm run dev

Copy api/openheard.config.example.json to openheard.config.json and configure it first.

What it Does

Source What OpenHeard Captures What Needs Human Input
Analog FM (repeater) Time, duration, channel, whether you transmitted Far station's callsign
DMR (BrandMeister) Your transmission details (all fields), timestamp Far station's callsign (from talkgroup query)
HF (future) FT8 via WSJT-X UDP feed SSB contacts (no automation)

Contacts are clustered into conversations using measured silence thresholds (120 seconds for analog).

Architecture

  • api/ — Hono backend over SQLite, REST endpoints for web and daemon
  • daemon/ — Polling service for BrandMeister; SDR listener for analog 438.700; transcribes recordings (local whisper.cpp or a cloud API) to flag empty key-ups and suggest callsigns
  • web/ — React 19 + Ant Design 6 admin interface
    • Listening: confirm, ignore or delete captured conversations, with transcripts and AI suggestions
    • Log: search, ADIF import/export, QSL management
    • Entry: quick manual logging
    • Operations & Settings
  • public/ — Lightweight public station page (no external dependencies)
  • core/ — Shared framework-free business logic and data models

Data Model

The log stores every field required for LoTW (Logbook of The World):

  • Frequency, mode, band, RST (both directions), grid square
  • Plus: QTH, equipment, antenna, power, elevation

Design Decisions

Fixed before code started (highest cost to change):

  • Full LoTW compliance from day one
  • React 19 + Ant Design 6 for the UI
  • No native client—browser-based only
  • Reuse existing tools (TQSL via CLI, DXCC libraries)

Testing & Deployment

Run locally:

npm test           # in api/, daemon/, web/
npm run verify     # root: typecheck, tests, lint, builds, smoke test

Deploy to production:

infra/install.sh   # macOS LaunchAgent setup

See docs/deployment.md for details.

Documentation

License

AGPL-3.0 — See LICENSE

Modified copies run as a network service must offer source to users.


中文说明

自动记录业余无线电通联的日志系统。支持 BrandMeister DMR 网络和模拟中继两个数据源。

  • api/ — Hono 后端,使用 SQLite
  • daemon/ — 轮询 BrandMeister,同时监听本地模拟信道 438.700,并识别录音(本机 whisper.cpp 或云端接口),标出空按,提示对方呼号
  • web/ — React 19 + Ant Design 6 管理界面
  • public/ — 轻量级公开展示页
  • core/ — 共享的业务逻辑

快速启动见上面的 Quick Start。完整文档在 docs/ 目录。

协议:AGPL-3.0

About

开源的无线电日志系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages