parent
982680a1c3
commit
b3d360e9d7
|
@ -3,6 +3,7 @@ import json
|
||||||
import MySQLdb
|
import MySQLdb
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
import threading
|
import threading
|
||||||
|
from stupidArtnet import StupidArtnet
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
@ -18,6 +19,9 @@ except FileNotFoundError:
|
||||||
"user": "pxm",
|
"user": "pxm",
|
||||||
"password": "pixel",
|
"password": "pixel",
|
||||||
"database": "pixeltube_db"
|
"database": "pixeltube_db"
|
||||||
|
},
|
||||||
|
"artnet": {
|
||||||
|
"universe_count": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
with open('config.json', 'w') as config_file:
|
with open('config.json', 'w') as config_file:
|
||||||
|
@ -32,15 +36,9 @@ db = MySQLdb.connect(
|
||||||
database=config['mysql']['database'],
|
database=config['mysql']['database'],
|
||||||
)
|
)
|
||||||
|
|
||||||
mqttc = mqtt.Client("localhost", 1883, 60)
|
universe_count = config['artnet']['universe_count']
|
||||||
|
|
||||||
# Function to retrieve registered tubes from the database
|
mqttc = mqtt.Client("localhost", 1883, 60)
|
||||||
def get_tubes():
|
|
||||||
cur = db.cursor()
|
|
||||||
cur.execute("SELECT * FROM tubes")
|
|
||||||
tubes = cur.fetchall()
|
|
||||||
cur.close()
|
|
||||||
return tubes
|
|
||||||
|
|
||||||
# Function to register a tube in the database
|
# Function to register a tube in the database
|
||||||
def register_tube(mac_address):
|
def register_tube(mac_address):
|
||||||
|
@ -86,9 +84,42 @@ def get_assigned_params(tube_unique_id):
|
||||||
def flask_api():
|
def flask_api():
|
||||||
app.run(host='0.0.0.0', port=5000)
|
app.run(host='0.0.0.0', port=5000)
|
||||||
|
|
||||||
def mqtt_publisher(mqtt):
|
def mqtt_publisher(universe):
|
||||||
|
try:
|
||||||
|
# Connect to the MQTT broker
|
||||||
|
mqtt_client = mqtt.Client()
|
||||||
|
mqtt_client.connect("localhost", 1883, 60)
|
||||||
|
|
||||||
|
# Create a new Art-Net listener
|
||||||
|
artnet = StupidArtnet()
|
||||||
|
artnet.start(universe=universe)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
dmx_values = artnet.listen()
|
||||||
|
|
||||||
|
if dmx_values is not None:
|
||||||
|
for channel, value in enumerate(dmx_values):
|
||||||
|
# Create MQTT topic based on the universe and channel
|
||||||
|
topic = f"/{universe}/{channel + 1}"
|
||||||
|
|
||||||
|
# Publish the DMX value to the MQTT topic
|
||||||
|
mqtt_client.publish(topic, payload=value, qos=0, retain=False)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error in universe {universe}: {e}")
|
||||||
|
|
||||||
|
def start_mqtt_publishers(universe_count):
|
||||||
|
used_universes = universe_count
|
||||||
|
|
||||||
|
# Create and start a thread for each universe
|
||||||
|
threads = [threading.Thread(target=mqtt_publisher, args=(universe,)) for universe in used_universes]
|
||||||
|
|
||||||
|
for thread in threads:
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
for thread in threads:
|
||||||
|
thread.join()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
mqtt_publisher(mqtt)
|
start_mqtt_publishers(universe_count)
|
||||||
flask_api()
|
flask_api()
|
||||||
|
|
Loading…
Reference in New Issue