fixed single

This commit is contained in:
Kai Kriegel 2022-06-16 19:50:24 +02:00
parent 59210d1f34
commit 7bca060dab
3 changed files with 26 additions and 20 deletions

View File

@ -93,7 +93,7 @@ async def connect_with_fabfire_initial(host, port, uid):
return auth, response.challenge return auth, response.challenge
else: else:
logging.error(f"Auth failed: {response.failed.code}, additional info: {response.failed.additionalData}") logging.error(f"Auth failed: {response.failed.code}, additional info: {response.failed.additionalData}")
return None return None, None
async def connect_with_fabfire_step(auth, msg): async def connect_with_fabfire_step(auth, msg):
@ -106,4 +106,4 @@ async def connect_with_fabfire_step(auth, msg):
return response.successful.additionalData, response.successful.session # dont care, message, we are done return response.successful.additionalData, response.successful.session # dont care, message, we are done
else: else:
logging.error(f"Auth failed: {response.failed.code}, additional info: {response.failed.additionalData}") logging.error(f"Auth failed: {response.failed.code}, additional info: {response.failed.additionalData}")
return None return None, None

2
schema

@ -1 +1 @@
Subproject commit 18ed9c2ae6a221f57d19e255165c7ebc4508e9af Subproject commit 19f20f5154f0eced6288ff56cac840025ee51da1

View File

@ -1,33 +1,35 @@
import asyncio import asyncio
import logging import logging
import os
from asyncio_mqtt import Client from asyncio_mqtt import Client
import json import json
import fabapi import fabapi
from timer import Timer from timer import Timer
BFFHD_HOST = "127.0.0.1" BFFHD_HOST = "localhost"
MQTT_HOST = "127.0.0.1" MQTT_HOST = "127.0.0.1"
MACHINE_URN = "" MACHINE_URN = "urn:fabaccess:resource:MachineA2"
READER_ID = "" READER_ID = "111"
async def main():
done = False
auth_cap = None auth_cap = None
session = None session = None
msg = None
async def main():
global auth_cap
global session
async with Client(MQTT_HOST) as client: async with Client(MQTT_HOST) as client:
await client.publish("/cmnd/reader", payload='{"Cmd":"haltPICC"}', qos=2, retain=False) await client.publish(f"/cmnd/reader/{READER_ID}", payload='{"Cmd":"haltPICC"}', qos=2, retain=False)
await client.publish("/cmnd/reader", payload='{"Cmd": "message", "MssgID": 0, "AddnTxt":" Karte auflegen"}', qos=2, retain=False) await client.publish(f"/cmnd/reader/{READER_ID}", payload='{"Cmd": "message", "MssgID": 0, "AddnTxt":" Karte auflegen"}', qos=2, retain=False)
async with client.filtered_messages(f"/rfid_reader/{READER_ID}") as messages: async with client.filtered_messages(f"/rfid_reader/{READER_ID}") as messages:
await client.subscribe("/rfid_reader/#") await client.subscribe("/rfid_reader/#")
logging.info(f"Connected to reader {READER_ID} on MQTT Broker {MQTT_HOST}")
async for message in messages: async for message in messages:
response_for_reader = None response_for_reader = None
if not auth_cap: if not auth_cap:
timeout_timer = Timer(10, lambda: handle_timeout(client)) timeout_timer = Timer(2, lambda: handle_timeout(client))
auth_cap, response_for_reader = await fabapi.connect_with_fabfire_initial( auth_cap, response_for_reader = await fabapi.connect_with_fabfire_initial(
BFFHD_HOST, 59961, message.payload) BFFHD_HOST, 59661, message.payload)
elif not session: elif not session:
response_for_reader, session = await fabapi.connect_with_fabfire_step(auth_cap, response_for_reader, session = await fabapi.connect_with_fabfire_step(auth_cap,
message.payload) message.payload)
@ -66,13 +68,17 @@ async def main():
if response_for_reader: if response_for_reader:
await client.publish(f"/cmnd/reader/{READER_ID}", payload=response_for_reader, qos=2, retain=False) await client.publish(f"/cmnd/reader/{READER_ID}", payload=response_for_reader, qos=2, retain=False)
await client.publish("/cmnd/reader", payload=msg, qos=2, retain=False) async def handle_timeout(client):
global auth_cap
async def handle_timeout(client, reader_id): global session
await client.publish(f"/cmnd/reader/{reader_id}", payload='{"Cmd":"haltPICC"}', qos=2, await client.publish(f"/cmnd/reader/{READER_ID}", payload='{"Cmd":"haltPICC"}', qos=2,
retain=False) retain=False)
logging.critical(f"authentication timed out on reader {reader_id}") logging.critical(f"authentication timed out on reader {READER_ID}")
auth_cap = None
session = None
if __name__ == "__main__": if __name__ == "__main__":
LOGLEVEL = os.environ.get('LOGLEVEL', 'INFO').upper()
logging.basicConfig(level=LOGLEVEL)
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
loop.run_until_complete(main()) loop.run_until_complete(main())