Skip to content

JonatanMGit/iNet-control

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Busch-Radio iNet Python Library

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.

Installation

pip install inet-control

Quick Start

1. Discover radios on your network

import 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

2. Control a radio

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())

3. Monitor state changes (callbacks)

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())

CLI Usage

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

About

A library to control Busch Jäger Radio INet

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages