npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@thingweb/node-red-node-wot

v1.1.0

Published

Web of Things nodes for Node-RED using node-wot

Downloads

29

Readme

Node-RED Packages of node-wot

A Node-RED package of nodes for the Web of Things.

Can be installed from the Node-RED palette manager directly or via npm (see the npm package). The package provides nodes that can communicate with any HTTP/HTTPS, WebSocket, CoAP/CoAPS, MQTT, OPC UA, and Modbus device based on its W3C WoT Thing Description. The package is built upon the node-wot runtime environment.

Provided Nodes

After installation, the package adds 8 different nodes at the Node-RED palette, all together scoped under the Web of Things title. Those nodes are as follows and needed to interact with different interaction affordances of a Thing:

  1. Read Property node;
  2. Write Property node;
  3. Invoke Action node;
  4. Subscribe Event node;
  5. Update TD node;
  6. Server-End node;
  7. Server-property node;
  8. Server-Action node;
  9. Server-Event node;
  10. Server-TD node.

WoT nodes

Getting Started

Consume Things

To consume a Thing and interact with it, drag and drop one of the interaction nodes to a flow. Then double click on that node. Inside the opened window click the pencil icon next to Add new consumed-thing dropdown.

Add new consumed Thing

A new window will appear.

Add Thing Description

Now either copy-paste/type in a Thing Description inside the TD JSON box or fetch a Thing Description from a URL. Tip: In case you choose the first option, click on the three dots to expand the JSON editor.

After you click "Process"/"Fetch", all protocol bindings supported by the Thing will be enabled (except they are not supported by this package). Now you can leave only the bindings you need, and disable the others. Or you can leave them all as they are. Anyway, this can be changed at any time.

If a Thing needs basic authentication (i.e. using username and password) for any of its interaction affordances, you can enable that in the respective checkbox. Note: Only basic authentication is currently supported by this package. If you enable security, the nodes will automatically infer whether to use authentication for this particular affordance or not based on the provided Thing Description.

Finally, click on the red "Add" button on the top right corner.

Now, for all WoT nodes you add to a flow, you will see all the respective interaction affordances populated from the Thing Description.

You can also add more Things and choose a particular one for any node you add. To see a fetched property value you can wire it with the "debug" node of Node-RED, and see all the values inside the "Debug messages" tab of Node-RED. To write to a property, wire an "inject" node with the "Write Property" node. In the "inject" node, select JSON format as payload and plug in your value.

To send an input for an action you can also wire it with the "inject" node as explained above. Tip: To invoke an action that does not require any input, wire it with an empty "inject" node.

Properties and Actions also support uriVariables. They can be specified inside "Read Property"/"Write Property"/"Invoke Action" node properties.

Subscribing to an event is pretty much the same as reading a property.

Overall, a basic flow may look like this.

Flow Example

Expose Things

To expose a Thing, firstly, drag & drop one of the nodes belonging to the Thing, either Property(Server-Property), Action(Server-Action), or Event(Server-Event) to the canvas.

When you double-click on that node, a property screen appears.

Property Screen

On the properties screen, the Server config and Thing config must be configured. The roles of each config are as follows:

  • Server config: Set up the communication method between the client and the Thing.
  • Thing config: Set the attributes of the Thing such as the Thing title.

By performing Server config and Thing config in the Server-Property, Server-Action, and Server-Event nodes, you determine how to publish properties, actions, and events.

If you create a new server config on the properties screen, the following screen will appear.

Server Config Screen

Perform the following settings:

  • Server name: Specify the server name.
  • Binding type: Specify the communication method between the server and the client.
  • Binding config: Perform settings according to the type of binding.

If you create a new thing config on the properties screen, the following screen will appear.

Thing Config Screen

Specify the Thing title. The Thing title will be included in the Thing Description.

Description and Thing ID are optional; if Thing ID is not specified, Thing ID will be generated automatically.

Server config and Thing config can be shared across multiple Server-Property, Server-Action, and Server-Event nodes. By sharing configs, you can publish one or more properties, actions, and events to the client as a single Thing.

In addition to server config and Thing config, there are necessary settings for each Server-Property, Server-Action, and Server-Event node. For the settings of each node, refer to the node help. Help can be viewed on the Node-RED editor's Help tab.

The Server-End node represents the end of a flow executed by a client request. Flows connected to the two output terminals of the Server-Property node (read/write requests) and the output terminal of the Server-Action node must end with the Server-End node.

Here's an example of a flow:

Server Flow Example

The Thing Description required when the client uses a Thing is set in the thingDescriptions object of the global context. The member name is <server name>::<Thing title>. If you want to check the Thing Description, open the Context Data tab of the Node-RED editor and press the refresh icon of the Global context to display it.

Reference TD

The Thing Description can also be obtained using the Server-TD node.

Also, the client can use the Update TD node to replace the Thing Description. For example, if the server URL is changed, the destination server can be changed without restarting the flow.

You can get the Example from the Import menu of the Node-RED editor for reference.

Import Example Flows

Currently, the supported binding types are HTTP, CoAP, and MQTT. As shown in the table below, each of these types of bindings has its own available/unavailable functions. Available functions are denoted by and unavailable functions are denoted by -.

| |http|coap|mqtt| | :---: | :--- | :--- | :--- | |read property|✓|✓|-| |observe property|✓ *1|-|✓| |write property|✓|✓|✓| |invoke action|✓|✓|-| |subscribe event|✓ *1|-|✓|

*1: After the connection with the server times out after 1 hour, it is not reconnected

Also, it is unclear how to define the flow when the data type is null.