# -*- coding: utf-8 -*- # SPDX-FileCopyrightText: 2025 KUNBUS GmbH # SPDX-License-Identifier: GPL-2.0-or-later """Switches 14 outputs on a DIO to the same value as the first input.""" from time import perf_counter from gi.repository import GLib from pydbus import SystemBus detected_signal = False timestamp = perf_counter() # Get system bus bus = SystemBus() # Get IoManager interface on ios1 bus iface_io_manager = bus.get( "com.revolutionpi.ios1", "/com/revolutionpi/ios1", )["com.revolutionpi.ios1.IoManager"] # Query object path of RevPiLED output path_revpi_led = iface_io_manager.Get("RevPiLED") # Get Output interface in the queried object path. out_RevPiLED = bus.get("com.revolutionpi.ios1", path_revpi_led)["com.revolutionpi.ios1.Output"] # Get all 14 outputs lst_path_outputs = [iface_io_manager.Get(f"O_{i}") for i in range(1, 15)] lst_out_outputs = [ bus.get("com.revolutionpi.ios1", path)["com.revolutionpi.ios1.Output"] for path in lst_path_outputs ] def signal_handler(io_name, io_value): global timestamp print(f"Signal received: {io_name} = {io_value}") if io_name == "O_14": print(f"Time since input detection: {perf_counter() - timestamp}") elif io_name == "I_1": timestamp = perf_counter() out_RevPiLED.SetValue(GLib.Variant("i", io_value)) for output in lst_out_outputs: output.SetValue(GLib.Variant("b", io_value)) # Start change detection to fire signals on dbus iface_io_manager.ActivateIoSignals() iface_io_manager.onIoChanged = signal_handler try: loop = GLib.MainLoop() loop.run() except KeyboardInterrupt: pass # Stop change detection iface_io_manager.DeactivateIoSignals()