mirror of https://github.com/espruino/BangleApps
Add homeassistant app
parent
d734f92118
commit
ce51b0b0ba
|
@ -4,8 +4,11 @@ require("Font6x12").add(Graphics);
|
||||||
require("Font8x12").add(Graphics);
|
require("Font8x12").add(Graphics);
|
||||||
require("Font7x11Numeric7Seg").add(Graphics);
|
require("Font7x11Numeric7Seg").add(Graphics);
|
||||||
|
|
||||||
|
|
||||||
|
const TIMER_IDX = "cassioWatch";
|
||||||
|
|
||||||
|
|
||||||
function bigThenSmall(big, small, x, y) {
|
function bigThenSmall(big, small, x, y) {
|
||||||
g.setFont("7x11Numeric7Seg", 2);
|
|
||||||
g.drawString(big, x, y);
|
g.drawString(big, x, y);
|
||||||
x += g.stringWidth(big);
|
x += g.stringWidth(big);
|
||||||
g.setFont("8x12");
|
g.setFont("8x12");
|
||||||
|
@ -71,6 +74,7 @@ function drawClock() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawBattery() {
|
function drawBattery() {
|
||||||
|
g.setFont("7x11Numeric7Seg", 2);
|
||||||
bigThenSmall(E.getBattery(), "%", 135, 21);
|
bigThenSmall(E.getBattery(), "%", 135, 21);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,6 +121,59 @@ function getSteps() {
|
||||||
return steps + "k";
|
return steps + "k";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isAlarmEnabled(){
|
||||||
|
try{
|
||||||
|
var alarm = require('sched');
|
||||||
|
var alarmObj = alarm.getAlarm(TIMER_IDX);
|
||||||
|
if(alarmObj===undefined || !alarmObj.on){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} catch(ex){ }
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAlarmMinutes(){
|
||||||
|
if(!isAlarmEnabled()){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var alarm = require('sched');
|
||||||
|
var alarmObj = alarm.getAlarm(TIMER_IDX);
|
||||||
|
return Math.round(alarm.getTimeToAlarm(alarmObj)/(60*1000));
|
||||||
|
}
|
||||||
|
|
||||||
|
function increaseAlarm(){
|
||||||
|
try{
|
||||||
|
var minutes = isAlarmEnabled() ? getAlarmMinutes() : 0;
|
||||||
|
var alarm = require('sched')
|
||||||
|
alarm.setAlarm(TIMER_IDX, {
|
||||||
|
timer : (minutes+5)*60*1000,
|
||||||
|
});
|
||||||
|
alarm.reload();
|
||||||
|
} catch(ex){ }
|
||||||
|
}
|
||||||
|
|
||||||
|
function decreaseAlarm(){
|
||||||
|
try{
|
||||||
|
var minutes = getAlarmMinutes();
|
||||||
|
minutes -= 5;
|
||||||
|
|
||||||
|
var alarm = require('sched')
|
||||||
|
alarm.setAlarm(TIMER_IDX, undefined);
|
||||||
|
|
||||||
|
if(minutes > 0){
|
||||||
|
alarm.setAlarm(TIMER_IDX, {
|
||||||
|
timer : minutes*60*1000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
alarm.reload();
|
||||||
|
} catch(ex){ }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function draw() {
|
function draw() {
|
||||||
queueDraw();
|
queueDraw();
|
||||||
|
@ -128,10 +185,17 @@ function draw() {
|
||||||
let background = getBackgroundImage();
|
let background = getBackgroundImage();
|
||||||
g.drawImage(background, 0, 0, { scale: 1 });
|
g.drawImage(background, 0, 0, { scale: 1 });
|
||||||
g.setColor(0, 0, 0);
|
g.setColor(0, 0, 0);
|
||||||
|
|
||||||
|
if(!isAlarmEnabled()){
|
||||||
g.setFont("6x12");
|
g.setFont("6x12");
|
||||||
g.drawString("Launching Process", 30, 20);
|
g.drawString("Launching Process", 30, 20);
|
||||||
g.setFont("8x12");
|
g.setFont("8x12");
|
||||||
g.drawString("ACTIVATE", 40, 35);
|
g.drawString("ACTIVATE", 40, 35);
|
||||||
|
} else {
|
||||||
|
g.setFont("8x12", 2);
|
||||||
|
// g.drawString("T-" + getAlarmMinutes()+ "min", 30, 23);
|
||||||
|
bigThenSmall("T-" + getAlarmMinutes(), " min.", 30, 23);
|
||||||
|
}
|
||||||
|
|
||||||
g.setFontAlign(0,-1);
|
g.setFontAlign(0,-1);
|
||||||
g.setFont("8x12", 2);
|
g.setFont("8x12", 2);
|
||||||
|
@ -166,6 +230,32 @@ Bangle.on("lock", (locked) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Bangle.on('touch', function(btn, e){
|
||||||
|
var left = parseInt(g.getWidth() * 0.2);
|
||||||
|
var right = g.getWidth() - left;
|
||||||
|
var upper = parseInt(g.getHeight() * 0.2);
|
||||||
|
var lower = g.getHeight() - upper;
|
||||||
|
|
||||||
|
var is_left = e.x < left;
|
||||||
|
var is_right = e.x > right;
|
||||||
|
var is_upper = e.y < upper;
|
||||||
|
var is_lower = e.y > lower;
|
||||||
|
|
||||||
|
if(is_upper){
|
||||||
|
Bangle.buzz(40, 0.6);
|
||||||
|
increaseAlarm();
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_lower){
|
||||||
|
Bangle.buzz(40, 0.6);
|
||||||
|
decreaseAlarm();
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Load widgets, but don't show them
|
// Load widgets, but don't show them
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
Bangle.setUI("clock");
|
Bangle.setUI("clock");
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
0.01: Release
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Info
|
||||||
|
|
||||||
|
A very simple app that shows information on 3 different screens.
|
||||||
|
Go to the next screen via tab right, go to the previous screen
|
||||||
|
via tab left and reload the data via tab in the middle of the
|
||||||
|
screen. Very useful if combined with pattern launcher ;)
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## Creator
|
||||||
|
- [David Peer](https://github.com/peerdavid).
|
||||||
|
|
||||||
|
## Thanks To
|
||||||
|
<a href="https://www.flaticon.com/free-icons/info" title="info icons">Info icons created by Freepik - Flaticon</a>
|
|
@ -0,0 +1,34 @@
|
||||||
|
var W = g.getWidth(), H = g.getHeight();
|
||||||
|
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
g.reset().clearRect(Bangle.appRect);
|
||||||
|
|
||||||
|
// Header
|
||||||
|
g.setFont("Vector", 22).setFontAlign(0,-1);
|
||||||
|
g.drawString("", W/2, H/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
draw();
|
||||||
|
setWatch(_=>load(), BTN1);
|
||||||
|
|
||||||
|
Bangle.on('touch', function(btn, e){
|
||||||
|
var left = parseInt(g.getWidth() * 0.3);
|
||||||
|
var right = g.getWidth() - left;
|
||||||
|
var isLeft = e.x < left;
|
||||||
|
var isRight = e.x > right;
|
||||||
|
|
||||||
|
if(isRight){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isLeft){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEwwcBkmSpICDBwcJBYwCDpAhFggRJGg8SCI+ABgU//gSDCI4JBj//AAX4JRAIBg4QDAAPgBIJWGgIQFAAI+BLglAgEPCI/wEgJoEgYQHAAPANwhWFAApcBCIWQgAQJAAMAgSMDCJiSCwB6GQA6eCn5TFL4q5BUgIRF/wuBv4RGkCeGO4IREUgMBCJCVGCISwIWw0BYRLIICLBHHCJRrGCIQIFR44I5LIoRaPpARcdIwRJfYMBCJuACKUkgE/a5f8gEJCJD7FCIeAg78FAAvggFJCIMACJZOBCIOQCJsCCIOSgEfCBP4gESCIZTFOIwRDoDIGaguSCIVIgCkFTwcAggRDpIYBQAx6BgAOCAQYIBLghWBTwQRFFgIABXIIFDBwgCDBYQAENAYCFLgIAEKwpKIIhA="))
|
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"id": "homeassistant",
|
||||||
|
"name": "HomeAssistant",
|
||||||
|
"version": "0.01",
|
||||||
|
"description": "An application that displays information such as battery level, steps etc.",
|
||||||
|
"icon": "homeassistant.png",
|
||||||
|
"type": "app",
|
||||||
|
"tags": "tool",
|
||||||
|
"readme": "README.md",
|
||||||
|
"supports": ["BANGLEJS2"],
|
||||||
|
"screenshots": [
|
||||||
|
{"url":"screenshot_1.png"},
|
||||||
|
{"url":"screenshot_2.png"},
|
||||||
|
{"url":"screenshot_3.png"}],
|
||||||
|
"storage": [
|
||||||
|
{"name":"homeassistant.app.js","url":"homeassistant.app.js"},
|
||||||
|
{"name":"homeassistant.img","url":"homeassistant.icon.js","evaluate":true}
|
||||||
|
]
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
Loading…
Reference in New Issue