Add homeassistant app

pull/1995/head
David Peer 2022-06-20 10:25:57 +02:00
parent d734f92118
commit ce51b0b0ba
10 changed files with 167 additions and 5 deletions

View File

@ -4,8 +4,11 @@ require("Font6x12").add(Graphics);
require("Font8x12").add(Graphics);
require("Font7x11Numeric7Seg").add(Graphics);
const TIMER_IDX = "cassioWatch";
function bigThenSmall(big, small, x, y) {
g.setFont("7x11Numeric7Seg", 2);
g.drawString(big, x, y);
x += g.stringWidth(big);
g.setFont("8x12");
@ -71,6 +74,7 @@ function drawClock() {
}
function drawBattery() {
g.setFont("7x11Numeric7Seg", 2);
bigThenSmall(E.getBattery(), "%", 135, 21);
}
@ -117,6 +121,59 @@ function getSteps() {
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() {
queueDraw();
@ -128,10 +185,17 @@ function draw() {
let background = getBackgroundImage();
g.drawImage(background, 0, 0, { scale: 1 });
g.setColor(0, 0, 0);
g.setFont("6x12");
g.drawString("Launching Process", 30, 20);
g.setFont("8x12");
g.drawString("ACTIVATE", 40, 35);
if(!isAlarmEnabled()){
g.setFont("6x12");
g.drawString("Launching Process", 30, 20);
g.setFont("8x12");
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.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
Bangle.loadWidgets();
Bangle.setUI("clock");

View File

@ -0,0 +1 @@
0.01: Release

View File

@ -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 ;)
![](screenshot_1.png)
![](screenshot_2.png)
![](screenshot_3.png)
## 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>

View File

@ -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();

View File

@ -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

View File

@ -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