shrooms-server/static/admin.html

196 lines
5.0 KiB
HTML

<!doctype html>
<html>
<head>
<script>
function status(msg) {
document.getElementById('status').textContent = msg
}
async function queryParams() {
const resp = await fetch('/api/params')
//console.log(json)
//console.log(Object.keys(json))
if (!resp.ok) {
var err_msg = null
if (resp.body != null) {
err_msg = await resp.text()
}
if (err_msg != null) {
status("query failed: " + resp.status + " " + err_msg)
} else {
status("query failed: " + resp.status)
}
}
const json = await resp.json()
status('parameter query successful!')
const paramList = document.getElementById('param-list')
while (paramList.firstChild) {
paramList.removeChild(paramList.lastChild)
}
Object.keys(json).forEach((name) => {
const elem = document.createElement('div')
elem.textContent = name + " = " + json[name]
paramList.appendChild(elem)
})
}
async function setParam(auth, name, value) {
const msg = JSON.stringify({
auth: auth,
data: {
set_params: {
name: name,
value: value
}
}
})
const resp = await fetch('/api/admin', {
method: 'POST',
body: msg
})
if (!resp.ok) {
var err_msg = null
if (resp.body != null) {
err_msg = await resp.text()
}
if (err_msg != null) {
status("set failed: " + resp.status + " " + err_msg)
} else {
status("set failed: " + resp.status)
}
} else {
status("parameter set successful!")
await queryParams()
}
}
var manual_mode = false
var manual_loop_running = false
const sleep = (ms) => new Promise(r => setTimeout(r, ms))
async function manualModeLoop(auth) {
if (manual_loop_running) return
manual_loop_running = true
try {
while (manual_mode) {
await sleep(30*1000)
if (manual_mode) await manualMode(auth, manual_mode)
}
} finally {
manual_loop_running = false
}
}
async function manualMode(auth, on) {
const msg = JSON.stringify({
auth: auth,
data: {
manual_mode: on
}
})
const resp = await fetch('/api/admin', {
method: 'POST',
body: msg
})
if (!resp.ok) {
var err_msg = null
if (resp.body != null) {
err_msg = await resp.text()
}
if (err_msg != null) {
status("manual mode set failed: " + resp.status + " " + err_msg)
} else {
status("manual mode set failed: " + resp.status)
}
} else {
status("manual mode set successful!")
manual_mode = on
if (manual_mode) {
manualModeLoop(auth)
}
//await queryParams()
}
}
async function manualHumidifier(auth, on) {
const msg = JSON.stringify({
auth: auth,
data: {
manual_mode_on: on
}
})
const resp = await fetch('/api/admin', {
method: 'POST',
body: msg
})
if (!resp.ok) {
var err_msg = null
if (resp.body != null) {
err_msg = await resp.text()
}
if (err_msg != null) {
status("manual hum set failed: " + resp.status + " " + err_msg)
} else {
status("manual hum set failed: " + resp.status)
}
} else {
status("manual hum set successful!")
}
}
window.onload = () => {
document.getElementById('query-params').addEventListener('click', (e) => {
queryParams()
})
document.getElementById('set-param').addEventListener('click', (e) => {
const auth = document.getElementById('password').value
const name = document.getElementById('name').value
const value = parseFloat(document.getElementById('value').value)
if (isNaN(value)) {
status('invalid value set')
return
}
setParam(auth, name, value)
})
document.getElementById('manual-mode').addEventListener('click', (e) => {
const auth = document.getElementById('password').value
const on = document.getElementById('manual-mode').checked
manualMode(auth, on)
})
document.getElementById('manual-on').addEventListener('click', (e) => {
const auth = document.getElementById('password').value
const on = document.getElementById('manual-on').checked
manualHumidifier(auth, on)
})
}
</script>
</head>
<body>
<fieldset>
<legend>Status</legend>
<div id=status></div>
</fieldset>
<form>
<fieldset>
<legend>Parameter list</legend>
<div id=param-list></div>
<input id=query-params type=button value="Query params"></input><br />
</fieldset>
<label for=password>Auth password: </label>
<input id=password type=password></input><br />
<fieldset>
<legend>Set parameter</legend>
<label for=name>Name: </label>
<input id=name type=text></input><br />
<label for=value>Value: </label>
<input id=value type=text></input><br />
<input id=set-param type=button value="Set parameter"></input><br />
</fieldset>
<fieldset>
<legend>Manual mode</legend>
<input id=manual-mode type=checkbox></input><label for=manual-mode>manual mode</label><br />
<input id=manual-on type=checkbox></input><label for=manual-on>humidifier on</label><br />
</fieldset>
</form>
</body>
</html>