This commit is contained in:
2015-06-08 16:25:24 +02:00
parent f925e43d1f
commit d6c4b72278
27 changed files with 1075 additions and 235 deletions
@@ -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>