-
Notifications
You must be signed in to change notification settings - Fork 0
/
io.picolabs.iotplotter.krl
80 lines (65 loc) · 2.33 KB
/
io.picolabs.iotplotter.krl
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
ruleset io.picolabs.iotplotter {
meta {
name "iot_plotter"
author "PJW"
description "Sends data to IotPlotter API"
version "0.3.0"
use module io.picolabs.wrangler alias wrangler
shares show_configuration, README
}
global {
// map readings into format needed by IoTPlotter, removing any items with keys in `remove_these`
format_payload = function(event_attrs) {
remove_these = ["battery_status"];
payload_data = event_attrs{["readings"]}
.map(function(reading_val){
[
{"value": reading_val,
"epoch": event_attrs{["timestamp"]}
}
]})
.filter(function(v, k){not(remove_these >< k)})
//.klog("New reading map");
payload_data
};
send_payload = defaction(feed_id, api_key, event_attrs) {
http:post("http://iotplotter.com/api/v2/feed/" + feed_id,
headers = {"api-key": api_key},
json = {"data": format_payload(event_attrs)}
) setting(resp);
return resp
}
show_configuration = function() {
return {"api_key": ent:api_key,
"feed_id": ent:feed_id.klog("Feed ID retrieved: ")}
}
README = function() {
return <<
IoTPlotter feed_id's are just digits. The pico enginer UI will parse them as INTs (using JSON.parse()) unless you enclose them in quotes (e.g. "367832564114515476")
>>
}
}
rule send_data_to_IoTPlotter {
select when sensor new_readings
send_payload((meta:rulesetConfig{["feed_id"]} || ent:feed_id),
(meta:rulesetConfig{["api_key"]} || ent:api_key),
event:attrs) setting(resp)
always {
response = resp.klog("POST response");
}
}
// put the feed id in quotes when using the testing tab to ensure it's treated as a string
rule save_config {
select when sensor configuration
pre {
feed_id = event:attr("iotplotter_feed_id").klog("Feed ID input: ");
api_key = event:attr("iotplotter_api_key");
}
if not (feed_id.isnull() || api_key.isnull()) then noop()
fired {
log info "Configuring IoT Plotter";
ent:feed_id := feed_id.klog("Feed ID saved: ");
ent:api_key := api_key;
}
}
}