I am currently developing a binding to host openHAB things as WebThings (https://iot.mozilla.org/wot/#web-thing-description) so that they are accessible by other applications - mostly the Mozilla Gateway (https://iot.mozilla.org/). Furthermore, you can connect openHAB things and (Mozilla) WebThings to control each other.
Edit: It is now possible to auto-discover and manually import WebThings into openHAB and control them afterwards.
The binding uses the Java WebThing Framework (https://iot.mozilla.org/framework/) which currently offers no OSGi bundle. Therefore, i created the bundle myself based on the Jar on MVNRepository (https://mvnrepository.com/artifact/org.mozilla.iot/webthing/0.12.0).
From the ReadMe:
WebThings Binding
This binding can be used to:
-
Import WebThings and control them via openHAB
-
Host openHAB things as (Mozilla) WebThings.
-
Connect existing openHAB things to WebThings to control each other.
Example interaction: Link
!!! Work in progress !!!
Prerequisites
Copy the files from the dependencies folder
and the binding into your addons folder
Supported Things
-
WebThings WebThing: Import and control a WebThing.
-
WebThings Server: Host your openHAB things as WebThings.
-
WebThings Connector: Connect openHAB things and WebThings.
Discovery
Automatically discovers:
-
WebThings from the Gateway based on binding configuration
-
WebThings from local WebThing Servers via mDNS
Binding Configuration
Configuration Parameters:
-
Server URL of WebThing Server: Currently only Mozilla Gateways supported. This is used for by the WebThings Connector.
-
Bearer token: Token for the Connector Things authorization. Can be generated in the Mozilla Gateway:
Settings --> Developer --> Create local authorization
-
OpenHAB IP and Port: OpenHAB instance to get necessary information from. Used for REST API calls.
-
Match capabilities: If true the WebThing Server will try to add a @type to each WebThing to match Mozilla capabilities based on default tags - this may not always work flawlessly for all things. If set to false, all WebThings will appear as custom things.
Additional:
-
Background Discovery: If true all WebThings from the selected Gateway will be automatically discovered, without the need to manually start a search (may generate a lot of inbox entries if many things exist)
-
Operating system: Choose your installation (can be used as fallback option to import ThingUIDs for the WebThing Server)
-
Custom path: Set a custom path in case your operating system is not listed or you use a non-standard userdata directory
Thing Configuration
WebThings WebThing
Configuration parameters:
-
Link of WebThing: Link to WebThing to be imported
-
Security Scheme: Security method to access the respective WebThing
-
Security Token: Authorization token for “Bearer” authorization
-
Import Token: If true the security token can be left blank and will be imported from the binding configuration
WebThings Server
Configuration parameters:
-
Port of WebThing Server: Port to host your Webserver on. Multiple servers possible.
-
Linked items: Choose whether to create a property for every channel of the openHAB thing or for every item linked to it. For linked items naming convention of simple linking is currently advised
-
Host all things: Host all things (except things created by this binding) or only selected ones.
-
Selected openHAB things: Choose openHAB things to host as WebThings (only if 3. = false).
WebThings Connector
Configuration parameters:
-
ID of WebThing
-
UID of openHAB thing
Channels
Thing | channel | type | description |
---|---|---|---|
WebThing | Automatic | Automatic | All channels will be automacially generated based on the WebThing properties |
Thing | channel | type | description |
---|---|---|---|
Server | Port | Number | Port of WebThing Server |
Server | Hosted WebThings | Text | List of openHAB things hosted as WebThings |
Thing | channel | type | description |
---|---|---|---|
Connector | Update | Switch | Can be used to restart the websocket (re-connect) |
Connector | ID | String | ID of WebThing |
Connector | UID | String | UID of openHAB thing |
Example Use Cases
-
Easily add real world objects to openHAB using any of the existing WebThing Frameworks (Node.js, Pytho, Java, Rust, C#, Go, …) without the need for a binding
-
Single platform for multiple smart homes or smart home systems from one or multiple networks
-
Remote access
-
Sync openHAB instances
-
Authorization concept (expose different WebThing Servers with selected things via reverse proxy)
Planned Updates
-
Resolve known issues
-
Support for more items types / properties
Known Issues
Issue | Impact | Status | Workaround |
---|---|---|---|
Dependency incompatibility when REST API docs are installed | Binding may not start | Active | Remove docs --> install binding --> install docs |
First command for switch item / OnOff property gets send but not detected by gateway | Command not properly received | Active | Send another command after initially connecting |
Add webthing as internal dependency | Dependencies need to be deployed manually | Active | Add lib directory (currently not compiling) |
ItemStateChangeEvents for items with delimiters are not processed correctly | Some items are not controllable | Active | Switch case for special items |
WebThings can only be accessed via their index in list (e.g. localhost:8888/0) | Removal of things from a WebThing Server will change the indices of the other things | Active | Create multiple servers so that changes to one do not affect all things |
WebThings WebThing label & location can not be updated | Things need to be re-created | Active | Set during creation |
ConfigOptionProvider for WebThing Server may request the openHAB thing list before the API is ready | Server may not be creatable | Resolved | Try to manually restart bundle, Re-compile without WebThingsConfigOptionProvider.java
|
Work in progress code can be found here: https://github.com/svensven94/openhab-addons/tree/webthings/bundles/org.openhab.binding.webthings
Lastly, the relevant GitHub issue can be found here: https://github.com/openhab/openhab-addons/issues/7009
edit: updated ReadMe and link