Network
—No operator evidenceCONTROL CENTER / OVERVIEW
System overview
Establishing serial link
The application is available while the hardware initializes.
SIM state
—Awaiting modemSMS quota · IST
0 / 100Serial link
Offline/dev/nexgen-gsmLIVE TELEMETRY
Signal history
HARDWARE
Qualification
Recent activity
LIVEMODEM IDENTITY
Waiting for modem
- Firmware
- —
- Baud
- —
- GPRS
- —
- Call audio
- External interface required
CALL CONTROL
Dial pad
Call history
CONTROL AVAILABLEINTERACTIVE SESSION
USSD console
Submit one carrier code at a time. Automated balance queries are never run.
NEXGENHOME EVENT GATEWAY
Alert API
Independent cellular notifications with cooldowns, deduplication, scoped keys, and the same 100-segment daily safety limit.
POST /api/v1/alerts
{
"severity": "critical",
"title": "Server Temperature",
"message": "Office exhaust reached 45°C",
"recipients": ["configured:owner"],
"source": "nexgenhome",
"dedupe_key": "office-temp-critical"
}INBOUND COMMANDS
Secure by default
SMS sender identity is not strong authentication. No inbound message can run a shell command or arbitrary URL.
- Sender allow-list required
- Explicit command mappings only
- Optional shared PIN
- Rate limited and fully audited
Capability matrix
Download report ↓Raw AT console
Admin-only · audited · dangerous commands require acknowledgement
No command executed.
VERSION 1.0.0
API & Operations
NexGen GSM is a private cellular edge gateway. Every data or control API requires a secure session or scoped bearer key; only dependency health is public.
Architecture
PL2303 serial → serialized AT engine → SIM900 driver
→ GSM service → SQLite/WAL → REST + SSE → Web UIThe daemon dynamically verifies ATI before accepting a serial candidate. Optional firmware commands may return unsupported without failing initialization. USB voice audio is not available.
Authentication
Create a minimal key under Settings. Send it as Authorization: Bearer $NEXGEN_GSM_API_KEY. Keys are shown once and stored as keyed hashes.
Send an SMS
curl -X POST https://gsm.nexgenhome.in/api/v1/messages \
-H "Authorization: Bearer $NEXGEN_GSM_API_KEY" \
-H "Idempotency-Key: server-temp-001" \
-H "Content-Type: application/json" \
-d '{"to":"+91xxxxxxxxxx","message":"Server temperature warning","source":"nexgenhome"}'A request is accepted only when the modem is registered. The quota increments only after a positive +CMGS. Retries must reuse the same idempotency key.
Automation alerts
POST /api/v1/alerts resolves configured:owner-style aliases, applies cooldown and state deduplication, then performs separate controlled sends.
C# / Python / JavaScript
// C# HttpClient
using var req = new HttpRequestMessage(HttpMethod.Post, baseUrl + "/api/v1/alerts");
req.Headers.Authorization = new("Bearer", apiKey);
req.Headers.Add("Idempotency-Key", "office-temp-critical-20260907");
req.Content = JsonContent.Create(new { severity="critical", title="Server Temperature",
message="Office server exhaust reached 45°C", recipients=new[]{"configured:owner"},
source="nexgenhome", dedupe_key="office-server-temp-critical" });
var response = await client.SendAsync(req);
response.EnsureSuccessStatusCode();# Python
httpx.post(base + "/api/v1/alerts", headers={"Authorization": "Bearer " + key,
"Idempotency-Key": "alarm-001"}, json=payload, timeout=30).raise_for_status()// JavaScript
await fetch(base + "/api/v1/alerts", {method:"POST", headers:{
Authorization:"Bearer " + key, "Idempotency-Key":"alarm-001",
"Content-Type":"application/json"}, body:JSON.stringify(payload)});Hardware & operations
The stable link is /dev/nexgen-gsm, created from the verified PL2303 attributes. The service starts without hardware and reconnects with bounded exponential backoff. See the repository documentation for udev, backup/restore, upgrades, troubleshooting, AT reference, SSE, webhooks, and Home Assistant examples.
SAFETY POLICY
Daily SMS quota
The hard default cannot be raised from this UI. It resets at midnight in Asia/Kolkata.
API ACCESS