.
This commit is contained in:
@@ -1,23 +1,32 @@
|
||||
define([
|
||||
"dojo/_base/config",
|
||||
"dojo/store/JsonRest",
|
||||
'dojo/store/Observable',
|
||||
'dojo/_base/declare',
|
||||
'dstore/Rest',
|
||||
'dstore/RequestMemory',
|
||||
'dstore/SimpleQuery',
|
||||
'dstore/Trackable',
|
||||
"dojox/socket",
|
||||
"dojo/_base/xhr"
|
||||
], function(config, JsonRest, Observable, Socket, xhr){
|
||||
var _store = new Observable(new JsonRest({
|
||||
"dojo/_base/xhr",
|
||||
"dojox/uuid/generateRandomUuid"
|
||||
], function(config, declare, Rest, RequestMemory, SimpleQuery, Trackable, Socket, xhr, generateRandomUuid){
|
||||
|
||||
var RuleEngineStore = declare([Rest, RequestMemory, SimpleQuery, Trackable]);
|
||||
|
||||
var _store = new RuleEngineStore({
|
||||
target: config.hos.deviceRepoUrl
|
||||
}));
|
||||
});
|
||||
|
||||
var _updateSocketOpened = false;
|
||||
var _updateSocketClientId = generateRandomUuid();
|
||||
var _updateSocket = new Socket({
|
||||
url: config.hos.deviceRepoUrl + '?onevent=changes&clientid=1234',
|
||||
headers: {
|
||||
"On-Event": "changes",
|
||||
"Connection-Timeout": 60000,
|
||||
"Client-Id": 1234
|
||||
},
|
||||
transport: xhr.post });
|
||||
_updateSocket = Observable(_updateSocket);
|
||||
url: config.hos.deviceRepoUrl + '?onevent=changes&clientid=' + _updateSocketClientId,
|
||||
headers: {
|
||||
"On-Event": "changes",
|
||||
"Connection-Timeout": 60000,
|
||||
"Client-Id": 1234
|
||||
},
|
||||
transport: xhr.post
|
||||
});
|
||||
_updateSocket.on("open", function(event){
|
||||
_socketOpened = true;
|
||||
console.log("Socket Opened ", event.message);
|
||||
@@ -33,9 +42,10 @@ define([
|
||||
_updateSocket.on("message", function(event) {
|
||||
var data = JSON.parse(event.data);
|
||||
switch (data['eventtype']) {
|
||||
case "statechanged":
|
||||
_store.notify(data['device'], data['deviceid']);
|
||||
break;
|
||||
case "statechanged":
|
||||
_store.evict(data['deviceid']);
|
||||
_store.emit('update', {id: data['deviceid'], target: data['device']});
|
||||
break;
|
||||
}
|
||||
console.log("Message: " + data);
|
||||
});
|
||||
@@ -51,5 +61,6 @@ define([
|
||||
// browser supports XHR2
|
||||
});
|
||||
};
|
||||
|
||||
return _store;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
define([
|
||||
"dojo/_base/config",
|
||||
'dojo/_base/declare',
|
||||
'dstore/Rest',
|
||||
'dstore/RequestMemory',
|
||||
'dstore/SimpleQuery',
|
||||
'dstore/Trackable',
|
||||
'dstore/Tree',
|
||||
"dojox/socket",
|
||||
"dojo/_base/xhr",
|
||||
"dojox/uuid/generateRandomUuid"
|
||||
], function(config, declare, Rest, RequestMemory, SimpleQuery, Trackable, Tree, Socket, xhr, generateRandomUuid){
|
||||
|
||||
var RuleEngineStore = declare([Rest, RequestMemory, SimpleQuery, Trackable, Tree]);
|
||||
|
||||
var _store = new RuleEngineStore({
|
||||
target: config.hos.ruleEngineUrl
|
||||
});
|
||||
|
||||
return _store;
|
||||
});
|
||||
@@ -0,0 +1,52 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>HOS Widget Test</title>
|
||||
|
||||
<link rel="stylesheet" href="libs/dijit/themes/claro/claro.css" media="screen">
|
||||
|
||||
<!-- configure Dojo -->
|
||||
<script>
|
||||
var dojoConfig = {
|
||||
async: true,
|
||||
parseOnLoad: true,
|
||||
isDebug: true,
|
||||
deps: [
|
||||
"dojo/parser"
|
||||
],
|
||||
hos: {
|
||||
ruleEngineUrl: "/hos/api/ruleengine0/"
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<!-- load Dojo -->
|
||||
<script src="libs/dojo/dojo.js"
|
||||
data-dojo-config="async: true"></script>
|
||||
|
||||
</head>
|
||||
<body class="claro">
|
||||
<h1 id="greeting">HOS Rules Test</h1>
|
||||
<li id="ruleslist"></li>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
var rules;
|
||||
require([
|
||||
"hos/RuleEngine",
|
||||
"dojo/dom-construct",
|
||||
"dojo/dom",
|
||||
"dojo/on",
|
||||
"dojo/domReady!"
|
||||
], function(RuleEngine, domConstruct, dom, on){
|
||||
var test1 = RuleEngine.get("myid/bla");
|
||||
console.log("test1: ", test1);
|
||||
var test2 = RuleEngine.filter({arg01: "param01"});
|
||||
console.log("test2: ", test2);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
.claro .dijitToggleButtonChecked .dijitButtonNode {
|
||||
background-color: #0090ff;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset;
|
||||
transition-duration: 0.1s;
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Tutorial: Hello Dojo!</title>
|
||||
|
||||
<link rel="stylesheet" href="libs/dijit/themes/claro/claro.css" media="screen">
|
||||
<link rel="stylesheet" href="test04.css" media="screen">
|
||||
|
||||
<!-- configure Dojo -->
|
||||
<script>
|
||||
var dojoConfig = {
|
||||
async: true,
|
||||
parseOnLoad: true,
|
||||
isDebug: true,
|
||||
deps: [
|
||||
"dojo/parser"
|
||||
],
|
||||
hos: {
|
||||
deviceRepoUrl: "/hos/api/devices/"
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<!-- load Dojo -->
|
||||
<script src="libs/dojo/dojo.js"
|
||||
data-dojo-config="async: true"></script>
|
||||
|
||||
</head>
|
||||
<body class="claro">
|
||||
<h1 id="greeting">Switches</h1>
|
||||
<li id="devicelist"></li>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
var devices;
|
||||
var widgets = {};
|
||||
|
||||
require([
|
||||
"hos/DeviceRepo",
|
||||
"dojo/dom-construct",
|
||||
"dojo/dom",
|
||||
"dojo/on",
|
||||
"dijit/form/ToggleButton",
|
||||
"dijit/form/HorizontalSlider",
|
||||
"dojo/domReady!"
|
||||
], function(DeviceRepo, domConstruct, dom, on, ToggleButton, HorizontalSlider){
|
||||
|
||||
var self = this;
|
||||
|
||||
devices = DeviceRepo.query();
|
||||
devices.then(function(data){
|
||||
console.log("Data: ", data);
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
console.log("Device " + i + ": ", data[i]);
|
||||
if (data[i].type == "core/devices/switch") {
|
||||
var node = domConstruct.toDom("<ul><button id=\"" + data[i].id + "\"></button></ul>");
|
||||
domConstruct.place(node, "devicelist");
|
||||
var b = new ToggleButton({
|
||||
showLabel: true,
|
||||
checked: false,
|
||||
label: data[i].id,
|
||||
iconClass: 'dijitCheckBoxIcon'
|
||||
}, data[i].id);
|
||||
b.startup();
|
||||
function addListener(id, b) {
|
||||
on(b, "click", function(e){
|
||||
DeviceRepo.sendCommand(id, {switch:{set:b.get("checked")}});
|
||||
});
|
||||
};
|
||||
addListener(data[i].id, b);
|
||||
b.set('checked', data[i].current_state.switch.value);
|
||||
widgets[data[i].id] = b;
|
||||
} else if (data[i].type == "core/devices/dimmer") {
|
||||
var node = domConstruct.toDom("<ul><div id=\"" + data[i].id + "\"></div></ul>");
|
||||
domConstruct.place(node, "devicelist");
|
||||
var s = new HorizontalSlider({
|
||||
name: data[i].id,
|
||||
value: 0,
|
||||
minimum: 0,
|
||||
maximum: 1,
|
||||
intermediateChanges: true,
|
||||
style: "width:300px;"
|
||||
}, data[i].id);
|
||||
s.startup();
|
||||
function addListener(id, s) {
|
||||
on(s, "click", function(e){
|
||||
DeviceRepo.sendCommand(id, {dimmer:{set:s.get("value")}});
|
||||
});
|
||||
};
|
||||
addListener(data[i].id, s);
|
||||
s.set('value', data[i].current_state.dimmer.value);
|
||||
widgets[data[i].id] = s;
|
||||
}
|
||||
}
|
||||
}, function(err){
|
||||
console.log("Error: ", err);
|
||||
}, function(update){
|
||||
console.log("Update: ", update);
|
||||
}
|
||||
);
|
||||
devices.observe(function(device, removedFrom, insertedInto){
|
||||
// this will be called any time a market is added, removed, or updated
|
||||
console.log("Observe triggered: ", device, ', ', removedFrom, ', ', insertedInto);
|
||||
if (removedFrom == insertedInto) {
|
||||
if (device.type == "core/devices/switch") {
|
||||
var b = widgets[device.id];
|
||||
b.set('checked', device.current_state.switch.value);
|
||||
} else if (device.type == "core/devices/dimmer") {
|
||||
var s = widgets[device.id];
|
||||
s.set('value', device.current_state.dimmer.value);
|
||||
}
|
||||
}
|
||||
}, true); // we can indicate to be notified of object updates as well
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -50,7 +50,8 @@
|
||||
|
||||
var self = this;
|
||||
|
||||
devices = DeviceRepo.query();
|
||||
_devices = DeviceRepo.filter().track();
|
||||
devices = _devices.fetch();
|
||||
devices.then(function(data){
|
||||
console.log("Data: ", data);
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
@@ -101,19 +102,18 @@
|
||||
console.log("Update: ", update);
|
||||
}
|
||||
);
|
||||
devices.observe(function(device, removedFrom, insertedInto){
|
||||
_devices.on('update', function(event){
|
||||
// this will be called any time a market is added, removed, or updated
|
||||
console.log("Observe triggered: ", device, ', ', removedFrom, ', ', insertedInto);
|
||||
if (removedFrom == insertedInto) {
|
||||
if (device.type == "core/devices/switch") {
|
||||
var b = widgets[device.id];
|
||||
b.set('checked', device.current_state.switch.value);
|
||||
} else if (device.type == "core/devices/dimmer") {
|
||||
var s = widgets[device.id];
|
||||
s.set('value', device.current_state.dimmer.value);
|
||||
}
|
||||
}
|
||||
}, true); // we can indicate to be notified of object updates as well
|
||||
console.log("Observe triggered: ", event);
|
||||
var device = event.target;
|
||||
if (device.type == "core/devices/switch") {
|
||||
var b = widgets[device.id];
|
||||
b.set('checked', device.current_state.switch.value);
|
||||
} else if (device.type == "core/devices/dimmer") {
|
||||
var s = widgets[device.id];
|
||||
s.set('value', device.current_state.dimmer.value);
|
||||
}
|
||||
}); // we can indicate to be notified of object updates as well
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user