This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
TypeScript library (@iobroker/type-detector) that automatically detects IoT device types from ioBroker object hierarchies. Used by adapters like Material, Google Home, and HomeKit to classify devices (40+ types: lighting, climate, sensors, blinds, media, etc.).
npm run build # Full build: TypeScript compilation + generate DEVICES.md
npm run build:ts # TypeScript compilation only (tsc -p tsconfig.build.json)
npm run build:doc # Generate DEVICES.md from patterns (node lib/createMd)
npm test # Run all tests (mocha --exit)
npm run watch # Watch mode for tests during development
npm run lint # ESLint check (eslint -c eslint.config.mjs)Pattern-based detection engine: ChannelDetector.detect() iterates through device type patterns, matching ioBroker object states by role regex, data type, read/write permissions, and enum membership.
ChannelDetector.ts- MainChannelDetectorclass withdetect(),getPatterns(),getEnums(). Contains the detection algorithm: iterates patterns, tests states against role regexes, resolves conflicts, caches results.typePatterns.ts- All device type pattern definitions (~3000 lines). Each pattern defines required/optional states with role regex, type, permissions. Shared patterns (battery, error, indicators, electricity) are reused across device types.types.ts- TypeScript interfaces:DetectOptions,DetectorState,PatternControl,Typesenum (device type names),StateTypeenum,PatternName(internal pattern identifiers).roleEnumUtils.ts- Utilities for role/enum matching logic.index.ts- Public API exports.
- Sort object keys, get states below target ID
- Iterate patterns (respecting
allowedTypes/excludedTypes) - For each pattern, test states: role regex match -> type check -> read/write check -> enum validation
- Assemble
PatternControl[]with matched states, resolve ID conflicts - Sort results (info last, required IDs prioritized), cache results
- Define pattern in
src/typePatterns.tswith required/optional states - Add type name to
Typesenum andPatternNameinsrc/types.ts - Add test cases in
test/ - Run
npm run build(rebuilds TS + regenerates DEVICES.md)
- DEVICES.md is auto-generated - never edit manually; run
npm run build:doc - TypeScript strict mode is enabled
- ESLint uses
@iobroker/eslint-config;jsdoc/require-jsdocandjsdoc/require-paramare disabled - Build output goes to
build/; entry point isbuild/index.js - Tests use Mocha with real ioBroker object structures (not mocks)
- ioBroker object hierarchy: adapter.instance.device.channel.state