{"id":18665326,"url":"https://github.com/robertklep/node-kaku-rpi","last_synced_at":"2025-10-07T06:51:49.348Z","repository":{"id":57288168,"uuid":"71236495","full_name":"robertklep/node-kaku-rpi","owner":"robertklep","description":"Node.js KlikAanKlikUit (KaKu) driver for Raspberry Pi","archived":false,"fork":false,"pushed_at":"2025-06-13T09:07:02.000Z","size":14,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-09T13:01:48.348Z","etag":null,"topics":["gpio","home-automation","kaku","node","raspberry-pi"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"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/robertklep.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}},"created_at":"2016-10-18T10:23:27.000Z","updated_at":"2025-06-13T09:07:03.000Z","dependencies_parsed_at":"2022-08-27T23:52:00.418Z","dependency_job_id":null,"html_url":"https://github.com/robertklep/node-kaku-rpi","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/robertklep/node-kaku-rpi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fnode-kaku-rpi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fnode-kaku-rpi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fnode-kaku-rpi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fnode-kaku-rpi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertklep","download_url":"https://codeload.github.com/robertklep/node-kaku-rpi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fnode-kaku-rpi/sbom","scorecard":{"id":780248,"data":{"date":"2025-08-11","repo":{"name":"github.com/robertklep/node-kaku-rpi","commit":"c6bf8999bc60767eb16e901ba0c742121d5eeb71"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Maintained","score":2,"reason":"3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":1,"reason":"Found 2/18 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T04:44:23.167Z","repository_id":57288168,"created_at":"2025-08-23T04:44:23.167Z","updated_at":"2025-08-23T04:44:23.167Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278734407,"owners_count":26036404,"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","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","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":["gpio","home-automation","kaku","node","raspberry-pi"],"created_at":"2024-11-07T08:27:12.850Z","updated_at":"2025-10-07T06:51:49.332Z","avatar_url":"https://github.com/robertklep.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kaku-rpi\n\nNode.js driver for Raspberry Pi to control KlikAanKlikUit (_KaKu_) devices using a 433Mhz transmitter.\n\nThe required hardware setup for this module is documented [here](https://domoticproject.com/controlling-433-mhz-remote-raspberry-pi/) (we're only using the transmitter module). It consists of a simple, cheap 433Mhz transmitter (like [this one](http://www.dx.com/p/433mhz-wireless-transmitter-module-superregeneration-for-arduino-green-149254)) hooked up to the RaspPi's GPIO pins.\n\n**DISCLAIMER**: this module is not in any way endorsed by, or related to, COCO International B.V. or Trust International B.V.\n\n## Attribution\n\nThe core of the code is based on [original work](https://bitbucket.org/fuzzillogic/433mhzforarduino/src/0847a6d8a9173abd5abf9cf571a1539f56588c0e/RemoteSwitch/) from [Randy Simons](http://randysimons.nl/).\n\nBig thanks to [Job Wind](https://github.com/Monkeystation/) for implementing the new style code.\n\n## Installation\n\nFirst, make sure that you have a compiler and toolchain installed on your RaspPi.\n\nThen, install the module:\n```\n$ npm i kaku-rpi\n```\n\nThis will install the module, and its requirement ([`rpio`](https://github.com/jperkin/node-rpio)). On limited hardware (like a Model A), installation may take a few minutes.\n\n## Usage\n\nNote: the driver can address both old-style and new-style devices. How to talk to a device is determined by the `ADDRESS` argument for each command: if it's numerical, it's considered to address a new-style device. Otherwise, it's considered to address an old-style device.\n\n```\nconst KlikAanKlikUit = require('kaku-rpi');\n\n// Instanciate driver.\nlet kaku = KlikAanKlikUit([PIN, PERIODUSEC, REPEATS, PULSEWIDTH]);\n\n// Switch a device on or off:\nkaku.transmit(ADDRESS, DEVICE, STATE)\n\n// Shortcuts:\nkaku.on(ADDRESS, DEVICE)\nkaku.off(ADDRESS, DEVICE)\n\n// New-style only:\nkaku.dim(ADDRESS, DEVICE, LEVEL) // dim a device\nkaku.group(ADDRESS, STATE)       // turn a group on or off\nkaku.groupOn(ADDRESS)            // turn a group on\nkaku.groupOff(ADDRESS)           // turn a group off\n```\n\nArguments:\n\n* `PIN`: the GPIO pin that the transmitter is hooked up to. This is the _physical_ pin number, not the GPIO (mapped) number. By default this module assumes that the transmitter is connected to pin 11 (which is BCM GPIO pin number 17, but again, we're using the physical pin number, so 11).\n* `PERIODUSEC`: number of microseconds to sleep between high/low transitions (default: 375 for old-style, 260 for new-style).\n* `REPEATS`: number of times to repeat commands (default: 7 for both styles).\n* `PULSEWIDTH`: pulse width (default: 5, only used by new-style driver for now).\n* `ADDRESS/DEVICE`: KaKu works with addresses (`A`, `B`, `C`, … for old-style devices, and a number for new-style devices) and devices (`1`, `2`, `3`, …). An device is configured to listen on a particular ADDRESS/DEVICE pair.\n* `STATE`: whether to switch the device on (`1/true`) or off (`0/false`).\n* `LEVEL`: set dim level (0 = min, 15 = max).\n\n**NB**: `PERIODUSEC`, `REPEATS` and `PULSEWIDTH` are different for old- and new-style. The respective drivers use sensible defaults, but if you set them they get used for both drivers, which basically makes the instance usable for only one type (old or new, but not both). In that case, if you want to control both types of devices, create an instance for each type.\n\n## New-style addressing\n\nNew-style devices are self-learning: you put them in learning mode, send an _ON_ command from your remote, and the device will learn its address and device number.\n\nTo find out which address your remote is sending, you'll need a 433Mhz receiver, hardware to connect it to, and software to read the code. I've used [this Arduino sketch](https://bitbucket.org/fuzzillogic/433mhzforarduino/src/0847a6d8a9173abd5abf9cf571a1539f56588c0e/NewRemoteSwitch/examples/ShowReceivedCode/ShowReceivedCode.ino) (and the library that contains it) to find out the code my remote is sending.\n\nAlternatively, you can also put your device in learning mode and send an _ON_ command with this library, using any address code you like. Most devices can be paired with multiple remotes, so you can use both your regular remote and the Raspberry Pi simultaneously.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertklep%2Fnode-kaku-rpi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertklep%2Fnode-kaku-rpi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertklep%2Fnode-kaku-rpi/lists"}