diff --git a/events.py b/events.py
new file mode 100644
index 0000000..039c799
--- /dev/null
+++ b/events.py
@@ -0,0 +1,74 @@
+import requests
+from xml.etree import ElementTree as ET
+import urllib3
+
+from passwords import *
+
+urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+
+
+# From /html/en_EN/en_EN.js localeStrings
+eventStrings = {
+ 1022: 'Denied Access{6} Card Not Found {3}',
+ 1023: 'Denied Access{6} Access PIN Not Found {3}',
+ 2020: 'Granted Access{6} {2}',
+ 2021: 'Granted Access{6} Extended Time {2}',
+ 2024: 'Denied Access{6} Schedule {2}',
+ 2029: 'Denied Access{6} Wrong PIN {2}',
+ 2036: 'Denied Access{6} Card Expired {2}',
+ 2042: 'Denied Access{6} PIN Lockout {2}',
+ 2043: 'Denied Access{6} Unassigned Card {3}',
+ 2044: 'Denied Access{6} Unassigned Access PIN {3}',
+ 2046: 'Denied Access - PIN Expired {2}',
+ 4051: 'REX Switch Alarm',
+ 7020: 'Time Set to: {5}',
+ 12031: 'Granted Access{6} Manual',
+ 12032: 'Door Unlocked',
+ 12033: 'Door Locked',
+ 4034: 'Alarm Acknowledged',
+ 4035: 'Door Locked-Scheduled',
+ 4036: 'Door Unlocked-Scheduled',
+ 4041: 'Door Forced Alarm',
+ 4042: 'Door Held Alarm',
+ 4043: 'Tamper Switch Alarm',
+ 4044: 'AC Failure',
+ 4045: 'Battery Failure',
+}
+
+def doRequest(xml):
+ r = requests.get(
+ 'https://172.18.51.11/cgi-bin/vertx_xml.cgi',
+ params={'XML': b'' + xml},
+ auth=requests.auth.HTTPDigestAuth(DOOR_USERNAME, DOOR_PASSWORD),
+ verify=False)
+ return ET.XML(r.text)
+
+
+#
+
+#
+
+XML = ET.Element("VertXMessage")
+ET.SubElement(XML, "hid:EventMessages", attrib={"action": "LR"})
+xml = doRequest(ET.tostring(XML))
+print(xml[0].attrib)
+
+XML = ET.Element("VertXMessage")
+ET.SubElement(XML, "hid:EventMessages",
+ attrib={"action": "LR",
+ "recordCount": "1000",
+ "historyRecordMarker": xml[0].attrib["historyRecordMarker"],
+ "historyTimestamp": xml[0].attrib["historyTimestamp"]})
+xml = doRequest(ET.tostring(XML))
+for event in xml[0]:
+ ET.dump(event)
+ att = event.attrib
+ eventType = int(att["eventType"])
+ print(att["timestamp"], eventStrings[eventType].format(
+ 'ios-' + att.get('ioState', ''),
+ 'status-' + att.get('commandStatus', ''),
+ att.get('forename', '') + " " + att.get('surname', ''),
+ att.get('rawCardNumber', ''),
+ att.get('oldTime', ''),
+ att.get('newTime', ''),
+ "IN" if att.get("readerAddress", '') == '0' else "OUT"))