{"id":16670454,"url":"https://github.com/hlapp/node-red-contrib-wirelesstag","last_synced_at":"2026-04-27T13:31:35.952Z","repository":{"id":143898663,"uuid":"79680985","full_name":"hlapp/node-red-contrib-wirelesstag","owner":"hlapp","description":"Node-RED nodes for Wireless Sensor Tags","archived":false,"fork":false,"pushed_at":"2018-01-26T04:13:56.000Z","size":121,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-30T22:32:25.463Z","etag":null,"topics":["iot","node-red","sensor","wireless-sensor-tag"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/hlapp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2017-01-21T23:59:26.000Z","updated_at":"2020-01-02T18:28:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"41819407-d727-4cf2-8e8c-0f2c98e67bba","html_url":"https://github.com/hlapp/node-red-contrib-wirelesstag","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/hlapp/node-red-contrib-wirelesstag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlapp%2Fnode-red-contrib-wirelesstag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlapp%2Fnode-red-contrib-wirelesstag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlapp%2Fnode-red-contrib-wirelesstag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlapp%2Fnode-red-contrib-wirelesstag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hlapp","download_url":"https://codeload.github.com/hlapp/node-red-contrib-wirelesstag/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlapp%2Fnode-red-contrib-wirelesstag/sbom","scorecard":{"id":466376,"data":{"date":"2025-08-11","repo":{"name":"github.com/hlapp/node-red-contrib-wirelesstag","commit":"5d1944377ca9f2726af22d2a8b08c8374cf52139"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","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":"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":"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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 19 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-19T12:37:03.417Z","repository_id":143898663,"created_at":"2025-08-19T12:37:03.417Z","updated_at":"2025-08-19T12:37:03.417Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32339288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"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":["iot","node-red","sensor","wireless-sensor-tag"],"created_at":"2024-10-12T11:38:30.257Z","updated_at":"2026-04-27T13:31:35.946Z","avatar_url":"https://github.com/hlapp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/hlapp/node-red-contrib-wirelesstag.svg?branch=master)](https://travis-ci.org/hlapp/node-red-contrib-wirelesstag)\n[![npm](https://img.shields.io/npm/v/node-red-contrib-wirelesstag.svg)](https://www.npmjs.com/package/node-red-contrib-wirelesstag)\n[![npm](https://img.shields.io/npm/dt/node-red-contrib-wirelesstag.svg)](https://www.npmjs.com/package/node-red-contrib-wirelesstag)\n[![david-dm](https://david-dm.org/hlapp/node-red-contrib-wirelesstag.svg)](https://david-dm.org/hlapp/node-red-contrib-wirelesstag)\n[![david-dm](https://david-dm.org/hlapp/node-red-contrib-wirelesstag/dev-status.svg)](https://david-dm.org/hlapp/node-red-contrib-wirelesstag?type=dev)\n\n# node-red-contrib-wirelesstag\n\n![Wireless Sensor Tag nodes in palette](assets/wirelesstag_node-red-palette.png)\n\nTwo nodes (_wirelesstag-s_ and _wirelesstag-a_) for [Node-RED] that access\n[Wireless Sensor Tags] and their sensors. One (_wirelesstag-s_) represents an\nindividual sensor on a specified tag, and will output data from only that\nsensor. The other node (_wirelesstag-a_) represents the whole collection of\ntags (and thus their sensors) accessible to the authenticated account. It\noutputs data for any tag (and all its sensors) reported by the API server as\nhaving an update available.\n\n![Wireless Sensor Tag nodes in a flow](assets/wirelesstag_node-red-flow.png)\n\nNodes communicate with the [Wirelesstag JSON Web Service API] using the\n[wirelesstags] NodeJS package.\n\n## Prerequisites\n\nTo connect these nodes, you must have an account with a Wirelesstag\nserver. The server can be the one hosted by the vendor, or a\nself-hosted one; the base URI for the API endpoint can be configured\nif different from the default.\n\nInstead of using the credentials of your \"main\" account, it is highly\nrecommended to create a separate service account as a \"limited user\"\nfor authenticating through this package.\n([Reasons](https://github.com/hlapp/wirelesstags-js#installation-and-setup).)\nBecause tags can be made visible to or removed from a \"limited user\" account\ndynamically, this also allows filtering at the server-level which tags are\naccessible to a Node-RED flow to begin with.\n\n## Installation\n\nRun the follwing command in the root directory of your Node-RED installation.\nUsually this is `~/.node-red`.\n\n```\n$ npm install node-red-contrib-wirelesstag\n```\n\nThis should also install the dependencies.\n\n## Usage\n\nFor each node, the following parameters are configurable:\n\n* The API connection (email, password, and base URI for the JSON\n  Web API server).\n* (Optional) The message topic, or a topic prefix. If left empty, the topic\n  is auto-generated.\n* (Optional) A name for the node. If left empty, the name is\n  auto-generated from the tag and sensor names.\n\nFor _wirelesstag-s_ nodes, the following are also available:\n\n* The tag manager, tag, and sensor for which to report data. The lists\n  of available choices are auto-populated.\n* Whether to auto-update the tag's attribute and sensor data from the server.\n  Default is yes. If disabled, the input capability (see below) must be used\n  to trigger data updates.\n\n### Output\n\nBoth nodes send messages with the following properties and structure (aside\nfrom `topic`):\n\n* `msg.payload` with properties `sensor` (the kind of sensor), `reading`\n  (the sensor's current reading), `eventState` (the current state, such as\n  _Normal_, _Too High_, etc), and `armed` (true if the sensor is armed and\n  false otherwise).\n* `msg.sensorConfig`: the properties of the monitoring configuration\n  for the sensor, will depend on the sensor.\n* `msg.tag`: additional properties of the tag (`name`, `uuid`,\n  `slaveId`, `alive`, and `updateInterval`).\n* `msg.tagManager`: additional properties of the tag manager with\n  which the tag is associated (`name`, `mac`, and `online`).\n\nA _wirelesstag-s_ node will send these only for the sensor it is configured\nfor, whereas a _wirelesstag-a_ node will send this message for each sensor of\nthe tag that the server (see below) reports has having updated attribute or\nsensor data available. If only some tags and/or sensors are of interest\nin a flow, other nodes (such as _switch_) will need to be used to filter\nthe output of a _wirelesstag-a_ node.\n\nThe nodes use a polling API endpoint to continuously poll for updates.\n(This is the same mechanism as the [Wirelesstag web-application]\nuses.) How frequently new data becomes available for which tag is\ndetermined by the update interval configured for each tag (and can\nthus be changed using the Wirelesstag native web or mobile apps).\n\n### Input\n\nWhen connected on input, both nodes inspect `msg.payload` properties to\neither \"actuate\" the matching tag and/or sensor (by modifying their properties),\nor to request a tag data update from the server (or from the physical tag\nitself). Properties to be modified must be in the same structure, and their\nnew value of the same type, as they are output by the node. The following\nproperties are recognized:\n\n* `armed`: arm the sensor if true, and disarm otherwise.\n* `tag.updateInterval`: set the update interval for the tag.\n* `sensorConfig.*`: set the corresponding sensor configuration\n  properties.\n* `immediate`: if `true` and triggering a data update, force an immediate\n  update from the physical tag. (This defaults to `true` for _wirelesstag-a_\n  nodes.)\n\nDesired payloads can, for example, be injected with the _inject_ node,\nor created and set with the _change_ node. For example, the following\nas JSON-format payload for the _inject_ node will change the notification\nsound for the sensor:\n\n```js\n{ \"sensorConfig\": { \"notifySettings\": { \"sound\": \"moof\" } } }\n```\n\nIn the _change_ node, choose \"msg.\" from the selector and the following\nexpression for specifying the property:\n\n```js\nsensorConfig.notifySettings.sound\n```\n\nA data update from the server is triggered if the `msg.payload` received on\ninput does not contain a property for actuating the sensor or tag. If the\ntag attribute and data returned from the server differ from those received\npreviously, it will generate one (_wirelesstag-s_) or more (_wirelesstag-a_)\nmessages on output.\n\n### Caveats and limitations\n\n* Auto-populating the dropdowns for the tag manager, tag, and sensor\n  selection requires a live connection made through the [wirelesstags]\n  API. Due to the way the Node-RED editor works, this isn't available\n  until the respective cloud API configuration node is _deployed_.\n  Hence, when setting up a node with a new cloud API configuration,\n  the node _must_ first be deployed. For _wirelesstag-s_ nodes, configuration\n  can then be resumed.\n* In principle each event (such as motion detected, temperature too\n  high, etc) for armed sensors should result in data becoming\n  available for the corresponding tag shortly thereafter. In practice,\n  this does not always seem to be the case, in particular for the\n  event of returning to \"normal\".\n* The [wirelesstags] library currently only supports username/password\n  authentication, and hence so does this node.\n* Even though the configuration interface allows multiple API\n  connections to be configured, all tags will at present use the same\n  API connection (normally the first one), because the [wirelesstags]\n  library cannot currently switch between sessions using different\n  sets of credentials.\n\n## How to support\n\nAside from reporting issues and contributing pull requests, if you\nplan to buy from Wireless Sensor Tags, you might consider using\n[this link](https://goo.gl/GxwQbZ) to their website. If more than 10\npeople do so, and some end up buying, I stand to receive a discount on\na past purchase of mine, which will allow me to buy other types of\ntags in the future and support those too.\n\n## Credits\n\nThe icon is derived from the [\"Wifi\" icon by Peter Borges] of The Noun\nProject.\n\n## License\n\nAvailable under the [MIT License](LICENSE).\n\n[Node-RED]: https://nodered.org\n[Wireless Sensor Tags]: http://wirelesstag.net\n[Wirelesstag web-application]: https://wirelesstag.net/eth/\n[Wirelesstag JSON Web Service API]: http://mytaglist.com/media/mytaglist.com/apidoc.html\n[wirelesstags]: https://github.com/hlapp/wirelesstags-js\n[\"Wifi\" icon by Peter Borges]: https://thenounproject.com/term/iot/362213/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhlapp%2Fnode-red-contrib-wirelesstag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhlapp%2Fnode-red-contrib-wirelesstag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhlapp%2Fnode-red-contrib-wirelesstag/lists"}