ControllerInfo

Base class for all Access Control Intelligent Controllers

Intelligent Controllers synchronize with the Keep by Feenics in real-time so that decisions are made locally and independent of the server.

The Time Zone field is set according to POSIX.1 TZ standards. So here is a crash course:

stdoffset[dst[offset][,start[/time],end[/time]]]

TZ =EST5EDT,M3.2.0/2,M11.1.0

EST = designation for standard time when daylight saving is not in force

5 = offset in hours (5 hours west of Greenwich meridian (i.e. behind UTC))

EDT = designation when daylight saving is in force (if omitted there is no daylight saving)

, = no offset number between code and comma, so default to one hour ahead for daylight saving

M3.2.0 = when daylight saving starts = the 0th day (Sunday) in the second week of month 3 (March)

/2, = the local time when the switch occurs = 2 a.m. in this case

M11.1.0 = when daylight saving ends = the 0th day (Sunday) in the first week of month 11 (November). No time is given here so the switch occurs at 02:00 local time.

So daylight saving starts on the second Sunday in March and finishes on the first Sunday in November. The switch occurs at 02:00 local time in both cases. This is the default switch time, so the /2 isn’t strictly needed.

ControllerInfo Properties

Item -> BaseInfo -> ControllerInfo

ControllerInfo -> MercuryControllerInfo

Field Type Inherited from Description
Href String Item Gets or sets the href.
CommonName String BaseInfo Common Name of the resource.The common name of the resource.
InFolderHref String BaseInfo relative path Href value for the containing folderAll objects exist within a folder. Even folders!
InFolderKey String BaseInfo Represents the internal ID of the containing folder
IsGlobal Boolean BaseInfo If set True, the object will be exposed to the entire instance scope in which it resides. Meaning this object will always pass scope wide permissions tests when being queried although other restrictions such as by type will still apply (You need at least Read on the object type to see it regardless where you are in the instance scope). This Attribute is intended for use with AccessLevelInfo objects only. Use with other model objects may cause unexpected behaviors. Particularly this should not be used with ScheduleInfos, HolidayInfos, HolidayDayInfos, or ElevatorAccessLevelInfos. In time more objects will be allowed for use with this attribute but for the time being please only use with AccessLevelInfo Objects.
Key String BaseInfo Represents the internal ID of the object.
Links List<Link> BaseInfo List of related resourcesIt is expected that a resource will have many related resources (i.e. person has many access levels) Consumers of the API are encouraged to iterate through the list of links requesting this additional information as required.
Metadata MetadataItem[] BaseInfo The set of metadata attached to this resourceMetadata is opaque to the server code. Key value pairs are saved as part of a client activity. Users of the Native windows client, are able to design custom forms to display and edit scalar values in the meta data.
Monikers MonikerItem[] BaseInfo the set of Monikers for this object
Notes NoteInfo[] BaseInfo The set of notes attached to this resourceNotes are free form text only that is stored in chronological order. All notes are retrieved as part of an OBJECT get. Notes may be added as one POST but not updated with a PUT of the primary resource. WHen the resource is deleted all the notes are also deleted.
ObjectLinks ObjectLinkItem[] BaseInfo The set of resources that are related to this resourceFrequently resources have a one to one, or one to many relationship with other resources in the system. Use this set of links to discover related resources. 2016/09/29 Href property of the related resource may be null. In which case it’s expected that a set of related objects has already been retrieved by the client and the Key value will be used to index into that set.
Tags String[] BaseInfo the set of tags for this objectTags are used to group objects together for the purposes of selection and assignment of operation rights
IsDisabled Boolean ControllerInfo Indicates that the controller is disabled. All connection attempts should be refused if true, and connected controllers should be disconnected when change to true is detected.
LastPing Nullable<DateTime> ControllerInfo Date and time of the last communication with the communication service (UTC). This property can be used to check if the last online status is valid or not.
LastUpdatedOn Nullable<DateTime> ControllerInfo Gets or sets the LastUpdatedOn value
MacAddress String ControllerInfo The Mac Address of the controller, expected format 00:00:00:00:00:00. Must be unique across DatabaseAll controllers are assumed to be IP devices, that will identify to the comm system using their MacAddress
TimeZone String ControllerInfo String representation of the timezone the controller is in, set according to POSIX.1 TZ standardsFor example: EST5EDT,M3.2.0/2,M11.1.0/2 Use a 3 letter Abbreviation for the Standard Time and daylight saving time, plus the hours difference from UTC
Version String ControllerInfo Major Minor Build number of the firmware as reported by the controller

JSON Structure of ControllerInfo

{
   "Href"	:	"String",
   "CommonName"	:	"String",
   "InFolderHref"	:	"String",
   "InFolderKey"	:	"String",
   "IsGlobal"	:	"Boolean",
   "Key"	:	"String",
   "Links"	:	"List\<[Link](/object-model/link)\>",
   "Metadata"	:	"[MetadataItem](/object-model/metadataitem)[]",
   "Monikers"	:	"[MonikerItem](/object-model/monikeritem)[]",
   "Notes"	:	"[NoteInfo](/object-model/noteinfo)[]",
   "ObjectLinks"	:	"[ObjectLinkItem](/object-model/objectlinkitem)[]",
   "Tags"	:	"String[]",
   "IsDisabled"	:	"Boolean",
   "LastPing"	:	"Nullable\<DateTime\>",
   "LastUpdatedOn"	:	"Nullable\<DateTime\>",
   "MacAddress"	:	"String",
   "TimeZone"	:	"String",
   "Version"	:	"String"
}

Add Controller Async

Example in C#

// Returns: ControllerInfo
var controllerInfo = await client.AddControllerAsync(FolderInfo folder, ControllerInfo item)

Example in CURL



           curl -X POST \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers \
               -H 'Authorization: Bearer TOKEN_GOES_HERE' \ 
               -H 'Content-Type: application/json' \
               -d '{
                       "$type":"Feenics.Keep.WebApi.Model.Ep1501Info, Feenics.Keep.WebApi.Model",
                       "Status":null,
                       "ActivePorts":null,
                       "EnableLargeEncodedCardNumber":false,
                       "DestinationDispatchSettings":null,
                       "MacAddress":"FF:0F:F0:0F:F0:0F",
                       "Version":null,
                       "TimeZone":"EST5EDT,M3.2.0/2,M11.1.0/2",
                       "LastUpdatedOn":null,
                       "Key":null,
                       "CommonName":"ControllerExampleForCurl",
                       "InFolderHref":null,
                       "InFolderKey":null,
                       "Links":[],
                       "ObjectLinks":null,
                       "Metadata":null,
                       "Notes":null,
                       "Tags":null,
                       "Monikers":null,
                       "Href":null
                   }'
            

Change Controller Type Async

Example in C#

// Returns: nothing
await client.ChangeControllerTypeAsync(MercuryControllerInfo controller, String newPrefix)
        This example shows an Ep1501 being converted into a Lp1501.
        > Example in CURL


           curl -X PUT \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers/CONTROLLER.KEY/type \
               -H 'Authorization: Bearer TOKEN_GOES_HERE' \
               -H 'Content-Type: application/json' \
               -d 'Lp'
            

Delete Controller Async

Example in C#

// Returns: nothing
await client.DeleteControllerAsync(ControllerInfo controller)

Example in CURL



           curl -X DELETE \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers/CONTROLLER.KEY \
               -H 'Authorization: Bearer TOKEN_GOES_HERE'
            

Get Controller By Mac Address Async

Example in C#

// Returns: ControllerInfo
var controllerInfo = await client.GetControllerByMacAddressAsync(FolderInfo folder, String macAddress)

Example in CURL



           curl -X GET \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers?macaddress=URLENCODEDMACADDRESS \
               -H 'Authorization: Bearer TOKEN_GOES_HERE'
            

Get Controllers Async

Example in C#

// Returns: IEnumerable<ControllerInfo>
var controllerInfo = await client.GetControllersAsync(FolderInfo folder)

Example in CURL



           curl -X GET \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers \
               -H 'Authorization: Bearer TOKEN_GOES_HERE'
            

Set Last Updated On For Controller Async

Example in C#

// Returns: nothing
await client.SetLastUpdatedOnForControllerAsync(ControllerInfo controller, DateTime lastUpdatedOn)

Example in CURL



           curl -X PUT \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers/CONTROLLERS.KEY/lastupdatedon  \
               -H 'Authorization: Bearer TOKEN_GOES_HERE' \
               -H 'Content-Type: application/json' \
               -D '"2019-02-25T16:28:47.5847564Z"'
            

Set Version For Controller Async

Example in C#

// Returns: nothing
await client.SetVersionForControllerAsync(ControllerInfo controller, String version)

Example in CURL



           curl -X PUT \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers/CONTROLLERS.KEY/version  \
               -H 'Authorization: Bearer TOKEN_GOES_HERE' \
               -H 'Content-Type: application/json' \
               -D '"9.9.9"'
            

Update Controller Async

Example in C#

// Returns: nothing
await client.UpdateControllerAsync(ControllerInfo controller)

Example in CURL



           curl -X PUT \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers/CONTROLLER.KEY \
               -H 'Authorization: Bearer TOKEN_GOES_HERE' \
               -H 'Content-Type: application/json' \
               -d '{
                       "$type":"Feenics.Keep.WebApi.Model.Ep1501Info, Feenics.Keep.WebApi.Model",
                       "Status":null,
                       "ActivePorts":[],
                       "EnableLargeEncodedCardNumber":false,
                       "DestinationDispatchSettings":null,
                       "MacAddress":"FF:0F:F0:0F:F0:0F",
                       "Version":null,
                       "TimeZone":"EST5EDT,M3.2.0/2,M11.1.0/2",
                       "LastUpdatedOn":null,
                       "Key":"CONTROLLER.KEY",
                       "CommonName":"ControllerExampleForCurl",
                       "InFolderHref":"/api/f/INSTANCE.KEY",
                       "InFolderKey":"INSTANCE.KEY",
                       "Links":
                       [
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Downstream",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"downstream",
                                   "Text":"Downstream"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Peripherals",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"peripherals",
                                   "Text":"Peripherals"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Readers",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"readers",
                                   "Text":"Readers"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Inputs",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"inputs",
                                   "Text":"Inputs"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Outputs",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"outputs",
                                   "Text":"Outputs"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Instance",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"instance",
                                   "Text":"Instance"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"CardFormats",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"cardformats",
                                   "Text":"CardFormats"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"LocalAreas",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"localareas",
                                   "Text":"Local Areas"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"CommunicationPorts",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"comports",
                                   "Text":"Communication Ports"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Version",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"version",
                                   "Text":"Set Version"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"LastUpdatedOn",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"lastupdatedon",
                                   "Text":"Set Last Updated On"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"ActivePorts",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"activeports",
                                   "Text":"Set Active Port"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Cards",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"cards",
                                   "Text":"Card Assignments"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Status",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"status",
                                   "Text":"Status"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Triggers",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"triggers",
                                   "Text":"Triggers"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Procedures",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"procedures",
                                   "Text":"Procedures"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Batch",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"batch",
                                   "Text":"Event Batch"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Meta",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"meta",
                                   "Text":"Metadata"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Monikers",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"monikers",
                                   "Text":"Monikers"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"CommonName",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"commonname",
                                   "Text":"Common Name"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Images",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"images",
                                   "Text":"Images"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"TakeOwnership",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"takeownership",
                                   "Text":"Take Ownership"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Connections",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"connections",
                                   "Text":"Connected Objects"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"References",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"references",
                                   "Text":"Referencing Objects"
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.Link, Feenics.Keep.WebApi.Model",
                               "Relation":"Notes",
                               "Anchor":
                               {
                                   "$type":"Feenics.Keep.WebApi.Model.Anchor, Feenics.Keep.WebApi.Model",
                                   "Href":"notes",
                                   "Text":"Notes"
                               }
                           }
                       ],
                       "ObjectLinks":
                       [
                           {
                               "$type":"Feenics.Keep.WebApi.Model.ObjectLinkItem, Feenics.Keep.WebApi.Model",
                               "Href":null,
                               "LinkedObjectKey":"INSTANCE.KEY",
                               "CommonName":"INSTANCE_NAME",
                               "Relation":"InInstance",
                               "MetaDataBson":
                               {
                                   "$type":"System.Byte[], mscorlib",
                                   "$value":""
                               }
                           },
                           {
                               "$type":"Feenics.Keep.WebApi.Model.ObjectLinkItem, Feenics.Keep.WebApi.Model",
                               "Href":null,
                               "LinkedObjectKey":"INSTANCE.KEY",
                               "CommonName":"INSTANCE_NAME",
                               "Relation":"InstanceScope",
                               "MetaDataBson":
                               {
                                   "$type":"System.Byte[], mscorlib",
                                   "$value":""
                               }
                           }
                       ],
                       "Metadata":[],
                       "Notes":[],
                       "Tags":[],
                       "Monikers":[],
                       "Href":"/api/f/INSTANCE.KEY/controllers/CONTROLLER.KEY"
                   }'
            

Update Controller Last Ping Async

Example in C#

// Returns: nothing
await client.UpdateControllerLastPingAsync(ControllerInfo item)

Example in CURL



           curl -X PUT \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers/CONTROLLER.KEY/lastping \
               -H 'Authorization: Bearer TOKEN_GOES_HERE' \
               -H 'Content-Type: application/json' \
            

Update Controller Status Async

Example in C#

// Returns: nothing
await client.UpdateControllerStatusAsync(MercuryControllerInfo controller, ControllerStatusItem status)

Example in CURL



           curl -X PUT \
               https://keepapi.feenicshosting.com/api/f/INSTANCE.KEY/controllers/CONTROLLER.KEY/status \
               -H 'Authorization: Bearer TOKEN_GOES_HERE' \
               -H 'Content-Type: application/json' \
               -D '{
                       "$type":"Feenics.Keep.WebApi.Model.ControllerStatusItem, Feenics.Keep.WebApi.Model",
                       "IsTampered":true,
                       "IsFaulted":true,
                       "IsBatteryLow":true,
                       "IsOnline":true,
                       "IsUpdating":true
                   }'