196 lines
5.0 KiB
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>
|