QRV · Bengaluru

VU2CPL
Manoj Ramawarrier

MK83TE · Bengaluru, Karnataka · Licenced 1993

FLEX-6600 · RGO One · IC-705 10 BDXCC DXpeditioner Remote Ops
1.5 KFA
SPE Expert Amp
10 BDXCC
Awards
VU7T · AT5P
DXpeditions

01 · About

The Operator

VU2CPL QSL card — Taj Mahal, India

Located in the garden city of India, Bangalore. Licensed since 1993, I started operations in Thrissur, Kerala with a simple homebrew QRP rig following VU2VWN OM Vasanth (SK)'s circuit — the most popular design of those days.

Later graduated to SSB with the help of an old exciter originally made by VU2UCY Om Bhasi (SK). Went through different iterations of 807 tube QRO and some military surplus gear (Redifone GR 345) during the 1990s. Shifted to Bangalore in early 2003.

I travel extensively for work and mostly operate remote during free time. The shack runs a fully automated setup including remote antenna switching and lightning protection.

DXpeditions
VU7T / VU7MSKavaratti Is, LakshadweepOct 2017
AT5PRameshwaram Is, IOTA AS-173May 2015
AT3N · ARSI HilltopNelliyampathy, Kerala — 4,417 QSOs, 261 DXCCJan 2024
ARSI Hilltop 2025Vayalada Hills, Kozhikode MK71WMJan 2025
ARSI Hilltop 2023Kulamavu, Idukki MJ89KT — HF/VHF/UHFFeb 2023
CallsignVU2CPL
GridMK83TE
LocationBengaluru, KA 562157
Licenced1993
ModesSSB · FT8 · CW
Bands160m – 6m incl. 60m
QSLLOTW · Clublog OQRS
Awards
5BDXCC160m DXCC30m DXCC17m DXCC12m DXCC6m DXCC
Photos by Girish, VU2KGB · hamphotos.com

02 · Station

Equipment

Radios
FlexRadio FLEX-6600 (SDR)
RGO One
Icom IC-705
Amplifier
SPE Expert 1.5 KFA
RX Antennas (Low Band)
350 ft 2-wire reversible Beverage (N/S) — winters only
N6RK Loop
K9AY Loop
Antennas
Hex beam — 20m to 6m
Vertical — 30m
Inverted Vee — 80m & 40m
Inverted L — 160m (hairpin matched, 2 elevated radials)
4 ele LFA Yagi — 6m
Band Allocation Notes
80m: 3500–3700 kHz
160m: 1800–1825 kHz
60m: QRV from Dec 2018
FT8: split needed within VU allocation

03 · Logbook

Operating Dashboard

DX Dashboard · Clublog Live
QSL Policy: Preferred route is LOTW or direct via Clublog OQRS. No bureau (stopped March 2019). For VU7MS and VU7T QSLs, use Clublog OQRS only. No IRC accepted.
Full log search →

04 · Projects

Shack Automation & Utilities

Node-RED Flows
Shack Dashboard — Vue 3 SPA
Unified single-page dashboard for the whole shack, built in Vue 3 and served from Node-RED via uibuilder — replacing the legacy AngularJS /ui board. Thirteen collapsible cards (FlexRadio, LP-700, SPE amplifier, rotator, lightning protection, power control, solar conditions, DXCC tracker, RBN skimmer, Raspberry Pi fleet, internet health, GPS NTP, UberSDR receiver) lay out in a responsive masonry grid that adapts from phone to desktop with no build step. Each card polls flow context every 1–5 s, shows a colour-coded collapsed summary and expands for full telemetry. Top bar carries the callsign, a live/offline connectivity pill and four clocks (UTC / IST / sunrise / sunset). PWA-installable on iPad and iPhone via "Add to Home Screen".
Node-REDVue 3uibuilderPWAMQTTResponsive
View repo on GitHub
Active
DXCC Tracker & DX Alert System
Subscribes to four DX cluster telnet sources (VU2CPL, VU2OY, VE7CC, N2WQ) and pulls worked/confirmed DXCC data from Club Log via a nightly API call. Each incoming spot is prefix-resolved against cty.xml and classified against the confirmed grid — new DXCC entity (red), new band (blue), new mode fill (amber). Alerts fan out to the shack dashboard panel, MQTT, the FlexRadio slice, and a Telegram bot, with per-band / per-mode filtering.
Node-REDClub Log APIDX ClusterTelnetcty.xmlMQTTTelegram
View repo on GitHub
Active
FLEX-6600 State Monitor Dashboard
Real-time Node-RED flow tracking all four slice receivers via the FlexRadio TCP API, with dual SmartSDR client support (AetherSDR + iPad). Colour-coded active-slice indication — amber for RX, red for TX — now surfaced as the FlexRadio card in the Vue 3 shack dashboard above, and still on the legacy AngularJS /ui board.
Node-REDFlexRadio APISmartSDRMQTT
View repo on GitHub
Active
Lightning Antenna Protector
Automatically disconnects antenna and radio when lightning is detected within 25 km, from Open-Meteo CAPE and weather-code polling plus a local AS3935 sensor over MQTT, and inhibits TX on the FLEX-6600 so the rig cannot key up into a disconnected antenna.
Node-REDOpen-MeteoTasmotaAS3935SmartSDR APITX inhibitTelegram
Read more → View repo on GitHub ▶ YouTube demo
Active
Remote Shack Control
Full remote operation capability including antenna switching via Tasmota MQTT relays. Operates the FLEX-6600 via SmartSDR from anywhere. Integrated with the lightning protection system for safe unattended operation.
TasmotaMQTTSmartSDRNode-RED
View repo on GitHub
Active
Shack Firmware & Field Devices
VUKEYER — WiFi CW keyer with FlexRadio network keying
WinKeyer-protocol compatible CW keyer on an ESP32. Loggers drive it with the standard K1EL WinKeyer protocol over USB serial or WiFi TCP, with the host protocol audited against a genuine K1EL WK3.1; elements are timed on the device, so the network adds no jitter to the CW. The paddle keys a FlexRadio over the network with no KEY or PTT wire (verified on a FLEX-6600), and the sidetone of memories is paced to the radio's measured CW timing so it stays in step with the air. Opto-isolated KEY/PTT/FSK outputs for any other rig. An OLED or LCD shows speed, backend and link state, and scrolls the CW being sent in large letters; settings live on a web page at vukeyer.local and survive power cycles. WinKeyer protocol by Steve K1EL; the K3NG keyer by Anthony Good K3NG was the behavioural reference — the implementation is original.
ESP32PlatformIOCWWinKeyer protocolFlexRadioWiFiOLEDMQTT
View repo on GitHub
Active
ESP8266 GPS-disciplined NTP server
PPS-disciplined NTP server on a NodeMCU ESP8266 with a Quectel L89 GPS. Captures the PPS edge on a GPIO interrupt for sub-microsecond second alignment, holds stratum 1 across short PPS dropouts via holdover logic, and once the PPS+RMC pair goes stale for more than 5 s advertises stratum 16 / refid INIT (RFC 5905 §3.5) so clients cleanly fall back to other NTP sources rather than trusting a drifting local clock. Publishes status over MQTT with the same schema as the Pi NTP server and an LWT offline marker. WiFiManager captive-portal config — no compile-time secrets.
ESP8266PlatformIOGPSNTPPPSQuectel L89MQTT
View repo on GitHub
Active
vu2cpl-as3935-bridge — outdoor lightning sensor
ESP32 firmware bridging an outdoor AS3935 lightning sensor to the shack MQTT broker. Moving the sensor outdoors — 18650 + TP4056 + solar, IP65 enclosure, shade-mounted — recovers the chip's rated ~40 km range that an indoor I²C bus eats. The full AS3935 register surface plus battery-voltage telemetry (vbat_mv on /hb + /status, on-demand query_vbat) is exposed over MQTT, so noise floor, watchdog threshold, TUN_CAP calibration and %SOC are all tunable live from the dashboard without opening the enclosure. WiFiManager captive portal carries WiFi and the shack broker's ACL-scoped iot MQTT credentials — no compiled-in secrets.
ESP32PlatformIOAS3935MQTTLightning18650 + solarVbat telemetryI²C
View repo on GitHub
Active
Pi GPS NTP Server — shack stratum-1 timeserver
Stratum-1 GPS-disciplined NTP server on a Raspberry Pi 3B with a u-blox NEO-M8N. Kernel pps-gpio + chrony pulls PPS error down to ±171 ns — well below anything a userland NTP implementation can match. Publishes chrony status, satellite count and fix quality over MQTT to the shack dashboard, with an LWT offline marker. Production timeserver for the LAN.
Raspberry PiGPSNTPchronykernel PPSu-blox NEO-M8NMQTT
View repo on GitHub
Active
Utilities & Tools
JTDX-VU — JTDX for the VUCG community
A build of JTDX for the VUCG community, with native releases for macOS (Apple Silicon and Intel), Windows and Raspberry Pi / Linux. Adds Club Log–driven DXCC status, so the New DXCC / band / mode colours follow the whole log, optionally counting only confirmed QSOs. Needed-DXCC alerts go to the desktop and Telegram, and one-click band and mode buttons are modelled on MSHV. Call Non-Stop (the Auto CQ button) keeps QSOs flowing hands-off, and a live “show only new” filter trims Band Activity to stations still needed. v0.3.0 adds JTTY (WSJT-X 3.2’s keyboard mode, by K1JT and the WSJT-X team) and FT2 (IU8LMC’s double-speed FT4, as in MSHV). v0.4.0 adds JTTY Auto CQ, click-to-pick callsigns and a JTTY settings page with macro sets. v0.5.0 gives JTTY a screen of its own: RST and name fields, a calls-heard list coloured from Club Log, 24 macros in three banks and type-ahead. v0.5.3 keeps Auto CQ in one place in every mode; v0.5.2 kept Call Non-Stop to your own CQ runs and made TCI reconnect on its own. Based on JTDX by Igor UA3DJY, Arvo ES1JA and the HF community, itself derived from WSJT-X by Joe K1JT and team.
macOSWindowsRaspberry PiQt5FT8 / FT4JTTYFT2Club LogTelegram
Read more → View repo on GitHub
Active
VHF WebSDR — 2 m / 70 cm / airband / FM
A companion VHF receiver to the HF WebSDR — the same drag-tune waterfall in the browser, switch modes, zoom, and listen off-air with no install. Two receivers share the one instance: an SDRplay RSP2 covers the 2 m and 70 cm amateur bands and the VHF airband (118–134 MHz AM), while a second MSi2500 dongle on its own antenna covers the FM broadcast band — so someone listening to FM no longer pulls the amateur bands off the air. Bookmarks cover the local repeaters, Bengaluru airport and approach frequencies, and the Bengaluru FM stations. Served over HTTPS with a Let's Encrypt certificate, on a self-hosted OpenWebRX+ instance. OpenWebRX+ by Marat Fayzullin, an extended fork of Jakob Ketterl DD5JFK's OpenWebRX.
VHF WebSDRSDRplay RSP2MSi2500OpenWebRX+2 m / 70 cmAirbandFM broadcastLive receiverSelf-hosted
Open live VHF WebSDR →
Active
Ulanzi D100H — hardware front panel for AetherSDR over TCI
A seven-key Bluetooth LE macro dial turned into a physical front panel for AetherSDR over its TCI WebSocket — tuning with grid snapping, split, PTT, ATU tune, mode cycle, mute and band stacking. Doubles as the plugin’s first-light hardware test: five defects found on the air, all now merged upstream. Plugin by Nigel Fenton G0JKN.
macOSJavaScriptNode.jsUlanzi StudioTCIAetherSDRBluetooth LEWebSocket
Read more → View repo on GitHub
Active
KST2Mac — native ON4KST chat client for macOS
Native macOS client for the ON4KST chats VHF, UHF and microwave operators keep open beside the radio — any number of rooms at once, each pane holding its own login, room picker and station list, and each able to be torn out into its own window. Named after and modelled on KST2Me by Bo OZ2M; the protocol work here is original.
macOSSwiftSwiftUION4KSTVHF / UHFDX clustertelnetNotarised
Read more → Download v1.0.0 for macOS → View repo on GitHub
Active
DXCA — DX Cluster Aggregator 2.0
Rust rewrite of the DX Cluster Aggregator, running the whole aggregation stack headless on a Raspberry Pi behind a multi-user web GUI — WSJT-X / JTDX / MSHV decoder feeds and cluster telnet merged into one stream, per-account ClubLog matrices driving seventeen alert levels, Telegram alerts, and match marking on FlexRadio and ExpertSDR3 panadapters. Original concept and reference implementation by Vinod VU3ESV.
RustSvelteRaspberry PiWindowsDX ClusterWSJT-X / JTDXClub LogMulti-userTelegramMQTT
Read more → View repo on GitHub
Active
Meridian — headless multi-platform SDR skimmer server
Headless SDR skimmer server in Rust with in-process FT8 / FT4 / CW / RTTY / WSPR decoders behind one registry, running on Linux, Raspberry Pi, macOS and Windows. Deployed as the station daemon on a Pi 5 driving the Red Pitaya as VU2CPL-9. A joint project, built together with Basil Thomas W6BT, Vinod VU3ESV and Ram VU3RDD.
RustC (FFI)Multi-platformLinuxRaspberry PimacOSWindowsHPSDRRed PitayaHermesLiteRX-888FlexRadio DAXCW skimmerFT8 / FT4WSPRNCDXF beaconPSKRWSPRnetSvelte 5
Read more →
Active
WebSDR — live RX-888 receiver on an LZ1AQ active loop
Public web-based SDR receiver running on a self-hosted UberSDR instance — drag-tune the HF spectrum waterfall in the browser, switch between LSB / USB / CW / AM / FM / digital modes, adjust the filter, zoom the waterfall, and listen to the off-air audio with no install. The default deep-link below opens at 7.150 MHz LSB so you land mid-40m phone band ready to listen. Hardware is an RX-888 MkII front-end fed by an LZ1AQ wideband active loop (0–30 MHz HF coverage); reachable via UberSDR's zero-config tunnel at vu2cpl.tunnel.ubersdr.org. UberSDR by M9PSY (madpsy), built on Phil Karn KA9Q's ka9q-radio engine; the receive antenna is Chavdar Levkov LZ1AQ's active loop design.
WebSDRRX-888 MkIILZ1AQ active loopUberSDRka9q-radioHF 0–30 MHzLive receiverSelf-hosted
Open live WebSDR →
Active
rotator-remote — Rotor-EZ WebSocket gateway
Python WebSocket gateway that owns the Idiom Press Rotor-EZ (Hy-Gain DCU-1 compatible) FTDI serial port on the shack Raspberry Pi and fans azimuth out to any number of clients — Node-RED, a built-in web UI, future Mac apps. The third shack USB device lifted into a gateway service alongside spe-remote and LP-700-Server: same threaded-reader + asyncio-writer pattern, so the serial port has a single owner and clients no longer have to restart Node-RED to free it. Self-contained web UI on port 8090 — large heading readout, click-to-slew compass dial, preset bearings (N/NE/E/SE/S/SW/W/NW), prominent STOP, and LP/+180° long-path. JSON state + heartbeat events over /ws, /healthz endpoint, all writes serialised through one lock so poll queries and client commands never interleave on the wire.
PythonTornadoWebSocketRaspberry PiUSB serialFTDIRotor-EZHy-Gain DCU-1
View repo on GitHub
Active
Amateur Radio Suite — macOS plugin host
Single macOS container app that hosts independent amateur-radio control apps as plugins in one window — switchable between a vertical sidebar and horizontal tabs. Each plugin stays in its own repo and ships as a standalone .app; the suite loads it through the RadioPluginKit contract — the host links only the contract, never compiles a plugin in. Plugins are discovered at runtime (browse a catalog or sideload a .radioplugin) and run out-of-process as sandboxed ExtensionKit extensions, so crash isolation is real and adding one never requires rebuilding the suite. Ships with an empty catalog: published plugins today are LP-700, LP-100A, Band Pass Filter and Antenna Switch; SPE amplifier (MacExpert) and SO2R Box are next. Notarized release pipeline, macOS 14+. Original concept and reference implementation by Vinod VU3ESV — upstream at VU3ESV/AmateurRadioSuite.
macOSSwiftSwiftUIExtensionKitPlugin hostRadioPluginKitNotarized
View repo on GitHub
Active
SO2R Box — macOS controller for the YCCC SO2R Box Plus
Native macOS controller for the YCCC SO2R Box Plus contesting switch. USB-HID to the box; live front-panel mirror in the SwiftUI UI (TX/RX, footswitch, speed pot) using the YCCC HID protocol. Hosts OTRSP and Winkeyer TCP servers, so N1MM+, Win-Test, WriteLog and TR4W see it as a standard SO2R interface. Supports the default 2-radio SO2R mode and the 4-radio SO2R+ mode. Co-developed with Vinod VU3ESV (LB9KJ); the YCCC HID protocol was reverse-engineered from YCCC's own SO2RBox.exe and cross-checked against N4AF's TR4W uYCCCSO2R.pas.
macOSSwiftUSB HIDOTRSPWinkeyerYCCCSO2RContesting
Active
TimeSync — clock-drift watcher for macOS
Menu-bar macOS app showing system-clock drift against NTP servers and an attached USB GPS, with a one-click "step the clock now" via chrony. Built for digital-mode operators where ~1 s alignment matters and the LAN may not always reach an upstream NTP source. An optional bundled gpsd + chrony stack turns the Mac itself into a stratum-2 NTP server for the rest of the shack; a small privileged helper daemon lets the app talk to chrony without sudo each time.
macOSSwiftSwiftUINTPGPSchronygpsdmenu-bar
View repo on GitHub
Active
LP-700-App — native macOS client for the LP-700
Native SwiftUI macOS client that talks to LP-700-Server over WebSocket. Live power / SWR / channel / alarm display, full control-verb support, settings persistence, a menu-bar glance-view, and macOS notifications for alarm states. Pairs with LP-700-Server so a single HID-attached meter drives operating positions, logging PCs and phones simultaneously. Forked from and tracking the original LP-700-App by Vinod VU3ESV.
macOSSwiftSwiftUIWebSocketLP-700Telepostmenu-bar
View repo on GitHub
Active
LP-700-Server — Telepost LP-700 WebSocket bridge
Go WebSocket bridge for the Telepost LP-500 / LP-700 USB-HID power and SWR meter. Owns the meter's HID handle and fans live telemetry out to many concurrent clients — browsers, phones, logging PCs — while routing control verbs back. Cross-compiles to Linux (amd64 / arm64 / armv7), macOS (Apple Silicon + Intel) and Windows (amd64) via a tag-driven GitHub Actions release workflow; ships a systemd unit and udev rules for headless Raspberry Pi deployment. LAN-only, zero auth. Forked from and tracking the original LP-700-Server by Vinod VU3ESV.
GoWebSocketUSB HIDRaspberry PiLP-700Telepostsystemd
View repo on GitHub
Active
MSHV-Mac — native macOS port of LZ2HV/MSHV
Native macOS port of LZ2HV’s MSHV multi-mode weak-signal program (FT8 / FT4 / Q65 / MSK144 / JT9 / JT65). Apple Silicon and Intel, Developer-ID signed and Apple-notarised, with patches on a macos-port branch so new LZ2HV releases merge cleanly.
macOSQt5PortAudioFT8 / FT4MSK144FlexRadioTCIWSJT-X UDP
Read more → View repo on GitHub
Active
NanoVNASaver — packaged macOS .app
Self-contained NanoVNASaver v0.7.3 .app bundle for Apple Silicon. Upstream NanoVNASaver only ships Windows and Raspberry Pi binaries, so this build wraps a Python 3.12 virtual-environment with PySide6 / Qt and the NanoVNASaver package, behind a small bash launcher in Contents/MacOS/. Slimmed from ~1.3 GB to 253 MB by stripping unused Qt frameworks, qml, translations, metatypes, and lipo-thinning every Mach-O binary to arm64. A macOS UI sizing patch relaxes upstream's hard-coded setFixedHeight/Width calls so Qt stops clipping label text on native macOS control chrome (50kHz→50kH, Sweep→Sweer, Rescan→Rescar). Ships with a hand-drawn 1024 px macOS-style .icns (rounded square + Smith-chart logo) in place of the upstream 128 px fallback. Logs to ~/Library/Logs/NanoVNASaver/nanovnasaver.log for easy support.
macOS.app bundlePySide6 / QtApple SiliconNanoVNAVNA
View repo on GitHub
Active
VU DXCC Credits Tracker
Live, sortable tables of DXCC standings for every Indian (VU / AT / AU) callsign, from two data sources on one page. The LoTW tab parses all 17 ARRL DXCC Standings PDFs each month — Mixed / Phone / CW / Digital / Satellite / bands 160 m to 6 m / Challenge / Honor Roll. The Clublog tab scrapes the Asia Top-2000 Confirmed league every day and pulls out Indian prefixes. Both tabs share the same layout: green highlight for column leaders, red for changes since the last snapshot, click-through to QRZ.com on every callsign. Table layout adapted from the original VU DXCC list template by VU2DCC.
PythonpdfplumberreportlabGitHub ActionsARRL DXCCClublog
View live page →
Active
MacExpert — native SPE Expert control app for macOS
Swift / SwiftUI macOS app that mirrors and controls SPE Expert HF amplifiers over either local USB serial or remote WebSocket, with a two-way live mirror of the amplifier’s LCD. Named after and inspired by the original MacExpert by Georg Isenbürger DJ6GI/NZ1C; RCU protocol reverse-engineered from scratch by VU2CPL.
macOSSwiftSwiftUISPE ExpertRCUUSB serialWebSocketSWEEP panelApple-notarised
Read more → View repo on GitHub
Active
spe-remote — SPE Expert remote control server
Python 3 remote-control server for SPE Expert HF amplifiers, running on a Raspberry Pi over USB serial and serving both a built-in web dashboard and a WebSocket API — the full Application Programmer’s Guide Rev 1.1 plus the undocumented RCU command set. Based on original work by OH2GEK, rewritten and extended.
Python 3WebSocketRaspberry PiUSB serialSPE ExpertRCU protocolSmartSDRTUNE sweep
Read more → View repo on GitHub
Active

05 · Writings & Field Reports

Articles & Contest Reports

Contest Report
ARSI Hilltop Contest 2025
Report from Vayalada Hills, Kozhikode (MK71WM). Smaller team, new location. 160m Inverted L and 90m reversible Beverage installed. Experimenting with 10m delta loop and CQ160 contest entries.
763 QSOs 148 DXCC
Jan 2025 ↓ PDF
Contest Report
AT3N — ARSI Hilltop Contest 2024
Field report from team AT3N operating from Nelliyampathy, Kerala at 1,380m ASL. Multi-band HF/VHF/UHF operation — 4,417 QSOs, 261 DXCC entities, Category C winners.
4,417 QSOs 261 DXCC
Jan 2024 ↓ PDF
Top Band
0–100 on 160m
My journey exploring the Gentleman's band from scratch — inverted L antenna, hairpin matching, beverage antennas, and chasing 100 DXCC on 160m from Zone 22.
102 countries worked 29 CQ zones 1,622 QSOs
Jan 2019 ↓ PDF
DXpedition
VU7T — A Sequel to VU7MS
The follow-up DXpedition to Kavaratti Island, Lakshadweep in October 2017. Expanded operations including first steps towards 160m activation from this rare entity.
Oct 2017 ↓ PDF
DXpedition
VU7MS — Lakshadweep DXpedition
Writeup of the VU7MS DXpedition to Kavaratti Island, Lakshadweep. Operations on HF with cubical quad and wire antennas from one of India's rarest DXCC entities.
2016 ↓ PDF
Technical
Interfacing the PA2500 with Modern Radios
How to interface the Furuno PA2500 linear amplifier with modern transceivers — Arduino band decoder customisation, direct LPF switching, ALC polarity conversion using LT7660, and automated 4:1 antenna switching.
2015 ↓ PDF

06 · Contact

Get in Touch

Location
Tarabanahalli, Chikkajala PO
Bengaluru, KA 562157

For sked requests, email via QRZ or WhatsApp. For QSL, use LOTW or Clublog OQRS — no bureau. 73 de VU2CPL.

Message sent! I'll get back to you soon. 73