From caed9a07fb3c1f7bf6c66d9408042fe6aa582e09 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Tue, 20 Jun 2017 12:01:45 -0500 Subject: [PATCH] Adds driver and HTML files for sample --- Alerts.html | 1 + NodeDetailHeader.html | 6 ++ Nodelist.html | 35 +++++++++ Overview.html | 173 ++++++++++++++++++++++++++++++++++++++++++ Sidebar.html | 15 ++++ Trends.html | 27 +++++++ config.txt | 10 +++ pondlevel.py | 88 +++++++++++++++++++++ test.html | 32 ++++++++ 9 files changed, 387 insertions(+) create mode 100644 Alerts.html create mode 100644 NodeDetailHeader.html create mode 100644 Nodelist.html create mode 100644 Overview.html create mode 100644 Sidebar.html create mode 100644 Trends.html create mode 100644 config.txt create mode 100644 pondlevel.py create mode 100644 test.html diff --git a/Alerts.html b/Alerts.html new file mode 100644 index 0000000..2971cab --- /dev/null +++ b/Alerts.html @@ -0,0 +1 @@ +Alerts diff --git a/NodeDetailHeader.html b/NodeDetailHeader.html new file mode 100644 index 0000000..28262a3 --- /dev/null +++ b/NodeDetailHeader.html @@ -0,0 +1,6 @@ +
+
+
+
+

<%= node.vanityname %>

+
diff --git a/Nodelist.html b/Nodelist.html new file mode 100644 index 0000000..17a3f3b --- /dev/null +++ b/Nodelist.html @@ -0,0 +1,35 @@ + + +
+
+
+
+ +
+ +
+ +
+

<%= node.vanityname %>

+
+
+

Pond Level

+

<%= Math.round(channels["pondlevel.pond_level"].value * 100) / 100 %> ft.

+
+
diff --git a/Overview.html b/Overview.html new file mode 100644 index 0000000..599975e --- /dev/null +++ b/Overview.html @@ -0,0 +1,173 @@ + + +
+ +
+

Pond Level

+
+
+
+
+ + + +
+ + <%= channels["pondlevel.pond_level"].timestamp %> + +
+
+ +
+
+
+
+

Configuration

+
+
+ +
+ +
+ +
+
+ + + + + diff --git a/Sidebar.html b/Sidebar.html new file mode 100644 index 0000000..5b6951a --- /dev/null +++ b/Sidebar.html @@ -0,0 +1,15 @@ +" + class="data-table btn-block btn btn-theme animated" + title="Device Log"> Device Log + +" + data-techname="<%=channels["pondlevel.sync"].techName %>" + data-name="<%= channels["pondlevel.sync"].name%>" + data-nodechannelcurrentId="<%= channels["pondlevel.sync"].nodechannelcurrentId %>" + id="<%= channels["pondlevel.sync"].channelId %>" + class="btn btn-large btn-block btn-theme animated setstatic mqtt"> + Sync All Data diff --git a/Trends.html b/Trends.html new file mode 100644 index 0000000..f046914 --- /dev/null +++ b/Trends.html @@ -0,0 +1,27 @@ +
+
+ + to + + + Run + +
+
+
+
+ diff --git a/config.txt b/config.txt new file mode 100644 index 0000000..88aa0a6 --- /dev/null +++ b/config.txt @@ -0,0 +1,10 @@ +{ + +"driverFileName":"pondlevel.py", +"deviceName":"pondlevel", +"driverId":"0130", +"releaseVersion":"1", +"files": { + "file1":"pondlevel.py"} + +} diff --git a/pondlevel.py b/pondlevel.py new file mode 100644 index 0000000..9653c63 --- /dev/null +++ b/pondlevel.py @@ -0,0 +1,88 @@ +"""Driver for connecting Pond Level to Meshify.""" + +import threading +from device_base import deviceBase +import time +import random + +_ = None + +pond_level = { + 'value': 15.0, + 'timestamp': 0 +} +send_delta = 0.5 +send_time = 300 + +temp_pl = pond_level['value'] + + +class start(threading.Thread, deviceBase): + """Start class required by Meshify.""" + + def __init__(self, name=None, number=None, mac=None, Q=None, mcu=None, companyId=None, offset=None, mqtt=None, Nodes=None): + """Initialize the driver.""" + threading.Thread.__init__(self) + deviceBase.__init__(self, name=name, number=number, mac=mac, Q=Q, mcu=mcu, companyId=companyId, offset=offset, mqtt=mqtt, Nodes=Nodes) + + self.daemon = True + self.version = "1" + self.finished = threading.Event() + self.forceSend = False + threading.Thread.start(self) + + # this is a required function for all drivers, its goal is to upload some piece of data + # about your device so it can be seen on the web + def register(self): + """Register the driver.""" + self.sendtodb("log", "BOOM! Booted.", 0) + + def run(self): + """Actually run the driver.""" + global pond_level, temp_pl, send_delta, send_time + + wait_sec = 10 + for i in range(0, wait_sec): + print("pondlevel driver will start in {} seconds".format(wait_sec - i)) + time.sleep(1) + print("BOOM! Starting pondlevel driver...") + send_loops = 0 + while True: + send_now = False + if self.forceSend: + print "FORCE SEND: TRUE" + send_now = True + + up_down = 1 + if bool(random.getrandbits(1)): + up_down = -1 + + temp_pl = pond_level['value'] + up_down * random.random() + + if abs(temp_pl - pond_level['value']) > send_delta: + print("Sending {} due to value change".format(temp_pl)) + send_now = True + elif (time.time() - pond_level['timestamp']) > send_time: + print("Sending {} due to time limit".format(temp_pl)) + send_now = True + + if send_now: + self.sendtodb('pond_level', temp_pl, 0) + pond_level['value'] = temp_pl + pond_level['timestamp'] = time.time() + + print("pondlevel driver still alive...") + if self.forceSend: + if send_loops > 2: + print("Turning off forceSend") + self.forceSend = False + send_loops = 0 + else: + send_loops += 1 + time.sleep(10) + + def pondlevel_sync(self, name, value): + """Sync all data from the driver.""" + self.forceSend = True + self.sendtodb("log", "synced", 0) + return True diff --git a/test.html b/test.html new file mode 100644 index 0000000..ac0558e --- /dev/null +++ b/test.html @@ -0,0 +1,32 @@ +
+