-
Notifications
You must be signed in to change notification settings - Fork 59
/
failure-monitor.js
74 lines (68 loc) · 1.98 KB
/
failure-monitor.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
// Copyright 2021 Allterco Robotics EOOD
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Shelly is a Trademark of Allterco Robotics
// Shelly Script example: Load monitoring and alerting in Shelly Gen2
//
// This script listens for events when power changes to 0 and if the switch is
// still on then it alerts that something might have happened to the load
let CONFIG = {
notifyEndpoint: "http://push-notification-endpoint-url",
};
let notifications = [];
Shelly.addEventHandler(function (event, user_data) {
if (typeof event.info.apower === "undefined") {
return;
}
if (event.info.apower !== 0) {
return;
}
Shelly.call(
"switch.getstatus",
{ id: 0 },
function (result, error_code, error_message, user_data) {
if (result.output) {
notifications.push("load might have failed");
}
},
null
);
}, null);
function _simple_encode(str) {
let res = "";
for (let i = 0; i < str.length; i++) {
if (str.at(i) === 0x20) {
res = res + "%20";
} else {
res = res + chr(str.at(i));
}
}
return res;
}
Timer.set(1000, true, function () {
if (notifications.length) {
let message = notifications[0];
notifications.splice(0, 1);
print("ALERT: ", message);
let nEndpoint = CONFIG.notifyEndpoint + _simple_encode(message);
Shelly.call(
"http.get",
{ url: nEndpoint },
function (result, error_code, error_message) {
print(JSON.stringify(result));
},
null
);
}
});