- From: David Janes <davidjanes@davidjanes.com>
- Date: Wed, 27 Jan 2016 04:39:53 -0500
- To: "t2trg@irtf.org" <t2TRG@irtf.org>, public-wot-ig@w3.org
- Message-ID: <CACp1KyMNgPH7nASgaU2wbVjSN61xqcVrKhzdpqDZJyfyc-qa-g@mail.gmail.com>
****
Formatted version here:
https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md
****
Points to be made:
- Facets: AC / Furnace / Thermostat combo
- Schema.org properties, what if we want a Model Number?
- Meta or Model?
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#nest-thermostat>Nest
Thermostat
For this example, we'll be considering the Nest Thermostat. The Nest
Thermostat has (let's say):
- it controls the AC
- it controls the Furnace
- it monitors Temperature
- it monitors Humidity
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#3a-whats-the-type-of-this-thing>(3A)
What's the "type" of this Thing?
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#problem>
Problem
As in:
readonly attribute DOMString type;
Is it a:
- Nest
- AC Control
- Heating Control
- Climate Control (in General)
My answer would be "it's several of these" and in particular, the last
three.
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#solution-facets>Solution:
Facets
The "type" of a Thing cannot be a single value. Furthermore, the word
"type" is heavily overloaded so we propose the term "facets".
So the Nest thermostat would have
We propose the following solution:
- use a "meta" band to store this type of data
- use "facets" (within the meta) to describe the "type" of a Thing
e.g. the Nest Thing would have (at least) the following facets:
- "Climate Control"
- "AC"
- "Heating"
Since we want to be Semantic, we should use URLs (/QNames) for concepts,
giving us the facets
"iot-facet:climate",
"iot-facet:climate.heating",
"iot-facet:climate.cooling",
Which can be looked up here:
https://iotdb.org/pub/iot-facet
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#3b-additional-data>(3B)
Additional Data
The WoT Model defines the following meta-data like items.
readonly attribute DOMString id;
readonly attribute DOMString type;
readonly attribute DOMString name;
What if we want to have an image associated with the metadata. How about
*two* images? What about the manufacture name, or URL, or the Model code?
How about a description?
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#3c-schemaorg-vocabulary>(3C)
Schema.org Vocabulary
Schema.org provides a well supported semantic vocabulary. Of particular
interest to the IoT community is:
- https://schema.org/Thing
- https://schema.org/Product
There is *no need* to make new definitions for common concepts: the work
has been done for us.
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#3d-meta-v-model>(3D)
Meta v Model
Note that you might say "why are you using metadata to describe this rather
than the model". In fact, you probably want it in both, e.g.
- the model has the initial definitions
- when a Thing is instantiated, it copies the initial definitions from
the model to the meta.
- the meta can be modified during use; the model is basically static
Considering the WeMo Switch again. Out of the box its facet is
"iot-facet:switch". However, if we connect it to a lamp then we really want
to consider this *to be a lamp*, e.g. its facet should become
"iot-facet:lighting".
<https://github.com/dpjanes/homestar-plugfest/blob/master/docs/2016-01%20W3C%20IETF/3.%20WoT%20Thing%20needs%20to%20have%20meta%20Band.md#3e-putting-it-all-together>(3E)
Putting it all together
Instead of variables on a Thing, we propose that there be a band (i.e. a
JSON-like dictionary) that stores all the meta data.
This would look very much like this:
{
"iot:thing-id": "<the thing id>",
"iot:facet": [
"iot-facet:climate",
"iot-facet:climate.heating",
"iot-facet:climate.cooling",
],
"schema:name": "My Super Cool Nest Thermostat",
"schema:manufacturer": "https://nest.com",
"schema:model": "Nest",
"schema:mpn": "......",
"schema:productID": "......",
}
You'll note that this looks very much like the istate and ostate bands,
even though its purpose is very different. Code wise it's much the same
thing.meta.get("schema:name") ## "My Super Cool Nest Thermostat"
thing.meta.get("iot:facet") ## [ ... ]
thing.meta.set("schema:name", "David's Thermostat")
and so forth
Received on Wednesday, 27 January 2016 09:40:47 UTC