{"id":28615506,"url":"https://github.com/siliconlabssoftware/z-wave-protocol-controller","last_synced_at":"2025-06-12T02:09:15.858Z","repository":{"id":277322418,"uuid":"918265922","full_name":"SiliconLabsSoftware/z-wave-protocol-controller","owner":"SiliconLabsSoftware","description":"The Z-Wave Protocol Controller is a Linux application to control a Z-Wave network. It works with a Silicon Labs' SAPI controller application.","archived":false,"fork":false,"pushed_at":"2025-06-05T09:52:38.000Z","size":199114,"stargazers_count":2,"open_issues_count":23,"forks_count":10,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-06-05T10:45:39.002Z","etag":null,"topics":["silicon-labs","siliconlabs-security-maintained","unify","z-wave"],"latest_commit_sha":null,"homepage":"https://siliconlabssoftware.github.io/z-wave-protocol-controller","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SiliconLabsSoftware.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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}},"created_at":"2025-01-17T15:26:03.000Z","updated_at":"2025-06-05T09:52:41.000Z","dependencies_parsed_at":"2025-06-03T00:19:55.061Z","dependency_job_id":null,"html_url":"https://github.com/SiliconLabsSoftware/z-wave-protocol-controller","commit_stats":null,"previous_names":["siliconlabssoftware/z-wave-protocol-controller"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/SiliconLabsSoftware/z-wave-protocol-controller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiliconLabsSoftware%2Fz-wave-protocol-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiliconLabsSoftware%2Fz-wave-protocol-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiliconLabsSoftware%2Fz-wave-protocol-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiliconLabsSoftware%2Fz-wave-protocol-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SiliconLabsSoftware","download_url":"https://codeload.github.com/SiliconLabsSoftware/z-wave-protocol-controller/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiliconLabsSoftware%2Fz-wave-protocol-controller/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259382323,"owners_count":22848842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["silicon-labs","siliconlabs-security-maintained","unify","z-wave"],"created_at":"2025-06-12T02:09:07.949Z","updated_at":"2025-06-12T02:09:15.841Z","avatar_url":"https://github.com/SiliconLabsSoftware.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# z-wave-protocol-controller\n\n## About\n\nZ-Wave-Protocol-Controller is a Linux application to control Z-Wave\nnetworks with a Silicon Labs NCP, It has grown as part of Unify SDK\nproject and is now maintained as an external project.\n\n## News\n\n- [NEWS.md](NEWS.md) lists important information regarding zpc \"split release\".\n- [applications/zpc/release_notes.md](applications/zpc/release_notes.md)\n\n## Documentation\n\nPlease refer to online documentation at:\n\nhttps://siliconlabssoftware.github.io/z-wave-protocol-controller\n\nOr relevant sources pages, to get started head to:\n\n- [doc/protocol/zwave/zpc_introduction.md](doc/protocol/zwave/zpc_introduction.md)\n\n## Quickstart\n\n### Native (Linux) build\n\nThe project is CMake based, to prepare the environment,\nhave a look at [./helper.mk](helper.mk)'s  details\nfor needed steps to setup developer system before using CMake normally.\n\nAt the moment stable version of Debian (12) is supported,\nso it should work also in relatives projects (Ubuntu, RaspiOS, WSL2 etc)\nand should be easy to adapt to other distributions.\n\n```sh\nsudo apt-get install -y sudo make git\n\ngit clone https://github.com/SiliconLabsSoftware/z-wave-protocol-controller\ncd z-wave-protocol-controller\n\n./helper.mk help\n./helper.mk setup  # To setup developer system (once)\n./helper.mk VERBOSE=1 # Default build tasks verbosely (depends on setup)\"\n./helper.mk run # Run entry-point application\n```\n\nIt should print zpc's help.\n\nTo use it, a Silicon Labs' Z-Wave NCP should be plugged in USB port.\n\nTo setup the device zwave_ncp_serial_api_controller application should be flashed using\n[simplicity-studio](https://www.silabs.com/developer-tools/simplicity-studio)\n\nAlternatively demo-applications package can be downloaded from\n[SiliconLabs SDK repository](https://github.com/SiliconLabs/simplicity_sdk/releases)\nand flashed using command-line tool\n[SimplicityCommander](https://www.silabs.com/documents/public/software/SimplicityCommander-Linux.zip)\n.\n\nThen to verify you can check firmware version using zpc:\n\n```sh\nlsusb # Should list the NCP device (WSL users should attach device first)\nserial=$(ls /dev/serial/by-id/usb-Silicon_Labs* | head -n1)\n./helper.mk all run run_args=\"--zpc.serial=${serial} --zpc.ncp_version\"\n# \u003ci\u003e [zpc_ncp_update] chip_serial_api_version: 7.23.1\n```\n\nThen let's interact with ZPC's inbuilt shell without installing it.\n\n```sh\nsudo apt install -y mosquitto # Is a strong runtime dependency\nserial=$(ls /dev/serial/by-id/usb-Silicon_Labs* | head -n1)\nrun_args=\"--zpc.serial=${serial}\"\nmapdir=\"applications/zpc/components/dotdot_mapper/rules\"\nrun_args=\"$run_args --mapdir=${mapdir}\"\ndatastore_file=\"tmp.db\"\nrun_args=\"$run_args --zpc.datastore_file=${datastore_file}\"\ncache_path=\"tmp\"\nrun_args=\"$run_args --zpc.ota.cache_path=${cache_path}\"\nmkdir -p ${cache_path}\n./helper.mk run run_args=\"$run_args\"\n\n\nZPC\u003ehelp\n==================================================\nUnify Command line interface Help:\n==================================================\n(...)\nexit  :Exit the application\n(...)\nzwave_home_id Print Z-Wave Home ID\n(...)\nzwave_add_node  :Add a Z-Wave node to the network\n(...)\nzwave_set_default Reset Z-Wave network\n(...)\nZPC\u003e zwave_home_id\nZ-Wave Home ID:\n1BADC0DE\nZPC\u003e zwave_add_node\n(...)\n```\n\nSet endnode to learn mode and the controller should see it:\n\n```sh\n(...)\nPlease verify the DSK and insert the missing part (first 5 digits)\nUsage: zwave_accept_dsk \u003cinsert the first two byte of the DSK in [decimal]\u003e\nZPC\u003e zwave_accept_dsk (...)\n```\n\nThen you will have to learn how to use couple of shell commands\n\"attribute_store_log\" and \"attribute_store_set_desired\",\nas explained in the reference documentation.\n\n```sh\nZPC\u003eattribute_store_log\n(...)\nZPC\u003eattribute_store_log_search OnOff\n(...)\n│   │   │   │───(110) ZCL OnOff OnOff .....................................      0\n(...)\nZPC\u003eattribute_store_set_desired 110,1\n(...)\n```\n\n### WSL2 build\n\nHow to use a z-wave controller with ZPC running in WSL2 ?\n\nYou can use this [script](./scripts/wslusb.ps1).\n\nStart by installing the usbipd service as described at: https://learn.microsoft.com/en-us/windows/wsl/connect-usb\n\n```sh\n# You can list devices using: \n\n(Powershell)$ ./wslusb.ps1 -List\n\n# Get the BUSID of the device you want to mount\n\n(Powershell)$ ./wslusb.ps1 -Attach \u003cbusid\u003e\n\n# Check that the device is correctly mounted into WSL2\n\n(WSL2)$ lsusb # you should see your device here\n\n# Detach the device with\n\n(Powershell)$ ./wslusb.ps1 -Detach \u003cbusid\u003e\n```\n\n### More\n\nRefer to [./doc](doc) for more (using shell, MQTT, WebApp etc).\n\n\n### Docker build\n\nThe fastest (less than 20min) way to build z-wave-protocol-controller from scratch\nis to delegate all tasks to docker.\n\n```sh\ndocker build https://github.com/SiliconLabsSoftware/z-wave-protocol-controller.git#ver_1.7.0\n```\n\nThis one-liner will do download latest release, setup environment, build, test, package...\n\nAlso a docker-compose file is provided to start ZPC and use it along a MQTT client\n(eg:\n[mosquitto-clients](https://github.com/eclipse-mosquitto/mosquitto/)\n).\n\nPower users might prefer to work in sources tree in a native GNU/Linux\nenvironment as explained above.\n\n## Contributing\n\n- [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## References\n\n- https://SiliconLabs.github.io/UnifySDK/\n- https://github.com/SiliconLabs/UnifySDK/\n- https://docs.silabs.com/z-wave/\n- https://www.silabs.com/\n- https://z-wavealliance.org/\n- https://github.com/Z-Wave-Alliance/z-wave-stack/wiki/ZPC\n\n## Legal info\n\n**Copyright 2021 Silicon Laboratories Inc. www.silabs.com**\n\nThe licensor of this software is Silicon Laboratories Inc. Your use of this software is governed by the terms of Silicon Labs Master Software License Agreement (MSLA) available at www.silabs.com/about-us/legal/master-software-license-agreement. This software is distributed to you in Source Code format and is governed by the sections of the MSLA applicable to Source Code.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiliconlabssoftware%2Fz-wave-protocol-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsiliconlabssoftware%2Fz-wave-protocol-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiliconlabssoftware%2Fz-wave-protocol-controller/lists"}