diff --git a/client/package.json b/client/package.json
index 0b00fba..c9d118b 100644
--- a/client/package.json
+++ b/client/package.json
@@ -12,8 +12,7 @@
"description": "Dashboard",
"dependencies": {
"dotenv": "^17.4.1",
- "express": "^5.2.1",
- "node-gpsd": "^0.3.4"
+ "express": "^5.2.1"
},
"devDependencies": {
"nodemon": "^3.1.10"
diff --git a/client/public/notification-bar.js b/client/public/notification-bar.js
index d734375..85f646e 100644
--- a/client/public/notification-bar.js
+++ b/client/public/notification-bar.js
@@ -112,9 +112,9 @@ class DashboardHeader extends HTMLElement {
if (gpsInfo && gpsDetail) {
if (hasValidFix) {
gpsInfo.textContent = `${gps.latitude.toFixed(4)}, ${gps.longitude.toFixed(4)}`;
- gpsDetail.textContent = `${gps.fix} • ${gps.satellites} sats • Alt: ${Math.round(gps.altitude)}m`;
+ gpsDetail.textContent = `Alt: ${Math.round(gps.altitude)}m • Acc: ${Math.round(gps.accuracy)}m • ${gps.satellites} Sats`;
} else {
- gpsInfo.textContent = gps.satellites > 0 ? 'Acquiring Fix...' : 'No Signal';
+ gpsInfo.textContent = gps.satellites > 0 ? 'Acquiring Fix...' : 'No Fix';
gpsDetail.textContent = `${gps.satellites} satellites`;
}
}
@@ -956,8 +956,8 @@ class DashboardHeader extends HTMLElement {
GPS
-
39.2000, -49.0000
-
No Fix
+
No Fix
+
0 Satellites
diff --git a/client/src/services/status.mjs b/client/src/services/status.mjs
index 2fbb8c9..5ab58aa 100644
--- a/client/src/services/status.mjs
+++ b/client/src/services/status.mjs
@@ -3,8 +3,6 @@ import express from 'express';
import { exec } from 'child_process';
import { promisify } from 'util';
import { readFileSync, existsSync } from 'fs';
-import pkg from 'node-gpsd';
-const { GPS } = pkg;
import {environment} from './environment.mjs';
const router = express.Router();
@@ -15,43 +13,6 @@ let statusCache = null;
let lastUpdate = 0;
const CACHE_TTL = 15 * 1000; // 15 seconds
-// GPS client setup
-let gpsClient = null;
-let gpsData = {
- fix: 'No Fix',
- latitude: null,
- longitude: null,
- altitude: null,
- satellites: 0
-};
-
-// Initialize GPS connection
-async function initGPS() {
- try {
- gpsClient = new GPS({ hostname: 'localhost', port: 2947 });
-
- gpsClient.on('TPV', (data) => {
- gpsData.latitude = data.lat || null;
- gpsData.longitude = data.lon || null;
- gpsData.altitude = data.alt || null;
- gpsData.fix = data.mode === 3 ? '3D Fix' : data.mode === 2 ? '2D Fix' : 'No Fix';
- });
-
- gpsClient.on('SKY', (data) => {
- gpsData.satellites = (data.satellites || []).length;
- });
-
- gpsClient.on('error', (err) => {
- console.warn('GPS error:', err.message);
- });
-
- await gpsClient.watch();
- console.log('GPS client initialized');
- } catch (error) {
- console.warn('GPS not available:', error.message);
- }
-}
-
// CLI-based system information gathering
async function getSystemInfo() {
const info = {
@@ -95,9 +56,11 @@ async function getSystemInfo() {
async function getGPSInfo() {
const gpsInfo = {
satellites: 0,
+ accuracy: null,
latitude: null,
longitude: null,
- altitude: null
+ altitude: null,
+ speed: null,
};
try {
@@ -106,28 +69,23 @@ async function getGPSInfo() {
// Try to get GPS data using gpspipe
const { stdout: gpsRaw } = await execAsync('timeout 3s gpspipe -w -n 5 | grep -E \'"class":"TPV"\' | head -1', { timeout: 4000 });
-
if (gpsRaw.trim()) {
const gpsJson = JSON.parse(gpsRaw.trim());
- gpsInfo.latitude = gpsJson.lat || null;
- gpsInfo.longitude = gpsJson.lon || null;
- gpsInfo.altitude = gpsJson.alt || null;
+ gpsInfo.satellites = +gpsJson.status || 0;
+ gpsInfo.accuracy = +gpsJson.sep || null;
+ gpsInfo.latitude = +gpsJson.lat || null;
+ gpsInfo.longitude = +gpsJson.lon || null;
+ gpsInfo.altitude = +gpsJson.alt || null;
+ gpsInfo.speed = +gpsJson.speed || null;
}
- // Get satellite count
- try {
- const { stdout: skyRaw } = await execAsync('timeout 2s gpspipe -w -n 3 | grep -E \'"class":"SKY"\' | head -1', { timeout: 3000 });
- if (skyRaw.trim()) {
- const skyJson = JSON.parse(skyRaw.trim());
- gpsInfo.satellites = (skyJson.satellites || []).length;
- }
- } catch (skyError) { }
+ const { stdout: skyRaw } = await execAsync('timeout 2s gpspipe -w -n 3 | grep -E \'"class":"SKY"\' | head -1');
+ if (skyRaw.trim()) {
+ const skyJson = JSON.parse(skyRaw.trim());
+ gpsInfo.satellites = (skyJson.satellites || []).length;
+ }
} catch (error) {
console.warn('GPS info error:', error.message);
- // Use cached GPS data from node-gpsd if available
- if (gpsData.latitude !== null) {
- return gpsData;
- }
}
return gpsInfo;
@@ -332,11 +290,12 @@ async function generateStatus() {
storage: systemInfo.storage
},
gps: {
- fix: gpsInfo.fix,
satellites: gpsInfo.satellites,
+ accuracy: gpsInfo.accuracy,
latitude: gpsInfo.latitude,
longitude: gpsInfo.longitude,
- altitude: gpsInfo.altitude
+ altitude: gpsInfo.altitude,
+ speed: gpsInfo.speed,
},
network: {
wifi: networkInfo.wifi,
@@ -420,7 +379,4 @@ router.get('/lora', async (req, res) => {
}
});
-// Initialize GPS on startup
-initGPS().catch(err => console.warn('GPS initialization failed:', err.message));
-
export { router as statusRouter };