Почему подписка MQTT добавляет отставание в потоковой передаче данных после использования чистого сеансаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему подписка MQTT добавляет отставание в потоковой передаче данных после использования чистого сеанса

Сообщение Anonymous »

У меня есть RFID Reader, который подключен к моему коду через MQTT. Я хочу спроектировать систему таким образом, чтобы у пользователя был начальный API, а также API Stop и API, который получает данные и преобразовывает его, чтобы сделать данные читаемыми. Теги. < /p>

Код: Выделить всё

IST = timezone(timedelta(hours=5, minutes=30))

# MQTT config
MQTT_BROKER = "xxx.xx.xx"
MQTT_PORT = 1883 MQTT_TOPIC = "xyz"

client = mqtt.Client(clean_session=True) is_mqtt_connected = False

# mqtt_handler.py

scan_state = {
"is_active": False,
"start_time": None,
"accepted_tags": {}, }

current_session_id = None

def set_current_session_id(session_id):
global current_session_id
current_session_id = session_id

def get_current_session_id():
return current_session_id

def clear_retained_message():
# publish empty retained message → clears broker memory
client.publish(MQTT_TOPIC, payload=None, qos=1, retain=True)

def on_connect(client, userdata, flags, rc):
print(f"[MQTT] Connected with result code {rc}")
client.subscribe(MQTT_TOPIC, qos=1)

def on_message(client, userdata, msg):
try:
data = json.loads(msg.payload.decode())
epc = data['tagInventoryEvent']['epcHex']
timestamp_str = data['timestamp']
timestamp = datetime.fromisoformat(timestamp_str.replace("Z", "+00:00"))
if timestamp.tzinfo is None:
timestamp = make_aware(timestamp, timezone=pytz.UTC)
else:
timestamp = timestamp.astimezone(pytz.UTC)

session = ScanSession.objects.filter(is_active=True).order_by("-start_time").first()
if session:
start_time = session.start_time
if start_time.tzinfo is None:
start_time = make_aware(start_time, timezone=pytz.UTC)
else:
start_time = start_time.astimezone(pytz.UTC)
print(f"[MQTT] Start time: {start_time}")

if timestamp >= start_time:
print(f"Accepted tag: {epc} at {timestamp.isoformat()} for session {session.id}")
ScannedTag.objects.create(epc=epc, timestamp=timestamp, scan_session=session)
else:
print(f"Ignored tag before session start: {epc} at {timestamp}")
else:
print(f"Ignored tag, no active scan session: {epc} at {timestamp}")

except Exception as e:
print(f" Error in on_message: {e}")

def start_mqtt():
global is_mqtt_connected
client.on_connect = on_connect
client.on_message = on_message
# if not is_mqtt_connected:
print("Connecting MQTT...")
client.connect(MQTT_BROKER, MQTT_PORT, 60)
clear_retained_message()   # clear stale tag before listening
client.loop_start()
is_mqtt_connected = True
print("[MQTT] Loop started and subscribed.")
# else:
#     print("[MQTT] Already connected.")
< /code>
Теперь пример результата, который я получаю после запуска, выглядит следующим образом: < /p>
[MQTT] Start time: 2025-08-18 07:35:49.246005+00:00
[⛔️] Ignored tag before session start: 504C313235342F3030313138 at 2025-08-18 07:35:22.421264+00:00
[MQTT] Start time: 2025-08-18 07:35:49.246005+00:00
[⛔️] Ignored tag before session start: 504C313235342F3030313236 at 2025-08-18 07:35:22.421628+00:00
[MQTT] Start time: 2025-08-18 07:35:49.246005+00:00
[⛔️] Ignored tag before session start: 504C313235342F3030313132 at 2025-08-18 07:35:22.671264+00:00
[MQTT] Start time: 2025-08-18 07:35:49.246005+00:00
[⛔️] Ignored tag before session start: 504C313235342F3030313231 at 2025-08-18 07:35:22.921329+00:00
[MQTT] Start time: 2025-08-18 07:35:49.246005+00:00
Когда время начала составляет 49 секунд, а сеанс чистый, то почему я получаю теги в 22 секунды?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ean-sessio
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»