{"record":{"id":"e7e3f8b73e707130","repo":"homebridge/homebridge","slug":"your-config-json-contains-an-illegal-accessory-con","errorCode":null,"errorMessage":"Your config.json contains an illegal accessory configuration object at position %d. Missing property 'accessory'. Skipping entry...","messagePattern":"Your config\\.json contains an illegal accessory configuration object at position (.+?)\\. Missing property 'accessory'\\. Skipping entry\\.\\.\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/server.ts","lineNumber":458,"sourceCode":"        MDNSAdvertiser.AVAHI,\n        MDNSAdvertiser.RESOLVED,\n      ].includes(config.bridge.advertiser)) {\n        config.bridge.advertiser = undefined\n        log.error('Value provided in bridge.advertiser is not valid, reverting to platform default.')\n      }\n    } else {\n      config.bridge.advertiser = undefined\n    }\n\n    return config as HomebridgeConfig\n  }\n\n  private loadAccessories(): void {\n    log.info(`Loading ${this.config.accessories.length} accessories...`)\n\n    this.config.accessories.forEach((accessoryConfig, index) => {\n      if (!accessoryConfig.accessory) {\n        log.warn('Your config.json contains an illegal accessory configuration object at position %d. '\n          + 'Missing property \\'accessory\\'. Skipping entry...', index + 1) // we rather count from 1 for the normal people?\n        return\n      }\n\n      const accessoryIdentifier: AccessoryName | AccessoryIdentifier = accessoryConfig.accessory\n      const displayName = accessoryConfig.name\n      if (!displayName) {\n        log.warn('Could not load accessory %s at position %d as it is missing the required \\'name\\' property!', accessoryIdentifier, index + 1)\n        return\n      }\n\n      let plugin: Plugin\n      let constructor: AccessoryPluginConstructor\n\n      try {\n        plugin = this.pluginManager.getPluginForAccessory(accessoryIdentifier)\n      } catch (error: any) {\n        log.error(error.message)","sourceCodeStart":440,"sourceCodeEnd":476,"githubUrl":"https://github.com/homebridge/homebridge/blob/edf54930340d67cade23d01abd41b03cd9621e8b/src/server.ts#L440-L476","documentation":"Homebridge validates every entry in config.json's accessories[] array at startup. Each entry must have an 'accessory' property naming which registered accessory plugin to instantiate. When the property is missing, loadAccessories logs this warning and skips the entry instead of crashing the bridge.","triggerScenarios":"An object in config.json under 'accessories' has no 'accessory' key (e.g. only 'name', or a malformed/renamed key like 'accessoryName').","commonSituations":"Hand-edited config with a typo, a config editor writing an empty placeholder object, copy-pasting a platform block into accessories, or trailing incomplete entry after a truncated edit.","solutions":["Open config.json and add the 'accessory' property with the exact accessory identifier the plugin registered","Remove the empty/invalid object from the accessories array if it is a leftover placeholder","Validate config.json with a JSON linter and compare against the plugin's documented config schema.example"],"exampleFix":"// before\n\"accessories\": [\n  { \"name\": \"Lamp\" }\n]\n// after\n\"accessories\": [\n  { \"accessory\": \"DomoticaLamp\", \"name\": \"Lamp\" }\n]","handlingStrategy":"validation","validationCode":"const missing = config.accessories?.filter(a => !a || typeof a !== 'object' || !a.accessory) ?? []\nif (missing.length) throw new Error(`Accessory entries missing 'accessory' property: ${missing.length}`)","typeGuard":"function isValidAccessoryConfig(c: unknown): c is { accessory: string; name: string; [k: string]: unknown } {\n  return typeof c === 'object' && c !== null && typeof (c as any).accessory === 'string' && (c as any).accessory.length > 0\n}","tryCatchPattern":null,"preventionTips":["Use Homebridge config.schema.json validation (config-ui-x does this automatically)","Never hand-edit config.json without running it through a JSON validator","Keep the 'accessory' key copied verbatim from plugin documentation"],"tags":["config","homebridge","startup-validation"],"backgroundTag":"missing-required-config-property","analyzedSha":"edf54930340d67cade23d01abd41b03cd9621e8b","analyzedAt":"2026-08-30T21:28:53.235Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}