Add SiLA device discovery (SiLA 1 + SiLA 2)#887
Merged
rickwierenga merged 14 commits intomainfrom Feb 14, 2026
Merged
Conversation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SiLA 1 devices (e.g. Inheco ODTC on Windows CE) don't support mDNS. They respond to NetBIOS NBSTAT broadcast queries on UDP port 137, then confirm identity via SOAP GetDeviceIdentification on TCP port 8080. Discovery now runs SiLA 2 (mDNS) and SiLA 1 (NetBIOS) probes in parallel and deduplicates results. Also fixes RuntimeWarning when running `python -m pylabrobot.sila.discovery` by emptying __init__.py. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove dead ioctl fallback and fcntl import (broke Windows), add logging warning when zeroconf is missing, use Optional[str] for SiLA 1-only fields, add unit tests, add sila to dev extras, and document assumptions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SiLA is a communication protocol like serial/USB/FTDI/HID, so it belongs under the io package alongside other transport layers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use asyncio.get_running_loop() instead of deprecated get_event_loop() - Fix socket leak in _get_device_identification via try/finally - Run Zeroconf init/close in executor to avoid blocking the event loop - Fix NBNS query transaction ID (high bit was set, mimicking a response) - Add debug logging when no link-local interfaces are found - Normalize type hints to lowercase (list/dict/set) - Add SiLADevice/discover re-exports to __init__.py - Fix docs RST to say "SiLA" instead of "SiLA 2" Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…sila Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
pylabrobot.silapackage with device discovery for both SiLA 1 and SiLA 2 instruments_sila._tcp.local.(requireszeroconf)GetDeviceIdentification(no extra dependencies)discover()runs both probes in parallel and returnsSiLADeviceobjects with host, port, name, and version-specific metadatapython -m pylabrobot.sila.discovery) for terminal-based discoveryTest plan
SiLADevice,_decode_nbns_name,_parse_device_identification, and mDNS discovery with mocked Zeroconfdiscover()finds SiLA devices on a network with active instruments🤖 Generated with Claude Code