{"id":25623618,"url":"https://github.com/alcalzone/emea-summit-live-demo","last_synced_at":"2026-06-19T19:31:32.344Z","repository":{"id":276608266,"uuid":"927215952","full_name":"AlCalzone/emea-summit-live-demo","owner":"AlCalzone","description":"Z-Wave EMEA Summit Barcelona 2025: Z-Wave JS live demo","archived":false,"fork":false,"pushed_at":"2025-02-09T11:09:02.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-22T11:46:35.483Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlCalzone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-02-04T15:44:02.000Z","updated_at":"2025-02-09T11:09:05.000Z","dependencies_parsed_at":"2025-02-09T12:18:57.009Z","dependency_job_id":"48ba2957-5061-4b59-8dd3-5502229c5e09","html_url":"https://github.com/AlCalzone/emea-summit-live-demo","commit_stats":null,"previous_names":["alcalzone/emea-summit-live-demo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AlCalzone/emea-summit-live-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlCalzone%2Femea-summit-live-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlCalzone%2Femea-summit-live-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlCalzone%2Femea-summit-live-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlCalzone%2Femea-summit-live-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlCalzone","download_url":"https://codeload.github.com/AlCalzone/emea-summit-live-demo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlCalzone%2Femea-summit-live-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34546191,"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-19T02:00:06.005Z","response_time":61,"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":"2025-02-22T11:46:38.088Z","updated_at":"2026-06-19T19:31:32.316Z","avatar_url":"https://github.com/AlCalzone.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README\n\n## First steps (when cloning the repository)\n\n1. Install Z-Wave JS\n\n    ```\n    npm install\n    ```\n\n2. Run the script\n\n    ```\n    node index.mjs\n    ```\n\n## First steps (without cloning the repository)\n\nThese are not required when cloning this repository!\n\n1. Initialize project\n\n    ```\n    npm init -y\n    ```\n\n    ```\n    npm install zwave-js\n    ```\n\n2. Create a new script file `index.mjs`\n\n3. Copy boilerplate\n\n    ```ts\n    // @ts-check\n\n    import { Driver } from \"zwave-js\";\n\n    // Tell the driver which serial port to use\n    const driver = new Driver(\n    \t\"/dev/serial/by-id/usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_900bdd31185bef11b46e41405e7370b6-if00-port0\",\n    \t// and configure options like security keys\n    \t{\n    \t\tsecurityKeys: {\n    \t\t\tS0_Legacy: Buffer.from(\n    \t\t\t\t\"0102030405060708090a0b0c0d0e0f10\",\n    \t\t\t\t\"hex\"\n    \t\t\t),\n    \t\t\tS2_Unauthenticated: Buffer.from(\n    \t\t\t\t\"5369389EFA18EE2A4894C7FB48347FEA\",\n    \t\t\t\t\"hex\"\n    \t\t\t),\n    \t\t\tS2_AccessControl: Buffer.from(\n    \t\t\t\t\"31132050077310B6F7032F91C79C2EB8\",\n    \t\t\t\t\"hex\"\n    \t\t\t),\n    \t\t\tS2_Authenticated: Buffer.from(\n    \t\t\t\t\"656EF5C0F020F3C14238C04A1748B7E1\",\n    \t\t\t\t\"hex\"\n    \t\t\t),\n    \t\t},\n    \t\tsecurityKeysLongRange: {\n    \t\t\tS2_Authenticated: Buffer.from(\n    \t\t\t\t\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n    \t\t\t\t\"hex\"\n    \t\t\t),\n    \t\t\tS2_AccessControl: Buffer.from(\n    \t\t\t\t\"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\",\n    \t\t\t\t\"hex\"\n    \t\t\t),\n    \t\t},\n    \t}\n    );\n\n    // Listen for the driver ready event before doing anything with the driver\n    driver.once(\"driver ready\", () =\u003e {\n    \t// Wait for all nodes to be ready (or dead)\n    \tdriver.on(\"all nodes ready\", main);\n    });\n\n    // Start the driver\n    await driver.start();\n\n    // Stop the driver when the application gets a SIGINT or SIGTERM signal\n    for (const signal of [\"SIGINT\", \"SIGTERM\"]) {\n    \tprocess.on(signal, async () =\u003e {\n    \t\tawait driver.destroy();\n    \t\tprocess.exit(0);\n    \t});\n    }\n\n    // =================================================\n    // Main code\n\n    async function main() {\n    \t// Main code goes here\n    \tconsole.log(\"all nodes ready\");\n    }\n    ```\n\n4. Run the script\n\n    ```\n    node index.mjs\n    ```\n\n## Examples\n\n## Figure out which CCs are supported\n\n```ts\nimport { getCCName } from \"@zwave-js/core\";\n\nconst node = driver.controller.nodes.getOrThrow(6);\n\nfor (const [ccId, info] of node.getCCs()) {\n\tconsole.log(` - ${getCCName(ccId)}: ${info.version}`);\n}\n```\n\n## Make LED blink with Basic CC\n\n```ts\nimport { setTimeout } from \"node:timers/promises\";\n\nfor (let i = 0; i \u003c 10; i++) {\n\tawait node.commandClasses.Basic.set(i % 2 === 0 ? 255 : 0);\n\tawait setTimeout(500);\n}\n```\n\n## Change LED color\n\n```ts\nimport { setTimeout } from \"node:timers/promises\";\n\nconst colors = [\n\t{ red: 255, green: 0, blue: 0 },\n\t{ red: 0, green: 255, blue: 0 },\n\t{ red: 0, green: 0, blue: 255 },\n\t{ red: 255, green: 255, blue: 0 },\n\t{ red: 0, green: 255, blue: 255 },\n\t{ red: 255, green: 0, blue: 255 },\n];\n\nfor (let i = 0; i \u003c 12; i++) {\n\tawait node.commandClasses[\"Color Switch\"].set(colors[i % colors.length]);\n\tawait setTimeout(250);\n}\n\nawait node.commandClasses[\"Color Switch\"].set({\n\tred: 0,\n\tgreen: 4,\n\tblue: 0,\n});\n```\n\n## Check state of light\n\n```ts\nconst state = await node.commandClasses[\"Binary Switch\"].get();\nif (state) {\n\tif (state.currentValue) {\n\t\tconsole.log(\"Switch is ON\");\n\t} else {\n\t\tconsole.log(\"Switch is OFF\");\n\t}\n} else {\n\tconsole.error(\"no response\");\n}\n```\n\n## React to reports\n\nThe power strip sample application on the DK2603 800 series devkit sends\nan overload status notification when the right button is pressed.\n\n```ts\nimport { CommandClasses } from \"@zwave-js/core\";\n\nnode.on(\"value updated\", (node, args) =\u003e {\n\tif (\n\t\targs.commandClass === CommandClasses.Notification \u0026\u0026\n\t\targs.property === \"Power Management\" \u0026\u0026\n\t\targs.propertyKey === \"Over-load status\" \u0026\u0026\n\t\targs.newValue === 0x08\n\t) {\n\t\tconsole.log(\"BUTTON PRESSED\");\n\t}\n});\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falcalzone%2Femea-summit-live-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falcalzone%2Femea-summit-live-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falcalzone%2Femea-summit-live-demo/lists"}