diff --git a/hass_button_emulator.py b/hass_button_emulator.py index 9ec98c2..ef85604 100755 --- a/hass_button_emulator.py +++ b/hass_button_emulator.py @@ -2,33 +2,39 @@ import time import paho.mqtt.client as mqtt +import argparse import json import mqtt_client -def on_connect(client, userdata, flags, reason_code, properties): - print(f"Connected: {reason_code}") - client.subscribe("#") +def main(): + parser = argparse.ArgumentParser(description="Allen & Heath Qu MQTT event emulator") + parser.add_argument("mqtt_hostname", help="IP of the MQTT broker") + args = parser.parse_args() + + print(f"MQTT broker hostname: {args.mqtt_hostname}") + + def on_connect(client, userdata, flags, reason_code, properties): + print(f"Connected: {reason_code}") + client.subscribe("#") + + client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2) + client.on_connect = on_connect + + client.connect(args.mqtt_hostname, mqtt_client.MQTT_SERVER_PORT, 60) + client.loop_start() + + j = json.dumps({"command": "scene_recall", "args": {"scene_id": 0}}) + # j = json.dumps({'command': 'shutdown'}) + + client.publish(mqtt_client.MQTT_TOPIC, payload=j, qos=0, retain=False) + + time.sleep(2) + + client.loop_stop() + client.disconnect() -def on_message(client, userdata, msg): - print(f"{msg.topic}: {msg.payload.decode()}") - - -client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2) -client.on_connect = on_connect -client.on_message = on_message - -client.connect(mqtt_client.MQTT_SERVER_ADDRESS, mqtt_client.MQTT_SERVER_PORT, 60) -client.loop_start() - -j = json.dumps({"command": "scene_recall", "args": {"scene_id": 0}}) -# j = json.dumps({'command': 'shutdown'}) - -client.publish(mqtt_client.MQTT_TOPIC, payload=j, qos=0, retain=False) - -time.sleep(2) - -client.loop_stop() -client.disconnect() +if __name__ == "__main__": + main() diff --git a/mixer.py b/mixer.py index 7ed3639..a5d7448 100755 --- a/mixer.py +++ b/mixer.py @@ -6,6 +6,9 @@ import mido from enum import Enum +# For Allen & Heath Qu MIDI protocol documentation see: +# https://www.allen-heath.com/content/uploads/2023/06/Qu_MIDI_Protocol_V1.9.pdf + class Mixer: def __init__(self, ip): diff --git a/mqtt_client.py b/mqtt_client.py index 3ff7ed6..3b7e5b8 100644 --- a/mqtt_client.py +++ b/mqtt_client.py @@ -7,7 +7,6 @@ import paho.mqtt.client as mqtt import mixer from mixer import Mixer -MQTT_SERVER_ADDRESS = "localhost" MQTT_SERVER_PORT = 1883 MQTT_TOPIC = "homeassistant/device/mixer" @@ -16,7 +15,7 @@ m: Mixer = None def on_connect(client, userdata, flags, reason_code, properties): print(f"Connected: {reason_code}") - client.subscribe("#") + client.subscribe(MQTT_TOPIC) def on_message(client, userdata, msg): @@ -35,18 +34,20 @@ def on_message(client, userdata, msg): def main(): parser = argparse.ArgumentParser(description="Allen & Heath Qu MQTT Remote Control") - parser.add_argument("ip", help="IP of the mixer") + parser.add_argument("mixer_ip", help="IP of the mixer") + parser.add_argument("mqtt_hostname", help="IP of the MQTT broker") args = parser.parse_args() - print(f"IP: {args.ip}") + + print(f"Mixer IP: {args.mixer_ip}, MQTT broker hostname: {args.mqtt_hostname}") global m - m = mixer.Mixer(args.ip, mixer.MIXER_PORT) + 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(MQTT_SERVER_ADDRESS, MQTT_SERVER_PORT, 60) + client.connect(args.mqtt_hostname, MQTT_SERVER_PORT, 60) client.loop_forever()