Skip to content

feat: Pluggable Entity Transports and UI Settings (v1.5.0) - #1

Merged
spelech merged 18 commits into
developfrom
feature/v1.5.0-pluggable-entity-transports-and-ui-settings
Sep 6, 2026
Merged

spelech merged 18 commits into
developfrom
feature/v1.5.0-pluggable-entity-transports-and-ui-settings

Conversation

@spelech

@spelech spelech commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Description

Implements pluggable hardware entity transports across locks, keypads, and sensors, direct Z-Wave JS WebSocket communication with physical node auto-detection, SQLite system settings persistence with hot-reconnection, and interactive UI settings manager.

Key Changes

  • Pluggable ITransport, ILockTransport, IKeypadTransport, ISensorTransport, and ITransportRegistry.
  • ZWaveWebSocketTransport JSON-RPC client connected to zwave-js-server.
  • Validated on live physical mesh: Node 18 (August Lock Pro), Node 39 (Schlage BE469ZP), Node 40 (Ring Keypad v2).
  • system_settings persistence and SettingsController (GET/PUT /api/settings, POST /api/settings/test-connection).
  • Interactive Settings UI and dynamic node selection in Door Setup Wizard.
  • SemVer 1.5.0 synchronization across solution and add-on manifests.

Test Coverage

  • 97/97 .NET unit tests passing.
  • 4/4 synthetic harness tests passing.
  • 53/53 Vitest frontend tests passing.
  • ESLint: 0 warnings.
  • verify_release.py --ci clean.

Antigravity Agent added 18 commits September 6, 2026 15:41
foreach (var slot in userSlots)
{
_logger.LogInformation("Clearing physical hardware slot {SlotNumber} for user {UserId} on door '{DoorName}' ({DoorId})",
slot.SlotNumber, userId, door.Name, door.Id);
{
_session = _sessionFactory();
var uri = new Uri(_url);
_logger.LogInformation("Connecting to Z-Wave JS Server at {Uri}...", uri);
await _session.ConnectAsync(uri, connectCts.Token);

_receiveLoopTask = Task.Run(() => ReceiveLoopAsync(_cts.Token));
_logger.LogInformation("Connected to Z-Wave JS Server at {Uri}", uri);
}
catch (Exception ex)
{
_logger.LogWarning(ex, "Failed to connect to Z-Wave JS Server at {Url}", _url);
}
catch (Exception ex)
{
_logger.LogDebug(ex, "Failed to publish HA discovery messages for new door '{DoorId}'", door.Id);
}
catch (Exception ex)
{
_logger.LogDebug(ex, "Failed to republish HA discovery messages for door '{DoorId}'", id);
}
catch (Exception ex)
{
_logger.LogDebug(ex, "Failed to unpublish HA discovery messages for door '{DoorId}'", id);
catch (Exception ex)
{
sw.Stop();
_logger.LogWarning(ex, "Test connection failed to Z-Wave WebSocket {Url}", url);
try
{
var cleared = await _doorOps.ClearUserHardwareSlotsAsync(id, ct);
_logger.LogInformation("Cleared {Count} physical hardware slots for user '{Name}' ({Id})", cleared, existing.Name, id);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error clearing hardware slots for user '{Name}' ({Id})", existing.Name, id);
@spelech
spelech merged commit 264a0eb into develop Sep 6, 2026
6 checks passed
@spelech
spelech deleted the feature/v1.5.0-pluggable-entity-transports-and-ui-settings branch September 6, 2026 22:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants