-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbwm-script.js
142 lines (126 loc) · 5.25 KB
/
bwm-script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Script zum Schalten von Lampen per Bewegungsmelder (optional mit Helligkeitsabfrage)
const version = `version 0.2.2`;
/* Lampen
die erste Zahl muss fortlaufend weitergeführt werden (wird später noch benötigt)
path: Hier wird der DP angegeben, der die Lampe schaltet
timer: timeout in sekunden
*/
let arrLights = {
// Licht 1
1: { path: 'hier den Pfad zum DP "switch" einfuegen', timer: 180},
// Licht 2
2: { path: '', timer: 180},
// Licht 3
3: { path: '', timer: 180},
};
/* Sensoren
die erste Zahl muss fortlaufend weitergeführt werden (wird später noch benötigt)
path: Hier wird der DP angegeben, der die Helligkeit (LUX) meldet
value: Helligkeitswert, der unterschritten werden muss, damit die Lampe eingeschaltet wird
*/
// Lichtsensor Flur
let arrSensors = {
1: { path: 'hier den Pfad zum DP "lightlevel" einfuegen', value: 15 }
};
/* devices
bwm: Hier wird der DP angegeben, der beim Bewegungsmelder die Bewegung meldet
lights: einfach die Nummern der oben angelegten Lampen eintragen
sensors: einfach die Nummern der oben angelegten Lichtsensoren eintragen
*/
let arrDevices =
[
// BWM 1
{ bwm: 'hier den Pfad zum DP "motion" einfuegen', lights: [1], sensors: [1] },
// BWM
{ bwm: '', lights: [2], sensors: [1] },
// BWM
{ bwm: '', lights: [1, 2, 3], sensors: [] },
];
// Bei updates muss erst ab hier kopiert und eingefügt werden, somit braucht man seine Geräteliste nicht jedes mal neu erstellen
console.log(`Timerscript xenon-s ${version} gestartet`);
// Input pruefen
for (const i in arrLights) {
if (!getObject(arrLights[i].path) || arrLights[i].timer == NaN) {
console.warn(`BWM-Script: Folgendes Objekt ist fehlerhaft und wurde gelöscht: ${(JSON.stringify(arrLights[i].path))}`);
delete arrLights[i];
} else {
arrLights[i].Timeout = null;
arrLights[i].timer = (arrLights[i].timer * 1000);
};
};
for (const i in arrSensors) {
if (!getObject(arrSensors[i].path) || arrSensors[i].value == NaN) {
console.warn(`BWM-Script: Folgendes Objekt ist fehlerhaft und wurde gelöscht: ${(JSON.stringify(arrSensors[i].path))}`);
delete arrSensors[i];
};
};
// for (const i in arrDevices) {
// if (!getObject(arrDevices[i].path) || arrDevices[i].lights.length <= 0) {
// console.warn(`BWM-Script: Folgendes Objekt ist fehlerhaft und wurde gelöscht: ${(JSON.stringify(arrDevices[i].bwm))}`);
// delete arrDevices[i];
// };
// };
createTrigger(arrDevices, arrSensors, arrLights);
async function createTrigger(arr, sensor, light) {
arr.forEach(function async(objTemp) {
console.debug(JSON.stringify(objTemp.bwm));
on({ id: objTemp.bwm, change: "ne", ack: true }, function async(obj) { // Trigger Licht an / aus
// Lichtschalter AN/AUS
const val = getState(objTemp.bwm);
let value = false;
value = val.val;
console.debug(`BWM:${JSON.stringify(objTemp)}, Wert: ${value}`);
// Licht einschalten / timeout abbrechen
for (const i in objTemp.lights) {
console.debug(`CHANGE! timeout von ${objTemp.bwm} Wert: ${light[objTemp.lights[i]].Timeout}`);
if (light[objTemp.lights[i]].Timeout != null) {
clearTimeout(light[objTemp.lights[i]].Timeout);
light[objTemp.lights[i]].Timeout = null;
};
};
switch (value) {
case true: {
if (objTemp.sensors.length >= 1) {
for (const i in objTemp.sensors) {
let luxVal = getState((sensor[objTemp.sensors[i]].path));
luxVal = luxVal.val;
if (luxVal <= sensor[objTemp.sensors[i]].value) {
console.debug(JSON.stringify(objTemp.lights));
setLight(objTemp, true, light);
};
};
} else {
setLight(objTemp, true, light);
};
break;
};
case false: {
// Licht ausschalten / timeout starten
for (const i in objTemp.lights) {
console.debug(`timeout ${light[objTemp.lights[i]].Timeout}`);
light[objTemp.lights[i]].Timeout = setTimeout(async () => {
setLight(objTemp, false, light);
}, light[objTemp.lights[i]].timer);
};
break;
};
default: {
console.warn(`Fehlerhafter Input bei obj: ${objTemp.motion}`);
};
};
});
});
};
async function setLight(objTemp, state, light) {
console.debug(objTemp);
console.debug(state);
for (const i in objTemp.lights) {
console.debug(light[objTemp.lights[i]].path);
let val = getState(light[objTemp.lights[i]].path);
val = val.val;
if (val !== state) {
console.debug(`Licht ${light[objTemp.lights[i]].path} wurde ${state}`);
setState(light[objTemp.lights[i]].path, state);
};
};
};