{
  "_meta": {
    "source": "seed",
    "version": "1.0",
    "description": "Sparrow device classifier rule table. Edits go through git review."
  },
  "rules": [
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^DJI",
      "class_guess": "drone_controller",
      "confidence": 0.9,
      "evidence_tag": "oui:DJI"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Autel",
      "class_guess": "drone_controller",
      "confidence": 0.9,
      "evidence_tag": "oui:Autel"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Skydio",
      "class_guess": "drone_controller",
      "confidence": 0.9,
      "evidence_tag": "oui:Skydio"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Parrot",
      "class_guess": "drone_controller",
      "confidence": 0.85,
      "evidence_tag": "oui:Parrot"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Yuneec",
      "class_guess": "drone_controller",
      "confidence": 0.85,
      "evidence_tag": "oui:Yuneec"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)Holy\\s*Stone",
      "class_guess": "drone_controller",
      "confidence": 0.8,
      "evidence_tag": "oui:HolyStone"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 1,
      "class_guess": "laptop",
      "confidence": 0.85,
      "evidence_tag": "cod:computer"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 2,
      "class_guess": "phone",
      "confidence": 0.9,
      "evidence_tag": "cod:phone"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 4,
      "class_guess": "headset",
      "confidence": 0.85,
      "evidence_tag": "cod:audio_video"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 5,
      "class_guess": "iot",
      "confidence": 0.75,
      "evidence_tag": "cod:peripheral"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 6,
      "class_guess": "printer",
      "confidence": 0.9,
      "evidence_tag": "cod:imaging"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 7,
      "class_guess": "wearable",
      "confidence": 0.9,
      "evidence_tag": "cod:wearable"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 8,
      "class_guess": "iot",
      "confidence": 0.7,
      "evidence_tag": "cod:toy"
    },
    {
      "match_key": "bt_cod",
      "match_type": "cod_major",
      "pattern": 9,
      "class_guess": "wearable",
      "confidence": 0.85,
      "evidence_tag": "cod:health"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 1,
      "class_guess": "phone",
      "confidence": 0.85,
      "evidence_tag": "appearance:phone"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 2,
      "class_guess": "laptop",
      "confidence": 0.85,
      "evidence_tag": "appearance:computer"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 3,
      "class_guess": "wearable",
      "confidence": 0.9,
      "evidence_tag": "appearance:watch"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 12,
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "appearance:thermometer"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 13,
      "class_guess": "wearable",
      "confidence": 0.9,
      "evidence_tag": "appearance:heart_rate"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 14,
      "class_guess": "wearable",
      "confidence": 0.8,
      "evidence_tag": "appearance:blood_pressure"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 15,
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "appearance:hid"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 16,
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "appearance:glucose"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 17,
      "class_guess": "wearable",
      "confidence": 0.85,
      "evidence_tag": "appearance:running_walking"
    },
    {
      "match_key": "bt_appearance",
      "match_type": "appearance_category",
      "pattern": 18,
      "class_guess": "wearable",
      "confidence": 0.85,
      "evidence_tag": "appearance:cycling"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "airpods",
      "class_guess": "headset",
      "confidence": 0.95,
      "evidence_tag": "apple:airpods"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "apple_watch",
      "class_guess": "wearable",
      "confidence": 0.95,
      "evidence_tag": "apple:watch"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "homepod",
      "class_guess": "speaker",
      "confidence": 0.9,
      "evidence_tag": "apple:homepod"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "proximity_pair",
      "class_guess": "phone",
      "confidence": 0.85,
      "evidence_tag": "apple:proximity_pair"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "handoff",
      "class_guess": "phone",
      "confidence": 0.8,
      "evidence_tag": "apple:handoff"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "airdrop",
      "class_guess": "phone",
      "confidence": 0.8,
      "evidence_tag": "apple:airdrop"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "nearby_info",
      "class_guess": "phone",
      "confidence": 0.75,
      "evidence_tag": "apple:nearby_info"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "airplay_target",
      "class_guess": "speaker",
      "confidence": 0.8,
      "evidence_tag": "apple:airplay"
    },
    {
      "match_key": "apple_continuity_type",
      "match_type": "equals",
      "pattern": "homekit",
      "class_guess": "iot",
      "confidence": 0.75,
      "evidence_tag": "apple:homekit"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Apple",
      "class_guess": "phone",
      "confidence": 0.5,
      "evidence_tag": "oui:Apple"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Samsung",
      "class_guess": "phone",
      "confidence": 0.5,
      "evidence_tag": "oui:Samsung"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Google",
      "class_guess": "phone",
      "confidence": 0.45,
      "evidence_tag": "oui:Google"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Amazon",
      "class_guess": "iot",
      "confidence": 0.6,
      "evidence_tag": "oui:Amazon"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Ring",
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "oui:Ring"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Nest\\s",
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "oui:Nest"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Tesla",
      "class_guess": "vehicle",
      "confidence": 0.9,
      "evidence_tag": "oui:Tesla"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Ubiquiti",
      "class_guess": "ap",
      "confidence": 0.85,
      "evidence_tag": "oui:Ubiquiti"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Cisco",
      "class_guess": "ap",
      "confidence": 0.7,
      "evidence_tag": "oui:Cisco"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Aruba",
      "class_guess": "ap",
      "confidence": 0.85,
      "evidence_tag": "oui:Aruba"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Netgear",
      "class_guess": "ap",
      "confidence": 0.8,
      "evidence_tag": "oui:Netgear"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^HP(,|\\s|-)",
      "class_guess": "printer",
      "confidence": 0.55,
      "evidence_tag": "oui:HP"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Canon",
      "class_guess": "printer",
      "confidence": 0.7,
      "evidence_tag": "oui:Canon"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Sony",
      "class_guess": "headset",
      "confidence": 0.5,
      "evidence_tag": "oui:Sony"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Bose",
      "class_guess": "headset",
      "confidence": 0.9,
      "evidence_tag": "oui:Bose"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Sonos",
      "class_guess": "speaker",
      "confidence": 0.9,
      "evidence_tag": "oui:Sonos"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Fitbit",
      "class_guess": "wearable",
      "confidence": 0.95,
      "evidence_tag": "oui:Fitbit"
    },
    {
      "match_key": "oui_vendor",
      "match_type": "regex",
      "pattern": "(?i)^Garmin",
      "class_guess": "wearable",
      "confidence": 0.85,
      "evidence_tag": "oui:Garmin"
    },
    {
      "match_key": "wifi_ssid",
      "match_type": "regex",
      "pattern": "(?i)^HP-Print",
      "class_guess": "printer",
      "confidence": 0.9,
      "evidence_tag": "ssid:HP-Print"
    },
    {
      "match_key": "wifi_ssid",
      "match_type": "regex",
      "pattern": "(?i)^Canon_?",
      "class_guess": "printer",
      "confidence": 0.9,
      "evidence_tag": "ssid:Canon"
    },
    {
      "match_key": "wifi_ssid",
      "match_type": "regex",
      "pattern": "(?i)^EPSON",
      "class_guess": "printer",
      "confidence": 0.9,
      "evidence_tag": "ssid:EPSON"
    },
    {
      "match_key": "wifi_ssid",
      "match_type": "regex",
      "pattern": "(?i)(setup|config).*ring",
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "ssid:ring_setup"
    },
    {
      "match_key": "wifi_ssid",
      "match_type": "regex",
      "pattern": "(?i)tesla",
      "class_guess": "vehicle",
      "confidence": 0.85,
      "evidence_tag": "ssid:tesla"
    },
    {
      "match_key": "wifi_ssid",
      "match_type": "regex",
      "pattern": "(?i)hue[-_\\s]?",
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "ssid:hue"
    },
    {
      "match_key": "bt_name",
      "match_type": "regex",
      "pattern": "(?i)airpod",
      "class_guess": "headset",
      "confidence": 0.9,
      "evidence_tag": "name:airpods"
    },
    {
      "match_key": "bt_name",
      "match_type": "regex",
      "pattern": "(?i)galaxy\\s*buds",
      "class_guess": "headset",
      "confidence": 0.9,
      "evidence_tag": "name:galaxy_buds"
    },
    {
      "match_key": "bt_name",
      "match_type": "regex",
      "pattern": "(?i)powerbeats|beats\\s",
      "class_guess": "headset",
      "confidence": 0.9,
      "evidence_tag": "name:beats"
    },
    {
      "match_key": "bt_name",
      "match_type": "regex",
      "pattern": "(?i)apple\\s*watch",
      "class_guess": "wearable",
      "confidence": 0.95,
      "evidence_tag": "name:apple_watch"
    },
    {
      "match_key": "bt_name",
      "match_type": "regex",
      "pattern": "(?i)fitbit",
      "class_guess": "wearable",
      "confidence": 0.95,
      "evidence_tag": "name:fitbit"
    },
    {
      "match_key": "bt_name",
      "match_type": "regex",
      "pattern": "(?i)^LG\\s*TV|^samsung\\s*tv",
      "class_guess": "speaker",
      "confidence": 0.85,
      "evidence_tag": "name:tv"
    },
    {
      "match_key": "bt_name",
      "match_type": "regex",
      "pattern": "(?i)mx\\s*master|magic\\s*mouse|keyboard",
      "class_guess": "iot",
      "confidence": 0.85,
      "evidence_tag": "name:hid"
    }
  ]
}
