diff --git a/bin/launch_webadmin b/bin/launch_webadmin index 13a2a12..40ec4d9 100755 --- a/bin/launch_webadmin +++ b/bin/launch_webadmin @@ -6,10 +6,11 @@ from imaginaerraum_door_admin.webapp import create_application parser = argparse.ArgumentParser() parser.add_argument("--token_file", default="/etc/door_tokens", help="path to the file with door tokens and users") +parser.add_argument("--nfc_socket", default="/tmp/nfc.sock", help="socket for handling NFC reader commands") parser.add_argument("--template_folder", default="templates", help="path to Flask templates folder") parser.add_argument("--static_folder", default="static", help="path to Flask static folder") parser.add_argument("--mqtt_host", default="10.10.21.2", help="IP address of MQTT broker") -parser.add_argument("--port", default=5000, help="Port for running the Flask server") +parser.add_argument("--port", default=80, help="Port for running the Flask server") parser.add_argument("--mail_server", default="smtp.googlemail.com", help="email server for sending security messages") parser.add_argument("--mail_port", default=465, help="port for security email server") parser.add_argument("--mail_use_tls", default=False, help="use TLS for security emails") diff --git a/imaginaerraum_door_admin/door_handle.py b/imaginaerraum_door_admin/door_handle.py index 7554b5e..a77d35e 100644 --- a/imaginaerraum_door_admin/door_handle.py +++ b/imaginaerraum_door_admin/door_handle.py @@ -1,9 +1,10 @@ import paho.mqtt.client as mqtt +import socket from pathlib import Path class DoorHandle: - def __init__(self, token_file, mqtt_host, mqtt_port=1883): + def __init__(self, token_file, mqtt_host, mqtt_port=1883, nfc_socket='/tmp/nfc.sock'): self.state = None self.encoder_position = None @@ -19,6 +20,13 @@ class DoorHandle: self.mqtt_client.connect_async(host=mqtt_host, port=mqtt_port) self.mqtt_client.loop_start() + self.nfc_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + try: + self.nfc_sock.connect(nfc_socket) + except Exception as e: + print(f"Could not connect to NFC socket at {nfc_socket}. Exception: {e}") + #raise + self.data_fields = ['name', 'organization', 'email', 'valid_thru'] # The callback for when the client receives a CONNACK response from the server. @@ -31,7 +39,7 @@ class DoorHandle: # The callback for when a PUBLISH message is received from the server. def on_message(self, client, userdata, msg): - print(msg.topic + " " + str(msg.payload)) + #print(msg.topic + " " + str(msg.payload)) if msg.topic == 'door/state/value': self.state = msg.payload.decode() elif msg.topic == 'door/position/value': @@ -70,8 +78,16 @@ class DoorHandle: output += '|' output += data[key] if data[key] else '' output += '\n' + # write new tokens to file and trigger reload with open(self.token_file, 'w') as f: f.write(output) + self.nfc_sock.send(b'rld\n') + + def open_door(self): + self.nfc_sock.send(b'open\n') + + def close_door(self): + self.nfc_sock.send(b'close\n') def get_most_recent_token(self): # read last invalid token from logfile diff --git a/imaginaerraum_door_admin/templates/base.html b/imaginaerraum_door_admin/templates/base.html index 19c01e7..9817a93 100644 --- a/imaginaerraum_door_admin/templates/base.html +++ b/imaginaerraum_door_admin/templates/base.html @@ -6,6 +6,8 @@