From 7a8418110299e4c651f43375f8f15255a27825e9 Mon Sep 17 00:00:00 2001 From: "Marko.Kl.Berkenbusch@gmail.com" Date: Wed, 14 Oct 2020 21:23:37 -0400 Subject: [PATCH] First commit DSDRelay --- apps.json | 15 +++- apps/dsdrelay/ChangeLog | 1 + apps/dsdrelay/README.md | 14 ++++ apps/dsdrelay/dsdrelay-icon.js | 1 + apps/dsdrelay/dsdrelay-pic.jpg | Bin 0 -> 56538 bytes apps/dsdrelay/dsdrelay.app.js | 116 ++++++++++++++++++++++++++++++ apps/dsdrelay/dsdrelay.info | 1 + apps/dsdrelay/icons8-relay-48.png | Bin 0 -> 409 bytes 8 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 apps/dsdrelay/ChangeLog create mode 100644 apps/dsdrelay/README.md create mode 100644 apps/dsdrelay/dsdrelay-icon.js create mode 100644 apps/dsdrelay/dsdrelay-pic.jpg create mode 100644 apps/dsdrelay/dsdrelay.app.js create mode 100644 apps/dsdrelay/dsdrelay.info create mode 100644 apps/dsdrelay/icons8-relay-48.png diff --git a/apps.json b/apps.json index 622216ecf..688518bb0 100644 --- a/apps.json +++ b/apps.json @@ -2251,5 +2251,18 @@ {"name":"digiclock.app.js","url":"digiclock.js"}, {"name":"digiclock.img","url":"digiclock-icon.js","evaluate":true} ] -} +}, + { "id": "dsdrelay", + "name": "DSD BLE Relay controller", + "shortName":"DSDRelay", + "icon": "icons8-relay-48.png", + "version":"0.01", + "description": "Control BLE relay board from the watch", + "tags": "ble,bluetooth", + "readme": "README.md", + "storage": [ + {"name":"dsdrelay.app.js","url":"dsdrelay.app.js"}, + {"name":"dsdrelay.img","url":"dsdrelay-icon.js","evaluate":true} + ] + } ] diff --git a/apps/dsdrelay/ChangeLog b/apps/dsdrelay/ChangeLog new file mode 100644 index 000000000..1a3bc1757 --- /dev/null +++ b/apps/dsdrelay/ChangeLog @@ -0,0 +1 @@ +0.01: New app! diff --git a/apps/dsdrelay/README.md b/apps/dsdrelay/README.md new file mode 100644 index 000000000..395aba636 --- /dev/null +++ b/apps/dsdrelay/README.md @@ -0,0 +1,14 @@ +# DSDRelay + +Small app to control DSD Tech BLE relay boards from the watch. I have seen them being sold as 1-, 2- and 4-relay boards. The app shows controls for +4 relays, regardless of the actual configuration of the board connected. + +![](dsdrelay-pic.jpg) + +## Controls +- buttons 1 and 3 cycle the selection of the currently active channel +- swipe right turns the selected channel's relay *on* +- swipe left turns the selected channel's relay *off* + +I only own a 1-relay board, so only the "Ch 1" functionality was tested; the other channels were implemented per the manufacturer's documentation. +In particular, the method for determining the relay states on app startup for channels 2-4 was mostly an educated guess. diff --git a/apps/dsdrelay/dsdrelay-icon.js b/apps/dsdrelay/dsdrelay-icon.js new file mode 100644 index 000000000..ac98e6eea --- /dev/null +++ b/apps/dsdrelay/dsdrelay-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AH4A/AAcK1QAO0AXFCx4ABFyowGC/4X/C/4X/C48AC6IWEGCIuFAAUN6AED7vdAwgEDC/4X/C/4X86AGGC85fpAH4A/AH4ASA")) diff --git a/apps/dsdrelay/dsdrelay-pic.jpg b/apps/dsdrelay/dsdrelay-pic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bffebe1839181186a03a5be7ecd7fc010b29b07 GIT binary patch literal 56538 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 D!dgUm literal 0 HcmV?d00001 diff --git a/apps/dsdrelay/dsdrelay.app.js b/apps/dsdrelay/dsdrelay.app.js new file mode 100644 index 000000000..18e7293aa --- /dev/null +++ b/apps/dsdrelay/dsdrelay.app.js @@ -0,0 +1,116 @@ +var device; +var gatt; +var service; +var characteristic; + +// on/off commands +// Channel 1 ON: A00101A2 +// Channel 1 OFF: A00100A1 +// Channel 2 ON: A00201A3 +// Channel 2 OFF: A00200A2 +// Channel 3 ON: A00301A4 +// Channel 3 OFF: A00300A3 +// Channel 4 ON: A00401A5 +// Channel 4 OFF: A00400A4 + +var cmds = [{ on: new Uint8Array([0xa0, 0x01, 0x01, 0xa2]), + off: new Uint8Array([0xa0, 0x01, 0x00, 0xa1]) }, + { on: new Uint8Array([0xa0, 0x02, 0x01, 0xa3]), + off: new Uint8Array([0xa0, 0x02, 0x00, 0xa2]) }, + { on: new Uint8Array([0xa0, 0x03, 0x01, 0xa4]), + off: new Uint8Array([0xa0, 0x03, 0x00, 0xa3]) }, + { on: new Uint8Array([0xa0, 0x04, 0x01, 0xa5]), + off: new Uint8Array([0xa0, 0x04, 0x00, 0xa4]) }]; + +const button_w = 100; +const button_h = 36; +const button_r = button_h/2-4; +const button_sp = 46; + +var n_channels = 4; +var channel = 0; +var channel_state = []; + +function drawButton(x, y, state) { + if (state) g.setColor(0.2, 0.2, 0.95); + else g.setColor(0.5, 0.5, 0.5); + g.fillCircle(x+button_h/2, y+button_h/2, button_h/2). + fillRect(x+button_h/2, y, x+button_w-button_h/2, y+button_h). + fillCircle(x+button_w-button_h/2, y+button_h/2, button_h/2); + g.setColor(0.85, 0.85, 0.85); + if (state) + g.fillCircle(x+button_w-button_h/2, y+button_h/2, button_r); + else + g.fillCircle(x+button_h/2, y+button_h/2, button_r); + g.flip(); +} + +function setup_screen() { + g.clearRect(0, 60, g.getWidth()-1, g.getHeight()-1); + for (var i=0; i<4; ++i) { + g.setFontVector(22).setFontAlign(-1, 0, 0).setColor(0xffff).drawString("Ch"+String(i+1), 16, 60+i*button_sp+button_h/2); + drawButton((g.getWidth()-button_w)/2, 60+i*button_sp, channel_state[i]); + } + moveChannelFrame(channel, channel); +} + +function parseDevice(d) { + device = d; + g.clearRect(0, 60, 239, 239).setFontAlign(0, 0, 0).setColor(0, 1, 0).drawString("Found device", 120, 120).flip(); + device.gatt.connect().then(function(ga) { + gatt = ga; + g.clearRect(0, 60, 239, 239).setFontAlign(0, 0, 0).setColor(0, 1, 0).drawString("Connected", 120, 120).flip(); + return gatt.getPrimaryService("FFE0"); +}).then(function(s) { + service = s; + return service.getCharacteristic("FFE1"); +}).then(function(c) { + characteristic = c; + console.log(c); + return; +}).then(function() { + console.log("Done!"); + g.clearRect(0, 60, 239, 239).setColor(1, 1, 1).flip(); + setup_app(); +}).catch(function(e) { + g.clearRect(0, 60, 239, 239).setColor(1, 0, 0).setFontAlign(0, 0, 0).drawString("ERROR"+e, 120, 120).flip(); + console.log(e); +})} + +function connection_setup() { + NRF.setScan(); + NRF.setScan(parseDevice, { filters: [{services:["FFE0"]}], timeout: 2000}); + g.clearRect(0, 60, 239, 239).setFontVector(18).setFontAlign(0, 0, 0).setColor(0, 1, 0); + g.drawString("Scanning for relay...", 120, 120); +} + +function moveChannelFrame(oldc, newc) { + g.setColor(0).drawRect(8, 60+oldc*button_sp-4, g.getWidth()-8, 60+oldc*button_sp+button_h+4); + g.setColor(0.9, 0.9, 0.9).drawRect(8, 60+newc*button_sp-4, g.getWidth()-8, 60+newc*button_sp+button_h+4); +} + +function setup_app() { + characteristic.readValue().then(function(r) { + for (var i=0; i#8|>elHXf`3Gr+KUy#wkYyQ`p=q=V(FPUGq8M$M`oe)Ch)JU~5vs~uPy zW`K{enKoumB>|$%{3wgoVp)Kh;Q?av0I_+1*vbO*C)&k$UaZBk0G9z9`6caIt7d>4 znjp_%8>*xydD^r#%mBA%oA*hYuK>ry9j89%iR8)Z_4&r5RZ#jqV9^!|AiJZl`>gwR z*qGP-R97^&zd|#^1H|S5V)Fp8d4LfVr41Z`{m=Xt(oi1^v}KPS0Br$~g*YVK9niw_ zj8uE(sv_JS5Hf8c2!gU5>X?utBtRB!`kiymxjFC-9BxQxvM