From 73d97908cc254f28507a9e2b82151a06a058aca2 Mon Sep 17 00:00:00 2001 From: Michael Lagally Date: Tue, 31 May 2022 16:23:51 +0200 Subject: [PATCH 1/4] WoTWebThing Profile implementation --- events/2022.06.Online/Profiles/README.md | 15 +- .../TD/Oracle/TDs/WoTWebThing.md | 135 +++++++++ .../TD/Oracle/TDs/WoTWebThing.td.jsonld | 261 ++++++++++++++++++ 3 files changed, 406 insertions(+), 5 deletions(-) create mode 100644 events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.md create mode 100644 events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld diff --git a/events/2022.06.Online/Profiles/README.md b/events/2022.06.Online/Profiles/README.md index dd12b32a..7226b986 100644 --- a/events/2022.06.Online/Profiles/README.md +++ b/events/2022.06.Online/Profiles/README.md @@ -1,6 +1,11 @@ -# WoT March 2022 Plugfest/Testfest +# WoT June 2022 Plugfest/Testfest -* Have captured some TDs now that have "profile" members -* But not all are fully compliant or use the features of the existing "Core Profile" spec, or use that URL -* Have extracted template.csv from profile spec -- [ ] Copy "template.csv" to "manual.csv" for now +## HTTP Profile implementations: + +### 1. WoTWebThing: + +Demonstrator of a WoTWebThing implementation for a Pump, which implements the baseline and Webhook profile. + +Thing Description: [../TD/Oracle/TDs/WoTWebThing.td.jsonld]() + +Documentation: [../TD/Oracle/TDs/WoTWebThing.md](../TD/Oracle/TDs/WoTWebThing.md) \ No newline at end of file diff --git a/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.md b/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.md new file mode 100644 index 00000000..9449f99b --- /dev/null +++ b/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.md @@ -0,0 +1,135 @@ + +# WotWebThing + +The *WoTWebThing* is a profile compliant implementation of a pump. + +It is a simplified model of a pump for liquids that provides several properties, actions and a Webhook event. + +It contains several operation status indicators that are exposed via properties. +These properties can be read individually, or all properties can be read at once. + +The *WoTWebThing* provides 3 operations: +- power +- diagnose +- resetFilter + +The *WoTWebThing* provides a *filterClogged* event affordance, to which a consumer can subscribe/unsubscribe. + +An event subscriber registers the endpoint of a HTTP server that receives event notifications upon subscription. + +## Authentication + +The *WoTWebThing* requires basic authentication in the HTTP authentication header, as illustrated in the curl examples below. + +## Properties + +The following properties are defined: + +``` +Cycle_Peak_Operation_Percent_Of_Minute +Cycle_Cases_Pressure_Max +Cycle_Cases_Pressure_Min +Cycle_Return_Pressure_Max +Cycle_Maximum_Inlet_Pressure +``` +### Setting a property + +``` +% curl -X PUT 130.35.140.146:24042/properties/meaning -u "w3cwotprofile:eliforp" -d "{ value : \"41\" }" +``` + +### reading a single property +``` +% curl 130.35.140.146:24042/properties/meaning -u "w3cwotprofile:eliforp" +{"meaning": 42} +``` + +### reading all properties + +``` +% curl 130.35.140.146:24042/properties -u "w3cwotprofile:eliforp" +{ + "Cycle_Return_Pressure_Min": 1.3913971190868986, + "Cycle_Maximum_Inlet_Pressure": 301.42182499556196, + "meaning": 42, + "Cycle_Peak_Operation_Percent_Of_Minute": 1.5436025961821986, + "Cycle_Cases_Pressure_Max": 3, + "Cycle_Cases_Pressure_Min": 0, + "Cycle_Return_Pressure_Max": 18.77156927455416 +} +``` + +## Actions + +The operation *power* is a synchronous operation which returns an immediate status response. + +The *diagnose* operation models an asynchronous operation. When invoked it returns an *ActionStatus* response, which can be used for querying the status of the action. The duration of the action is between 30-60s. + +### Synchronous actions +``` +curl -v 130.35.140.146:24042/actions/power -u "w3cwotprofile:eliforp" -d "{value: true}" +``` + +The following action *always* returns *forbidden* for testing purposes: +``` +curl -v 130.35.140.146:24042/actions/resetFilter -u "w3cwotprofile:eliforp" -d "{value: true}" +-> forbidden +``` + +### Asynchronous actions + +To invoke an asynchronous action: +``` +curl -v -X POST 130.35.140.146:24042/actions/diagnose -u "w3cwotprofile:eliforp" +``` + +Response is an ActionStatus object: +``` +{ + "timeRequested": "2022-05-31T13:31:26.895516", + "href": "actions/diagnose/b7968ef8-9e7c-4230-bbca-85be13f35efd", + "status": "running" +} +``` + +Querying the state of an asynchronous action: +``` +% curl -X GET 130.35.140.146:24042/actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a -u "w3cwotprofile:eliforp" + +{ + "timeRequested": "2022-05-30T18:16:45.169514", + "href": "actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a", + "status": "running" +} +``` + +After the action has ended: + +``` +% curl -X GET 130.35.140.146:24042/actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a -u "w3cwotprofile:eliforp" + +{ + "timeEnded": "2022-05-30T18:17:37.297650", + "timeRequested": "2022-05-30T18:16:45.169514", + "href": "actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a", + "status": "completed" +} +``` + +## Events + +### Event subscription: +``` +curl -v -X POST 130.35.140.146:24042/events/filterClogged -u "w3cwotprofile:eliforp" -d "{callbackURL : \"http://130.35.140.146:223\" }" + +-> {"subscriptionID": 903305380} +``` +#### Unsubscribe using callbackURL +``` +curl -v -X DELETE 130.35.140.146:24042/events/filterClogged -u "w3cwotprofile:eliforp" -d "{callbackURL : \"http://130.35.140.146:223\" }" +``` +#### Unsubscribe using subscriptionId +``` +curl -v -X DELETE 130.35.140.146:24042/events/filterClogged -u "w3cwotprofile:eliforp" -d "{"subscriptionID": \"904712663\"}" + +``` diff --git a/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld b/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld new file mode 100644 index 00000000..96e4f278 --- /dev/null +++ b/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld @@ -0,0 +1,261 @@ +{ + "@context": [ + "https://www.w3.org/2019/wot/td/v1", + "https://www.w3.org/2022/wot/td/v1.1" + ], + "@type": "Thing", + "title": "Blue Pump WoTWebThing", + "description": "Blue Pump WoTWebThing - Profile compliant WebThing (properties + actions + WebHook events)", + "id": "urn:com:blue:pump:data", + "profile": [ + "https://www.w3.org/2022/wot/profile/baseline/v1", + "https://www.w3.org/2022/wot/profile/http-webhook/v1" + ], + "version": { + "instance": "1.0.0" + }, + "base": "http://130.35.140.146:24042", + "securityDefinitions": { + "basic_sc": { + "scheme": "basic", + "in": "header" + } + }, + "security": [ + "basic_sc" + ], + "created": "2022-03-15T12:57:09.459Z", + "modified": "2022-04-05T12:01:09.459Z", + "userLastModified": "Michael Lagally", + "support": "mailto:Michael.Lagally@oracle.com", + "properties": { + "Cycle_Maximum_Inlet_Pressure": { + "description": "Cycle Maximum Inlet Pressure on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Maximum_Inlet_Pressure", + "properties": { + "Cycle_Maximum_Inlet_Pressure": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Maximum_Inlet_Pressure", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Return_Pressure_Min": { + "description": "Cycle Return Pressure Min on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Return_Pressure_Min", + "properties": { + "Cycle_Return_Pressure_Min": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Return_Pressure_Min", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Return_Pressure_Max": { + "description": "Cycle Return Pressure Max on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Return_Pressure_Max", + "properties": { + "Cycle_Return_Pressure_Max": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Return_Pressure_Max", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Cases_Pressure_Min": { + "description": "Cycle Case Pressure Min on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Cases_Pressure_Min", + "properties": { + "Cycle_Cases_Pressure_Min": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Cases_Pressure_Min", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Cases_Pressure_Max": { + "description": "Cycle Case Pressure Max on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Cases_Pressure_Max", + "properties": { + "Cycle_Cases_Pressure_Max": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Cases_Pressure_Max", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Peak_Operation_Percent_Of_Minute": { + "description": "Cycle Peak Operation Percent of Minute", + "type": "object", + "readOnly": true, + "title": "Cycle_Peak_Operation_Percent_Of_Minute", + "properties": { + "Cycle_Peak_Operation_Percent_Of_Minute": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Peak_Operation_Percent_Of_Minute", + "contentType": "application/json", + "op": "readproperty" + } + ] + } + }, + "actions": { + "power": { + "description": "Turns system ON or OFF", + "title": "power", + "input": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/actions/power", + "contentType": "application/json", + "op": "invokeaction" + } + ] + }, + "diagnose": { + "description": "Runs diagnostics (async action)", + "title": "diagnose", + "forms": [ + { + "href": "http://130.35.140.146:24042/actions/diagnose", + "contentType": "application/json", + "op": "invokeaction" + } + ] + }, + "resetFilter": { + "description": "Used to notify the pump that the filter has been replaced. Responds with a 403 Forbidden", + "title": "resetFilter", + "forms": [ + { + "href": "http://130.35.140.146:24042/actions/resetFilter", + "contentType": "application/json", + "op": "invokeaction" + } + ] + }, + "events": { + "filterClogged": { + "title": "filterClogged", + "description": "Filter clogged alert", + "subscription": { + "type": "object", + "properties": { + "callbackURL": { + "type": "string", + "format": "uri", + "description": "Callback URL provided by subscriber for Webhook notifications.", + "writeOnly": true + }, + "subscriptionID": { + "type": "string", + "description": "Unique subscription ID provided by WebThing.", + "readOnly": true + } + } + }, + "cancellation": { + "type": "object", + "properties": { + "subscriptionID": { + "type": "string", + "description": "subscription ID to cancel subscription.", + "writeOnly": true + } + } + }, + "data": { + "title": "filterClogged", + "type": "object", + "properties": { + "filterClogged": { + "type": "boolean" + }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "seqNr": { + "type": "number" + } + } + }, + "dataResponse": { + "title": "emergencyStop", + "type": "object", + "properties": { + "filterClogged": { + "type": "boolean" + }, + "timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "forms": [ + { + "op": "subscribeevent", + "href": "http://130.35.140.146:24042/events/filterClogged", + "htv:methodName": "POST", + "subprotocol": "webhook", + "contentType": "application/json" + }, + { + "op": "unsubscribeevent", + "href": "http://130.35.140.146:24042/events/filterClogged", + "htv:methodName": "DELETE", + "subprotocol": "webhook", + "contentType": "application/json" + } + ] + } + } + } +} \ No newline at end of file From cca921fc98f9ffe1013df58082fb2dfea2e6ffec Mon Sep 17 00:00:00 2001 From: Michael Lagally Date: Tue, 31 May 2022 16:36:26 +0200 Subject: [PATCH 2/4] minor --- events/2022.06.Online/Profiles/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/events/2022.06.Online/Profiles/README.md b/events/2022.06.Online/Profiles/README.md index 7226b986..52ef8f46 100644 --- a/events/2022.06.Online/Profiles/README.md +++ b/events/2022.06.Online/Profiles/README.md @@ -8,4 +8,6 @@ Demonstrator of a WoTWebThing implementation for a Pump, which implements the ba Thing Description: [../TD/Oracle/TDs/WoTWebThing.td.jsonld]() -Documentation: [../TD/Oracle/TDs/WoTWebThing.md](../TD/Oracle/TDs/WoTWebThing.md) \ No newline at end of file +Documentation: [../TD/Oracle/TDs/WoTWebThing.md](../TD/Oracle/TDs/WoTWebThing.md) + +The WoTWebThing is online. \ No newline at end of file From 08f23adca72027a49b76f9ca09fcfa0723e826c6 Mon Sep 17 00:00:00 2001 From: Michael Lagally Date: Wed, 15 Jun 2022 14:46:42 +0200 Subject: [PATCH 3/4] fixing nexting level for events --- .../TD/Oracle/TDs/WoTWebThing.td.jsonld | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld b/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld index 96e4f278..ee16fb4e 100644 --- a/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld +++ b/events/2022.06.Online/TD/Oracle/TDs/WoTWebThing.td.jsonld @@ -179,83 +179,83 @@ "op": "invokeaction" } ] - }, - "events": { - "filterClogged": { - "title": "filterClogged", - "description": "Filter clogged alert", - "subscription": { - "type": "object", - "properties": { - "callbackURL": { - "type": "string", - "format": "uri", - "description": "Callback URL provided by subscriber for Webhook notifications.", - "writeOnly": true - }, - "subscriptionID": { - "type": "string", - "description": "Unique subscription ID provided by WebThing.", - "readOnly": true - } - } - }, - "cancellation": { - "type": "object", - "properties": { - "subscriptionID": { - "type": "string", - "description": "subscription ID to cancel subscription.", - "writeOnly": true - } + } + }, + "events": { + "filterClogged": { + "title": "filterClogged", + "description": "Filter clogged alert", + "subscription": { + "type": "object", + "properties": { + "callbackURL": { + "type": "string", + "format": "uri", + "description": "Callback URL provided by subscriber for Webhook notifications.", + "writeOnly": true + }, + "subscriptionID": { + "type": "string", + "description": "Unique subscription ID provided by WebThing.", + "readOnly": true } - }, - "data": { - "title": "filterClogged", - "type": "object", - "properties": { - "filterClogged": { - "type": "boolean" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "seqNr": { - "type": "number" - } + } + }, + "cancellation": { + "type": "object", + "properties": { + "subscriptionID": { + "type": "string", + "description": "subscription ID to cancel subscription.", + "writeOnly": true } - }, - "dataResponse": { - "title": "emergencyStop", - "type": "object", - "properties": { - "filterClogged": { - "type": "boolean" - }, - "timestamp": { - "type": "string", - "format": "date-time" - } + } + }, + "data": { + "title": "filterClogged", + "type": "object", + "properties": { + "filterClogged": { + "type": "boolean" + }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "seqNr": { + "type": "number" } - }, - "forms": [ - { - "op": "subscribeevent", - "href": "http://130.35.140.146:24042/events/filterClogged", - "htv:methodName": "POST", - "subprotocol": "webhook", - "contentType": "application/json" + } + }, + "dataResponse": { + "title": "emergencyStop", + "type": "object", + "properties": { + "filterClogged": { + "type": "boolean" }, - { - "op": "unsubscribeevent", - "href": "http://130.35.140.146:24042/events/filterClogged", - "htv:methodName": "DELETE", - "subprotocol": "webhook", - "contentType": "application/json" + "timestamp": { + "type": "string", + "format": "date-time" } - ] - } + } + }, + "forms": [ + { + "op": "subscribeevent", + "href": "http://130.35.140.146:24042/events/filterClogged", + "htv:methodName": "POST", + "subprotocol": "webhook", + "contentType": "application/json" + }, + { + "op": "unsubscribeevent", + "href": "http://130.35.140.146:24042/events/filterClogged", + "htv:methodName": "DELETE", + "subprotocol": "webhook", + "contentType": "application/json" + } + ] } } } \ No newline at end of file From cff0b5cbb585e6478d0316e1d3d317083fdde2ef Mon Sep 17 00:00:00 2001 From: Michael Lagally Date: Wed, 15 Jun 2022 15:12:50 +0200 Subject: [PATCH 4/4] adding profile results --- .../Profiles/TD/Oracle/TDs/WoTWebThing.md | 135 +++++++++ .../TD/Oracle/TDs/WoTWebThing.td.jsonld | 261 ++++++++++++++++++ events/2022.06.Online/Profiles/TD/README.md | 34 +++ 3 files changed, 430 insertions(+) create mode 100644 events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.md create mode 100644 events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.td.jsonld create mode 100644 events/2022.06.Online/Profiles/TD/README.md diff --git a/events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.md b/events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.md new file mode 100644 index 00000000..9449f99b --- /dev/null +++ b/events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.md @@ -0,0 +1,135 @@ + +# WotWebThing + +The *WoTWebThing* is a profile compliant implementation of a pump. + +It is a simplified model of a pump for liquids that provides several properties, actions and a Webhook event. + +It contains several operation status indicators that are exposed via properties. +These properties can be read individually, or all properties can be read at once. + +The *WoTWebThing* provides 3 operations: +- power +- diagnose +- resetFilter + +The *WoTWebThing* provides a *filterClogged* event affordance, to which a consumer can subscribe/unsubscribe. + +An event subscriber registers the endpoint of a HTTP server that receives event notifications upon subscription. + +## Authentication + +The *WoTWebThing* requires basic authentication in the HTTP authentication header, as illustrated in the curl examples below. + +## Properties + +The following properties are defined: + +``` +Cycle_Peak_Operation_Percent_Of_Minute +Cycle_Cases_Pressure_Max +Cycle_Cases_Pressure_Min +Cycle_Return_Pressure_Max +Cycle_Maximum_Inlet_Pressure +``` +### Setting a property + +``` +% curl -X PUT 130.35.140.146:24042/properties/meaning -u "w3cwotprofile:eliforp" -d "{ value : \"41\" }" +``` + +### reading a single property +``` +% curl 130.35.140.146:24042/properties/meaning -u "w3cwotprofile:eliforp" +{"meaning": 42} +``` + +### reading all properties + +``` +% curl 130.35.140.146:24042/properties -u "w3cwotprofile:eliforp" +{ + "Cycle_Return_Pressure_Min": 1.3913971190868986, + "Cycle_Maximum_Inlet_Pressure": 301.42182499556196, + "meaning": 42, + "Cycle_Peak_Operation_Percent_Of_Minute": 1.5436025961821986, + "Cycle_Cases_Pressure_Max": 3, + "Cycle_Cases_Pressure_Min": 0, + "Cycle_Return_Pressure_Max": 18.77156927455416 +} +``` + +## Actions + +The operation *power* is a synchronous operation which returns an immediate status response. + +The *diagnose* operation models an asynchronous operation. When invoked it returns an *ActionStatus* response, which can be used for querying the status of the action. The duration of the action is between 30-60s. + +### Synchronous actions +``` +curl -v 130.35.140.146:24042/actions/power -u "w3cwotprofile:eliforp" -d "{value: true}" +``` + +The following action *always* returns *forbidden* for testing purposes: +``` +curl -v 130.35.140.146:24042/actions/resetFilter -u "w3cwotprofile:eliforp" -d "{value: true}" +-> forbidden +``` + +### Asynchronous actions + +To invoke an asynchronous action: +``` +curl -v -X POST 130.35.140.146:24042/actions/diagnose -u "w3cwotprofile:eliforp" +``` + +Response is an ActionStatus object: +``` +{ + "timeRequested": "2022-05-31T13:31:26.895516", + "href": "actions/diagnose/b7968ef8-9e7c-4230-bbca-85be13f35efd", + "status": "running" +} +``` + +Querying the state of an asynchronous action: +``` +% curl -X GET 130.35.140.146:24042/actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a -u "w3cwotprofile:eliforp" + +{ + "timeRequested": "2022-05-30T18:16:45.169514", + "href": "actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a", + "status": "running" +} +``` + +After the action has ended: + +``` +% curl -X GET 130.35.140.146:24042/actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a -u "w3cwotprofile:eliforp" + +{ + "timeEnded": "2022-05-30T18:17:37.297650", + "timeRequested": "2022-05-30T18:16:45.169514", + "href": "actions/diagnose/40578eed-7b88-4fdb-9f72-90314f924d4a", + "status": "completed" +} +``` + +## Events + +### Event subscription: +``` +curl -v -X POST 130.35.140.146:24042/events/filterClogged -u "w3cwotprofile:eliforp" -d "{callbackURL : \"http://130.35.140.146:223\" }" + +-> {"subscriptionID": 903305380} +``` +#### Unsubscribe using callbackURL +``` +curl -v -X DELETE 130.35.140.146:24042/events/filterClogged -u "w3cwotprofile:eliforp" -d "{callbackURL : \"http://130.35.140.146:223\" }" +``` +#### Unsubscribe using subscriptionId +``` +curl -v -X DELETE 130.35.140.146:24042/events/filterClogged -u "w3cwotprofile:eliforp" -d "{"subscriptionID": \"904712663\"}" + +``` diff --git a/events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.td.jsonld b/events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.td.jsonld new file mode 100644 index 00000000..ee16fb4e --- /dev/null +++ b/events/2022.06.Online/Profiles/TD/Oracle/TDs/WoTWebThing.td.jsonld @@ -0,0 +1,261 @@ +{ + "@context": [ + "https://www.w3.org/2019/wot/td/v1", + "https://www.w3.org/2022/wot/td/v1.1" + ], + "@type": "Thing", + "title": "Blue Pump WoTWebThing", + "description": "Blue Pump WoTWebThing - Profile compliant WebThing (properties + actions + WebHook events)", + "id": "urn:com:blue:pump:data", + "profile": [ + "https://www.w3.org/2022/wot/profile/baseline/v1", + "https://www.w3.org/2022/wot/profile/http-webhook/v1" + ], + "version": { + "instance": "1.0.0" + }, + "base": "http://130.35.140.146:24042", + "securityDefinitions": { + "basic_sc": { + "scheme": "basic", + "in": "header" + } + }, + "security": [ + "basic_sc" + ], + "created": "2022-03-15T12:57:09.459Z", + "modified": "2022-04-05T12:01:09.459Z", + "userLastModified": "Michael Lagally", + "support": "mailto:Michael.Lagally@oracle.com", + "properties": { + "Cycle_Maximum_Inlet_Pressure": { + "description": "Cycle Maximum Inlet Pressure on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Maximum_Inlet_Pressure", + "properties": { + "Cycle_Maximum_Inlet_Pressure": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Maximum_Inlet_Pressure", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Return_Pressure_Min": { + "description": "Cycle Return Pressure Min on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Return_Pressure_Min", + "properties": { + "Cycle_Return_Pressure_Min": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Return_Pressure_Min", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Return_Pressure_Max": { + "description": "Cycle Return Pressure Max on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Return_Pressure_Max", + "properties": { + "Cycle_Return_Pressure_Max": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Return_Pressure_Max", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Cases_Pressure_Min": { + "description": "Cycle Case Pressure Min on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Cases_Pressure_Min", + "properties": { + "Cycle_Cases_Pressure_Min": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Cases_Pressure_Min", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Cases_Pressure_Max": { + "description": "Cycle Case Pressure Max on single cycle in BAR", + "type": "object", + "readOnly": true, + "title": "Cycle_Cases_Pressure_Max", + "properties": { + "Cycle_Cases_Pressure_Max": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Cases_Pressure_Max", + "contentType": "application/json", + "op": "readproperty" + } + ] + }, + "Cycle_Peak_Operation_Percent_Of_Minute": { + "description": "Cycle Peak Operation Percent of Minute", + "type": "object", + "readOnly": true, + "title": "Cycle_Peak_Operation_Percent_Of_Minute", + "properties": { + "Cycle_Peak_Operation_Percent_Of_Minute": { + "type": "number" + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/properties/Cycle_Peak_Operation_Percent_Of_Minute", + "contentType": "application/json", + "op": "readproperty" + } + ] + } + }, + "actions": { + "power": { + "description": "Turns system ON or OFF", + "title": "power", + "input": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "forms": [ + { + "href": "http://130.35.140.146:24042/actions/power", + "contentType": "application/json", + "op": "invokeaction" + } + ] + }, + "diagnose": { + "description": "Runs diagnostics (async action)", + "title": "diagnose", + "forms": [ + { + "href": "http://130.35.140.146:24042/actions/diagnose", + "contentType": "application/json", + "op": "invokeaction" + } + ] + }, + "resetFilter": { + "description": "Used to notify the pump that the filter has been replaced. Responds with a 403 Forbidden", + "title": "resetFilter", + "forms": [ + { + "href": "http://130.35.140.146:24042/actions/resetFilter", + "contentType": "application/json", + "op": "invokeaction" + } + ] + } + }, + "events": { + "filterClogged": { + "title": "filterClogged", + "description": "Filter clogged alert", + "subscription": { + "type": "object", + "properties": { + "callbackURL": { + "type": "string", + "format": "uri", + "description": "Callback URL provided by subscriber for Webhook notifications.", + "writeOnly": true + }, + "subscriptionID": { + "type": "string", + "description": "Unique subscription ID provided by WebThing.", + "readOnly": true + } + } + }, + "cancellation": { + "type": "object", + "properties": { + "subscriptionID": { + "type": "string", + "description": "subscription ID to cancel subscription.", + "writeOnly": true + } + } + }, + "data": { + "title": "filterClogged", + "type": "object", + "properties": { + "filterClogged": { + "type": "boolean" + }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "seqNr": { + "type": "number" + } + } + }, + "dataResponse": { + "title": "emergencyStop", + "type": "object", + "properties": { + "filterClogged": { + "type": "boolean" + }, + "timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "forms": [ + { + "op": "subscribeevent", + "href": "http://130.35.140.146:24042/events/filterClogged", + "htv:methodName": "POST", + "subprotocol": "webhook", + "contentType": "application/json" + }, + { + "op": "unsubscribeevent", + "href": "http://130.35.140.146:24042/events/filterClogged", + "htv:methodName": "DELETE", + "subprotocol": "webhook", + "contentType": "application/json" + } + ] + } + } +} \ No newline at end of file diff --git a/events/2022.06.Online/Profiles/TD/README.md b/events/2022.06.Online/Profiles/TD/README.md new file mode 100644 index 00000000..7502c507 --- /dev/null +++ b/events/2022.06.Online/Profiles/TD/README.md @@ -0,0 +1,34 @@ +# WoT March 2022 Plugfest/Testfest +See [../README.md](../README.md) +To do: reorganize so instructions for TDs specifically go here. +* Results is for the output of automatic testing, and will also merge in manual results; + don't do PRs against here since tools may delete things in this directory. + +## Guideline on how to fill manual.csv + +The [manual.csv](https://github.com/w3c/wot-testing/blob/main/events/2022.03.Online/TD/manual.csv) for the TD needs to be filled by each implementation that is implementing the TD standard. +The value of Status should be filled with one of the following values: +- `null`: This is the default value. It means that you do not know if your implementation implements this or not or it means that it is not applicable. Example: A pure Thing implementation should have this value for `client-data-schema`. +- `pass`: Your implementation implements this assertion correctly. +- `fail`: Your implementation implements this assertion wrongly. Your consumer implementation assumes the value `application/pdf` when it does not see `contentType` in a form. Thus, it fails `td-default-contentType`. +- `not-impl`: You understand the assertion and it applies to your implementation but it is not implemented. Example: The TDs generated by your implementation does not indicate the language of the human readable text, so `td-ns-multilanguage-content-negotiation` is not implemented. + + +Some assertions might be difficult to understand without the surrounding text. Thus, make sure to have the [TD specification](https://w3c.github.io/wot-thing-description/#) open and do text searches for two or three words of the assertion. DO NOT do a full text search since formatting might change what the text looks like when rendered. An alternative would be to open [index.html](https://github.com/w3c/wot-thing-description/blob/main/index.html) on GitHub and do searches for the assertion id. + +**Note:** If you have filled this file for the last implementation report, you can find a diff [here](https://htmlpreview.github.io/?https://github.com/w3c/wot-testing/blob/egekorkan-patch-1/events/2022.03.Online/TD/manual-diff.html) and your old files should be available at the same level as [this node-wot one](https://github.com/w3c/wot-testing/blob/main/events/testfest/2019-03-online/inputs/Siemens/siemens-node-wot.csv) + +### How to quickly go through this file + +Depending on whether you have a Consumer or Thing implementation, you can skip a lot of the assertions. If you implementation does both, you should ideally fill everything. Here are items you can **skip** depending on your implementation type (note that line numbers can change over time): + +For Consumer implementations: +- Lines 1-2 with ids that start with `binding` +- Lines 13-15 with ids that start with `server` +- Lines 47-49 with ids that start with `td-json` +- Lines 56-59 with ids that start with `td-security` +- Lines 61-66 with ids that start with `tm` + +For Thing implementations: +- Lines 20-42 with ids that start with `default` +- Lines 4-7 with ids that start with `client`