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"))