The fact that all 30 appear in `ioreg` only tells you that USB sees them. It doesn’t necessarily mean macOS has attached all of them as usable keyboard HID devices.
Since the cutoff is consistently 16, I’d check the HID side next. Run:
`hidutil list`
Apple documents `hidutil` specifically for seeing which HID devices macOS has actually made available.
If only 16 of the numpads appear there as keyboards, I don’t think changing USB hubs will get you past this. The limitation is higher up in the macOS input/HID stack.
For a 30-student voting system, I’d avoid having every keypad act as a normal keyboard. A better approach would be either one controller that collects all 30 inputs and presents them to the Mac as one device, or have your Python application read the individual HID devices directly rather than relying on normal keyboard events. Apple’s HID APIs are designed to let an application discover and communicate with HID devices directly.
`hidutil list` with 16 versus all 30 devices would help narrow down exactly where the limit is occurring.
A friendly note: This is the German-language Apple Support Community. Posting your question in German will make it easier for more members to understand it and offer assistance.