serversdown
3c22f1d70c
feat: wedge detection and automatic recovery orchestration
...
Adds the recovery layer for the NL-43 TCP wedge failure mode (control
listener on 2255 dies while device/FTP stay alive — see
SLM-stress-test/NL43_RX55_TCP_Wedge_Investigation_2026-02-18.md).
- Failure classification: poll failures probed raw and classified as
wedged (refused = stack alive, listener gone) vs offline (timeout).
FTP-port probe upgrades wedge confidence to definitive.
- RecoveryManager state machine: confirm wedge -> trigger reset ->
wait boot -> reconnect -> resume measurement via start_cycle (keeps
overwrite protection) -> full incident trail in device logs.
- Pluggable reset backends: manual (notify, default) and webhook
(HTTP to relay controller: Pi GPIO, Shelly, Tasmota, etc.).
- Safety: auto_recovery_enabled off by default, 2-failure confirmation
threshold, windowed attempt limit (2 per 6h), one recovery per device.
- Endpoints: GET recovery/status, POST recovery/probe (diagnostic),
POST recovery/trigger (manual, bypasses threshold).
- Migration: migrate_add_recovery_fields.py
- Tests: test_wedge_recovery.py — fake wedge-able NL-43 + fake relay
webhook; 23 assertions covering classification, end-to-end recovery
with resume, and gating. All passing.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 05:03:25 +00:00
claude
bf5f222511
Add:
...
- db cache dump on diagnostics request.
- individual device logs, db and files.
-Device logs api endpoints and diagnostics UI.
Fix:
- slmm standalone now uses local TZ (was UTC only before)
- fixed measurement start time logic.
2026-01-29 18:50:47 +00:00
claude
d43ef7427f
v0.2.0: async status polling added.
2026-01-16 06:24:13 +00:00
claude
3d445daf1f
fixed FTP port support to NL43 configuration and client
2026-01-14 01:44:53 +00:00
claude
6b363b0788
Added: Ability to change store name and overwrite protection
2026-01-08 19:16:59 +00:00
claude
1fb786c262
Fix NL43 DRD field mapping to match official specification
...
Corrected the parsing of NL43 DRD (Dynamic Range Data) and DOD (Data On Demand)
responses according to the NL43 Communications Guide. The previous implementation
incorrectly mapped d0 (counter field) as a measurement.
Changes:
- Updated DRD/DOD parsing to skip d0 (counter: 1-600)
- Correctly map d1-d5 to lp/leq/lmax/lmin/lpeak measurements
- Added inline documentation referencing DRD format specification
- Included database migration script to revert incorrect field names
DRD format per NL43 spec:
- d0 = counter (1-600) - NOT a measurement
- d1 = Lp (instantaneous sound pressure level)
- d2 = Leq (equivalent continuous sound level)
- d3 = Lmax (maximum level)
- d4 = Lmin (minimum level)
- d5 = Lpeak (peak level)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-07 03:42:26 +00:00
claude
316cfa84f8
Add FTP credentials management and UI enhancements
...
- Implement migration script to add ftp_username and ftp_password columns to nl43_config table.
- Create set_ftp_credentials.py script for updating FTP credentials in the database.
- Update requirements.txt to include aioftp for FTP functionality.
- Enhance index.html with FTP controls including enable, disable, check status, and list files features.
- Add JavaScript functions for handling FTP operations and displaying file lists.
2025-12-24 02:03:03 +00:00
claude
dac731f912
Add communication guide and project improvements documentation; enhance main app with logging, CORS configuration, and health check endpoints; implement input validation and error handling in routers; improve services with rate limiting and snapshot persistence; update models for SQLAlchemy best practices; create index.html for frontend interaction.
2025-12-23 19:24:14 +00:00
claude
5c4722267f
initial scaffold
2025-12-23 18:22:55 +00:00