-
Notifications
You must be signed in to change notification settings - Fork 5
/
nordpool-simple.js
104 lines (92 loc) · 2.66 KB
/
nordpool-simple.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
let CONFIG = {
api_endpoint: "https://dashboard.elering.ee/api/nps/price/ee/current",
switchId: 0, // ID of the switch to control
price_limit: 200, // EUR/MWh. Vat not included
update_time: 60000, // 1 minute. Price update interval in milliseconds
reverse_switching: false // If true, switch will be turned on when price is over the limit
};
let current_price = null;
let last_hour = null;
let last_price = null;
let state = null;
function getCurrentPrice() {
Shelly.call(
"http.get",
{
url: CONFIG.api_endpoint,
},
function (response, error_code, error_message) {
if (error_code !== 0) {
print(error_message);
return;
}
current_price = JSON.parse(response.body).data[0]["price"];
print("Updated current price!");
}
);
}
function changeSwitchState(state) {
let state = state;
if(state === false) {
print("Switching off!");
} else if(state === true) {
print("Switching on!");
} else {
print("Unknown state");
}
Shelly.call(
"Switch.Set",
{
id: CONFIG.switchId,
on: state,
},
function (response, error_code, error_message) {
if (error_code !== 0) {
print(error_message);
return;
}
}
);
}
Timer.set(CONFIG.update_time, true, function (userdata) {
Shelly.call("Sys.GetStatus", {}, function (resp, error_code, error_message) {
if (error_code !== 0) {
print(error_message);
return;
} else {
let hour = resp.time[0] + resp.time[1];
//update prices
if (last_hour !== hour) {
print("update hour");
last_hour = hour;
getCurrentPrice();
}
//check if current price is set
if (current_price !== null) {
//Normal switching. Turn relay off if price is over the limit
if(CONFIG.reverse_switching === false) {
if (current_price >= CONFIG.price_limit) {
//swith relay off if price is higher than limit
changeSwitchState(false);
} else {
//swith relay on if price is lower than limit
changeSwitchState(true);
}
}
//Reverse switching. Turn relay on if price is over the limit
if(CONFIG.reverse_switching === true) {
if (current_price >= CONFIG.price_limit) {
//swith relay on if price is higher than limit
changeSwitchState(true);
} else {
//swith relay off if price is lower than limit
changeSwitchState(false);
}
}
} else {
print("Current price is null. Waiting for price update!");
}
print(current_price);
}
});
});