Skip to content

Commit af74c9d

Browse files
authored
Merge pull request #1229 from eclipse-thingweb/ege-simple-coffee-machine
Events for simple coffee machine
2 parents 56c01a2 + 3b1136c commit af74c9d

2 files changed

Lines changed: 128 additions & 35 deletions

File tree

examples/quickstart/simple-coffee-machine.js

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@ const core_1 = require("@node-wot/core");
1919
const binding_http_1 = require("@node-wot/binding-http");
2020
// create Servient add HTTP binding with port configuration
2121
const servient = new core_1.Servient();
22+
// const staticAddress = "plugfest.thingweb.io";
23+
const staticAddress = "localhost"; // use this for testing locally
24+
const httpPort = 8081;
2225
servient.addServer(
2326
new binding_http_1.HttpServer({
24-
port: 8081,
27+
port: httpPort,
2528
})
2629
);
27-
core_1.Helpers.setStaticAddress("plugfest.thingweb.io"); // comment this out if you are testing locally
30+
core_1.Helpers.setStaticAddress(staticAddress);
2831
let waterAmount = 1000;
2932
let beansAmount = 1000;
3033
let milkAmount = 1000;
@@ -73,8 +76,22 @@ servient.start().then((WoT) => {
7376
refill: {
7477
synchronous: true,
7578
input: {
76-
type: "string",
77-
enum: ["water", "beans", "milk"],
79+
type: "array",
80+
items: {
81+
type: "string",
82+
enum: ["water", "beans", "milk"],
83+
},
84+
},
85+
},
86+
},
87+
events: {
88+
resourceEmpty: {
89+
data: {
90+
type: "array",
91+
items: {
92+
type: "string",
93+
enum: ["water", "beans", "milk"],
94+
},
7895
},
7996
},
8097
},
@@ -99,6 +116,16 @@ servient.start().then((WoT) => {
99116
waterAmount = waterAmount - 10;
100117
beansAmount = beansAmount - 10;
101118
thing.emitPropertyChange("resources");
119+
const resourceEvent = [];
120+
if (waterAmount <= 10) {
121+
resourceEvent.push("water");
122+
}
123+
if (beansAmount <= 10) {
124+
resourceEvent.push("beans");
125+
}
126+
if (resourceEvent.length > 0) {
127+
thing.emitEvent("resourceEmpty", resourceEvent);
128+
}
102129
return undefined;
103130
}
104131
} else if (coffeeType === "cappuccino") {
@@ -110,6 +137,19 @@ servient.start().then((WoT) => {
110137
beansAmount = beansAmount - 20;
111138
milkAmount = milkAmount - 10;
112139
thing.emitPropertyChange("resources");
140+
const resourceEvent = [];
141+
if (waterAmount <= 10) {
142+
resourceEvent.push("water");
143+
}
144+
if (beansAmount <= 10) {
145+
resourceEvent.push("beans");
146+
}
147+
if (milkAmount <= 10) {
148+
resourceEvent.push("milk");
149+
}
150+
if (resourceEvent.length > 0) {
151+
thing.emitEvent("resourceEmpty", resourceEvent);
152+
}
113153
return undefined;
114154
}
115155
} else if (coffeeType === "americano") {
@@ -120,6 +160,16 @@ servient.start().then((WoT) => {
120160
waterAmount = waterAmount - 30;
121161
beansAmount = beansAmount - 10;
122162
thing.emitPropertyChange("resources");
163+
const resourceEvent = [];
164+
if (waterAmount <= 10) {
165+
resourceEvent.push("water");
166+
}
167+
if (beansAmount <= 10) {
168+
resourceEvent.push("beans");
169+
}
170+
if (resourceEvent.length > 0) {
171+
thing.emitEvent("resourceEmpty", resourceEvent);
172+
}
123173
return undefined;
124174
}
125175
} else {
@@ -129,25 +179,22 @@ servient.start().then((WoT) => {
129179
thing.setActionHandler("refill", async (params, options) => {
130180
const selectedResource = await params.value();
131181
console.info("received refill order of ", selectedResource);
132-
switch (selectedResource) {
133-
case "water":
134-
waterAmount = 1000;
135-
break;
136-
case "beans":
137-
beansAmount = 1000;
138-
break;
139-
case "milk":
140-
milkAmount = 1000;
141-
break;
142-
default:
143-
throw new Error("Wrong refill input");
182+
if (selectedResource.indexOf("water") !== -1) {
183+
waterAmount = 1000;
184+
}
185+
if (selectedResource.indexOf("beans") !== -1) {
186+
beansAmount = 1000;
187+
}
188+
if (selectedResource.indexOf("milk") !== -1) {
189+
milkAmount = 1000;
144190
}
145191
thing.emitPropertyChange("resources");
146192
return undefined;
147193
});
148194
// expose the thing
149195
thing.expose().then(() => {
150196
console.info(thing.getThingDescription().title + " ready");
197+
console.info("TD available at http://" + staticAddress + ":" + httpPort);
151198
});
152199
})
153200
.catch((e) => {

packages/examples/src/quickstart/simple-coffee-machine.ts

Lines changed: 65 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@ import { HttpServer } from "@node-wot/binding-http";
2121

2222
// create Servient add HTTP binding with port configuration
2323
const servient = new Servient();
24+
25+
// const staticAddress = "plugfest.thingweb.io";
26+
const staticAddress = "localhost"; // use this for testing locally
27+
const httpPort = 8081;
2428
servient.addServer(
2529
new HttpServer({
26-
port: 8081,
30+
port: httpPort,
2731
})
2832
);
29-
30-
Helpers.setStaticAddress("plugfest.thingweb.io"); // comment this out if you are testing locally
33+
Helpers.setStaticAddress(staticAddress);
3134

3235
let waterAmount = 1000;
3336
let beansAmount = 1000;
@@ -79,8 +82,22 @@ servient.start().then((WoT) => {
7982
refill: {
8083
synchronous: true,
8184
input: {
82-
type: "string",
83-
enum: ["water", "beans", "milk"],
85+
type: "array",
86+
items: {
87+
type: "string",
88+
enum: ["water", "beans", "milk"],
89+
},
90+
},
91+
},
92+
},
93+
events: {
94+
resourceEmpty: {
95+
data: {
96+
type: "array",
97+
items: {
98+
type: "string",
99+
enum: ["water", "beans", "milk"],
100+
},
84101
},
85102
},
86103
},
@@ -107,6 +124,16 @@ servient.start().then((WoT) => {
107124
waterAmount = waterAmount - 10;
108125
beansAmount = beansAmount - 10;
109126
thing.emitPropertyChange("resources");
127+
const resourceEvent: Array<string> = [];
128+
if (waterAmount <= 10) {
129+
resourceEvent.push("water");
130+
}
131+
if (beansAmount <= 10) {
132+
resourceEvent.push("beans");
133+
}
134+
if (resourceEvent.length > 0) {
135+
thing.emitEvent("resourceEmpty", resourceEvent);
136+
}
110137
return undefined;
111138
}
112139
} else if (coffeeType === "cappuccino") {
@@ -118,6 +145,19 @@ servient.start().then((WoT) => {
118145
beansAmount = beansAmount - 20;
119146
milkAmount = milkAmount - 10;
120147
thing.emitPropertyChange("resources");
148+
const resourceEvent: Array<string> = [];
149+
if (waterAmount <= 10) {
150+
resourceEvent.push("water");
151+
}
152+
if (beansAmount <= 10) {
153+
resourceEvent.push("beans");
154+
}
155+
if (milkAmount <= 10) {
156+
resourceEvent.push("milk");
157+
}
158+
if (resourceEvent.length > 0) {
159+
thing.emitEvent("resourceEmpty", resourceEvent);
160+
}
121161
return undefined;
122162
}
123163
} else if (coffeeType === "americano") {
@@ -128,6 +168,16 @@ servient.start().then((WoT) => {
128168
waterAmount = waterAmount - 30;
129169
beansAmount = beansAmount - 10;
130170
thing.emitPropertyChange("resources");
171+
const resourceEvent: Array<string> = [];
172+
if (waterAmount <= 10) {
173+
resourceEvent.push("water");
174+
}
175+
if (beansAmount <= 10) {
176+
resourceEvent.push("beans");
177+
}
178+
if (resourceEvent.length > 0) {
179+
thing.emitEvent("resourceEmpty", resourceEvent);
180+
}
131181
return undefined;
132182
}
133183
} else {
@@ -136,29 +186,25 @@ servient.start().then((WoT) => {
136186
});
137187

138188
thing.setActionHandler("refill", async (params, options) => {
139-
const selectedResource = await params.value();
189+
const selectedResource = (await params.value()) as Array<"water" | "beans" | "milk">;
140190
console.info("received refill order of ", selectedResource);
141-
switch (selectedResource) {
142-
case "water":
143-
waterAmount = 1000;
144-
break;
145-
case "beans":
146-
beansAmount = 1000;
147-
break;
148-
case "milk":
149-
milkAmount = 1000;
150-
break;
151-
default:
152-
throw new Error("Wrong refill input");
191+
if (selectedResource!.indexOf("water") !== -1) {
192+
waterAmount = 1000;
193+
}
194+
if (selectedResource!.indexOf("beans") !== -1) {
195+
beansAmount = 1000;
196+
}
197+
if (selectedResource!.indexOf("milk") !== -1) {
198+
milkAmount = 1000;
153199
}
154-
155200
thing.emitPropertyChange("resources");
156201
return undefined;
157202
});
158203

159204
// expose the thing
160205
thing.expose().then(() => {
161206
console.info(thing.getThingDescription().title + " ready");
207+
console.info("TD available at http://" + staticAddress + ":" + httpPort);
162208
});
163209
})
164210
.catch((e) => {

0 commit comments

Comments
 (0)