#!/bin/python import argparse import json import paho.mqtt.client as mqtt import mixer from mixer import Mixer MQTT_SERVER_PORT = 1883 MQTT_TOPIC = "homeassistant/device/mixer" m: Mixer = None def on_connect(client, userdata, flags, reason_code, properties): print(f"Connected: {reason_code}") client.subscribe(MQTT_TOPIC) def on_message(client, userdata, msg): payload = msg.payload.decode() print(f"{msg.topic}: {payload}") j = json.loads(payload) match j["command"]: case "scene_recall": m.scene_recall(j["args"]["scene_id"]) case "shutdown": m.shutdown() def main(): parser = argparse.ArgumentParser(description="Allen & Heath Qu MQTT Remote Control") parser.add_argument("mixer_ip", help="IP of the mixer") parser.add_argument("mqtt_hostname", help="IP of the MQTT broker") subparsers = parser.add_subparsers( dest="command", required=True, help="Available commands" ) subparsers.add_parser("shutdown", help="Shut down the mixer") scene_parser = subparsers.add_parser("scene_recall", help="Recall a specific scene") scene_parser.add_argument( "scene_number", type=int, choices=range(0, 100), help="Scene number to recall" ) args = parser.parse_args() print(f"Mixer IP: {args.mixer_ip}, MQTT broker hostname: {args.mqtt_hostname}") global m m = mixer.Mixer(args.mixer_ip) client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2) client.on_connect = on_connect client.on_message = on_message client.connect(args.mqtt_hostname, MQTT_SERVER_PORT, 60) client.loop_forever() if __name__ == "__main__": main()