OnlyCat bietet eine Code-Ansicht für Entwickler, um fortschrittliche Türrichtlinien zu definieren, die festlegen, wie die Katzenklappe auf Ereignisse reagiert.
Wir veröffentlichen unten das JSON-Schema für Türrichtlinien, mit weiteren Beispielen und Dokumentationen, die in Kürze folgen werden.
Im Kern bestehen Türrichtlinien aus einem Array von Regeln – ähnlich wie Firewall-Regeln. Jede Regel hat ein Kriterium und mögliche Aktionen.
Wie es funktioniert
Bei jedem Frame wird der aktuelle Zustand des Katzenklappen mit den definierten Regeln abgeglichen. Wenn eine Regel zutrifft (z. B. eine bestimmte Katze versucht einzutreten), werden die zugehörigen Aktionen ausgeführt (z. B. die Katze hereinlassen und ein Geräusch abspielen).
Regelpriorität
Solange eine Regel zutrifft, werden die darunterstehenden Regeln nicht ausgewertet – daher werden die Aktionen ausgeführt, die mit der ersten zutreffenden Regel verbunden sind. Wenn zum Beispiel eine Regel definiert ist, um den Eintritt mit Schmuggelware zu blockieren, werden darunterliegende Regeln, die den Eintritt für eine bestimmte Katze erlauben, nicht ausgeführt, es sei denn, Schmuggelware wird nicht mehr erkannt.
Wartezustand
Einige Kriterien, z. B. rfidCode oder eventClassification, führen dazu, dass die Regel-Ausführung ausgesetzt wird, bis die relevanten Informationen verfügbar sind. Wenn z. B. rfidCode angegeben ist, wartet die Katzenklappe darauf, dass ein Mikrochip gescannt wird, bevor entschieden werden kann, ob die Aktionen der Regel ausgeführt werden oder die darunterstehenden Regeln weiter abgeglichen werden.
{
"$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
}