177 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html>
 | 
						|
    <head>
 | 
						|
        <link rel="stylesheet" href="css/style.css">
 | 
						|
        <link rel="stylesheet" href="css/slider.css">
 | 
						|
        <title id="title">Wasser</title>
 | 
						|
        <script type="text/javaScript">
 | 
						|
            function init() {
 | 
						|
                get_devices();
 | 
						|
                get_states();
 | 
						|
                get_battery_level();
 | 
						|
                get_moisture_level();
 | 
						|
                setInterval(poll, 1000);
 | 
						|
                get_moisture_level();
 | 
						|
            }
 | 
						|
            function poll() {
 | 
						|
                get_states();
 | 
						|
                get_battery_level();
 | 
						|
                get_moisture_level();
 | 
						|
            }
 | 
						|
            function get_moisture_level() {
 | 
						|
                const xhr = new XMLHttpRequest();
 | 
						|
                xhr.open("GET", "/soil/moisture");
 | 
						|
                xhr.send();
 | 
						|
                xhr.responseType = "json";
 | 
						|
                xhr.onload = () => {
 | 
						|
                    if (xhr.readyState == 4 && xhr.status == 200) {
 | 
						|
                        let result = xhr.response
 | 
						|
                        let str = result.value.toFixed(1) + " " + result.unit
 | 
						|
                        let cell = document.getElementById("soil_moisture");
 | 
						|
                        cell.innerText = str;
 | 
						|
                    } else {
 | 
						|
                        console.log(`Error: ${xhr.status}`);
 | 
						|
                    }
 | 
						|
                };
 | 
						|
            }
 | 
						|
            function get_battery_level() {
 | 
						|
                const xhr = new XMLHttpRequest();
 | 
						|
                xhr.open("GET", "/battery/stateofcharge");
 | 
						|
                xhr.send();
 | 
						|
                xhr.responseType = "json";
 | 
						|
                xhr.onload = () => {
 | 
						|
                    if (xhr.readyState == 4 && xhr.status == 200) {
 | 
						|
                        let result = xhr.response
 | 
						|
                        let str = result.value.toFixed(1) + " " + result.unit
 | 
						|
                        let cell = document.getElementById("battery_level");
 | 
						|
                        cell.innerText = str;
 | 
						|
                    } else {
 | 
						|
                        console.log(`Error: ${xhr.status}`);
 | 
						|
                    }
 | 
						|
                };
 | 
						|
            }
 | 
						|
            function get_states() {
 | 
						|
                const xhr = new XMLHttpRequest();
 | 
						|
                xhr.open("GET", "/state");
 | 
						|
                xhr.send();
 | 
						|
                xhr.responseType = "json";
 | 
						|
                xhr.onload = () => {
 | 
						|
                    if (xhr.readyState == 4 && xhr.status == 200) {
 | 
						|
                        let states = xhr.response
 | 
						|
                        for(let i in states) {
 | 
						|
                            let btn = document.getElementById(states[i].name);
 | 
						|
                            let state = states[i].state;
 | 
						|
                            let chk = false;
 | 
						|
                            if(state === "on") {
 | 
						|
                                chk = true;
 | 
						|
                            }
 | 
						|
                            btn.checked = chk;
 | 
						|
                            let runtime_cell = document.getElementById("runtime" + states[i].name);
 | 
						|
                            const millis = states[i].runtime / 1000000;
 | 
						|
                            const res = new Date(millis).toISOString().slice(11, 19);
 | 
						|
                            runtime_cell.innerHTML = res;
 | 
						|
                        }
 | 
						|
                    } else {
 | 
						|
                        console.log(`Error: ${xhr.status}`);
 | 
						|
                    }
 | 
						|
                };
 | 
						|
            }
 | 
						|
            function get_devices() {
 | 
						|
                const xhr = new XMLHttpRequest();
 | 
						|
                xhr.open("GET", "/devices");
 | 
						|
                xhr.send();
 | 
						|
                xhr.responseType = "json";
 | 
						|
                xhr.onload = () => {
 | 
						|
                    if (xhr.readyState == 4 && xhr.status == 200) {
 | 
						|
                        let devices = xhr.response['devices'];
 | 
						|
                        let table = document.getElementById("devices_table");
 | 
						|
                        for(let i = 0; i < devices.length; i++) {
 | 
						|
                            // insert per device row into devices table
 | 
						|
                            let new_row = table.insertRow();
 | 
						|
 | 
						|
                            // first row is name
 | 
						|
                            let name_cell = new_row.insertCell();
 | 
						|
                            name_cell.innerHTML = devices[i].name;
 | 
						|
 | 
						|
                            // create slider switch
 | 
						|
                            let input = document.createElement("input");
 | 
						|
                            input.setAttribute("type", "checkbox");
 | 
						|
                            input.setAttribute("id", devices[i].name);
 | 
						|
                            input.onchange = function(){check(this, devices[i].name)};
 | 
						|
                            let span = document.createElement("span");
 | 
						|
                            span.className = "slider round";
 | 
						|
                            let btn = document.createElement("label");
 | 
						|
                            btn.className = "switch";
 | 
						|
                            btn.appendChild(input);
 | 
						|
                            btn.appendChild(span);
 | 
						|
                            let button_cell = new_row.insertCell();
 | 
						|
                            button_cell.appendChild(btn);
 | 
						|
 | 
						|
                            // add runtime cell
 | 
						|
                            let runtime_cell = new_row.insertCell();
 | 
						|
                            runtime_cell.setAttribute("id", "runtime" + devices[i].name);
 | 
						|
                        }
 | 
						|
                    } else {
 | 
						|
                        console.log(`Error: ${xhr.status}`);
 | 
						|
                    }
 | 
						|
                };
 | 
						|
            }
 | 
						|
 | 
						|
            function check(checkbox, name) {
 | 
						|
                var obj;
 | 
						|
                console.log("name: ", name);
 | 
						|
                if(checkbox.checked) {
 | 
						|
                    obj = '{"name":"' + name + '","state":"on"}'
 | 
						|
                } else {
 | 
						|
                    obj = '{"name":"' + name + '","state":"off"}'
 | 
						|
                }
 | 
						|
                console.log(obj);
 | 
						|
                const xhr = new XMLHttpRequest();
 | 
						|
                xhr.open("PATCH", "/state");
 | 
						|
                xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
 | 
						|
                // xhr.onload = () => {
 | 
						|
                //     var data = JSON.parse(xhr.responseText);
 | 
						|
                //     if (xhr.readyState == 4 && xhr.status == "202") {
 | 
						|
                //         console.log(data);
 | 
						|
                //     } else {
 | 
						|
                //         console.log(`Error: ${xhr.status}`);
 | 
						|
                //     }
 | 
						|
                // };
 | 
						|
                xhr.send(obj);
 | 
						|
            }
 | 
						|
        </script>
 | 
						|
    </head>
 | 
						|
 | 
						|
    <body onload=init()>
 | 
						|
        <div class="headercontainer">
 | 
						|
            <!-- <div class="meta">
 | 
						|
                <div class="left" style="line-height: 24px;font-weight: bold;" id="headline">Wasser</div>
 | 
						|
                <div class="middle"></div>
 | 
						|
                <div class="right"><span></span></div>
 | 
						|
            </div> -->
 | 
						|
 | 
						|
            <!-- <div class="header" id="header_cnt">
 | 
						|
                <div class="headerlogo"><img src="images/logo_perinet.png" width="258" height="94" alt="" /></div>
 | 
						|
            </div> -->
 | 
						|
        </div>
 | 
						|
        <div id="content">
 | 
						|
            <h1>Photovoltaik</h1>
 | 
						|
            <table>
 | 
						|
                <tr>
 | 
						|
                    <td>Batterielevel:</td>
 | 
						|
                    <td id="battery_level"></td>
 | 
						|
                </tr>
 | 
						|
            </table>
 | 
						|
            <h1>Bodenfeuchtigkeit</h1>
 | 
						|
            <table>
 | 
						|
                <tr>
 | 
						|
                    <td>Bodenfeuchtigkeit:</td>
 | 
						|
                    <td id="soil_moisture"></td>
 | 
						|
                </tr>
 | 
						|
            </table>
 | 
						|
            <h1>Rasensprenger</h1>
 | 
						|
            <table id="devices_table"></table>
 | 
						|
        </div>
 | 
						|
    </body>
 | 
						|
</html>
 |