{"_id":"@aqara-claw/aqara-home-assistant","name":"@aqara-claw/aqara-home-assistant","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@aqara-claw/aqara-home-assistant","version":"0.1.0","type":"module","description":"OpenClaw Home Assistant plugin — device discovery, entity state reading, and service calls via HA REST API","license":"MIT","keywords":["openclaw","home-assistant","iot","smart-home","device-discovery","绿米","aqara"],"openclaw":{"extensions":["./index.ts"],"install":{"npmSpec":"@aqara-claw/aqara-home-assistant","localPath":".","defaultChoice":"local"}},"dependencies":{"@sinclair/typebox":"0.34.48","undici":"^7.0.0","zod":"^4.3.6"},"devDependencies":{"@types/node":"^25.0.10","openclaw":"2026.2.13","tsx":"^4.21.0","typescript":"^5.7.0"},"peerDependencies":{"openclaw":">=2026.2.13"},"_id":"@aqara-claw/aqara-home-assistant@0.1.0","gitHead":"bf313acd0d17c1224d26654da1dee3cad4e82f99","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-6Kd+yyk+0ZH3GgZqMWH/RyteSRIow83yilxUJRCl8H3kaQA61NsKOoliRlcqaqnexlfLjmbLu3O/9qqMQF2VJg==","shasum":"af55f36caa8df88e0c3dbca04fae6433b89d8eb2","tarball":"https://registry.npmjs.org/@aqara-claw/aqara-home-assistant/-/aqara-home-assistant-0.1.0.tgz","fileCount":12,"unpackedSize":35086,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD9AigFJQyoy2e5SP5UPnEzGCt2tE4BWlyXCldLLeomrwIgZQxBbk83PRG+gpVFj+n8cPJw3FadoHjU8GXJDs9AMxw="}]},"_npmUser":{"name":"lumi-root","email":"chao.xu@aqara.com"},"directories":{},"maintainers":[{"name":"lumi-root","email":"chao.xu@aqara.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aqara-home-assistant_0.1.0_1772187063309_0.8738980967953489"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-27T10:11:03.184Z","0.1.0":"2026-02-27T10:11:03.443Z","modified":"2026-02-27T10:11:03.780Z"},"maintainers":[{"name":"lumi-root","email":"chao.xu@aqara.com"}],"description":"OpenClaw Home Assistant plugin — device discovery, entity state reading, and service calls via HA REST API","keywords":["openclaw","home-assistant","iot","smart-home","device-discovery","绿米","aqara"],"license":"MIT","readme":"# @aqara-claw/aqara-home-assistant\r\n\r\nOpenClaw plugin for **Home Assistant** integration — device discovery, entity state\r\nreading, service calls, and event firing via the HA REST API.\r\n\r\n## Features\r\n\r\n- **Proxy bypass** — uses a direct-connect HTTP agent so LAN requests never\r\n  route through `HTTP_PROXY` / `HTTPS_PROXY`.\r\n- **IPv4 priority** — forces `dns.setDefaultResultOrder(\"ipv4first\")` to\r\n  prevent connection failures when the OS resolver returns an IPv6 address for a\r\n  LAN hostname.\r\n- **In-memory entity cache** — reduces redundant API calls; cache is\r\n  automatically populated on discovery and refreshed per-entity on demand.\r\n\r\n## Installation\r\n\r\n```jsonc\r\n// openclaw.config.json\r\n{\r\n  \"plugins\": {\r\n    \"allow\": [\"aqara-home-assistant\"],\r\n    \"entries\": {\r\n      \"aqara-home-assistant\": {\r\n        \"enabled\": true,\r\n        \"config\": {\r\n          \"ha_url\": \"http://192.168.1.100:8123\",\r\n          \"access_token\": \"<YOUR_LONG_LIVED_TOKEN>\"\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## Configuration\r\n\r\n| Option         | Type     | Default | Description                                             |\r\n| -------------- | -------- | ------- | ------------------------------------------------------- |\r\n| `ha_url`       | `string` | —       | Home Assistant base URL (e.g. `http://192.168.1.100:8123`) |\r\n| `access_token` | `string` | —       | Long-lived access token (HA → Profile → Security)       |\r\n| `timeoutMs`    | `number` | `15000` | HTTP request timeout in milliseconds                    |\r\n\r\n> **Generating an access token:** In Home Assistant, go to your user **Profile** →\r\n> **Security** → **Long-Lived Access Tokens** → **Create Token**.\r\n\r\n## Agent Tools\r\n\r\n| Tool                        | Purpose                            | Parameters                                        |\r\n| --------------------------- | ---------------------------------- | ------------------------------------------------- |\r\n| `ha_check_connection`       | Verify HA connectivity             | _(none)_                                          |\r\n| `ha_discover_entities`      | Fetch & cache all entity states    | _(none)_                                          |\r\n| `ha_get_entity_state`       | Get a single entity's state        | `entity_id`                                       |\r\n| `ha_list_entities_by_domain`| List entities for a domain         | `domain`                                          |\r\n| `ha_call_service`           | Call an HA service                 | `domain`, `service`, `service_data?`              |\r\n| `ha_get_services`           | List available services            | `domain?`                                         |\r\n| `ha_fire_event`             | Fire a custom event                | `event_type`, `event_data?`                       |\r\n\r\n### Typical Workflow\r\n\r\n```text\r\n1. ha_check_connection            → verify HA is reachable\r\n2. ha_discover_entities           → populate the entity cache\r\n3. ha_list_entities_by_domain     → e.g. domain=\"light\" to see all lights\r\n4. ha_get_entity_state            → e.g. entity_id=\"light.living_room\"\r\n5. ha_call_service                → e.g. domain=\"light\", service=\"turn_on\",\r\n                                     service_data={\"entity_id\":\"light.living_room\",\"brightness\":200}\r\n```\r\n\r\n## Project Structure\r\n\r\n```text\r\naqara-home-assistant/\r\n├── index.ts                  Plugin entry point\r\n├── openclaw.plugin.json      Plugin metadata & config schema\r\n├── package.json\r\n├── tsconfig.json\r\n└── src/\r\n    ├── types.ts              TypeScript type definitions\r\n    ├── config-schema.ts      Zod config validation\r\n    ├── runtime.ts            Plugin runtime singleton\r\n    ├── ha-client.ts          HA REST API client (proxy bypass + IPv4 priority)\r\n    ├── store.ts              In-memory entity cache\r\n    └── tools/\r\n        ├── schemas.ts        TypeBox tool parameter schemas\r\n        ├── actions.ts        Tool execution logic\r\n        └── index.ts          Tool registration & config resolution\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md","_rev":"1-29f5aa5f782a36e694c7ec25b7139cc3"}