main.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import sqlite3
  2. import json
  3. import os
  4. import paho.mqtt.client as mqtt
  5. DB_FILE = os.getenv('DB_FILE', 'agent-summary.db3')
  6. MQTT_HOST = os.getenv('MQTT_HOST', 'iris.dgtlu.net')
  7. MQTT_TOPIC = os.getenv('MQTT_TOPIC','agent/summary')
  8. MQTT_USER = os.getenv('MQTT_USER','agent')
  9. MQTT_PASS = os.getenv('MQTT_PASS','agent')
  10. def db_init():
  11. conn = sqlite3.connect(DB_FILE)
  12. c = conn.cursor()
  13. c.execute('''CREATE TABLE IF NOT EXISTS AgentSummary (
  14. camera_id int,
  15. dt datetime default current_timestamp,
  16. file char(500),
  17. model char(100),
  18. summary text,
  19. primary key (dt, file)
  20. )''')
  21. conn.commit()
  22. return conn
  23. def db_save_input(conn: sqlite3.Connection, json_string):
  24. dt = json.loads(json_string)
  25. c = conn.cursor()
  26. c.execute('INSERT INTO AgentSummary (camera_id, file, model, summary) VALUES (?, ?, ?, ?)',
  27. (dt["id"], dt["file"], dt["data"]["model"], dt["data"]["choices"][0]["message"]["content"].strip()))
  28. conn.commit()
  29. def mqtt_init() -> mqtt:
  30. def on_connect(mqt_client, userdata, flags, rc, properties):
  31. if rc == 0:
  32. print("Connected to MQTT Broker!")
  33. else:
  34. print("Failed to connect, return code %d\n", rc)
  35. client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
  36. client.on_connect = on_connect
  37. client.username_pw_set(username=MQTT_USER, password=MQTT_PASS)
  38. client.connect(host=MQTT_HOST, keepalive=60)
  39. return client
  40. def mqtt_subscribe(client: mqtt, db_conn: sqlite3.Connection):
  41. def on_message(mqt_client, userdata, msg):
  42. print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
  43. db_save_input(db_conn, msg.payload.decode())
  44. client.subscribe(MQTT_TOPIC)
  45. client.on_message = on_message
  46. def main():
  47. db_conn = db_init()
  48. mqtt_client = mqtt_init()
  49. mqtt_subscribe(mqtt_client, db_conn)
  50. mqtt_client.loop_forever()
  51. db_conn.close()
  52. if __name__ == '__main__':
  53. main()