diff --git a/events/2024.11.Munich/Documentation/WebThings Gateway/README.md b/events/2024.11.Munich/Documentation/WebThings Gateway/README.md new file mode 100644 index 00000000..2f3a4155 --- /dev/null +++ b/events/2024.11.Munich/Documentation/WebThings Gateway/README.md @@ -0,0 +1,30 @@ +# WebThings Gateway + +[WebThings Gateway](https://webthings.io/gateway/) is an open source Web of Things gateway which bridges a range of smart home protocols to the Web of Things. + +The Thing Descriptions shared in the TDs folder were generated by an instance of an early preview of WebThings Gateway 2.0 which can be accessed at https://plugfest.webthings.io. + +WebThings Gateway 2.0 acts as a Producer of WoT Thing Descriptions and implements: + +- WoT Thing Description 1.1 + - OAuth2SecurityScheme +- WoT Profiles + - HTTP Basic Profile + - HTTP SSE Profile +- WoT Discovery + - Direct Introduction Mechanism + - Well-Known URIs Introduction Mechanism + - ThingDirectory & Directory Service API + - OAuth2 Security Bootstrapping using WWW-Authenticate headers and Authorization Server Metadata + +Note that gateway.td.json is a new top-level Thing Description hosted by the gateway at `/` and `/.well-known/wot` which describes the gateway itself and the features of the Directory Service API it exposes. + +The gateway uses HTTP Bearer Authentication via Oauth2. I will provide both a username and password (for the HTML web interface) and a bearer token (for the HTTP API) on the WoT Working Group members mailing list. The Bearer token should be provided in an HTTP `Authorization` header or `jwt` query string in all API requests. + +Note that HTTP API requests must also specify an `Accept` header with a value of `application/json` or `application/td+json`, otherwise you will receive an HTML response by default. + +User documentation for WebThings Gateway can be found at https://webthings.io/docs/ + +WebThings Gateway 2.0 uses Node.js 20 and runs on a production quality [Ubuntu Core](https://ubuntu.com/core) base operating system inside [snap](https://snapcraft.io/) containerisation. + +Please email team@webthings.io with any questions. \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/actions-events-thing.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/actions-events-thing.td.json new file mode 100644 index 00000000..1406d0f3 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/actions-events-thing.td.json @@ -0,0 +1,159 @@ +{ + "title": "Virtual Actions & Events Thing", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-10", + "properties": {}, + "actions": { + "basic": { + "title": "No Input", + "description": "An action with no inputs, fires an event", + "forms": [ + { + "href": "/things/virtual-things-10/actions/basic" + } + ] + }, + "single": { + "title": "Single Input", + "description": "An action with a single, non-object input", + "input": { + "type": "number" + }, + "forms": [ + { + "href": "/things/virtual-things-10/actions/single" + } + ] + }, + "multiple": { + "title": "Multiple Inputs", + "description": "An action with mutiple, optional inputs", + "input": { + "type": "object", + "properties": { + "stringInput": { + "type": "string" + }, + "booleanInput": { + "type": "boolean" + } + } + }, + "forms": [ + { + "href": "/things/virtual-things-10/actions/multiple" + } + ] + }, + "advanced": { + "title": "Advanced Inputs", + "description": "An action with many inputs, some required", + "input": { + "type": "object", + "required": [ + "numberInput" + ], + "properties": { + "numberInput": { + "type": "number", + "minimum": 0, + "maximum": 100, + "unit": "percent" + }, + "integerInput": { + "type": "integer", + "unit": "metre" + }, + "stringInput": { + "type": "string" + }, + "booleanInput": { + "type": "boolean" + }, + "enumInput": { + "type": "string", + "enum": [ + "enum string1", + "enum string2", + "enum string3" + ] + } + } + }, + "forms": [ + { + "href": "/things/virtual-things-10/actions/advanced" + } + ] + } + }, + "events": { + "virtualEvent": { + "description": "An event from a virtual thing", + "data": { + "type": "number" + }, + "forms": [ + { + "href": "/things/virtual-things-10/events/virtualEvent", + "subprotocol": "sse" + } + ] + } + }, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-10" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-10" + } + ], + "forms": [ + { + "href": "/things/virtual-things-10/actions", + "op": "queryallactions" + }, + { + "href": "/things/virtual-things-10/events", + "op": [ + "subscribeallevents", + "unsubscribeallevents" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 0, + "selectedCapability": "Custom", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-10", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-10:readwrite", + "/things/virtual-things-10", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/air-quality-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/air-quality-sensor.td.json new file mode 100644 index 00000000..b6ffd446 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/air-quality-sensor.td.json @@ -0,0 +1,112 @@ +{ + "title": "Virtual Air Quality Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "AirQualitySensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-28", + "properties": { + "concentration": { + "name": "concentration", + "value": 20, + "title": "Gas Concentration", + "type": "number", + "@type": "ConcentrationProperty", + "unit": "ppm", + "minimum": 0, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-28/properties/concentration" + }, + { + "href": "/things/virtual-things-28/properties/concentration", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "density": { + "name": "density", + "value": 20, + "title": "Particulate Density", + "type": "number", + "@type": "DensityProperty", + "unit": "micrograms per cubic metre", + "minimum": 0, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-28/properties/density" + }, + { + "href": "/things/virtual-things-28/properties/density", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-28" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-28" + } + ], + "forms": [ + { + "href": "/things/virtual-things-28/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-28/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 26, + "selectedCapability": "AirQualitySensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-28", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-28:readwrite", + "/things/virtual-things-28", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/alarm.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/alarm.td.json new file mode 100644 index 00000000..0691b557 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/alarm.td.json @@ -0,0 +1,133 @@ +{ + "title": "Virtual Alarm", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "Alarm" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-21", + "properties": { + "alarm": { + "name": "alarm", + "value": false, + "title": "Alarm", + "type": "boolean", + "@type": "AlarmProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-21/properties/alarm" + }, + { + "href": "/things/virtual-things-21/properties/alarm", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": { + "trigger": { + "title": "Trigger", + "description": "Trigger alarm", + "forms": [ + { + "href": "/things/virtual-things-21/actions/trigger" + } + ] + }, + "silence": { + "title": "Silence", + "description": "Silence alarm", + "forms": [ + { + "href": "/things/virtual-things-21/actions/silence" + } + ] + } + }, + "events": { + "alarmEvent": { + "description": "An alarm event from a virtual thing", + "@type": "AlarmEvent", + "readOnly": true, + "data": { + "type": "string" + }, + "forms": [ + { + "href": "/things/virtual-things-21/events/alarmEvent", + "subprotocol": "sse" + } + ] + } + }, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-21" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-21" + } + ], + "forms": [ + { + "href": "/things/virtual-things-21/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-21/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + }, + { + "href": "/things/virtual-things-21/actions", + "op": "queryallactions" + }, + { + "href": "/things/virtual-things-21/events", + "op": [ + "subscribeallevents", + "unsubscribeallevents" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 19, + "selectedCapability": "Alarm", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-21", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-21:readwrite", + "/things/virtual-things-21", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/barometric-pressure-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/barometric-pressure-sensor.td.json new file mode 100644 index 00000000..057c0926 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/barometric-pressure-sensor.td.json @@ -0,0 +1,89 @@ +{ + "title": "Virtual Barometric Pressure Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "BarometricPressureSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-29", + "properties": { + "pressure": { + "name": "pressure", + "value": 20, + "title": "Pressure", + "type": "number", + "@type": "BarometricPressureProperty", + "unit": "hectopascal", + "minimum": 0, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-29/properties/pressure" + }, + { + "href": "/things/virtual-things-29/properties/pressure", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-29" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-29" + } + ], + "forms": [ + { + "href": "/things/virtual-things-29/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-29/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 27, + "selectedCapability": "BarometricPressureSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-29", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-29:readwrite", + "/things/virtual-things-29", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/binary-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/binary-sensor.td.json new file mode 100644 index 00000000..66156eaf --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/binary-sensor.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Binary Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "BinarySensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-4", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "BooleanProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-4/properties/on" + }, + { + "href": "/things/virtual-things-4/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-4" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-4" + } + ], + "forms": [ + { + "href": "/things/virtual-things-4/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-4/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 5, + "selectedCapability": "BinarySensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-4", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-4:readwrite", + "/things/virtual-things-4", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/camera.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/camera.td.json new file mode 100644 index 00000000..b2faf571 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/camera.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Camera", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "Camera" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-19", + "properties": { + "image": { + "name": "image", + "value": null, + "title": "Image", + "type": "null", + "@type": "ImageProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-19/properties/image" + }, + { + "href": "/things/virtual-things-19/properties/image", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-19" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-19" + } + ], + "forms": [ + { + "href": "/things/virtual-things-19/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-19/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 17, + "selectedCapability": "Camera", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-19", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-19:readwrite", + "/things/virtual-things-19", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/color-control.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/color-control.td.json new file mode 100644 index 00000000..abc5d7db --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/color-control.td.json @@ -0,0 +1,90 @@ +{ + "title": "Virtual Color Control", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "ColorControl" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-23", + "properties": { + "color": { + "name": "color", + "value": "#ffffff", + "title": "Color", + "type": "string", + "@type": "ColorProperty", + "readOnly": false, + "forms": [ + { + "href": "/things/virtual-things-23/properties/color" + }, + { + "href": "/things/virtual-things-23/properties/color", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-23" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-23" + } + ], + "forms": [ + { + "href": "/things/virtual-things-23/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-23/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 21, + "selectedCapability": "ColorControl", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-23", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-23:readwrite", + "/things/virtual-things-23", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/color-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/color-sensor.td.json new file mode 100644 index 00000000..d0678e91 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/color-sensor.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Color Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "ColorSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-26", + "properties": { + "color": { + "name": "color", + "value": "#ffffff", + "title": "Color", + "type": "string", + "@type": "ColorProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-26/properties/color" + }, + { + "href": "/things/virtual-things-26/properties/color", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-26" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-26" + } + ], + "forms": [ + { + "href": "/things/virtual-things-26/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-26/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 24, + "selectedCapability": "ColorSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-26", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-26:readwrite", + "/things/virtual-things-26", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/dimmable-color-light.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/dimmable-color-light.td.json new file mode 100644 index 00000000..c79caeb5 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/dimmable-color-light.td.json @@ -0,0 +1,183 @@ +{ + "title": "Virtual Dimmable Color Light", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch", + "Light", + "ColorControl" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-2", + "properties": { + "color": { + "name": "color", + "value": "#ffffff", + "title": "Color", + "type": "string", + "@type": "ColorProperty", + "readOnly": false, + "forms": [ + { + "href": "/things/virtual-things-2/properties/color" + }, + { + "href": "/things/virtual-things-2/properties/color", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "colorTemperature": { + "name": "colorTemperature", + "value": 2500, + "title": "Color Temperature", + "type": "number", + "@type": "ColorTemperatureProperty", + "unit": "kelvin", + "minimum": 2500, + "maximum": 9000, + "forms": [ + { + "href": "/things/virtual-things-2/properties/colorTemperature" + }, + { + "href": "/things/virtual-things-2/properties/colorTemperature", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "colorMode": { + "name": "colorMode", + "value": "color", + "title": "Color Mode", + "type": "string", + "@type": "ColorModeProperty", + "enum": [ + "color", + "temperature" + ], + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-2/properties/colorMode" + }, + { + "href": "/things/virtual-things-2/properties/colorMode", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "level": { + "name": "level", + "value": 0, + "title": "Brightness", + "type": "number", + "@type": "BrightnessProperty", + "unit": "percent", + "minimum": 0, + "maximum": 100, + "forms": [ + { + "href": "/things/virtual-things-2/properties/level" + }, + { + "href": "/things/virtual-things-2/properties/level", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-2/properties/on" + }, + { + "href": "/things/virtual-things-2/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-2" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-2" + } + ], + "forms": [ + { + "href": "/things/virtual-things-2/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-2/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 3, + "selectedCapability": "Light", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-2", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-2:readwrite", + "/things/virtual-things-2", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/dimmable-light.json b/events/2024.11.Munich/TDs/WebThings Gateway/dimmable-light.json new file mode 100644 index 00000000..1835efbe --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/dimmable-light.json @@ -0,0 +1,113 @@ +{ + "title": "Virtual Dimmable Light", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch", + "Light" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-8", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-8/properties/on" + }, + { + "href": "/things/virtual-things-8/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "level": { + "name": "level", + "value": 0, + "title": "Brightness", + "type": "number", + "@type": "BrightnessProperty", + "unit": "percent", + "minimum": 0, + "maximum": 100, + "forms": [ + { + "href": "/things/virtual-things-8/properties/level" + }, + { + "href": "/things/virtual-things-8/properties/level", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-8" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-8" + } + ], + "forms": [ + { + "href": "/things/virtual-things-8/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-8/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 9, + "selectedCapability": "Light", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-8", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-8:readwrite", + "/things/virtual-things-8", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/door-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/door-sensor.td.json new file mode 100644 index 00000000..74da067c --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/door-sensor.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Door Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "DoorSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-13", + "properties": { + "open": { + "name": "open", + "value": false, + "title": "Open", + "type": "boolean", + "@type": "OpenProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-13/properties/open" + }, + { + "href": "/things/virtual-things-13/properties/open", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-13" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-13" + } + ], + "forms": [ + { + "href": "/things/virtual-things-13/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-13/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 12, + "selectedCapability": "DoorSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-13", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-13:readwrite", + "/things/virtual-things-13", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/energy-monitor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/energy-monitor.td.json new file mode 100644 index 00000000..26e1e992 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/energy-monitor.td.json @@ -0,0 +1,177 @@ +{ + "title": "Virtual Energy Monitor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "EnergyMonitor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-22", + "properties": { + "instantaneousPower": { + "name": "instantaneousPower", + "value": 0, + "title": "Power", + "type": "number", + "@type": "InstantaneousPowerProperty", + "unit": "watt", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-22/properties/instantaneousPower" + }, + { + "href": "/things/virtual-things-22/properties/instantaneousPower", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "instantaneousPowerFactor": { + "name": "instantaneousPowerFactor", + "value": 0, + "title": "Power Factor", + "type": "number", + "@type": "InstantaneousPowerFactorProperty", + "minimum": -1, + "maximum": 1, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-22/properties/instantaneousPowerFactor" + }, + { + "href": "/things/virtual-things-22/properties/instantaneousPowerFactor", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "voltage": { + "name": "voltage", + "value": 0, + "title": "Voltage", + "type": "number", + "@type": "VoltageProperty", + "unit": "volt", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-22/properties/voltage" + }, + { + "href": "/things/virtual-things-22/properties/voltage", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "current": { + "name": "current", + "value": 0, + "title": "Current", + "type": "number", + "@type": "CurrentProperty", + "unit": "ampere", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-22/properties/current" + }, + { + "href": "/things/virtual-things-22/properties/current", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "frequency": { + "name": "frequency", + "value": 0, + "title": "Frequency", + "type": "number", + "@type": "FrequencyProperty", + "unit": "hertz", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-22/properties/frequency" + }, + { + "href": "/things/virtual-things-22/properties/frequency", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-22" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-22" + } + ], + "forms": [ + { + "href": "/things/virtual-things-22/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-22/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 20, + "selectedCapability": "EnergyMonitor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-22", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-22:readwrite", + "/things/virtual-things-22", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/gateway.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/gateway.td.json new file mode 100644 index 00000000..90f89d55 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/gateway.td.json @@ -0,0 +1,217 @@ +{ + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://www.w3.org/2022/wot/discovery" + ], + "@type": "ThingDirectory", + "id": "https://plugfest.webthings.io", + "base": "https://plugfest.webthings.io", + "title": "WebThings Gateway", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things", + "/things:readwrite" + ] + } + }, + "security": "oauth2_sc", + "properties": { + "things": { + "title": "Things", + "description": "Retrieve all Thing Descriptions", + "type": "array", + "items": { + "type": "object" + }, + "forms": [ + { + "href": "/things", + "htv:methodName": "GET", + "response": { + "description": "Success response", + "htv:statusCodeValue": 200, + "contentType": "application/json" + }, + "additionalResponses": [ + { + "description": "Token must contain scope", + "htv:statusCodeValue": 400 + } + ] + } + ] + } + }, + "actions": { + "createAnonymousThing": { + "description": "Create a Thing Description", + "input": { + "type": "object" + }, + "forms": [ + { + "href": "/things", + "htv:methodName": "POST", + "contentType": "application/json", + "response": { + "htv:statusCodeValue": 201 + }, + "additionalResponses": [ + { + "description": "Invalid or duplicate Thing Description", + "htv:statusCodeValue": 400 + }, + { + "description": "Internal error saving new Thing Description", + "htv:statusCodeValue": 500 + } + ] + } + ] + }, + "retrieveThing": { + "description": "Retrieve a Thing Description", + "uriVariables": { + "id": { + "@type": "ThingID", + "title": "Thing Description ID", + "type": "string", + "format": "iri-reference" + } + }, + "output": { + "description": "The schema is implied by the content type", + "type": "object" + }, + "safe": true, + "idempotent": true, + "forms": [ + { + "href": "/things/{id}", + "htv:methodName": "GET", + "response": { + "description": "Success response", + "htv:statusCodeValue": 200, + "contentType": "application/json" + }, + "additionalResponses": [ + { + "description": "TD with the given id not found", + "htv:statusCodeValue": 404 + } + ] + } + ] + }, + "updateThing": { + "description": "Update a Thing Description", + "uriVariables": { + "id": { + "@type": "ThingID", + "title": "Thing Description ID", + "type": "string", + "format": "iri-reference" + } + }, + "input": { + "type": "object" + }, + "forms": [ + { + "href": "/things/{id}", + "htv:methodName": "PUT", + "contentType": "application/json", + "response": { + "description": "Success response", + "htv:statusCodeValue": 200 + }, + "additionalResponses": [ + { + "description": "Invalid serialization or TD", + "htv:statusCodeValue": 400 + }, + { + "description": "Failed to update Thing", + "htv:statusCodeValue": 500 + } + ] + } + ] + }, + "partiallyUpdateThing": { + "description": "Partially update a Thing Description", + "uriVariables": { + "id": { + "@type": "ThingID", + "title": "Thing Description ID", + "type": "string", + "format": "iri-reference" + } + }, + "input": { + "type": "object" + }, + "forms": [ + { + "href": "/things/{id}", + "htv:methodName": "PATCH", + "contentType": "application/merge-patch+json", + "response": { + "description": "Success response", + "htv:statusCodeValue": 200 + }, + "additionalResponses": [ + { + "description": "Request body missing required parameters", + "htv:statusCodeValue": 400 + }, + { + "description": "TD with the given id not found", + "htv:statusCodeValue": 404 + }, + { + "description": "Failed to update Thing", + "htv:statusCodeValue": 500 + } + ] + } + ] + }, + "deleteThing": { + "description": "Delete a Thing Description", + "uriVariables": { + "id": { + "@type": "ThingID", + "title": "Thing Description ID", + "type": "string", + "format": "iri-reference" + } + }, + "forms": [ + { + "href": "/things/{id}", + "htv:methodName": "DELETE", + "response": { + "description": "Success response", + "htv:statusCodeValue": 204 + }, + "additionalResponses": [ + { + "description": "TD with the given id not found", + "htv:statusCodeValue": 404 + }, + { + "description": "Failed to remove Thing", + "htv:statusCodeValue": 500 + } + ] + } + ] + } + } +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/humidity-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/humidity-sensor.td.json new file mode 100644 index 00000000..14c4b381 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/humidity-sensor.td.json @@ -0,0 +1,90 @@ +{ + "title": "Virtual Humidity Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "HumiditySensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-27", + "properties": { + "humidity": { + "name": "humidity", + "value": 20, + "title": "Humidity", + "type": "number", + "@type": "HumidityProperty", + "unit": "percent", + "minimum": 0, + "maximum": 100, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-27/properties/humidity" + }, + { + "href": "/things/virtual-things-27/properties/humidity", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-27" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-27" + } + ], + "forms": [ + { + "href": "/things/virtual-things-27/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-27/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 25, + "selectedCapability": "HumiditySensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-27", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-27:readwrite", + "/things/virtual-things-27", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/leak-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/leak-sensor.td.json new file mode 100644 index 00000000..15f68679 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/leak-sensor.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Leak Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "LeakSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-16", + "properties": { + "leak": { + "name": "leak", + "value": false, + "title": "Leak", + "type": "boolean", + "@type": "LeakProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-16/properties/leak" + }, + { + "href": "/things/virtual-things-16/properties/leak", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-16" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-16" + } + ], + "forms": [ + { + "href": "/things/virtual-things-16/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-16/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 15, + "selectedCapability": "LeakSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-16", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-16:readwrite", + "/things/virtual-things-16", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/lock.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/lock.td.json new file mode 100644 index 00000000..2cc5ee85 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/lock.td.json @@ -0,0 +1,118 @@ +{ + "title": "Virtual Lock", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "Lock" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-25", + "properties": { + "locked": { + "name": "locked", + "value": "unlocked", + "title": "Current State", + "type": "string", + "@type": "LockedProperty", + "enum": [ + "locked", + "unlocked", + "jammed", + "unknown" + ], + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-25/properties/locked" + }, + { + "href": "/things/virtual-things-25/properties/locked", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": { + "lock": { + "@type": "LockAction", + "title": "Lock", + "description": "Lock the locking mechanism", + "forms": [ + { + "href": "/things/virtual-things-25/actions/lock" + } + ] + }, + "unlock": { + "@type": "UnlockAction", + "title": "Unlock", + "description": "Unlock the locking mechanism", + "forms": [ + { + "href": "/things/virtual-things-25/actions/unlock" + } + ] + } + }, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-25" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-25" + } + ], + "forms": [ + { + "href": "/things/virtual-things-25/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-25/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + }, + { + "href": "/things/virtual-things-25/actions", + "op": "queryallactions" + } + ], + "layoutIndex": 23, + "selectedCapability": "Lock", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-25", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-25:readwrite", + "/things/virtual-things-25", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/motion-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/motion-sensor.td.json new file mode 100644 index 00000000..73ec60e3 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/motion-sensor.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Motion Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "MotionSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-14", + "properties": { + "motion": { + "name": "motion", + "value": false, + "title": "Motion", + "type": "boolean", + "@type": "MotionProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-14/properties/motion" + }, + { + "href": "/things/virtual-things-14/properties/motion", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-14" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-14" + } + ], + "forms": [ + { + "href": "/things/virtual-things-14/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-14/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 13, + "selectedCapability": "MotionSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-14", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-14:readwrite", + "/things/virtual-things-14", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/multilevel-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/multilevel-sensor.td.json new file mode 100644 index 00000000..3ef58fe6 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/multilevel-sensor.td.json @@ -0,0 +1,111 @@ +{ + "title": "Virtual Multi-level Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "MultiLevelSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-5", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "BooleanProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-5/properties/on" + }, + { + "href": "/things/virtual-things-5/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "level": { + "name": "level", + "value": 0, + "title": "Level", + "type": "number", + "@type": "LevelProperty", + "unit": "percent", + "minimum": 0, + "maximum": 100, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-5/properties/level" + }, + { + "href": "/things/virtual-things-5/properties/level", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-5" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-5" + } + ], + "forms": [ + { + "href": "/things/virtual-things-5/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-5/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 6, + "selectedCapability": "MultiLevelSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-5", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-5:readwrite", + "/things/virtual-things-5", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/multilevel-switch.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/multilevel-switch.td.json new file mode 100644 index 00000000..a86b3ddd --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/multilevel-switch.td.json @@ -0,0 +1,114 @@ +{ + "title": "Virtual Multi-level Switch", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch", + "MultiLevelSwitch" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-1", + "properties": { + "level": { + "name": "level", + "value": 0, + "title": "Level", + "type": "number", + "@type": "LevelProperty", + "unit": "percent", + "minimum": 0, + "maximum": 100, + "readOnly": false, + "forms": [ + { + "href": "/things/virtual-things-1/properties/level" + }, + { + "href": "/things/virtual-things-1/properties/level", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-1/properties/on" + }, + { + "href": "/things/virtual-things-1/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-1" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-1" + } + ], + "forms": [ + { + "href": "/things/virtual-things-1/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-1/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 2, + "selectedCapability": "MultiLevelSwitch", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-1", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-1:readwrite", + "/things/virtual-things-1", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/on-off-color-light.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-color-light.td.json new file mode 100644 index 00000000..32069013 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-color-light.td.json @@ -0,0 +1,112 @@ +{ + "title": "Virtual On/Off Color Light", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch", + "Light", + "ColorControl" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-0", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-0/properties/on" + }, + { + "href": "/things/virtual-things-0/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "color": { + "name": "color", + "value": "#ffffff", + "title": "Color", + "type": "string", + "@type": "ColorProperty", + "readOnly": false, + "forms": [ + { + "href": "/things/virtual-things-0/properties/color" + }, + { + "href": "/things/virtual-things-0/properties/color", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-0" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-0" + } + ], + "forms": [ + { + "href": "/things/virtual-things-0/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-0/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 1, + "selectedCapability": "Light", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-0", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-0:readwrite", + "/things/virtual-things-0", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/on-off-color-temperature-light.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-color-temperature-light.td.json new file mode 100644 index 00000000..d9d8d1c5 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-color-temperature-light.td.json @@ -0,0 +1,114 @@ +{ + "title": "Virtual On/Off Color Temperature Light", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch", + "Light", + "ColorControl" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-12", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-12/properties/on" + }, + { + "href": "/things/virtual-things-12/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "colorTemperature": { + "name": "colorTemperature", + "value": 2500, + "title": "Color Temperature", + "type": "number", + "@type": "ColorTemperatureProperty", + "unit": "kelvin", + "minimum": 2500, + "maximum": 9000, + "forms": [ + { + "href": "/things/virtual-things-12/properties/colorTemperature" + }, + { + "href": "/things/virtual-things-12/properties/colorTemperature", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-12" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-12" + } + ], + "forms": [ + { + "href": "/things/virtual-things-12/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-12/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 11, + "selectedCapability": "Light", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-12", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-12:readwrite", + "/things/virtual-things-12", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/on-off-light.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-light.td.json new file mode 100644 index 00000000..43e7ef9e --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-light.td.json @@ -0,0 +1,90 @@ +{ + "title": "Virtual On/Off Light", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch", + "Light" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-7", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-7/properties/on" + }, + { + "href": "/things/virtual-things-7/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-7" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-7" + } + ], + "forms": [ + { + "href": "/things/virtual-things-7/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-7/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 8, + "selectedCapability": "Light", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-7", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-7:readwrite", + "/things/virtual-things-7", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/on-off-switch.json b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-switch.json new file mode 100644 index 00000000..85620316 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/on-off-switch.json @@ -0,0 +1,89 @@ +{ + "title": "Virtual On/Off Switch", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-3", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-3/properties/on" + }, + { + "href": "/things/virtual-things-3/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-3" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-3" + } + ], + "forms": [ + { + "href": "/things/virtual-things-3/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-3/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 4, + "selectedCapability": "OnOffSwitch", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-3", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-3:readwrite", + "/things/virtual-things-3", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/push-button.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/push-button.td.json new file mode 100644 index 00000000..ba1105cf --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/push-button.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Push Button", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "PushButton" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-15", + "properties": { + "pushed": { + "name": "pushed", + "value": false, + "title": "Pushed", + "type": "boolean", + "@type": "PushedProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-15/properties/pushed" + }, + { + "href": "/things/virtual-things-15/properties/pushed", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-15" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-15" + } + ], + "forms": [ + { + "href": "/things/virtual-things-15/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-15/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 14, + "selectedCapability": "PushButton", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-15", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-15:readwrite", + "/things/virtual-things-15", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/smart-plug.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/smart-plug.td.json new file mode 100644 index 00000000..2cd54017 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/smart-plug.td.json @@ -0,0 +1,227 @@ +{ + "title": "Virtual Smart Plug", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "OnOffSwitch", + "EnergyMonitor", + "SmartPlug", + "MultiLevelSwitch" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-6", + "properties": { + "on": { + "name": "on", + "value": false, + "title": "On/Off", + "type": "boolean", + "@type": "OnOffProperty", + "forms": [ + { + "href": "/things/virtual-things-6/properties/on" + }, + { + "href": "/things/virtual-things-6/properties/on", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "level": { + "name": "level", + "value": 0, + "title": "Level", + "type": "number", + "@type": "LevelProperty", + "unit": "percent", + "minimum": 0, + "maximum": 100, + "readOnly": false, + "forms": [ + { + "href": "/things/virtual-things-6/properties/level" + }, + { + "href": "/things/virtual-things-6/properties/level", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "instantaneousPower": { + "name": "instantaneousPower", + "value": 0, + "title": "Power", + "type": "number", + "@type": "InstantaneousPowerProperty", + "unit": "watt", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-6/properties/instantaneousPower" + }, + { + "href": "/things/virtual-things-6/properties/instantaneousPower", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "instantaneousPowerFactor": { + "name": "instantaneousPowerFactor", + "value": 0, + "title": "Power Factor", + "type": "number", + "@type": "InstantaneousPowerFactorProperty", + "minimum": -1, + "maximum": 1, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-6/properties/instantaneousPowerFactor" + }, + { + "href": "/things/virtual-things-6/properties/instantaneousPowerFactor", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "voltage": { + "name": "voltage", + "value": 0, + "title": "Voltage", + "type": "number", + "@type": "VoltageProperty", + "unit": "volt", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-6/properties/voltage" + }, + { + "href": "/things/virtual-things-6/properties/voltage", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "current": { + "name": "current", + "value": 0, + "title": "Current", + "type": "number", + "@type": "CurrentProperty", + "unit": "ampere", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-6/properties/current" + }, + { + "href": "/things/virtual-things-6/properties/current", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "frequency": { + "name": "frequency", + "value": 0, + "title": "Frequency", + "type": "number", + "@type": "FrequencyProperty", + "unit": "hertz", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-6/properties/frequency" + }, + { + "href": "/things/virtual-things-6/properties/frequency", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-6" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-6" + } + ], + "forms": [ + { + "href": "/things/virtual-things-6/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-6/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 7, + "selectedCapability": "SmartPlug", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-6", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-6:readwrite", + "/things/virtual-things-6", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/smoke-detector.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/smoke-detector.td.json new file mode 100644 index 00000000..84d9381e --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/smoke-detector.td.json @@ -0,0 +1,87 @@ +{ + "title": "Virtual Smoke Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "SmokeSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-30", + "properties": { + "smoke": { + "name": "smoke", + "value": false, + "title": "Smoke", + "type": "boolean", + "@type": "SmokeProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-30/properties/smoke" + }, + { + "href": "/things/virtual-things-30/properties/smoke", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-30" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-30" + } + ], + "forms": [ + { + "href": "/things/virtual-things-30/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-30/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 28, + "selectedCapability": "SmokeSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-30", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-30:readwrite", + "/things/virtual-things-30", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/temperature-sensor.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/temperature-sensor.td.json new file mode 100644 index 00000000..fbf2efe1 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/temperature-sensor.td.json @@ -0,0 +1,90 @@ +{ + "title": "Virtual Temperature Sensor", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "TemperatureSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-17", + "properties": { + "temperature": { + "name": "temperature", + "value": 20, + "title": "Temperature", + "type": "number", + "@type": "TemperatureProperty", + "unit": "degree celsius", + "minimum": -20, + "maximum": 50, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-17/properties/temperature" + }, + { + "href": "/things/virtual-things-17/properties/temperature", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-17" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-17" + } + ], + "forms": [ + { + "href": "/things/virtual-things-17/properties", + "op": "readallproperties" + }, + { + "href": "/things/virtual-things-17/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 16, + "selectedCapability": "TemperatureSensor", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-17", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-17:readwrite", + "/things/virtual-things-17", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/thermostat.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/thermostat.td.json new file mode 100644 index 00000000..9e264ee6 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/thermostat.td.json @@ -0,0 +1,194 @@ +{ + "title": "Virtual Thermostat", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "Thermostat", + "TemperatureSensor" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-24", + "properties": { + "temperature": { + "name": "temperature", + "value": 20, + "title": "Temperature", + "type": "number", + "@type": "TemperatureProperty", + "unit": "degree celsius", + "minimum": 0, + "maximum": 100, + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-24/properties/temperature" + }, + { + "href": "/things/virtual-things-24/properties/temperature", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "heatingTargetTemperature": { + "name": "heatingTargetTemperature", + "value": 19, + "title": "Heating Target", + "type": "number", + "@type": "TargetTemperatureProperty", + "unit": "degree celsius", + "minimum": 10, + "maximum": 38, + "multipleOf": 0.1, + "forms": [ + { + "href": "/things/virtual-things-24/properties/heatingTargetTemperature" + }, + { + "href": "/things/virtual-things-24/properties/heatingTargetTemperature", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "coolingTargetTemperature": { + "name": "coolingTargetTemperature", + "value": 25, + "title": "Cooling Target", + "type": "number", + "@type": "TargetTemperatureProperty", + "unit": "degree celsius", + "minimum": 10, + "maximum": 38, + "multipleOf": 0.1, + "forms": [ + { + "href": "/things/virtual-things-24/properties/coolingTargetTemperature" + }, + { + "href": "/things/virtual-things-24/properties/coolingTargetTemperature", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "heatingCooling": { + "name": "heatingCooling", + "value": "heating", + "title": "Heating/Cooling", + "type": "string", + "@type": "HeatingCoolingProperty", + "enum": [ + "off", + "heating", + "cooling" + ], + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-24/properties/heatingCooling" + }, + { + "href": "/things/virtual-things-24/properties/heatingCooling", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "thermostatMode": { + "name": "thermostatMode", + "value": "heat", + "title": "Mode", + "type": "string", + "@type": "ThermostatModeProperty", + "enum": [ + "off", + "heat", + "cool", + "auto" + ], + "forms": [ + { + "href": "/things/virtual-things-24/properties/thermostatMode" + }, + { + "href": "/things/virtual-things-24/properties/thermostatMode", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-24" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-24" + } + ], + "forms": [ + { + "href": "/things/virtual-things-24/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-24/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 22, + "selectedCapability": "Thermostat", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-24", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-24:readwrite", + "/things/virtual-things-24", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/thing.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/thing.td.json new file mode 100644 index 00000000..176a1b27 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/thing.td.json @@ -0,0 +1,210 @@ +{ + "title": "Virtual Thing", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-9", + "properties": { + "boolProperty": { + "name": "boolProperty", + "value": true, + "type": "boolean", + "forms": [ + { + "href": "/things/virtual-things-9/properties/boolProperty" + }, + { + "href": "/things/virtual-things-9/properties/boolProperty", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "stringProperty": { + "name": "stringProperty", + "value": "blah", + "type": "string", + "forms": [ + { + "href": "/things/virtual-things-9/properties/stringProperty" + }, + { + "href": "/things/virtual-things-9/properties/stringProperty", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "numberProperty": { + "name": "numberProperty", + "value": 12, + "type": "number", + "forms": [ + { + "href": "/things/virtual-things-9/properties/numberProperty" + }, + { + "href": "/things/virtual-things-9/properties/numberProperty", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "numberUnitProperty": { + "name": "numberUnitProperty", + "value": 34, + "type": "number", + "unit": "metres", + "forms": [ + { + "href": "/things/virtual-things-9/properties/numberUnitProperty" + }, + { + "href": "/things/virtual-things-9/properties/numberUnitProperty", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "numberUnitMinMaxProperty": { + "name": "numberUnitMinMaxProperty", + "value": 56, + "type": "number", + "unit": "degrees", + "minimum": 0, + "maximum": 100, + "forms": [ + { + "href": "/things/virtual-things-9/properties/numberUnitMinMaxProperty" + }, + { + "href": "/things/virtual-things-9/properties/numberUnitMinMaxProperty", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "numberEnumProperty": { + "name": "numberEnumProperty", + "value": 0, + "type": "number", + "unit": "something", + "enum": [ + 0, + 10, + 20, + 30 + ], + "forms": [ + { + "href": "/things/virtual-things-9/properties/numberEnumProperty" + }, + { + "href": "/things/virtual-things-9/properties/numberEnumProperty", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "stringEnumProperty": { + "name": "stringEnumProperty", + "value": "string1", + "type": "string", + "enum": [ + "string1", + "string2", + "string3", + "string4" + ], + "forms": [ + { + "href": "/things/virtual-things-9/properties/stringEnumProperty" + }, + { + "href": "/things/virtual-things-9/properties/stringEnumProperty", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-9" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-9" + } + ], + "forms": [ + { + "href": "/things/virtual-things-9/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-9/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 10, + "selectedCapability": "", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-9", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-9:readwrite", + "/things/virtual-things-9", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file diff --git a/events/2024.11.Munich/TDs/WebThings Gateway/video-camera.td.json b/events/2024.11.Munich/TDs/WebThings Gateway/video-camera.td.json new file mode 100644 index 00000000..c9fc14e7 --- /dev/null +++ b/events/2024.11.Munich/TDs/WebThings Gateway/video-camera.td.json @@ -0,0 +1,109 @@ +{ + "title": "Virtual Video Camera", + "@context": [ + "https://www.w3.org/2022/wot/td/v1.1", + "https://webthings.io/schemas" + ], + "@type": [ + "VideoCamera" + ], + "profile": [ + "https://www.w3.org/2022/wot/profile/http-basic/v1", + "https://www.w3.org/2022/wot/profile/http-sse/v1" + ], + "description": "", + "href": "/things/virtual-things-20", + "properties": { + "video": { + "name": "video", + "value": null, + "title": "Video", + "type": "null", + "@type": "VideoProperty", + "readOnly": true, + "forms": [ + { + "href": "/things/virtual-things-20/properties/video" + }, + { + "href": "/things/virtual-things-20/properties/video", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + }, + "streamActive": { + "name": "streamActive", + "value": false, + "title": "Streaming", + "type": "boolean", + "forms": [ + { + "href": "/things/virtual-things-20/properties/streamActive" + }, + { + "href": "/things/virtual-things-20/properties/streamActive", + "op": [ + "observeproperty", + "unobserveproperty" + ], + "subprotocol": "sse" + } + ] + } + }, + "actions": {}, + "events": {}, + "links": [ + { + "rel": "alternate", + "type": "text/html", + "href": "/things/virtual-things-20" + }, + { + "rel": "alternate", + "href": "wss://plugfest.webthings.io/things/virtual-things-20" + } + ], + "forms": [ + { + "href": "/things/virtual-things-20/properties", + "op": [ + "readallproperties", + "writemultipleproperties" + ] + }, + { + "href": "/things/virtual-things-20/properties", + "op": [ + "observeallproperties", + "unobserveallproperties" + ], + "subprotocol": "sse" + } + ], + "layoutIndex": 18, + "selectedCapability": "VideoCamera", + "iconHref": null, + "groupId": null, + "id": "https://plugfest.webthings.io/things/virtual-things-20", + "base": "https://plugfest.webthings.io/", + "securityDefinitions": { + "oauth2_sc": { + "scheme": "oauth2", + "flow": "code", + "authorization": "https://plugfest.webthings.io/oauth/authorize", + "token": "https://plugfest.webthings.io/oauth/token", + "scopes": [ + "/things/virtual-things-20:readwrite", + "/things/virtual-things-20", + "/things:readwrite", + "/things" + ] + } + }, + "security": "oauth2_sc" +} \ No newline at end of file