Asynchronous Python library for controlling and monitoring Busch-Jaeger iNet Radios via their UDP protocol. Features real-time push notifications for state changes (volume, station, power) from physical buttons.
pip install inet-controlimport asyncio
from inet_control import RadioManager
async def discover():
manager = RadioManager()
await manager.start()
# Broadcast discover and wait for responses
await manager.discover()
await asyncio.sleep(2) # Wait for responses
for ip, radio in manager.radios.items():
print(f"{radio.name} → {ip}")
await manager.stop()
asyncio.run(discover())Output:
RADIO-LIVINGROOM → 192.168.1.100
RADIO-KITCHEN → 192.168.1.101
import asyncio
from inet_control import RadioManager
async def control():
manager = RadioManager()
await manager.start()
# Connect to a specific radio by IP
radio = await manager.connect("192.168.1.100", timeout=3.0)
print(f"Connected: {radio.name} (volume={radio.volume}, power={radio.power})")
# Control the radio
await manager.turn_on(radio)
await manager.set_volume(radio, 8)
await manager.play_station(radio, 1) # Play station preset 1-8
# State is updated automatically via callbacks
await asyncio.sleep(1)
print(f"Now playing: {radio.playing_station_name}")
await manager.stop()
asyncio.run(control())import asyncio
from inet_control import RadioManager
async def monitor():
manager = RadioManager()
await manager.start()
radio = await manager.connect("192.168.1.100")
# Register callback for any state change
def on_change():
print(f"[UPDATE] {radio.name}: vol={radio.volume} power={radio.power} "
f"station={radio.playing_station_name}")
radio.register_callback(on_change)
print("Listening for changes... (press Ctrl+C to stop)")
try:
await asyncio.Future() # Run forever
except KeyboardInterrupt:
pass
finally:
await manager.stop()
asyncio.run(monitor())The library includes a command-line interface:
# Discover radios
python -m inet_control monitor
# Control a specific radio
python -m inet_control ctl 192.168.1.100 status
python -m inet_control ctl 192.168.1.100 on
python -m inet_control ctl 192.168.1.100 off
python -m inet_control ctl 192.168.1.100 volume 8
python -m inet_control ctl 192.168.1.100 play 3 # Play station 3
python -m inet_control ctl 192.168.1.100 mute