IntroductionAPI's Introduction This API uses HTTP protocol for data exchange - REST architecture. Each command is a HTTP POST with Content-Type set as application/json and an unique URL. Parameters and returns are preferably JSON, except when mentioned otherwise. e.g.: The command login has the URL: http://192.168.0.129/login.fcgi and the following parameters: { login: 'admin', password: ádmin' }Every command requires a valid session, except session_is_valid and login. The requisition's body needs UTF-8 encoding. In case there are no special characters (ASCII) been sent, the requisition's body does not need to be encoded.Windows systems use Windows-1252 (A.K.A CP-1252) encoding by default. Please verify how to use the correct encoding.
Running the examples
The examples in this document are written in JavaScript, utilizing the Jquery library. To run the examples, access the IP address of the device in any web browser, and use its developer tools to send the requisitions. Every example shown here can be verified by copying the code and pasting it into the developer tools console.
A complete command example
The code below is a functional example that can be used for the familiarization with the browser's developer tools. $.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } }); Please verify the login documentation for more details.
Running the examples in other languages
Below are some examples that illustrate how the API can be used with other programming languages. In this example, the IP address 192.168.0.129, when shown, represents the IP address of the device. Attention: the option HTTP "Expect: 100- continue" must be disabled, otherwise, the function calls will not work. The only example that explicitly does that, is the one in C#. Please verify the need to disable this option in the language of your preference.procedure TFrmTTWebserviceTester.Button1Click(Sender: TObject); var lJSO : ISuperObject; lRequest: TStringStream; lResponse: String; begin lJSO := SO('{"login": "admin", "password": "admin"}'); lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8); try IdHTTP.Request.ContentType := 'application/json'; IdHTTP.Request.Charset := 'utf-8'; try lResponse := IdHTTP.Post('http://192.168.0.129/login.fcgi', lRequest); ShowMessage(lResponse); except on E: Exception do ShowMessage('Error on request:'#13#10 + E.Message); end; finally lRequest.Free; end; lJSO := nil; end;This example in Delphi utilizes the open source library Indy.try { URL url = new URL("http://192.168.0.129/login.fcgi"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "application/json"); conn.setDoInput(true); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); os.write("{\"login\":\"admin\",\"password\":\"admin\"}".getBytes()); if (conn.getResponseCode() != 200) { BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream())); String output, result = ""; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { result += output; } throw new RuntimeException("Failed : " + result); } BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } catch (Exception e) { e.printStackTrace(); }System.Net.ServicePointManager.Expect100Continue = false; try { var request = (HttpWebRequest)WebRequest.Create("http://192.168.0.129/login.fcgi"); request.ContentType = "application/json"; request.Method = "POST"; using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write("{\"login\":\"admin\",\"password\":\"admin\"}"); } var response = (HttpWebResponse)request.GetResponse(); using (var streamReader = new StreamReader(response.GetResponseStream())) { Console.WriteLine(streamReader.ReadToEnd()); } } catch (WebException e) { using (WebResponse response = e.Response) { HttpWebResponse httpResponse = (HttpWebResponse)response; Console.WriteLine("Error code: {0}", httpResponse.StatusCode); using (Stream data = response.GetResponseStream()) using (var reader = new StreamReader(data)) { string text = reader.ReadToEnd(); Console.WriteLine(text); } } }
LoginCreates a sessionlogin Creates the session that is required by all other commands, except session_is_valid. The HTTP method POST is used to send data. loginstringThe default value is admin.passwordstringThe default value is admin.sessionstringCode of the initialized session.$.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } });
Session's validity verificationCommand used to verify the validity of a sessionlogin Verifies the validity of the session. this call does not posses any parameter. session_is_validbooleanIndicates if the session is valid.$.ajax({ url: "/session_is_valid.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Change login's informationCommand that changes the login's username and/or passwordlogin Changes the username and/or password used in the device's login. This call has no return. userstring Username used in the device's login. passwordstring User's password used in the device's login. Must be a simple text, without Hash. $.ajax({ url: "/change_login.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ user: "WalterWhite", password: "Heisenberg" }) });
LogoutCommand that finalizes a sessionlogout Finalizes the session. The HTTP method POST is utilized to send data. This call has no return. $.ajax({ url: "/logout.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
ObjectsDescription of all objectsusersRepresents an user.id64 bits integerUnique identifier of an user. Required field.registrationstringText representing the registration of an user. Required field.namestringText that contains the name of an user. Required field.passwordstringString that represents the password of an user after the Hashing process. This parameter cannot be defined by a simple text typed by the user. The text must be Hashed through the command user_hash_password. Additionally, the recovery of this parameter through the command load_objects returns the Hashed password.saltstringString representing the Salt used to calculate the Hash of the password of an user.templatesBiometric data of user's fingerprints (referred from here on as biometries)id64 bits integerUnique identifier of a biometry. Required field.finger_positionintegerReserved field.finger_typeintegerType of biometry: ordinary finger(value 0) or panic finger (value 1). Required field.templateblobBinary data that represents a biometric template. Required field.user_id64 bits integerUnique identifier of an user to whom this biometry belongs. Required field.cardsRepresents the proximity identification cards.id64 bits integerUnique identifier of a identification card. Required field.value64 bits unsigned integercard's number. Required field.This is an unique value. There cannot be two cards with the same value in the database.user_id64 bits integerUnique identifier of an user to whom this identification card belongs. Required field.alarm_zonesAlarm zones' data.zoneintegerUnique identifier of an alarm zone. Required field.enabledintegerIndicates whether the alarm of this zone is enabled (value 1) or not (value 0). Required field.active_levelintegerIndicates whether the alarm of this zone is configured as 'active high' (1) or 'active low' (0). Required field.alarm_delayintegerTime delay before the alarm is activated once a signal has been detected in this alarm zone. Required field.user_rolesrelates users to privilege levels. Only Includes users that have any privilege level other than the default.user_id64 bits integeruser id. Required field.roleinteger If this field is set to 1, this user is an administrator. Required field.groupsRepresents the access' groups. In the device's built-in and web interfaces, this object is referred as a department.id64 bits integerUnique identifier of the access' group. Required field.nameintegerName of the access' group. Required field.user_groupsRelates users to access' groups.user_id64 bits integeruser's id. Required field.group_id64 bits integerid of the access' group. Required field.identification_rulesRepresents the identification's scripts.id64 bits integerUnique identifier of the identification's scripts in the database. Required field.identificationstringName of the identification's scripts.has_one_to_nintegerReserved field.parametersstringParameters of the identification's scripts.user_identification_rulesRestricts the identification's scripts users can use. If the user is not in this table, they can use all identification's scripts (default behaviour). In case the user is on the table, they can only use the scripts associated to they. The pair user_id, identification_rule_id is unique. This implies that cannot exist more than one object in the table having the same values in these fields at the same time.user_id64 bits integerUnique identifier of the user. Required field.identification_rule_id64 bits integerid of the identification's scripts in the database. Required field.typeintegerReserved field.group_identification_rulesRestricts the identification's scripts access' groups can use. If the access' group is not in this table, it can use all identification's scripts (default behaviour). In case the access' group is on the table, it can only use the scripts associated to it. The pair group_id, identification_rule_id is unique. This implies that cannot exist more than one object in the table having the same values in these fields at the same time.group_id64 bits integerUnique identifier of the access' group. Required field.identification_rule_id64 bits integerid of the identification's scripts in the database. Required field.typeintegerReserved field.actionsRepresents the action's scripts.id64 bits integerUnique identifier of the action's script in the database.namestringAction's descriptive name. Required field.actionstringFile name of the action's script. Required field.parametersstringParameters of the action's script. Required field.run_atintegerThere are 3 possible values. Case 0, the script will be executed in the device in which the identification occurred. Case 1, the script will be executed in all connected devices. Case 2, the script will be executed in the identification's server. Required field.validationsRepresents the validation's scripts of an user access.id64 bits integerUnique identifier of the validation's script in the database.namestringValidation's descriptive name. Required field.validationstringFile name of the validation's script. Required field.parametersstringParameters of the validation's script. Required field.areasRepresents areas that are going to have its access controlled.id64 bits integerUnique identifier of an area.namestringArea's descriptive name. Required field.portalsRepresents portals. A portal has two areas and an unique direction.id64 bits integerUnique identifier of a portal.namestringPortal's descriptive name Required field.area_from_id64 bits integerSource area's id. Required field.area_to_id64 bits integerDestination area'sid. Required field.portal_actionsRelates portals and actions.portal_id64 bits integerPortal'sid. Required field.action_id64 bits integerAction's id. Required field.access_rulesRepresents the access' rules. The rules' evaluation happens in the following order: When there is an access' attempt, all blocking rules are evaluated before the liberation rules. In case there are one or more blocking rules with matched criteria, their actions will be executed. The liberation rules will only be evaluated if none of the blocking rules have matched criteria, and if the liberation rules have matched criteria, their actions will be executed. id64 bits integerid of the access' rule.namestringDescriptive name of the access' rule. Required field.typeintegerAccess' rule type: 0 for a blocking rule, 1 for a liberation rule. Required field.priorityintegerReserved field.Required field.portal_access_rulesRelates portals and access' rules.portal_id64 bits integerPortal's id. Required field.access_rule_id64 bits integerid of the access' rule. Required field.group_access_rulesRelates groups and access' rules.portal_id64 bits integerGroup's id. Required field.access_rule_id64 bits integerid of the access' rule. Required field.access_rules_actionsRelates actions and Access' rules.access_rule_id64 bits integerid of the access' rules. Required field.action_id64 bits integerAction's id. Required field.access_rules_validationsRelates actions and access' rules.access_rule_id64 bits integerid of the access' rule. Required field.validation_id64 bits integerid of the validation script in the database. Required field.time_zonesSet of intervals that represents a time criterion for an access' rule.id64 bits integerid of the time zone. Required field.namestringDescriptive name of the time zone. Required field.time_spansOne of the intervals that represents a time criterion for an access' rule.id64 bits integerInterval's id. Required field.namestringInterval's descriptive name. Required field.time_zone_id64 bits integerTime zone to which this interval belongs. Required field.startintegerInterval's start time. It is stored in seconds beginning at 00:00 am of the day. e.g.: 01:00 am is 3600, as 1*60*60 = 3600. 01:00 pm is 46800, as 13*60*60 = 46800. Required field.endintegerInterval's end time. It is stored in seconds beginning at 00:00 am of the day. Required field.sunintegerIndicates if the interval is active Sundays. Required field.monintegerIndicates if the interval is active Mondays. Required field.tueintegerIndicates if the interval is active Tuesdays. Required field.wedintegerIndicates if the interval is active Wednesdays. Required field.thuintegerIndicates if the interval is active Thursdays. Required field.friintegerIndicates if the interval is active Fridays. Required field.satintegerIndicates if the interval is active Saturdays. Required field.alarm_zone_time_zonesRelates Alarm zones and Time zones.alarm_zone_id64 bits integerid of the alarm zone. Required field.time_zone_id64 bits integerid of the time zone. Required field.access_rule_time_zonesRelates access' rules and time zones.access_rule_id64 bits integerid of the access' rule. Required field.time_zone_id64 bits integerid of the time zone. Required field.portal_rulesRepresents the portal's rules. Given that a person was authorized by an access' rule, they still have to be authorized by the portal's rules. The portal's rules are enforced upon all that try to cross the portal. For instance, an user authorized by an access' rule still needs to satisfy the rules for each specific portal in order to cross them. access_rule_id64 bits integerid of the access' rule. Required field.time_zone_id64 bits integerid of the time zone. Required field.portal_portal_rulesRelates portals and portal's rules.portal_id64 bits integerPortal's id. Required field.portal_rules_id64 bits integerid of the portal's rule. Required field.portal_rules_groupsRelates portal's rules and groups.portal_rules_id64 bits integerid of the portal's rule. Required field.group_id64 bits integerGroup's id. Required field.portal_rules_usersRelates portal's rules and users.portal_rules_id64 bits integerid of the portal's rule. Required field.user_id64 bits integeruser's id. Required field.portal_rules_actionsRelates portal's rules and actions.portal_rules_id64 bits integerid of the portal's rule. Required field.action_id64 bits integeraction's id. Required field.portal_rules_validationsRelates portal's rules and access' validation scripts.portal_rules_id64 bits integerid of the portal's rule. Required field.validation_id64 bits integerid of the validation script in the database.Required field.portal_rules_time_zonesRelates portal's rules and time zones.portal_rules_id64 bits integerid of portal's rule. Required field.action_id64 bits integerid of the time zone. Required field.access_logsDevice access' logs.id64 bits integerid of the access' log.timeintegerEvent's time in Unix Timestamp.eventintegerType of event. It can be: 1 - invalid device 2 - identification rule's invalid parameters 3 - not identified 4 - pending identification 3 - identification timeout 5 - not authorized 6 - authorized 7 - pending accessdevice_id64 bits integerid of the device in which the event happened.identifier_idintegerid of the identification's module that recorded the event.user_idintegerid of the user involved in the event.portal_idintegerid of the portal involved in the event.identification_rule_idintegerid of the identification rule involved in the eventaccess_log_access_rulesAccess' rules of an access' log. The pair access_log_id, access_rule_id is unique. In other words, There cannot be more than one element with the same pair at the same time.access_log_id64 bits integerid of the access' log. Required field.access_rule_id64 bits integerid of access' rule. Required field.access_log_portal_rulesPortal's rules of an access' log. The pair access_log_id, portal_rule_id is unique. In other words, There cannot be more than one element with the same pair at the same time.access_log_id64 bits integerid of the access' log. Required field.portal_rule_id64 bits integerid of the portal's rule. Required field.alarm_logsDevice alarm's logs.id64 bits integerid of the alarm's log. Required field.eventintegerType of event. It can be: 1 - Alarm activated 2 - Alarm deactivated Required field.causeintegerCause of the event. It can be: 1 - Alarm zone 1 2 - Alarm zone 2 3 - Alarm zone 3 4 - Alarm zone 4 5 - Alarm zone 5 6 - Door opened 7 - Burglary 8 - Panic finger 9 - Tamper Required field.user_id64 bits integerid of the portal's rule.timeintegerEvent's time in Unix Timestamp.Required field.devicesRepresents the devices registered in this device. This is used for the communication between devices through the network.id64 bits integerDevice's id. Required field.namestringDevice's name. Required field.ipstringIP address of the device. e.g.: 192.168.0.129 or example.controlid.com Required field.public_keystringDevice's public cryptographic key used for the authentication between devices. Required field.device_identification_rulesRelates devices and identification rules. The pair device_id, identification_rule_id is unique. In other words, There cannot be more than one element with the same pair at the same time.device_id64 bits integerDevice's id. Required field.identification_rule_id64 bits integerid of the identification rule. Required field.device_actionsRelates devices and actions. The pair device_id, action_id is unique. In other words, There cannot be more than one element with the same pair at the same time.device_id64 bits integerDevice's id. Required field.action_id64 bits integerAction's id. Required field.
Create ObjectsCreates objects of the type specifiedcreate_objects Creates objects of the type specified. HTTP POST method is used. objectstring Type of object to be created. Please, refer to objects for the entire list of available objects. valuesarray of JSON objects Each element must be an JSON object representing an object to be created. Each key must be a valid field of the object and the values must be of the appropriate type. All JSON objects must have the same fields. ids64 bits integer arrayids of the objects created.$.ajax({ url: "/create_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: [{name: 'Walter White', password: 'Heisenberg'}] }) });
Load ObjectsLoads all objects of the type specifiedload_objects Loads all objects of type specified. HTTP POST method is used. objectstring Type of the object to be created. Please, refer to objects for an exhaustive list of the types of available objects. fields (optional)strings' array Fields of the object that are going to be received. If this parameter is not present, all fields are sent. limit (optional)integer Maximum number of objects to be acquired. offset (optional)integer Skips the first offset objects that would have been acquired. Useful for a paging implementation. The parameter limit must defined. Otherwise, offset will be ignored. order (optional)strings' arrays Which fields must be used to order the objects. If any of the elements have the special value ascending or descending, the ordering will be ascending or descending, respectively. If multiple ascending or descending values are defined, only the last definition will be considered. In case the specified field must be from a different object than the one been loaded, a JSON object can be passed with the following parameters: { object: 'object', field: 'field' } Where object and field are the object and field by which the ordering is desired. where (optional)JSON object What objects are going to be retrieved. Through this parameter, it is possible to specify filters. Each key must be the type of object to be retrieved and each value must be a JSON object. e.g.: where: { users: {} } The key of each JSON object must be a field of the object and the value is the filter used. e.g.: where: { users: { id: 1 } } In the above example, only users that have an id equal to 1 (one) will be filtered. Note that the type of the object's attribute (integer, string, etc.) must be of the same type been used as filter.
Comparison Operators
The filter can also specify one of the following comparison operators:
  • The equal to operator ('=', '==', 'LIKE'). This is the default operator and does not need to be specified.
  • The not equal operator ('!=', '<>', 'NOT LIKE').
  • The greater than operator('>').
  • The less than operator ('<').
  • The greater than or equal to operator ('>=').
  • The less than or equal to operator ('<=').
  • The in operator ('IN').
  • The not in operator ('NOT IN').
Operators can be defined using a JSON object in which the key is the operator and the value is the value of the restriction. e.g.: where: { users: { id: {"!=": 1} } } In the above example, only users that poss an id different than 1 will be retrieved. It is also possible to define more than one restriction. e.g.: where: { users: { id: {">=": 1, "<=": 2} } } In the above example, only users that posses an id greater than or equal to 1 (one) and less than or equal to 2 (two) will be retrieved.
OBJECT_NAMEJSON object's arrayEach JSON object represents a loaded object. OBJECT_NAME is the name of the loaded object.
$.ajax({ url: "/load_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users" }) });
Modify ObjectsModifies objects of the specified typemodify_objects Modifies objects of the specified type. HTTP POST method is used. objectstring Type of the object to be modified. Please, refer to objects for an exhaustive list of the available objects. valuesJSON object JSON object representing the object to be modified. Each key must be a valid field of the object and each value must be of the appropriate type. whereJSON object Please, refer to load_objects for a complete description of the parameter where. Only the same object can be used as a filter. changesintegerTotal number of changes.$.ajax({ url: "/modify_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: {name: 'Walter Hartwell White'}, where: { users: {name: 'Walter White'} } }) });
Destroy ObjectsDestroys objects of the specified typedestroy_objects Destroys objects of the specified type. HTTP POST method is used. objectstring Type of the object to be modified. Please, refer to objects for an exhaustive list of the available objects. whereJSON object Please, refer to load_objects for a complete description of the parameter where. Only the same object can be used as a filter. changesintegerTotal number of changes.$.ajax({ url: "/destroy_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", where: { users: {name: 'Walter White'} } }) });
Create Hash of a user's passwordCreates a Hash of a given user's passworduser_hash_password Given a password in plain text, returns a hash that represents a password of the user and the salt that was used to generate it. HTTP POST method is used. Notice that if this command is called twice on the same plain text password, the resulting Hash is not going to be same, because the salt generated is random and will be different each time this command is called. passwordstring Password in plain text. passwordstringHash of the given password.saltstringSalt utilized to generate the password's hash.$.ajax({ url: "/user_hash_password.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ password: "abc123", }) });
Get an user's imageGets an image of an user specified by iduser_get_image Gets an image of an user specified by id. HTTP method used is irrelevant. The specified id can be passed through the Query String or the request body. user_id64 bits integer user's id. image/jpegUser's image.$.ajax({ url: "/user_get_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({user_id: 123}) });
Set an user's imageSet's an user's image specified by iduser_set_image Sets an user's image specified by id. HTTP POST method is used. Different from most commands in this API, in this command the Content-Type has to be application/octet-stream. Therefore, the image is passed in the Content of the POST method, and the user's id is passed in the Query String. Attention: The Content-Type of this command is application/octet-stream. This command has no return. user_id64 bits integer User's id. This parameter is passed through the Query String$.ajax({ url: "/user_set_image.fcgi?user_id=123&session=" + session, type: 'POST', contentType: 'application/octet-stream', data: [Image bytes] });
Destroy an user's imageDestroys an user's image specified by the iduser_destroy_image Destroys an user's image specified by the id. HTTP POST method is used. This command has no return. user_id64 bits integer user's id. $.ajax({ url: "/user_destroy_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ user_id: "123" }) });
Read GPIO stateReads the state of a processor's general purpose pingpio_state Reads the state of a GPIO specified by the parameter gpio. gpiointeger General purpose pin's (GPIO) number enabledinteger Indicates if the GPIO is enabled (1) or disabled (0). Attempting to read or write from/to a disabled GPIO has an undefined effect. ininteger Indicates if the GPIO is defined as an input (1) or output (0) pin. pinstring GPIO's name. idleinteger/type> GPIO's value when idle. pullupinteger Indicates if the GPIO's pullup resistor is enabled (1) or disabled (0). valueinteger GPIO's current value. notifyinteger Indicates if the access' software will be notified of any variation in the GPIO's state (1) or not (0). notifiedinteger Indicates how many times the GPIO notified the access' software of a variation. $.ajax({ url: "/gpio_state.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ gpio: 1 }) });
Reload LED's configurationNotifies the access' application to reload the configuration of the device's LEDled_rgb_refresh Once the LED's configuration has been altered, notifies the access' application to refresh it. This command has no return. $.ajax({ url: "/led_rgb_refresh.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Read System's InformationReads System's information and statisticssystem_information Reads the following system's statistics: uptime, device's date and time, used and total RAM and flash memory, license, network information (IP address, network mask and default gateway), device's serial number, firmware's version and mode of operation (online or offline). Returns a JSON object containing the following keys: uptimeJSON object Indicates the time during which the device is in operation. Contains the following keys: daysinteger uptime's days. hoursinteger uptime's hours (values range from 0 to 23). minutesinteger uptime's minutes (values range from 0 to 59). secondsinteger uptime's seconds (values range from 0 to 59). timeinteger Device's date and time in Unix Timestamp. memoryJSON object Device's memory information. diskJSON object Device's non volatile memory information. Contains the following keys: freeinteger Free memory (in bytes). totalinteger Total memory size (in bytes). ramJSON object Device's volatile memory information. Contains the following keys: freeinteger Free memory (in bytes). totalinteger Total memory size (in bytes). licenseJSON object License's information. Contains the following keys: usersinteger Maximum number of users allowed by the license in use. deviceinteger Maximum number of devices that can be controlled by this device according to the license in use. typestring License type. networkJSON object Network information. Contains the following keys: macstring Device's physical address (MAC). ipstring Device's IP address. netmaskstring Device's network mask (netmask). gatewaystring Device's default gateway. serialstring Device's serial number. versionstring Firmware's version. onlineBoolean Indicates if the device is in online mode. $.ajax({ url: "/system_information.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Set network configurationSets the device's network configurationset_system_network Sets the device's network configuration. HTTP POST method is used. This command has no return. ipstring Text that represents the device's IP address. e.g.: "192.168.0.33". netmaskstring Text that represents the device's network mask. e.g.: "255.255.255.0". gatewaystring Text that represents the device's gateway. e.g.: "192.168.0.1". $.ajax({ url: "/set_system_network.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ ip: "192.168.0.33", netmask: "255.255.255.0", gateway: "192.168.0.1" }) });
Set date and timeSets the system's date and timeset_system_time Sets the system's date and time. HTTP POST method is used. This command has no return. dayinteger Value representing the day of the month. monthinteger Value representing the month (values range from 1 to 12). yearinteger Value representing the year. e.g.: 2014 hourinteger Value representing the hour (values range from 0 to 23). minuteinteger Value representing the minutes (values range from 0 to 59). secondinteger Value representing the seconds (values range from 0 to 59). $.ajax({ url: "/set_system_time.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ day: 10, month: 12, year: 1983, hour: 21, minute: 30, second: 00 }) });
Factory resetRestores all system's settings to their original manufacturer valuesreset_to_factory_default Resets all system's settings to their original manufacturer values. Restores the device to its original system state by erasing all of the information stored on the device. This command has no return nor parameters. Attention: This command erases all data, including, but not limited to, users and network configurations. Also, resets all device's settings to its original manufacturer settings$.ajax({ url: "/reset_to_factory_default.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Remove AdministratorsRemoves all administrators from the devicedelete_admins Removes all administrators from the device. This command has no return nor parameters. $.ajax({ url: "/delete_admins.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Reboot in Update ModeReboots the device in Update modereboot_recovery Reboots the device in Update mode This command has no return nor parameters. $.ajax({ url: "/reboot_recovery.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
RebootReboots the devicereboot Reboots the device. This command has no return nor parameters. $.ajax({ url: "/reboot.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Execute ActionExecutes actions on the deviceexecute_actions Executes actions on the device. Currently, the only action available is door which opens one of the relays of the device. Refer to the example bellow on how to use it. HTTP POST method is used. This command has no return. actionsarray of JSON objects Each element of this array has 2 keys, both strings: action and parameters. action is an action to be executed and parameters are the action's parameters. $.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "door", parameters: "door=1" } ] }) });
IntroduçãoIntrodução à API Esta API usa o protocolo HTTP para a transferência de dados - arquitetura REST. Cada comando é uma chamada HTTP POST com Content-Type application/json e possui uma URL própria. Seus parâmetros e seus retornos são passados preferencialmente por JSON, exceto em menção contrária. Como exemplo, o comando login pode possuir a URL: http://192.168.0.129/login.fcgi e os seguintes parâmetros: { login: 'admin', password: 'admin' } Todos os comandos requerem uma sessão válida, exceto session_is_valid e login. O corpo da requisição deve possuir a codificação UTF-8. Caso os caracteres enviados não possuam nenhum caractere especial (ASCII), o corpo da requisição não precisa ser codificado.Por padrão, a codificação utilizada por sistemas Windows é a Windows-1252 (também conhecida como CP-1252). Verificar como utilizar a codificação correta.
Executando os Exemplos
Os exemplos dessa documentação são escritos em JavaScript, utilizando a biblioteca jQuery. Para testá-los, acesse o endereço IP do equipamento em um navegador web e use as ferramentas do desenvolvedor (developer tools) deste para realizar requisições. Todos os exemplos fornecidos podem ser verificados copiando seus códigos e colando no console das ferramentas de desenvolvimento.
Um exemplo completo de um comando
No código abaixo há um primeiro exemplo funcional que pode ser usado para a familiarização com as ferramentas do desenvolvedor - developer tools - do navegador. $.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } }); Para mais detalhes sobre o login, favor verificar a sua documentação aqui.
Executando os Exemplos em Outras Linguagens
Seguem abaixo alguns exemplos que ilustram como a API pode ser usada em outras linguagens de programação. Nesses exemplos, o endereço 192.168.0.129, quando aparecer, representa o endereço IP do equipamento. Atenção: a opção HTTP "Expect: 100- continue" deve estar desabilitada para as chamadas funcionarem. O único dos exemplos abaixo que o faz explicitamente é o em C#. Por favor, verifique a necessidade de fazê-lo em sua linguagem de preferência.procedure TFrmTTWebserviceTester.Button1Click(Sender: TObject); var lJSO : ISuperObject; lRequest: TStringStream; lResponse: String; begin lJSO := SO('{"login": "admin", "password": "admin"}'); lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8); try IdHTTP.Request.ContentType := 'application/json'; IdHTTP.Request.Charset := 'utf-8'; try lResponse := IdHTTP.Post('http://192.168.0.129/login.fcgi', lRequest); ShowMessage(lResponse); except on E: Exception do ShowMessage('Error on request:'#13#10 + E.Message); end; finally lRequest.Free; end; lJSO := nil; end;Esse exemplo em Deplhi utiliza a biblioteca de código aberto Indy.try { URL url = new URL("http://192.168.0.129/login.fcgi"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "application/json"); conn.setDoInput(true); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); os.write("{\"login\":\"admin\",\"password\":\"admin\"}".getBytes()); if (conn.getResponseCode() != 200) { BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream())); String output, result = ""; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { result += output; } throw new RuntimeException("Failed : " + result); } BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } catch (Exception e) { e.printStackTrace(); }System.Net.ServicePointManager.Expect100Continue = false; try { var request = (HttpWebRequest)WebRequest.Create("http://192.168.0.129/login.fcgi"); request.ContentType = "application/json"; request.Method = "POST"; using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write("{\"login\":\"admin\",\"password\":\"admin\"}"); } var response = (HttpWebResponse)request.GetResponse(); using (var streamReader = new StreamReader(response.GetResponseStream())) { Console.WriteLine(streamReader.ReadToEnd()); } } catch (WebException e) { using (WebResponse response = e.Response) { HttpWebResponse httpResponse = (HttpWebResponse)response; Console.WriteLine("Error code: {0}", httpResponse.StatusCode); using (Stream data = response.GetResponseStream()) using (var reader = new StreamReader(data)) { string text = reader.ReadToEnd(); Console.WriteLine(text); } } }
LoginComando para criar uma sessãologin Cria a sessão, que é necessária para todos os outros comandos, exceto session_is_valid. O método HTTP usado para o envio dos dados é o POST. loginstringO valor padrão é admin.passwordstringO valor padrão é admin.sessionstringCódigo da sessão iniciada.$.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } });
Verificar a validade da sessãoComando para verificar a validade de uma sessãologin Verifica a validade da sessão. Essa chamada não possui parâmetros. session_is_validbooleanoIndica se a sessão é válida.$.ajax({ url: "/session_is_valid.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Alterar usuário e/ou senha de loginComando para alterar o usuário e/ou a senha de loginlogin Altera o usuário e/ou a senha utilizados para o login no equipamento. Essa chamada não retorna nada. userstring Nome do usuário a ser usado para o login no equipamento. passwordstring Senha do usuário a ser usada para o login no equipamento. Deve ser um texto simples, sem Hash. $.ajax({ url: "/change_login.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ user: "WalterWhite", password: "Heisenberg" }) });
LogoutComando para finalizar uma sessãologout Finaliza a sessão. O método HTTP usado para o envio dos dados é o POST. Essa chamada não retorna nada. $.ajax({ url: "/logout.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
ObjetosDescrição de todos os objetosusersRepresenta um usuário.idinteiro de 64 bitsIdentificador único de um usuário. Campo Obrigatório.registrationstringTexto representando o registro de um usuário. Campo Obrigatório.namestringTexto contendo o nome de um usuário. Campo Obrigatório.passwordstringString que representa a senha do usuário após o processo de Hash. Para definir esse parâmetro, portanto, não se deve usar o texto simples digitado pelo usuário: deve-se gerar seu Hash através do comando user_hash_password. Da mesma forma, a aquisição desse parâmetro através do comando load_objects retorna a senha após o Hash. saltstringString representando o Salt usado para calcular o Hash da senha do usuário.templatesDados biométricos das impressões digitais dos usuários (referidas a seguir como biometrias)idinteiro de 64 bitsIdentificador único de uma biometria. Campo Obrigatório.finger_positioninteiroCampo reservado.finger_typeinteiroTipo de biometria: dedo comum (valor 0) ou dedo de pânico (valor 1). Campo Obrigatório.templateblobDados binários representando um template biométrico. Campo Obrigatório.user_idinteiro de 64 bitsIdentificador único do usuário a quem essa biometria pretence. Campo Obrigatório.cardsRepresenta os cartões de identificação por proximidade.idinteiro de 64 bitsIdentificador único de uma cartão de identificação. Campo Obrigatório.valueinteiro sem sinal de 64 bitsNumeração do cartão. Campo Obrigatório.Esse valor é único, não podem existir dois cartões com mesmo value no banco de dados.user_idinteiro de 64 bitsIdentificador único do usuário ao qual pertence o cartão de identificação. Campo Obrigatório.alarm_zonesDados referentes às zonas de alarmes.zoneinteiroIdentificador único de uma zona de alarme. Campo Obrigatório.enabledinteiroIndica se a entrada de alarme referente à zona está habilitada (valor 1) ou não (valor 0). Campo Obrigatório.active_levelinteiroIndica se a entrada de alarme referente à zona esta configurada como 'ativo alto' (1) ou 'ativo baixo' (0). Campo Obrigatório.alarm_delayinteiroTempo de atraso no disparo do alarme uma vez que um sinal de alarme tenha sido detectado nesta zona. Campo Obrigatório.user_rolesRelaciona usuários a níveis de privilégio. Contém apenas usuários que tenham algum nível de privilégio diferente do padrão.user_idinteiro de 64 bitsid do usuário. Campo Obrigatório.roleinteiroSe este campo estiver definido como 1, o usuário é um administrador. Campo Obrigatório.groupsRepresenta os grupos de acesso. Nas interfaces nativa do equipamento e na interface web, esse tipo de objeto é referido por departamento.idinteiro de 64 bitsIdentificador único do grupo de acesso. Campo Obrigatório.nameinteiroNome do grupo de acesso. Campo Obrigatório.user_groupsRelaciona os usuários as grupos de acesso.user_idinteiro de 64 bitsid do usuário. Campo Obrigatório.group_idinteiro de 64 bitsid do grupo de acesso. Campo Obrigatório.identification_rulesRepresenta os scripts de identificação.idinteiro de 64 bitsIdentificador único do script de identificação no banco dedados. Campo Obrigatório.identificationstringNome do arquivo do script de identificação.has_one_to_ninteiroCampo reservado.parametersstringParâmetros do script de identificação.user_identification_rulesRestringe os scripts de identificação que os usuários podem usar. Caso o usuário não esteja nessa tabela, então ele(a) poderá usar todas os scripts de identificação (comportamento padrão). Caso o usuário esteja na tabela, ele(a) só poderá usar os scripts aos quais estiver associado(a). O par user_id e identification_rule_id é único, ou seja, não pode haver mais de um objeto nesta tabela com mesmos valores nesses campos ao mesmo tempo.user_idinteiro de 64 bitsIdentificador único do usuário. Campo Obrigatório.identification_rule_idinteiro de 64 bitsid do script de identificação no banco dedados. Campo Obrigatório.typeinteiroCampo reservado.group_identification_rulesRestringe os scripts de identificação que os grupos de acesso podem usar. Caso o grupo não esteja nessa tabela, então ele poderá usar todas os scripts de identificação (comportamento padrão). Caso o grupo esteja na tabela, ele só poderá usar os scripts aos quais que estiver associado. O par group_id e identification_rule_id é único, ou seja, não pode haver mais de um objeto nesta tabela com mesmos valores nesses campos ao mesmo tempo.group_idinteiro de 64 bitsIdentificador único do grupo de acesso. Campo Obrigatório.identification_rule_idinteiro de 64 bitsid do script de identificação no banco dedados. Campo Obrigatório.typeinteiroCampo reservado.actionsRepresenta os scripts de ação.idinteiro de 64 bitsIdentificador único do script de ação no banco de dados.namestringNome descritivo da ação. Campo Obrigatório.actionstringNome do arquivo do script de ação. Campo Obrigatório.parametersstringParâmetros do script de ação. Campo Obrigatório.run_atinteiroPode assumir 3 valores. Caso seja 0, o script é executado no equipamento que o usuário utilizou para a identifação. Caso seja 1, o script é executado em todos os equipamentos conectados. Caso seja 2, o script é executado no servidor de identifação. Campo Obrigatório.validationsRepresenta os scripts de validação do acesso dos usuários.idinteiro de 64 bitsIdentificador único do script de validação no banco de dados.namestringNome descritivo do script de validação. Campo Obrigatório.validationstringNome do arquivo do script de validação. Campo Obrigatório.parametersstringParâmetros do script de validação. Campo Obrigatório.areasRepresenta as áreas cujo acesso se deseja controlar.idinteiro de 64 bitsIdentificador único da área.namestringNome descritivo da área. Campo Obrigatório.portalsRepresenta os portais. Um portal liga duas áreas e tem uma única direção.idinteiro de 64 bitsIdentificador único do portal.namestringNome descritivo do portal. Campo Obrigatório.area_from_idinteiro de 64 bitsid da área de origem. Campo Obrigatório.area_to_idinteiro de 64 bitsid da área de destino. Campo Obrigatório.portal_actionsRelaciona portais e ações.portal_idinteiro de 64 bitsid do portal. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.access_rulesRepresenta as regras de acesso. A avaliação das regras de acesso acontece na seguinte ordem: Dada uma tentativa de acesso, todas as regras de bloqueio são avaliadas antes das regras de liberação. Caso uma ou mais regras de bloqueio tenham seus critérios atendidos, suas ações serão executadas. Apenas caso nenhuma das regras de bloqueio tenham seus critérios atendidos, as regras de liberação são avaliadas e suas ações são executadas caso seus critérios sejam atendidos. idinteiro de 64 bitsid da regra de acesso.namestringNome descritivo da regra de acesso. Campo Obrigatório.typeinteiroTipo da regra de acesso: caso valha 0, é uma regra de bloqueio, e caso valha 1, é uma regra de permissão. Campo Obrigatório.priorityinteiroCampo reservado. Campo Obrigatório.portal_access_rulesRelaciona portais e regras de acesso.portal_idinteiro de 64 bitsid do portal. Campo Obrigatório.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.group_access_rulesRelaciona grupos e regras de acesso.portal_idinteiro de 64 bitsid do grupo. Campo Obrigatório.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.access_rules_actionsRelaciona ações e regras de acesso.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.access_rules_validationsRelaciona ações e regras de acesso.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.validation_idinteiro de 64 bitsid do script de validação no banco de dados. Campo Obrigatório.time_zonesConjunto de intervalos que representa o critério de horário de uma regra de acesso.idinteiro de 64 bitsid do horário. Campo Obrigatório.namestringNome descritivo do horário. Campo Obrigatório.time_spansUm dos intervalos de um horário, o qual representa o critério de horário de uma regra de acesso.idinteiro de 64 bitsid do intervalo. Campo Obrigatório.namestringNome descritivo do intervalo. Campo Obrigatório.time_zone_idinteiro de 64 bitsHorário ao qual esse intervalo pertence. Campo Obrigatório.startinteiroHorário de início do intervalo. É armazenado em segundos desde às 0 horas do dia. Exemplo: Uma hora da manhã será 3600, já que 1*60*60 = 3600. Duas horas da manhã será 7200, já que 2*60*60 = 7200. Campo Obrigatório.endinteiroHorário de término do intervalo. É armazenado em segundos desde às 0 horas do dia. Campo Obrigatório.suninteiroIndica se o intervalo está ativo para os domingos. Campo Obrigatório.moninteiroIndica se o intervalo está ativo para as segundas-feiras. Campo Obrigatório.tueinteiroIndica se o intervalo está ativo para as terças-feiras. Campo Obrigatório.wedinteiroIndica se o intervalo está ativo para as quartas-feiras. Campo Obrigatório.thuinteiroIndica se o intervalo está ativo para as quintas-feiras. Campo Obrigatório.friinteiroIndica se o intervalo está ativo para as sextas-feiras. Campo Obrigatório.satinteiroIndica se o intervalo está ativo para os sábados. Campo Obrigatório.alarm_zone_time_zonesRelaciona zonas de alarme e horários.alarm_zone_idinteiro de 64 bitsid da zona de alarme. Campo Obrigatório.time_zone_idinteiro de 64 bitsid do horário. Campo Obrigatório.access_rule_time_zonesRelaciona regras de acesso e horários.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.time_zone_idinteiro de 64 bitsid do horário. Campo Obrigatório.portal_rulesRepresenta as regras do portal. Dado que uma pessoa foi autorizada por uma regra de acesso, ela ainda está sujeita às regras do portal. As regras do portal são aplicadas sobre todos que tentarem passar por esse portal. Se, por exemplo, um usuário possui uma regra de acesso 'Sempre liberado', ainda assim ele deverá satisfazer as regras de cada portal específico para passar por ele.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.time_zone_idinteiro de 64 bitsid do horário. Campo Obrigatório.portal_portal_rulesRelaciona portais e regras de portais.portal_idinteiro de 64 bitsid do portal. Campo Obrigatório.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.portal_rules_groupsRelaciona regras de portais e grupos.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.group_idinteiro de 64 bitsid do grupo. Campo Obrigatório.portal_rules_usersRelaciona regras de portais e usuários.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.user_idinteiro de 64 bitsid do usuário. Campo Obrigatório.portal_rules_actionsRelaciona regras de portais e ações.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.portal_rules_validationsRelaciona regras de portais e scripts de validação de acesso.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.validation_idinteiro de 64 bitsid do script de validação no banco de dados.Campo Obrigatório.portal_rules_time_zonesRelaciona regras de portais e horários.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.action_idinteiro de 64 bitsid do horário. Campo Obrigatório.access_logsContém os logs de acesso do equipamento.idinteiro de 64 bitsid do log de acesso.timeinteiroHorário da ocorrência em Unix Timestamp.eventinteiroTipo do evento, pode ser: 1 - equipamento inválido 2 - parâmetros de regra de identificação inválidos 3 - não identificado 4 - identificação pendente 3 - timeout na identificação 5 - acesso negado 6 - acesso autorizado 7 - acesso pendentedevice_idinteiro de 64 bitsid do equipamento onde o evento de acesso ocorreu.identifier_idinteiroid do módulo de identificação que registrou o evento no equipamento.user_idinteiroid do usuário envolvido na ocorrência.portal_idinteiroid do portal envolvido na ocorrência.identification_rule_idinteiroid da regra de identificação envolvida na ocorrênciaaccess_log_access_rulesRegras de acesso de um log de acesso. O par access_log_id e access_rule_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.access_log_idinteiro de 64 bitsid do log de acesso. Campo Obrigatório.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.access_log_portal_rulesRegras de portal de um log de acesso O par access_log_id e portal_rule_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.access_log_idinteiro de 64 bitsid do log de acesso. Campo Obrigatório.portal_rule_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.alarm_logsContém os logs de alarmes do equipamento.idinteiro de 64 bitsid do log de alarme. Campo Obrigatório.eventinteiroTipo do evento, pode ser: 1 - Alarm ativado 2 - Alarm desativado Campo obrigatório.causeinteiroCausa do evento, pode ser: 1 - Zona de alarme 1 2 - Zona de alarme 2 3 - Zona de alarme 3 4 - Zona de alarme 4 5 - Zona de alarme 5 6 - Porta aberta 7 - Arrombamento 8 - Dedo de pânico 9 - Tamper Campo obrigátorio.user_idinteiro de 64 bitsid do user.timeinteiroHorário da ocorrência em Unix Timestamp.Campo Obrigatório.devicesRepresenta os equipamentos cadastrados neste equipamento. Usado somente na comunicação via rede entre equipamentos.idinteiro de 64 bitsid do equipamento. Campo Obrigatório.namestringNome do equipamento. Campo Obrigatório.ipstringEndereço do equipamento. Exemplo: 192.168.0.129 ou exemplo.controlid.com.br Campo Obrigatório.public_keystringChave criptográfica pública do equipamento, usada para a autenticação entre equipamentos. Campo Obrigatório.device_identification_rulesRelaciona equipamentos e regras de identificação. O par device_id e identification_rule_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.device_idinteiro de 64 bitsid do equipamento. Campo Obrigatório.identification_rule_idinteiro de 64 bitsid da regra de identificação. Campo Obrigatório.device_actionsRelaciona equipamentos e ações. O par device_id e action_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.device_idinteiro de 64 bitsid do equipamento. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.
Criar ObjetosCria objetos do tipo especificadocreate_objects Cria objetos do tipo especificado. O método HTTP usado é o POST. objectstring Tipo do objeto a ser criado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. valuesarray de objetos JSON Cada elemento deve ser um objeto JSON representando o objeto a ser criado. Cada chave deve ser um campo válido do objeto e os valores devem ter o tipo apropriado. Todos os objetos JSON devem ter os mesmos campos. idsarray de inteiros de 64 bitsids dos objetos criados.$.ajax({ url: "/create_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: [{name: 'Walter White', password: 'Heisenberg'}] }) });
Carregar ObjetosCarrega todos os objetos do tipo especificadosload_objects Carrega todos os objetos do tipo especificado. O método HTTP usado é o POST. objectstring Tipo do objeto a ser criado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. fields (opcional)array de strings Campos a serem recebidos do objeto. Se esse parâmetro não estiver presente, todos os campos serão recebidos. limit (opcional)inteiro Máximo número de objetos a adquirir. offset (opcional)inteiro Pula os primeiros offset objetos que seriam adquiridos. Útil para implementar paginação. O parâmetro limit deve estar definido. Em caso contrário, offset será ignorado. order (opcional)array de strings Quais campos devem ser usados para ordenar os objetos. Se algum dos elementos tem o valor especial ascending ou descending, a ordenação será ascendente ou descendente, respectivamente. Se forem definidos múltiplos valores ascending ou descending, apenas a última definição será levada em consideração. Caso o campo especificado deva ser de algum objeto diferente do que está sendo carregado, pode-se passar um objeto JSON com os seguintes parâmetros: { object: 'object', field: 'field' } Onde object e field são o objeto e campo pelo qual se quer ordenar. where (opcional)objeto JSON Quais objetos devem ser adquiridos. Através desse parâmetro, é possível especificar filtros para receber apenas alguns objetos. Cada chave deve ser o tipo do objeto a ser adquirido, e cada valor deve ser um objeto JSON. Por exemplo: where: { users: {} } A chave de cada objeto JSON deve ser o campo do objeto, e o valor deve ser o filtro usado. Por exemplo: where: { users: { id: 1 } } No exemplo acima, apenas users que tem um id igual a 1 (um) serão filtrados. Note que o tipo do atributo do objeto (inteiro, string, etc.) deve ser do mesmo tipo que está sendo usado como filtro.
Operadores de Comparação
O filtro também pode especificar um dos seguintes operadores de comparação:
  • O operador igual a ('=', '==', 'LIKE'). Esse é o operador padrão e não precisa ser especificado.
  • O operador diferente de ('!=', '<>', 'NOT LIKE').
  • O operador maior que ('>').
  • O operador menor que ('<').
  • O operador maior ou igual a ('>=').
  • O operador menor ou igual a ('<=').
  • O operador em ('IN').
  • O operador não em ('NOT IN').
Operadores podem ser especificados usando um objeto JSON cuja chave é o operador e o valor é o valor da restrição. Por exemplo: where: { users: { id: {"!=": 1} } } No exemplo acima, apenas users que possuem um id diferente de 1 (um) serão adquiridos. Também é possível especificar múltiplas restrições. Por exemplo: where: { users: { id: {">=": 1, "<=": 2} } } No exemplo acima, apenas users que possuem um id maior que 1 (um) e menor que 2 (dois) serão adquiridos.
NOME_DO_OBJETOarray de objetos JSONCada objeto JSON representa um objeto carregado.NOME_DO_OBJETO é o nome do objeto que foi carregado.
$.ajax({ url: "/load_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users" }) });
Modificar ObjetosModifica objetos do tipo especificadomodify_objects Modifica objetos do tipo especificado. O método HTTP usado é o POST. objectstring Tipo do objeto a ser modificado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. valuesobjeto JSON Objeto JSON representando o objeto a ser modificado. Cada chave deve ser um campo válido do objeto enquanto cada valor deve ter o tipo apropriado. whereobjeto JSON Por favor, consulte a referência de load_objects para a descrição completa do parâmetro where. Apenas o mesmo objeto pode ser usado como filtro. changesinteiroNúmero de mudanças efetuadas.$.ajax({ url: "/modify_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: {name: 'Walter Hartwell White'}, where: { users: {name: 'Walter White'} } }) });
Destruir ObjetosDestrói objetos do tipo especificadodestroy_objects Destrói objetos do tipo especificado. O método HTTP usado é o POST. O resultado é um inteiro cujo valor será o número de mudanças efetuadas. objectstring Tipo do objeto a ser modificado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. whereobjeto JSON Por favor, consulte a referência de load_objects para a descrição completa do parâmetro where. Apenas o próprio objeto pode ser usado como filtro. changesinteiroNúmero de mudanças efetuadas.$.ajax({ url: "/destroy_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", where: { users: {name: 'Walter White'} } }) });
Criar Hash de Senha de UsuárioCria um Hash para uma Dada Senha de Usuáriouser_hash_password Dada uma senha em texto simples, retorna um hash que representa uma senha de usuário e o salt que foi usado para gerá-lo. O método HTTP usado é o POST. Note que ao se usar esse comando duas vezes para a mesma senha em texto simples, o Hash resultante não será o mesmo, pois o salt gerado é aleatório e será diferente a cada chamada. passwordstring Senha do usuário em texto simples para a qual se quer gerar o Hash. passwordstringContém o hash da senha fornecida.saltstringContém o salt utilizado para gerar o hash da senha.$.ajax({ url: "/user_hash_password.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ password: "abc123", }) });
Obter a imagem de um usuárioObtém a imagem de um usuário especificado pelo seu iduser_get_image Obtém a imagem de um usuário especificado pelo seu id. O método HTTP usado é irrelevante. O id especificado pode ser passado tanto na Query String quanto no corpo da requisição. user_idinteiro de 64 bitsid do usuário cuja imagem será obtida. image/jpegImagem do usuário.$.ajax({ url: "/user_get_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({user_id: 123}) });
Definir a imagem de um usuárioSalva a imagem de um usuário especificado pelo seu iduser_set_image Salva a imagem de um usuário especificado pelo seu id. O método HTTP usado é o POST. Diferentemente da grande maioria dos comandos desta API, nesse comando, o Content-Type necessariamente é application/octet-stream. Portanto, a imagem é passada no Content do método POST, e o id do usuário é passado na Query String. Atenção: atente ao parágrafo acima. O Content-Type desse comando é application/octet-stream. Esse comando não retorna nada. user_idinteiro de 64 bitsid do usuário cuja imagem será atribuída. Esse parâmetro é passado na Query String$.ajax({ url: "/user_set_image.fcgi?user_id=123&session=" + session, type: 'POST', contentType: 'application/octet-stream', data: [bytes da imagem enviada] });
Exclui a imagem de um usuárioRemove a imagem de um usuário especificado pelo seu iduser_destroy_image Exclui a imagem de um usuário especificado pelo seu id. O método HTTP usado é o POST. Esse comando não retorna nada como resultado. user_idinteiro de 64 bitsid do usuário cuja imagem será removida. $.ajax({ url: "/user_destroy_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ user_id: "123" }) });
Ler estado de GPIOLê o estado de um dado pino de propósito geral do processadorgpio_state Lê o estado do GPIO especificado pelo parâmetro gpio. gpiointeiro Número do pino de propósito geral (GPIO) cujo estado deseja-se ler. enabledinteiro Indica se o GPIO está habilitado (1) ou desabilitado (0). Uma tentativa de leitura ou escrita em um GPIO desabilitado possui efeito indefinido. ininteiro Indica se o GPIO está configurado como pino de entrada (1) ou saída (0). pinstring Contém o nome do GPIO. idleinteiro Contém o valor do GPIO quando ocisoso. pullupinteiro Indica se o pullup do GPIO está habilitado (1) ou desabilitado (0). valueinteiro contém o valor atual do GPIO. notifyinteiro Indica se o software de acesso será avisado (1) de alterações nesse GPIO ou não (0). notifiedinteiro Indica quantas vezes o GPIO notificou o software de acesso de uma alteração. $.ajax({ url: "/gpio_state.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ gpio: 1 }) });
Reler configuração do LEDSinalizada para o aplicativo de acesso reler a configuração do LED do equipamentoled_rgb_refresh Uma vez que a configuração do LED RGB tenha sido alterada, sinaliza ao software de acesso que ela deve ser recarregada. Essa chamada não tem resposta. $.ajax({ url: "/led_rgb_refresh.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Obter Informações do SistemaObtém informações e estatísticas do sistemasystem_information Obtém as seguintes informações e estatísticas do sistema: tempo ligado, horário do equipamento, tamanho e utilização das memórias RAM e flash, licença, informações da rede (endereço IP, máscara de rede e gateway), número de série do equipamento, versão do firmware e modo de operação online ou offline. O resultado é um objeto JSON que contém as seguintes chaves: uptimeobjeto JSON Indica a quanto tempo o equipamento está ligado. Contém as seguintes chaves: daysinteiro Contém os dias do uptime. hoursinteiro Contém as horas do uptime (valores entre 0 e 23). minutesinteiro Contém os minutos do uptime (valores entre 0 e 59). secondsinteiro Contém os segundos do uptime (valores entre 0 e 59). timeinteiro Contém a data e hora do equipamento em Unix Timestamp. memoryobjeto JSON Contém informações sobre memória do equipamento. diskobjeto JSON Contém informações sobre memória não volátil do equipamento. Contém as seguintes chaves: freeinteiro Espaço livre da memória não volátil (em bytes). totalinteiro Tamanho total da memória não volátil (em bytes). ramobjeto JSON Contém informações sobre memória volátil do equipamento. Contém as seguintes chaves: freeinteiro Espaço livre da memória não volátil (em bytes). totalinteiro Tamanho total da memória não volátil (em bytes). licenseobjeto JSON Contém informações sobre a licença. Contém as seguintes chaves: usersinteiro Contém o número máximo de usuários permitidos pela licença em uso. deviceinteiro Contém o número máximo de equipamentos controlados por este equipamento, de acordo com o limite imposto pela licença. typestring Contém o tipo da licença. networkobjeto JSON Contém informações sobre a rede. Contém as seguintes chaves: macstring Contém o endereço físico (MAC) do equipamento. ipstring Contém o endereço IP do equipamento. netmaskstring Contém a máscara de rede (netmask) do equipamento. gatewaystring Contém o endereço do roteador (gateway) do equipamento. serialstring Contém o número de série do equipamento. versionstring Contém a versão do firmware em uso. onlinebooleano Indica se o equipamento está funcionando no modo online. $.ajax({ url: "/system_information.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Alterar configurações de redeAltera as configurações de rede do equipamentoset_system_network Altera as configurações de rede do equipamento. O método HTTP usado é o POST. Essa chamada não tem resposta. ipstring Texto representando o endereço IP que o equipamento deve assumir. Exemplo: "192.168.0.33". netmaskstring Texto representando a máscara de rede que o equipamento deve assumir. Exemplo: "255.255.255.0". gatewaystring Endereço IP do gateway da rede. Exemplo: "192.168.0.1". $.ajax({ url: "/set_system_network.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ ip: "192.168.0.33", netmask: "255.255.255.0", gateway: "192.168.0.1" }) });
Alterar data e horaAltera a data e a hora do sistemaset_system_time Altera a data e a hora do sistema. O método HTTP usado é o POST. Essa chamada não tem resposta. dayinteiro Valor numérico representando o dia do mês. monthinteiro Valor numérico representando o mês. Valores válidos entre 1 e 12. yearinteiro Valor numérico representando o ano. Exemplo: 2014 hourinteiro Valor numérico representando a hora. Valores válidos entre 0 e 23. minuteinteiro Valor numérico representando os minutos. Valores válidos entre 0 e 59. secondinteiro Valor numérico representando os segundos. Valores válidos entre 0 e 59. $.ajax({ url: "/set_system_time.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ day: 10, month: 12, year: 1983, hour: 21, minute: 30, second: 00 }) });
Redefinir as configurações do sistemaRedefine as configurações do sistema para os valores de fábricareset_to_factory_default Redefine as configurações do sistema para o valor de fábrica. O equipamento volta para o estado que saiu da fábrica e todos os dados do usuário são perdidos. Essa chamada não tem resposta nem requer parâmetros. Atenção: essa chamada apaga todos os dados e redefine todas as configurações do equipamento para as de fábrica, incluindo os usuários e as configurações de rede, por exemplo.$.ajax({ url: "/reset_to_factory_default.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Remover AdministradoresRemove todos os administradores do equipamentodelete_admins Remove todos os administradores do equipamento. Essa chamada não tem resposta nem requer parâmetros. $.ajax({ url: "/delete_admins.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Reiniciar em Modo de UpdateReinicia o equipamento em Modo de Updatereboot_recovery Reinicia o equipamento em modo de update. Essa chamada não tem resposta nem requer parâmetros. $.ajax({ url: "/reboot_recovery.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
ReiniciarReinicia o equipamentoreboot Reinicia o equipamento. Essa chamada não tem resposta nem requer parâmetros. $.ajax({ url: "/reboot.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Executar açãoExecuta uma ação do equipamentoexecute_actions Executa as ações arbitrárias no equipamento. Atualmente, a única ação existente é door que abre um dos relés do equipamento. Verificar no exemplo no fim desta página como usá-la. O método HTTP usado é o POST. Essa chamada não tem resposta. actionsarray de objetos JSON Cada elemento deste array possui 2 chaves, ambas strings: action e parameters. action é uma ação a ser executada e parameters são os parâmetros dessa ação. $.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "door", parameters: "door=1" } ] }) });
ConfiguraçõesDescrição de todas configurações disponíveisgeneralConfigurações gerais do equipamento.beep_enabledstringAtiva o som de beep do equipamento. Valores: "0" ou "1".relay1_enabledstringHabilita o uso do relé 1. Valores: "0" ou "1".relay2_enabledstringHabilita o uso do relé 2. Valores: "0" ou "1".relay1_timeoutstringTempo de ativação do relé 1 em milisegundos. Exemplo: "3000".relay2_timeoutstringTempo de ativação do relé 2 em milisegundos. Exemplo: "3000".identifierConfigurações gerais do equipamento.verbose_loggingstringSe ativado, registra todos os tipos de acesso, inclusive não identificados. Utiliza mais memória.
Se desativado, registra apenas acessos autorizados e não-autorizados.
Valores: "0" ou "1".
online_clientConfigurações do cliente no modo online.extract_templatestringConfigura se, em caso de identificação por biometria, o equipamento irá extrair o template da digital e enviá-lo ou se irá enviar a imagem da digital.
Valores: "0" ou "1".
Obter ConfiguraçõesObtêm configurações do equipamentoget_configuration Obtêm as configurações especificadas do equipamento. Elas estão explicadas em Configurações.
O método HTTP usado é o POST. O contentType é application/json.
ConfiguraçõesObjeto JSONConfigurações pedidas pelo servidor.
$.ajax({ url: "/get_configuration.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ general: ["beep_enabled", "relay1_timeout"] }) });
Modificar ConfiguraçõesModifica configurações do equipamentoset_configuration Modifica as configurações especificadas do equipamento. Elas estão explicadas em Configurações.
O método HTTP usado é o POST. O contentType é application/json.
$.ajax({ url: "/set_configuration.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ general: {"beep_enabled": "1", "relay1_timeout": "3000"} }) });
Eventos de IdentificaçãoMensagens enviadas para o servidor em caso de tentativa de identificaçãoOs eventos descritos abaixo são enviados automaticamente pelo equipamento no modo online em caso de tentativa de indentificação. Cabe ao servidor tratar esses eventos.new_biometric_image Tentativa de identificação por biometria. Esse evento é enviado apenas se a configuraçãoextract_template estiver desativada.
O método HTTP usado é o POST. O contentType é application/octet-stream. Todos os parametros são enviados no endereço da chamada, exceto o binário da imagem.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.widthinteiro de 32 bitsLargura, em pixels, da imagem enviada.heightinteiro de 32 bitsAltura, em pixels, da imagem enviada.Imagembinário (octet-stream)Este é o único parâmetro enviado no corpo da mensagem.
Imagem da digital em formato binário. É enviado 1 byte por pixel, em escala de cinza.
resultObjeto JSONDescrito em Mensagem de Retorno.
new_biometric_template Tentativa de identificação por biometria. Esse evento é enviado apenas se a configuraçãoextract_template estiver ativada.
O método HTTP usado é o POST. O contentType é application/octet-stream. Todos os parametros são enviados no endereço da chamada, exceto o binário do template.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.Templatebinário (octet-stream)Este é o único parâmetro enviado no corpo da mensagem.
Template biométrico no formato Innovatrics (http://www.innovatrics.com/).
resultObjeto JSONDescrito em Mensagem de Retorno.
new_card Tentativa de identificação por cartão de proximidade.
O método HTTP usado é o POST. O contentType é application/x-www-form-urlencoded.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.card_valuestringNúmero do cartão reconhecido.resultObjeto JSONDescrito em Mensagem de Retorno.
new_user_id_and_password Tentativa de identificação por id e senha.
O método HTTP usado é o POST. O contentType é application/x-www-form-urlencoded.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.user_idstringID informado pelo usuário.passwordstringSenha informada pelo usuário.resultObjeto JSONDescrito em Mensagem de Retorno.
get_user_image Equipamento não encontrou foto do usuário no cache a partir do hash e solicita envio pelo servidor.
O método HTTP usado é o GET.
sessionstringHash de sessão.user_idinteiroID do usuário.Imagembinário (octet-stream)Envia foto do usuário requisitado.
Mensagem de RetornoMensagem de retorno do servidor para o equipamentos após um evento de tentativa de identificação.resultResultado da análise da tentativa de identificação.eventinteiro Registra o tipo de evento ocorrido
1 - equipamento inválido
2 - parâmetros de regra de identificação inválidos
3 - não identificado
4 - identificação pendente
5 - timeout na identificação
6 - acesso negado
7 - acesso autorizado
8 - acesso pendente
Campo Obrigatório.
user_idinteiroID do usuário, em caso de identificação.user_namestringNome do usuário, em caso de identificação.user_imagebooleanoUsuário identificado possui ou não foto.user_image_hashstring Caso o usuário identificado possua imagem, envia o hash (SHA1) da mesma.
O equipamento usa esse valor para saber se ele possui a imagem em cache ou se precisa pedí-la ao servidor.
portal_idstringID do portal correspondente.actionsArray de Objetos JSON No momento é utilizado apenas para abrir relés. Exemplo:
[ {"action":"door", "parameters":"door=1"},
{"action":"door", "parameters":"door=2"} ]
{"result": {"event":7, "user_id":6, "user_name":"Neal Caffrey", "user_image":false, "portal_id":1, "actions":[ {"action":"door", "parameters":"door=1"}, {"action":"door", "parameters":"door=2"} ] } }