{"id":50549268,"url":"https://github.com/node-red-contrib/node-red-contrib-truma-inetx","last_synced_at":"2026-06-04T01:30:50.397Z","repository":{"id":355960225,"uuid":"1023310988","full_name":"node-red-contrib/node-red-contrib-truma-inetx","owner":"node-red-contrib","description":"TypeScript BLE library, CLI, and Node-RED nodes for reading and writing Truma iNet X settings.","archived":false,"fork":false,"pushed_at":"2026-05-06T02:18:09.000Z","size":183,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-06T03:27:20.157Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/node-red-contrib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"konne"}},"created_at":"2025-07-21T01:02:21.000Z","updated_at":"2026-05-06T02:18:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/node-red-contrib/node-red-contrib-truma-inetx","commit_stats":null,"previous_names":["node-red-contrib/node-red-contrib-truma-inetx"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/node-red-contrib/node-red-contrib-truma-inetx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-red-contrib%2Fnode-red-contrib-truma-inetx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-red-contrib%2Fnode-red-contrib-truma-inetx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-red-contrib%2Fnode-red-contrib-truma-inetx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-red-contrib%2Fnode-red-contrib-truma-inetx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/node-red-contrib","download_url":"https://codeload.github.com/node-red-contrib/node-red-contrib-truma-inetx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-red-contrib%2Fnode-red-contrib-truma-inetx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33886160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-04T01:30:47.601Z","updated_at":"2026-06-04T01:30:50.392Z","avatar_url":"https://github.com/node-red-contrib.png","language":"TypeScript","funding_links":["https://github.com/sponsors/konne"],"categories":[],"sub_categories":[],"readme":"# node-red-contrib-truma-inetx\n\nTypeScript BLE library, CLI, and Node-RED nodes for reading and writing Truma\niNet X settings.\n\nThe implementation speaks the Truma iNet X application protocol, decodes CBOR\npayloads with `cbor-x`, and prints parsed settings as JSON. Bluetooth access is\nbackend based: `auto` tries BlueZ on Linux and falls back to noble elsewhere,\nwhile `bluez` and `noble` can be selected explicitly.\n\n## Usage\n\nInstall dependencies:\n\n```sh\nnpm install\n```\n\nUse Node 20 or 22 LTS for live BLE access. Newer Node releases can work for\ntests and builds, but the native noble macOS backend has been less reliable for\nBluetooth connections outside LTS.\n\nGet settings:\n\n```sh\nnpm run get\n```\n\nUse `--debug` for BLE/protocol diagnostics on stderr:\n\n```sh\nnpm run get -- --debug\n```\n\nSelect a Bluetooth backend when needed:\n\n```sh\nnpm run discover -- --bluetooth bluez\nnpm run get -- --bluetooth noble\n```\n\nPair with the iNet X display while the display is in Bluetooth pairing mode:\n\n```sh\nnpm run pair\n```\n\nOn Venus OS / Linux, BlueZ pairing is preferred so bluetoothd owns the\n`Device1` object and persists bond keys:\n\n```sh\nnpm run pair -- --bluetooth bluez --debug\n```\n\nPairing-specific BlueZ controller settings are only applied by `pair`, not by\nnormal `discover`, `get`, or `set`.\n\n### Headless Venus OS / Victron\n\nThe pairing on an victron ekrano or GX device need to be currently done by the command line.\n\n### Initial Build of Settings Tree\n\nBuild a reusable settings tree:\n\n```sh\nnpm run discover \u003e truma-tree.json\n```\n\nThe tree includes topic group ids, so later reads and writes can target only the\nneeded device groups:\n\n```sh\nnpm run get -- Switches\n```\n\nTree topics are grouped by topic name, then parameter name:\n\n```json\n{\n  \"topics\": {\n    \"Switches\": {\n      \"group\": \"0x0405\",\n      \"parameters\": {\n        \"ExternalLights\": {\n          \"type\": 104,\n          \"available\": 1,\n          \"value\": 1\n        }\n      }\n    }\n  }\n}\n```\n\nSet a parameter:\n\n```sh\nnpm run set -- Switches ExternalLights 1 --tree truma-tree.json\n```\n\nThe write path initializes the Truma protocol to learn the assigned client\naddress, then sends a single parameter write. Switch captures use numeric `1`\nand `0` values. You can also pass `--group 0405` explicitly instead of `--tree`.\n\nKnown working controls and topic mappings are documented in\n[docs/control-examples.md](docs/control-examples.md). In particular, room\nheating is split across `RoomClimate` and `AirHeating`: use `RoomClimate` for\noff/heating/ventilation mode, but use `AirHeating.TgtTemp` for the room heating\ntarget temperature and `AirHeating.Mode` for the heater fan/profile.\n\nThe CLI writes a single JSON document to stdout. It does not write files.\nGenerated build output lives in `dist/` and is ignored by git.\n\n## Library\n\nBuild the TypeScript library:\n\n```sh\nnpm run build\n```\n\nRun tests:\n\n```sh\nnpm test\n```\n\nPrimary exports:\n\n- `pair()` connects and triggers the operating-system pairing flow.\n- `get()` connects, reads, decodes, disconnects, and returns JSON.\n- `discover()` builds a reusable settings tree with topic group ids.\n- `set()` initializes the protocol, writes one parameter, decodes confirmation\n  responses, disconnects, and returns JSON.\n- `TrumaProtocol` handles the app-level control/data frame exchange.\n- `buildTrumaFrame()`, `buildParameterWriteFrame()`, `decodeTrumaFrame()`, and\n  `decodeFirstCbor()` handle Truma frame/CBOR helpers.\n- `collectSettings()` and `parseSettingsJson()` normalize topic/parameter\n  responses.\n\n## Node-RED\n\nInstalling this package into Node-RED registers three nodes:\n\n- `truma-inetx-device`: config node that discovers and caches the iNet X topic\n  tree on deploy/start.\n- `truma-inetx-get`: gets all settings or multiple selected topics. Incoming\n  `msg.payload` may override topics with a string, array, or `{ \"topics\": [...] }`.\n- `truma-inetx-set`: sets one topic/parameter/value. Incoming `msg.payload` may\n  override with `{ \"topic\", \"parameter\", \"value\", \"group\" }`.\n\nThe operational nodes serialize BLE access through the shared device node.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-red-contrib%2Fnode-red-contrib-truma-inetx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnode-red-contrib%2Fnode-red-contrib-truma-inetx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-red-contrib%2Fnode-red-contrib-truma-inetx/lists"}