OnlyCat fournit une vue du code pour les développeurs afin de définir des politiques de porte avancées, qui déterminent comment la chatière réagit aux événements.
Nous publions ci-dessous le schéma JSON des politiques de porte, avec d’autres exemples et une documentation à venir prochainement.
Au cœur des politiques de porte se trouve un ensemble de règles, semblables aux règles d’un pare-feu. Chaque règle possède des critères et des actions possibles.
Fonctionnement
À chaque instant, l’état actuel de la chatière est comparé aux règles définies. Si une règle correspond (par exemple, un chat spécifique tente d’entrer), les actions associées seront exécutées (par exemple, laisser entrer le chat et jouer un son).
Priorité des règles
Tant qu’une règle correspond, les règles situées en dessous ne seront pas évaluées – les actions exécutées seront donc celles associées à la première règle correspondante. Par exemple, si une règle est définie pour bloquer l’entrée en présence de contrebande, les règles suivantes autorisant l’entrée pour un chat spécifique ne s’exécuteront pas, à moins que la contrebande ne soit plus détectée.
État d’attente
Certains critères, comme rfidCode ou eventClassification, suspendront l’exécution de la règle jusqu’à ce que les informations pertinentes soient disponibles. Par exemple, si rfidCode est spécifié, la chatière attendra qu’une puce électronique soit scannée avant de décider d’exécuter les actions de la règle ou de passer à l’évaluation des règles suivantes
{
"$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
}