{"id":27221454,"url":"https://github.com/sebi2k1/node-can","last_synced_at":"2025-04-10T08:01:38.022Z","repository":{"id":6158260,"uuid":"7387779","full_name":"sebi2k1/node-can","owner":"sebi2k1","description":"NodeJS SocketCAN extension","archived":false,"fork":false,"pushed_at":"2025-02-22T16:39:19.000Z","size":1040,"stargazers_count":228,"open_issues_count":8,"forks_count":73,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-04-03T22:01:40.815Z","etag":null,"topics":["nodejs-socketcan-extension","socketcan"],"latest_commit_sha":null,"homepage":null,"language":"C++","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/sebi2k1.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":"2012-12-31T14:32:27.000Z","updated_at":"2025-02-27T18:03:31.000Z","dependencies_parsed_at":"2023-01-13T13:51:41.630Z","dependency_job_id":"8f1179fc-1456-4411-91ab-1a1e1265e7ed","html_url":"https://github.com/sebi2k1/node-can","commit_stats":{"total_commits":188,"total_committers":25,"mean_commits":7.52,"dds":"0.37234042553191493","last_synced_commit":"fffbf35310a86d43985868c31c1e93dfdec76472"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebi2k1%2Fnode-can","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebi2k1%2Fnode-can/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebi2k1%2Fnode-can/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebi2k1%2Fnode-can/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sebi2k1","download_url":"https://codeload.github.com/sebi2k1/node-can/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248182072,"owners_count":21060893,"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":["nodejs-socketcan-extension","socketcan"],"created_at":"2025-04-10T08:01:01.681Z","updated_at":"2025-04-10T08:01:38.016Z","avatar_url":"https://github.com/sebi2k1.png","language":"C++","readme":"![Build Status](https://github.com/sebi2k1/node-can/actions/workflows/cicd.yml/badge.svg?branch=master)\n\nnode-can\n========\n\nThis is a NodeJS SocketCAN extension. SocketCAN is a socket-based implementation of the CANbus protocol for Linux system.\n\nThis extensions makes it possible to send and receive CAN messages (extended, remote transission) using simple Javascript/Typescript functions.\n\nUsage (JavaScript)\n-----------------\n\nBasic CAN example:\n```javascript\nvar can = require(\"socketcan\");\n\nvar channel = can.createRawChannel(\"vcan0\", true);\n\n// Log any message\nchannel.addListener(\"onMessage\", function(msg) { console.log(msg); } );\n\n// Reply any message\nchannel.addListener(\"onMessage\", channel.send, channel);\n\nchannel.start();\n```\n\nWorking with message and signals:\n```javascript\nvar can = require(\"socketcan\");\n\n// Parse database\nvar network = can.parseNetworkDescription(\"samples/can_definition_sample.kcd\");\nvar channel = can.createRawChannel(\"vcan0\");\nvar db_motor = new can.DatabaseService(channel, network.buses[\"Motor\"]);\nvar db_instr = new can.DatabaseService(channel, network.buses[\"Instrumentation\"]);\n\nchannel.start();\n\n// Register a listener to get any value changes\ndb_motor.messages[\"CruiseControlStatus\"].signals[\"SpeedKm\"].onChange(function(s) {\n   console.log(\"SpeedKm \" + s.value);\n});\n\n// Register a listener to get any value updates\ndb_motor.messages[\"Emission\"].signals[\"Enginespeed\"].onUpdate(function(s) {\n   console.log(\"Enginespeed \" + s.value);\n});\n\n// Update tank temperature\ndb_instr.messages[\"TankController\"].signals[\"TankTemperature\"].update(80);\n\n// Trigger sending this message\ndb_instr.send(\"TankController\");\n\nchannel.stop()\n```\n\nUsage (TypeScript)\n------------------\n\nBasic CAN example:\n```typescript\nimport {Message} from \"*can.node\";\nimport * as can from \"socketcan\";\n\nconst channel = can.createRawChannel(\"vcan0\", true);\n\n// Log any message\nchannel.addListener(\"onMessage\", function (msg: Message) { console.log(msg); });\n\n// Reply any message\nchannel.addListener(\"onMessage\", channel.send, channel);\n\nchannel.start();\n```\n\nWorking with message and signals:\n\n```typescript\nimport * as can from \"socketcan\"\n\n// Parse database\nconst network = can.parseNetworkDescription(\"samples/can_definition_sample.kcd\");\nconst channel = can.createRawChannel(\"vcan0\");\nconst db_motor = new can.DatabaseService(channel, network.buses[\"Motor\"]);\nconst db_instr = new can.DatabaseService(channel, network.buses[\"Instrumentation\"]);\n\nchannel.start();\n\n// Register a listener to get any value changes\ndb_motor.messages[\"CruiseControlStatus\"].signals[\"SpeedKm\"].onChange(function (s: can.Signal) {\n\tconsole.log(\"SpeedKm \" + s.value);\n});\n\n// Register a listener to get any value updates\ndb_motor.messages[\"Emission\"].signals[\"Enginespeed\"].onUpdate(function (s: can.Signal) {\n\tconsole.log(\"Enginespeed \" + s.value);\n});\n\n// Update tank temperature\ndb_instr.messages[\"TankController\"].signals[\"TankTemperature\"].update(80);\n\n// Trigger sending this message\ndb_instr.send(\"TankController\");\n\nchannel.stop();\n```\n\nDocumentation\n-------\n\n[API documentation](https://sebi2k1.github.io/node-can) hosted on GitHub pages.\n\nInstall\n-------\n\nThere are two options for installing node-can:\n\n1. Clone / download node-can from [GitHub](https://github.com/sebi2k1/node-can), then:\n\n```shell\n    $ npm ci\n    $ npm run configure\n    $ npm run build:all\n```\n\n2. Install via npm:\n\n```shell\n    $ npm install socketcan\n```\n","funding_links":[],"categories":["Libraries and Tools","C++"],"sub_categories":["JavaScript"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebi2k1%2Fnode-can","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebi2k1%2Fnode-can","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebi2k1%2Fnode-can/lists"}