58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
import os
|
|
import base64
|
|
import json
|
|
from datetime import datetime
|
|
import paho.mqtt.client as mqtt
|
|
|
|
# MQTT-Konfiguration
|
|
MQTT_BROKER = "mqtt_broker"
|
|
MQTT_PORT = 1883
|
|
MQTT_USER = "infoscreen_taa_user"
|
|
MQTT_PASSWORD = "infoscreen_taa_MQTT25!"
|
|
TOPIC_SCREENSHOTS = "infoscreen/screenshot"
|
|
SAVE_DIR = "received_screenshots"
|
|
topics = [
|
|
("infoscreen/screenshot", 0),
|
|
("infoscreen/heartbeat", 0),
|
|
# ... weitere Topics hier
|
|
]
|
|
|
|
# Ordner für empfangene Screenshots anlegen
|
|
os.makedirs(SAVE_DIR, exist_ok=True)
|
|
|
|
# Callback, wenn eine Nachricht eintrifft
|
|
def on_message(client, userdata, msg):
|
|
try:
|
|
payload = json.loads(msg.payload.decode('utf-8'))
|
|
b64_str = payload["screenshot"]
|
|
img_data = base64.b64decode(b64_str)
|
|
|
|
# Dateiname mit Zeitstempel
|
|
ts = datetime.fromtimestamp(payload.get("timestamp", datetime.now().timestamp()))
|
|
filename = ts.strftime("screenshot_%Y%m%d_%H%M%S.jpg")
|
|
filepath = os.path.join(SAVE_DIR, filename)
|
|
|
|
# Bild speichern
|
|
with open(filepath, "wb") as f:
|
|
f.write(img_data)
|
|
print(f"Bild gespeichert: {filepath}")
|
|
except Exception as e:
|
|
print("Fehler beim Verarbeiten der Nachricht:", e)
|
|
|
|
# Callback bei erfolgreicher Verbindung
|
|
def on_connect(client, userdata, flags, rc, properties):
|
|
if rc == 0:
|
|
print("Mit MQTT-Server verbunden.")
|
|
client.subscribe(TOPIC_SCREENSHOTS, qos=1)
|
|
else:
|
|
print(f"Verbindung fehlgeschlagen (Code {rc})")
|
|
|
|
if __name__ == "__main__":
|
|
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
|
|
client.username_pw_set(MQTT_USER, MQTT_PASSWORD) # <<<< AUTHENTIFIZIERUNG
|
|
client.on_connect = on_connect
|
|
client.on_message = on_message
|
|
|
|
client.connect(MQTT_BROKER, MQTT_PORT, keepalive=60)
|
|
client.loop_forever()
|