Update to make TeaSense run in the back ground

This commit is contained in:
William Moore 2023-02-02 17:21:02 -06:00
parent 2bdd988b0b
commit 667b8d0e49
5 changed files with 50 additions and 83 deletions

View File

@ -30,7 +30,7 @@
<div id="root"></div> <div id="root"></div>
<script> <script>
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
navigator.serviceWorker.register("./serviceworker.js"); navigator.serviceWorker.register("./serviceworker.js", {scope: '.'});
} }
</script> </script>
<!-- <!--

View File

@ -1,6 +1,52 @@
// This code executes in its own worker or thread // This code executes in its own worker or thread
self.addEventListener("install", event => { self.addEventListener("install", event => {
checkNotificationPromise();
interval = setInterval(() => fetchAndCacheLatestNews(), 1000);
}); });
self.addEventListener("activate", event => {
self.addEventListener("fetch", (e) => {
console.log(`[Service Worker] Fetched resource ${e.request.url}`);
}); });
self.addEventListener('fetch',() => console.log("fetch"));
let interval = 0;
function handleNotification(title, notif) {
if (checkNotificationPromise()) {
self.registration.showNotification(title, notif);
} else {
self.registration.showNotification(title, notif);
}
}
async function fetchAndCacheLatestNews() {
const response = await fetch('/api/teasense');
const data = await response.json();
const temp = data[data.length - 1].value;
if (temp) {
if (temp >= ALERT_THRESHOLD) {
handleNotification('TeaSense Alert', {
body: '♨️ ',
tag: 1,
});
} else if (temp < ALERT_THRESHOLD && temp > WARNING_THRESHOLD) {
handleNotification('TeaSense Warning', {
body: '🫖',
tag: 1,
});
}
}
}
function checkNotificationPromise() {
try {
Notification.requestPermission().then();
} catch (e) {
return false;
}
return true;
}
const ALERT_THRESHOLD = 80.0;
const WARNING_THRESHOLD = 75.0;

View File

@ -3,24 +3,15 @@
} }
.rainfall-gauge { .rainfall-gauge {
border: .01em solid black;
border-radius: 1em;
padding: .6em; padding: .6em;
height: 5vh;
} }
.soil-gauge { .soil-gauge {
border: .01em solid black;
border-radius: 1em;
padding: .6em; padding: .6em;
height: 7vh;
} }
.teasense { .teasense {
border: .01em solid black;
border-radius: 1em;
padding: .6em; padding: .6em;
height: 5vh;
} }
@media (max-width: 601px) { @media (max-width: 601px) {
@ -32,18 +23,6 @@
margin: .6em !important; margin: .6em !important;
} }
.merrysky {
height: 50vh !important;
}
.soil-gauge {
height: 12vh;
}
.teasense {
height: 7vh !important;
}
.rainfall-gauge { .rainfall-gauge {
height: 6vh !important; height: 6vh !important;
} }
@ -54,19 +33,8 @@
display: block !important; display: block !important;
} }
.rainfall-gauge {
height: 3vh !important;
}
.soil-gauge {
height: 7vh !important;
}
.teasense {
height: 4vh !important;
}
.merrysky { .merrysky {
width: 90vw !important;
height: 80vh !important; height: 80vh !important;
} }
} }

View File

@ -4,14 +4,6 @@ import Rainfall from './components/rainfall';
import Soil from './components/soil'; import Soil from './components/soil';
import TeaSense from './components/teasense'; import TeaSense from './components/teasense';
function App() { function App() {
useEffect(() => {
Notification.requestPermission().then((permission) => {
if (permission === 'granted') {
}
});
}, []);
return ( return (
<div className="App"> <div className="App">
<h1 className={'header'}>MooreForge Sensor Station</h1> <h1 className={'header'}>MooreForge Sensor Station</h1>

View File

@ -3,9 +3,6 @@ import React, { useEffect, useState } from 'react';
import './style.css'; import './style.css';
const ALERT_THRESHOLD = parseInt(process.env.REACT_APP_TEASENSE_ALERT_THRESHOLD ?? '80.0');
const WARNING_THRESHOLD = parseInt(process.env.REACT_APP_TEASENSE_WARNING_THRESHOLD ?? '75.0');
const Sensor = () => { const Sensor = () => {
const [temp, setTemp] = useState(); const [temp, setTemp] = useState();
@ -17,47 +14,11 @@ const Sensor = () => {
setTemp(result.value); setTemp(result.value);
} }
function checkNotificationPromise() {
try {
Notification.requestPermission().then();
} catch (e) {
return false;
}
return true;
}
useEffect(() => { useEffect(() => {
setInterval(() => pullTempFromBackend(), 1000); setInterval(() => pullTempFromBackend(), 1000);
}, []); }, []);
useEffect(() => {
function handleNotification(title: string, notif: any) {
navigator.serviceWorker.ready.then((registration) => {
if (checkNotificationPromise()) {
registration.showNotification(title, notif);
} else {
registration.showNotification(title, notif);
}
});
}
if (temp) {
if (temp >= ALERT_THRESHOLD) {
handleNotification('TeaSense Alert', {
body: process.env.REACT_APP_TEASENSE_ALERT_MESSAGE,
tag: 1,
});
} else if (temp < ALERT_THRESHOLD && temp > WARNING_THRESHOLD) {
handleNotification('TeaSense Warning', {
body: process.env.REACT_APP_TEASENSE_WARNING_MESSAGE,
tag: 1,
});
}
}
}, [temp]);
return ( return (
<div className={'gauge-body'}> <div className={'gauge-body'}>
<div className={'gauge-label'}>TeaSense</div> <div className={'gauge-label'}>TeaSense</div>