From 69660b69aa6b00552873c2b0bd0eedcfdd995cea Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 14 Dec 2022 10:23:36 +0000 Subject: [PATCH] Add BTHome thermometer --- apps/bthometemp/ChangeLog | 1 + apps/bthometemp/README.md | 9 ++++++ apps/bthometemp/app-icon.js | 1 + apps/bthometemp/app.js | 58 ++++++++++++++++++++++++++++++++++ apps/bthometemp/app.png | Bin 0 -> 13318 bytes apps/bthometemp/metadata.json | 14 ++++++++ 6 files changed, 83 insertions(+) create mode 100644 apps/bthometemp/ChangeLog create mode 100644 apps/bthometemp/README.md create mode 100644 apps/bthometemp/app-icon.js create mode 100644 apps/bthometemp/app.js create mode 100644 apps/bthometemp/app.png create mode 100644 apps/bthometemp/metadata.json diff --git a/apps/bthometemp/ChangeLog b/apps/bthometemp/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/bthometemp/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/bthometemp/README.md b/apps/bthometemp/README.md new file mode 100644 index 000000000..1a8212ea4 --- /dev/null +++ b/apps/bthometemp/README.md @@ -0,0 +1,9 @@ +# BTHome Temperature and Pressure + +This app displays temperature and pressure and advertises them over bluetooth using BTHome.io standard (along with battery level) + +This can be used to integrate with [Home Assistant](https://www.home-assistant.io/), so you can use your Bangle as a wireless temperature/pressure sensor. + +More info on the standard at https://bthome.io + +And the data format used is https://bthome.io/format/ diff --git a/apps/bthometemp/app-icon.js b/apps/bthometemp/app-icon.js new file mode 100644 index 000000000..e2dff3eb9 --- /dev/null +++ b/apps/bthometemp/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4kA///1N6BIPf//1gMIwdE8sG2me+9Y/8C/2snXsoUNpdnzdt/xj/AH4AYgMRAAUQCyoYSCQNXs1muoFBFyHm1X//+qtwwPiMX1+YmczxP6uIwNFwN6yeDnGDmc504wNFwOpnGYC4OJweaGBsR9WTmYtBmc4GAOuC5ZGBt4SBAAQEBwf2JBcBiupnIuCmedxGTzVRC5cX1AuDnPZF4OKuIXLi3zIoedMgMzn9hC5uICQON5IDBxAXSznYC6RdDPQYXNO4JcB7pdCO56nBnGZ7p6DU5zXBXgSqDa5sAiPqIgOZd4c510RCxQXBi+pRQIXBxODzVxC5hIBvR1DnE505GMGAevzAvC/QuNGAfm1X//+qtwuOGAURq9ms11AoIWOGAQAEFw1EDBwWFggBCkUgAQMigUAAIIAJoABDCgIXQFwYXBCYYBDHAMCEAIkCFgcEAIIKCCoQFCkAhBAQIlCkAsBOoIXCBoIvEAwQTCAYI2BIwgXIF4YXDQwIVCC4YIBMIwfCAQRfGYBSPNC6TBFACgwBACouWAH4AiA=")) diff --git a/apps/bthometemp/app.js b/apps/bthometemp/app.js new file mode 100644 index 000000000..7b55777d1 --- /dev/null +++ b/apps/bthometemp/app.js @@ -0,0 +1,58 @@ +// history of temperature/pressure readings +var history = []; + +// When we get temperature... +function onTemperature(p) { + // Average the last 5 temperature readings + while (history.length>4) history.shift(); + history.push(p); + var avrTemp = history.reduce((i,h)=>h.temperature+i,0) / history.length; + var avrPressure = history.reduce((i,h)=>h.pressure+i,0) / history.length; + var t = require('locale').temp(avrTemp).replace("'","°"); + // Draw + var rect = Bangle.appRect; + g.reset(1).clearRect(rect.x, rect.y, rect.x2, rect.y2); + var x = (rect.x+rect.x2)/2; + var y = (rect.y+rect.y2)/2 + 10; + g.setFont("6x15").setFontAlign(0,0).drawString("Temperature:", x, y - 65); + g.setFontVector(50).setFontAlign(0,0).drawString(t, x, y-25); + g.setFont("6x15").setFontAlign(0,0).drawString("Pressure:", x, y+15 ); + g.setFont("12x20").setFontAlign(0,0).drawString(Math.round(avrPressure)+" hPa", x, y+40); + // Set Bluetooth Advertising + // https://bthome.io/format/ + var temp100 = Math.round(avrTemp*100); + var pressure100 = Math.round(avrPressure*100); + + Bangle.bleAdvert[0xFCD2] = [ 0x40, /* BTHome Device Information + bit 0: "Encryption flag" + bit 1-4: "Reserved for future use" + bit 5-7: "BTHome Version" */ + + 0x01, // Battery, 8 bit + E.getBattery(), + + 0x02, // Temperature, 16 bit + temp100&255,temp100>>8, + + 0x04, // Pressure, 16 bit + pressure100&255,(pressure100>>8)&255,pressure100>>16 + ]; + NRF.setAdvertising(Bangle.bleAdvert); +} + +// Gets the temperature in the most accurate way with pressure sensor +function drawTemperature() { + Bangle.getPressure().then(p =>{if (p) onTemperature(p);}); +} + +if (!Bangle.bleAdvert) Bangle.bleAdvert = {}; +setInterval(function() { + drawTemperature(); +}, 10000); // update every 10s +Bangle.loadWidgets(); +Bangle.setUI({ + mode : "custom", + back : function() {load();} +}); +E.showMessage("Reading temperature..."); +drawTemperature(); diff --git a/apps/bthometemp/app.png b/apps/bthometemp/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8eb3f14ce0f0ed83734d8a386e0283ce665781 GIT binary patch literal 13318 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 literal 0 HcmV?d00001 diff --git a/apps/bthometemp/metadata.json b/apps/bthometemp/metadata.json new file mode 100644 index 000000000..4bfd08c31 --- /dev/null +++ b/apps/bthometemp/metadata.json @@ -0,0 +1,14 @@ +{ "id": "bthometemp", + "name": "BTHome Temperature and Pressure", + "shortName":"BTHome T", + "version":"0.01", + "description": "Displays temperature and pressure, and advertises them over bluetooth using BTHome.io standard", + "icon": "app.png", + "tags": "bthome,bluetooth,temperature", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"bthometemp.app.js","url":"app.js"}, + {"name":"bthometemp.img","url":"app-icon.js","evaluate":true} + ] +}