From d6dbeaf9b1605983897d62fa0d79ee640a35be5e Mon Sep 17 00:00:00 2001 From: angoosh Date: Mon, 13 Jan 2025 21:25:38 +0100 Subject: [PATCH] initial commit with shtuff --- Audio/audio_automation_pc.py | 133 +++++++++++++++++++++++++++++++++++ Audio/hp.json | 3 + Audio/mic.json | 3 + 3 files changed, 139 insertions(+) create mode 100644 Audio/audio_automation_pc.py create mode 100644 Audio/hp.json create mode 100644 Audio/mic.json diff --git a/Audio/audio_automation_pc.py b/Audio/audio_automation_pc.py new file mode 100644 index 0000000..ad1d69e --- /dev/null +++ b/Audio/audio_automation_pc.py @@ -0,0 +1,133 @@ +from paho.mqtt import client as mqtt_client +import paho.mqtt.publish as publ +import random +import threading +import json +import psutil +from time import sleep + +FIRST_RECONNECT_DELAY = 1 +RECONNECT_RATE = 2 +MAX_RECONNECT_COUNT = 12 +MAX_RECONNECT_DELAY = 60 + +broker = '10.0.69.69' +port = 1883 +topics = ["tele/+/STATE", "stat/+/POWER"] +client_id = f'python-mqtt-{random.randint(0, 1000)}' +username = 'mosquitto' +password = 'Terra_Taonas' + +powerState = {} +microphone = {} +headphones = {} + +try: + with open("./mic.json", "r") as f: + microphone = json.load(f) +except: + print("No mic.json file found, microphone will not be controlled") + +try: + with open("./hp.json", "r") as f: + headphones = json.load(f) +except: + print("No hp.json file found, headphones will not be controlled") + +def process_status(process_name): + for process in psutil.process_iter(['pid', 'name']): + if process.info['name'] == process_name: + return True + return False + +def connect_mqtt(): + def on_connect(client, userdata, flags, rc): + if rc == 0: + print("Connected to MQTT Broker!") + else: + print("Failed to connect, return code %d\n", rc) + + client = mqtt_client.Client(client_id) + + client.username_pw_set(username, password) + client.on_connect = on_connect + client.connect(broker, port) + return client + +def subscribe(client: mqtt_client): + def on_message(client, userdata, msg): + topic = msg.topic + if "tele" in topic: + if "STATE" in topic: + data = json.loads(msg.payload.decode()) + device = topic.split('/')[1] + powerState[device] = data['POWER'] + if "stat" in topic: + device = topic.split('/')[1] + powerState[device] = msg.payload.decode() + print(powerState) + + for topic in topics: + client.subscribe(topic) + client.on_message = on_message + +def publish(client, topic, msg): + msg_count = 1 + while True: + sleep(1) + result = client.publish(topic, msg) + status = result[0] + if status == 0: + print("Msg sent") + break + else: + print("Failed to send message") + msg_count += 1 + if msg_count > 5: + break + +def subscribe_state(): + client = connect_mqtt() + subscribe(client) + client.loop_forever() + +def checkHeadphones(): + enable = False + for app in headphones["Apps"]: + if process_status(app): + enable = True + + if enable: + try: + if powerState['swhpamp'] == "OFF": + publ.single("cmnd/swhpamp/POWER", "on", hostname=broker, port=port, auth={'username':username,'password':password}) + except Exception as e: print(e) + +def checkMicrophone(): + enable = False + for app in microphone["Apps"]: + if process_status(app): + enable = True + + if enable: + try: + if powerState['swmicamp'] == "OFF": + publ.single("cmnd/swmicamp/POWER", "on", hostname=broker, port=port, auth={'username':username,'password':password}) + except Exception as e: print(e) + else: + try: + if powerState['swmicamp'] == "ON": + publ.single("cmnd/swmicamp/POWER", "off", hostname=broker, port=port, auth={'username':username,'password':password}) + except Exception as e: print(e) + +if __name__ == "__main__": +# sub=threading.Thread(target=subscribe_state) +# sub.start() + +# sleep(5) + + while True: +# checkMicrophone() + checkHeadphones() + sleep(1) + \ No newline at end of file diff --git a/Audio/hp.json b/Audio/hp.json new file mode 100644 index 0000000..d7fc56b --- /dev/null +++ b/Audio/hp.json @@ -0,0 +1,3 @@ +{ + "Apps": ["Discord", "tidal-hifi", "firefox", "steam", "audacity", "kdenlive"] +} diff --git a/Audio/mic.json b/Audio/mic.json new file mode 100644 index 0000000..da3cc3b --- /dev/null +++ b/Audio/mic.json @@ -0,0 +1,3 @@ +{ + "Apps": ["Discord"] +}