Files
slmm/FEATURE_SUMMARY.md
serversdwn f9139d6aa3 feat: Add comprehensive NL-43/NL-53 Communication Guide and command references
- 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.
2025-12-25 00:36:46 +00:00

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

  1. User makes GET request to /api/nl43/{unit_id}/settings
  2. Router validates device configuration exists and TCP is enabled
  3. NL43Client queries device for each setting sequentially (with 1-second delays)
  4. Individual errors are caught and returned as error strings
  5. 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

  1. Single request - Get all settings at once instead of multiple API calls
  2. Pre-flight checks - Verify configuration before starting measurements
  3. Documentation - Easy to save configuration snapshots for audit trails
  4. Troubleshooting - Quickly identify misconfigured settings
  5. 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:

  1. Start the server:

    uvicorn app.main:app --reload --port 8100
    
  2. 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}'
    
  3. Query settings:

    curl http://localhost:8100/api/nl43/test-meter/settings
    
  4. 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:

  1. Filtered queries - Query parameter to select specific settings
  2. Diff mode - Compare current settings to expected values
  3. Batch queries - Get settings from multiple devices in one request
  4. Settings profiles - Save/load common configuration profiles
  5. Change detection - Track when settings were last modified

Support

For questions or issues with this feature:

Version Info

  • Added: December 24, 2025
  • API Version: Compatible with existing v1 API
  • Breaking Changes: None - purely additive feature