OnlyCat biedt een codeweergave voor ontwikkelaars om geavanceerde Deurbeleid te definiëren, die bepalen hoe de kattenklep reageert op gebeurtenissen.
We publiceren het JSON-schema voor Deurbeleid hieronder, met verdere voorbeelden en documentatie die later zullen volgen.
In essentie bestaan Deurbeleid uit een array van regels – vergelijkbaar met firewallregels. Elke regel heeft een criterium en mogelijke acties.
Hoe het werkt
Bij elk frame wordt de huidige staat van de kattenklep vergeleken met de gedefinieerde regels. Als een regel overeenkomt (bijvoorbeeld een specifieke kat probeert binnen te komen), worden de bijbehorende acties uitgevoerd (bijvoorbeeld de kat binnenlaten en een geluid afspelen).
Regelprioriteit
Zolang een regel overeenkomt, worden de regels eronder niet geëvalueerd – de acties die worden uitgevoerd, zijn die van de eerst overeenkomende regel. Bijvoorbeeld, als een regel is gedefinieerd om toegang met contraband te blokkeren, zullen de regels eronder die toegang voor een specifieke kat toestaan, niet worden uitgevoerd, tenzij de contraband niet langer wordt gedetecteerd.
Wachttoestand
Sommige criteria, zoals rfidCode of eventClassification, zorgen ervoor dat de uitvoering van de regel wordt gepauzeerd totdat de relevante informatie beschikbaar is. Bijvoorbeeld, als rfidCode is opgegeven, zal de kattenklep wachten op het scannen van een microchip, voordat een beslissing kan worden genomen of de acties van de regel moeten worden uitgevoerd of dat naar de onderstaande regels moet worden doorgegaan.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Transit Policy Schema",
"type": "object",
"properties": {
"transitPolicy": {
"type": "object",
"properties": {
"idleLock": {
"type": "boolean",
"description": "Indicates if the device should be locked when idle."
},
"rules": {
"type": "array",
"description": "List of rules to evaluate transit events.",
"items": {
"type": "object",
"properties": {
"criteria": {
"type": "object",
"properties": {
"eventTriggerSource": {
"description": "Event trigger source(s) to match.",
"anyOf": [
{
"type": "integer",
"enum": [0, 1, 2, 3],
"description": "Possible values: 0 (MANUAL), 1 (REMOTE), 2 (INDOOR_MOTION), 3 (OUTDOOR_MOTION)."
},
{
"type": "array",
"items": {
"type": "integer",
"enum": [0, 1, 2, 3]
},
"description": "Array of event trigger sources."
}
]
},
"eventClassification": {
"description": "Event classification(s) to match.",
"anyOf": [
{
"type": "integer",
"enum": [0, 1, 2, 3, 4, 10],
"description": "Possible values: 0 (UNKNOWN), 1 (CLEAR), 2 (SUSPICIOUS), 3 (CONTRABAND), 4 (HUMAN_ACTIVITY), 10 (REMOTE_UNLOCK)."
},
{
"type": "array",
"items": {
"type": "integer",
"enum": [0, 1, 2, 3, 4, 10]
},
"description": "Array of event classifications."
}
]
},
"rfidCode": {
"description": "RFID code(s) to match.",
"anyOf": [
{ "type": "string" },
{
"type": "array",
"items": { "type": "string" }
}
]
},
"rfidTimeout": {
"type": "integer",
"description": "Timeout in milliseconds to wait for an RFID code."
},
"timeRange": {
"description": "Time range(s) during which the rule is active (e.g., '08:00-18:00').",
"anyOf": [
{ "type": "string" },
{
"type": "array",
"items": { "type": "string" }
}
]
},
"motionSensorState": {
"description": "Instantaneous motion sensor state(s) to match. May be used for fast re-locking. Supported from firmware 2025.03.239 onwards. Possible values: 0 (UNKNOWN), 1 (NONE), 2 (INDOOR), 3 (OUTDOOR).",
"anyOf": [
{
"type": "integer",
"enum": [0, 1, 2, 3]
},
{
"type": "array",
"items": {
"type": "integer",
"enum": [0, 1, 2, 3]
}
}
]
}
},
"additionalProperties": false
},
"action": {
"type": "object",
"properties": {
"lock": {
"type": "boolean",
"description": "Determines whether to lock (true) or unlock (false) the device."
},
"sound": {
"type": "string",
"description": "Sound to play when the rule matches."
}
},
"additionalProperties": false
}
},
"required": ["criteria", "action"],
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}