Mitt system byggs i en raspberry PI med node.js som webserver och MongoDB som databas. Jag har kring tio enheter som jag använder men det är fortfarande i sin linda.
Min tellstick.conf ser ut som de flestas:
Code: Select all
device {
id = 1
name = "Hallampa"
controller = 0
protocol = "arctech"
model = "selflearning-dimmer"
parameters {
house = "1245618"
unit = "11"
}
}
a) Jag indexerar på house + "-" + unit för att hitta rätt device, detta eftersom jag lyssnar på alla raw-events, mer om det nedan
b) Notera "actions"-objectet. Det innehåller saker som skall ske när de olika metoderna för sändaren kommer, i det här fallet har vi "turnon" och "turnoff". Dessa i sin tur innehåller en array med actions (method) som skall göras när de triggas. Methods i denna config är "log" och "dbset".
Code: Select all
devices = {
'12547754-16': {
"name": "Balkongdörren",
"actions": {
"turnon": [{
"method": "log",
"message": "Balkongdörren öppnades"
}, {
"method": "dbset",
"type": "door",
"key": "BalconyDoor",
"status": true,
"statusString": "öppen"
}],
"turnoff": [{
"method": "log",
"message": "Balkongdörren stängdes"
}, {
"method": "dbset",
"type": "door",
"key": "BalconyDoor",
"status": false,
"statusString": "stäng"
}]
}
}
}
Code: Select all
var listener = telldus.addRawDeviceEventListener(function(deviceId, data) {
var pairs = data.split(";");
var data = {};
for (idx in pairs) {
var s = pairs[idx].split(":");
data[s[0]] = s[1];
}
}
Code: Select all
if (data.protocol == 'fineoffset') {
global.temp[data.model] = data.temp;
} else {
// Check if it's in our list of devices
var sensor = devices[data.house + "-" + data.unit];
if (sensor != null) {
// Här händer det grejer :-)
}
}
Code: Select all
var actionList = sensor.actions[data.method];
if (null !== actionList) {
for (idx in actionList) {
var a = actionList[idx];
}
}
Code: Select all
[{
"method": "log",
"message": "Balkongdörren öppnades"
}, {
"method": "dbset",
"type": "door",
"key": "BalconyDoor",
"status": true,
"statusString": "öppen"
}]
Code: Select all
if (null !== actionList) {
for (idx in actionList) {
var a = actionList[idx];
switch (a.method) {
case "off": {
telldus.turnOff(a.id, function(err) {
if (err) {
console.log("Error:" + err)
} else {
console.log("Turned off device id" + a.id);
}
})
}
break;
case "dbset" : {
db.collection("anothercollection").update({
"key": a.key
}, {
"date": new Date(),
"status": a.status,
"statusString": a.statusString,
"key": a.key
}, {
upsert: true
}, function(err) {
if (err) console.log(err);
})
}
break;
}
}
}