- Introduced a new communication guide detailing protocol basics, transport modes, and a quick startup checklist. - Added a detailed list of commands with their functions and usage for NL-43/NL-53 devices. - Created a verified quick reference for command formats to prevent common mistakes. - Implemented an improvements document outlining critical fixes, security enhancements, reliability upgrades, and code quality improvements for the SLMM project. - Enhanced the frontend with a new button to retrieve all device settings, along with corresponding JavaScript functionality. - Added a test script for the new settings retrieval API endpoint to demonstrate its usage and validate functionality.
6.0 KiB
Feature Summary: Device Settings Verification
What Was Added
A new API endpoint that retrieves all current device settings in a single request, allowing users to quickly verify the NL43/NL53 configuration before starting measurements.
New Endpoint
GET /api/nl43/{unit_id}/settings
Returns comprehensive device configuration including:
- Measurement state and weighting settings
- Timing and interval configuration
- Battery level and device clock
- Sleep mode and FTP status
Files Modified
1. app/routers.py
Lines: 728-761
Added new route handler get_all_settings() that:
- Validates device configuration exists
- Checks TCP communication is enabled
- Calls
NL43Client.get_all_settings() - Returns formatted JSON response with all settings
- Handles connection errors, timeouts, and exceptions
2. README.md
Updated sections:
- Line 134: Added new endpoint to Measurement Settings table
- Lines 259-283: Added usage example showing how to verify device settings
Files Created
1. test_settings_endpoint.py
Test/demonstration script showing:
- How to use the
get_all_settings()method - Example API endpoint usage with curl
- Expected response format
2. SETTINGS_ENDPOINT.md
Comprehensive documentation including:
- Detailed endpoint description
- Complete list of settings retrieved
- Usage examples in bash, Python, and JavaScript
- Performance considerations
- Best practices and troubleshooting
3. FEATURE_SUMMARY.md
This file - summary of changes for reference
Existing Functionality Used
The implementation leverages the existing get_all_settings() method in app/services.py which was already implemented but not exposed via the API. This method queries multiple device settings and handles errors gracefully.
How It Works
- User makes GET request to
/api/nl43/{unit_id}/settings - Router validates device configuration exists and TCP is enabled
- NL43Client queries device for each setting sequentially (with 1-second delays)
- Individual errors are caught and returned as error strings
- Response returned with all settings in JSON format
Usage Example
# Quick verification before measurement
curl http://localhost:8100/api/nl43/NL43-001/settings
# Response:
{
"status": "ok",
"unit_id": "NL43-001",
"settings": {
"measurement_state": "Stop",
"frequency_weighting": "A",
"time_weighting": "F",
"measurement_time": "00:01:00",
"leq_interval": "1s",
"lp_interval": "125ms",
"index_number": "0",
"battery_level": "100%",
"clock": "2025/12/24,20:45:30",
"sleep_mode": "Off",
"ftp_status": "On"
}
}
Benefits
- Single request - Get all settings at once instead of multiple API calls
- Pre-flight checks - Verify configuration before starting measurements
- Documentation - Easy to save configuration snapshots for audit trails
- Troubleshooting - Quickly identify misconfigured settings
- Multi-device - Compare settings across multiple devices
Performance Notes
- Query time: ~10-15 seconds (due to required 1-second delays between commands)
- Rate limiting: Automatically enforced by NL43Client
- Error handling: Partial failures don't prevent other settings from being retrieved
- Caching recommended: Settings don't change frequently, cache for 5-10 minutes
Testing
To test the new endpoint:
-
Start the server:
uvicorn app.main:app --reload --port 8100 -
Configure a device (if not already configured):
curl -X PUT http://localhost:8100/api/nl43/test-meter/config \ -H "Content-Type: application/json" \ -d '{"host": "192.168.1.100", "tcp_port": 80, "tcp_enabled": true}' -
Query settings:
curl http://localhost:8100/api/nl43/test-meter/settings -
Check Swagger UI:
- Navigate to http://localhost:8100/docs
- Find "GET /api/nl43/{unit_id}/settings" endpoint
- Click "Try it out" and test interactively
Integration Tips
Frontend Integration
// React/Vue/Angular example
async function verifyDeviceBeforeMeasurement(unitId) {
const response = await fetch(`/api/nl43/${unitId}/settings`);
const { settings } = await response.json();
// Verify critical settings
if (settings.frequency_weighting !== 'A') {
alert('Warning: Frequency weighting not set to A');
}
// Check battery
const batteryPercent = parseInt(settings.battery_level);
if (batteryPercent < 20) {
alert('Low battery! Please charge device.');
}
return settings;
}
Python Automation
def ensure_correct_config(unit_id: str, required_config: dict):
"""Verify device matches required configuration."""
settings = get_device_settings(unit_id)
mismatches = []
for key, expected in required_config.items():
actual = settings.get(key)
if actual != expected:
mismatches.append(f"{key}: expected {expected}, got {actual}")
if mismatches:
raise ValueError(f"Configuration mismatch: {', '.join(mismatches)}")
return True
Future Enhancements
Potential improvements for future versions:
- Filtered queries - Query parameter to select specific settings
- Diff mode - Compare current settings to expected values
- Batch queries - Get settings from multiple devices in one request
- Settings profiles - Save/load common configuration profiles
- Change detection - Track when settings were last modified
Support
For questions or issues with this feature:
- See SETTINGS_ENDPOINT.md for detailed documentation
- Check README.md for general API usage
- Review COMMUNICATION_GUIDE.md for protocol details
Version Info
- Added: December 24, 2025
- API Version: Compatible with existing v1 API
- Breaking Changes: None - purely additive feature