Skip to content
amd989Public

About

Companion app for the EEVblog 121GW multimeter over Bluetooth LE: live readings, graphs, logging and CSV export. iPhone, iPad, Mac, Android and Windows. Built with .NET MAUI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

59 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Readout

A companion app for the EEVblog 121GW multimeter, for iPhone, iPad, Mac, Android, Windows and Linux. Built with .NET 10 and .NET MAUI.

Website · Support · Privacy · The 121GW

Get it from Microsoft

Live DC voltage reading with a graph AC voltage and frequency in dark mode A saved battery discharge session The list of saved sessions

iPad in landscape: the meter in a side column and a large graph

  • Live LCD. A drawing of the meter's display: main and sub readings, units, the bar graph and every symbol.
  • Remote buttons. Press any of the meter's eight buttons from the app, short or long.
  • Logging. Every reading is logged while connected, with a live trend graph and min/max/average/peak-to-peak. Logging keeps running with the screen locked (iOS), and the recording is kept on disk, so closing the app doesn't lose it.
  • Readable graphs. The meter screen shows the last 10 minutes; full screen shows the whole recording, with long recordings drawn as an average line over a min/max band. Pinch to zoom, drag to pan.
  • Saved sessions. Save a recording with a name and notes; each keeps its graph and statistics.
  • CSV export. Timestamped readings in SI units, ready for a spreadsheet.
  • Continuity beep. In continuity and resistance modes the phone beeps and vibrates below a threshold you set, with hysteresis so it doesn't chatter.
  • Signal and battery. The connection line shows the meter's signal strength and battery.
  • Reconnects by itself to the last meter when it comes back in range (can be turned off in Settings).
  • Demo meter. Try the app without a meter (simulated readings).
  • Works with Claude (Mac, Windows and Linux). An optional, local-only MCP server lets an AI assistant read the meter, look at recent readings, press buttons and save sessions. See docs/MCP.md.

Readout is an independent, open-source project. It is not made, endorsed or supported by EEVblog. 121GW and EEVblog are trademarks of their owners.

Platforms

Platform Status
iOS / iPadOS 15+ ✅
macOS (Mac Catalyst) 12+ ✅
Android 6+ ✅
Windows 10/11 ✅ builds on Windows
Linux (GTK 4.12+, BlueZ) Preview: MAUI's GTK4 backend, see Linux

Repository layout

Path What
Readout.Core/ Everything about the meter that isn't UI or a Bluetooth stack: packet parsing, LCD decoding, key commands, logging and CSV, the simulated meter. Plain net10.0.
Readout.Mcp/ The MCP server for AI assistants: the tools and a small loopback HTTP host, on the official MCP C# SDK. Plain net10.0.
Readout/ The .NET MAUI app: Bluetooth through Plugin.BLE, view models, pages, the LCD and graph drawings.
Readout.Linux/ The Linux build of the same app, on MAUI's GTK4 backend, with Bluetooth through BlueZ.
Readout.Tests/ xUnit tests for the core, the MCP server and the BlueZ helpers.
tools/linux-test/ Runs the Linux build in Docker, with the simulated meter or a stand-in for BlueZ.
docs/PROTOCOL.md The 121GW Bluetooth protocol, documented.
docs/ Also the GitHub Pages site (index.html, privacy.html, support.html) and the web screenshots.
store/ Full-size App Store screenshots.

Building

You need the .NET 10 SDK and the MAUI workload (dotnet workload install maui), plus Xcode for Apple targets and the Android SDK for Android.

dotnet test --project Readout.Tests

With --coverlet, the tests also measure code coverage of Readout.Core and Readout.Mcp and write a Cobertura report to TestResults/coverage (settings in Readout.Tests/testconfig.json). CI does this on every push and shows the numbers in the run's summary.

dotnet test --project Readout.Tests --coverlet --results-directory TestResults/coverage
dotnet build Readout -f net10.0-ios
dotnet build Readout -f net10.0-maccatalyst
dotnet build Readout -f net10.0-android

On Windows, -f net10.0-windows10.0.19041.0. The Linux build is a separate project that builds anywhere, without the MAUI workload:

dotnet build Readout.Linux

Simulators and emulators have no Bluetooth. Debug builds running on one use the simulated meter when you scan (set READOUT_FAKE_BLE=1 to do that anywhere). Every build also has Try the demo meter on the connect screen.

Publishing

./publish-ios.sh builds the signed iPhone/iPad .ipa and refuses it if any binary carries a slice other than arm64, which App Store Connect rejects. ./publish-mac.sh builds the signed Mac App Store .pkg (Apple silicon and Intel). Upload with Transporter.

./publish-windows.ps1 builds the Microsoft Store packages: an unsigned .msix each for x64 and arm64 in artifacts/windows (the Store signs them). Release Windows builds are MSIX; Debug builds stay a plain .exe. -Test -Install builds and installs a local test copy (Developer Mode), and -Wack also runs the Windows App Certification Kit from an administrator shell.

./publish-linux.sh x64 arm64 builds self-contained Linux tarballs (Readout.Linux/bin/publish/Readout-linux-<arch>.tar.gz); it runs on macOS and Windows too.

The Mac app with the meter and a wide graph

Linux

Readout.Linux runs the same app on Linux, on Microsoft's GTK4 backend for .NET MAUI (dotnet/maui-labs, a preview). It compiles the app's own pages and code; only the Bluetooth connection and a few fixes for gaps in the preview backend are Linux's own. Bluetooth goes through BlueZ over D-Bus. The MCP server for AI assistants works there too.

To run it, unpack a tarball from ./publish-linux.sh and start readout/Readout. It's self-contained (no .NET install); the machine needs GTK 4.12 or later (libgtk-4-1) and, for the meter, BlueZ running with a powered Bluetooth LE adapter. BlueZ's default policy lets any local user scan and connect, so nothing needs root. READOUT_FAKE_BLE=1 uses the simulated meter, and Try the demo meter works as everywhere else.

What's different on Linux:

  • Tabs sit at the top, and pages pushed on top of a tab get a back button in the title bar.
  • Graphs zoom with the mouse wheel (or a touchpad), pan by dragging, and reset on a double-click.
  • Export CSV opens a save dialog instead of a share sheet.
  • BlueZ reports a meter's signal strength only while scanning, so once connected the signal bars show the strength from the scan and hide after 30 seconds without a new one.
  • No continuity beep or vibration yet (as on Windows). Alert boxes show no title.

tools/linux-test/ runs it in Docker (Ubuntu 24.04) with the simulated meter, or against mock-bluez.py, a stand-in for BlueZ that plays a 121GW. It hasn't been tried with a real meter on Linux yet.

Credits

The meter protocol comes from the official EEVblog 121GW app by David Ledger (MIT). See THIRD_PARTY_NOTICES.md.

License

MIT. Privacy: PRIVACY.md (no data collected).

About

Companion app for the EEVblog 121GW multimeter over Bluetooth LE: live readings, graphs, logging and CSV export. iPhone, iPad, Mac, Android and Windows. Built with .NET MAUI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages