<!DOCTYPE HTML><html>
<head>
  <title>Garagentor Steuerung</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta charset="UTF-8">
  <link rel="icon" href="data:,">
  <style>
    html {font-family: Arial; display: inline-block; text-align: center;}
    h2 {font-size: 3.0rem;}
    p {font-size: 3.0rem;}
    body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
    .switch {position: relative; display: inline-block; width: 80px; height: 48px} 
    .switch input {display: none}
    .slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 6px}
    .slider:before {position: absolute; content: ""; height: 32px; width: 32px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 3px}
    input:checked+.slider {background-color: #b30000}
    input:checked+.slider:before {-webkit-transform: translateX(32px); -ms-transform: translateX(32px); transform: translateX(32px)}
	
	.button {
		border: 4px;
		border-style: solid;
		color: black;
		width: 100px;
		height: 100px;
		text-align: center;
		display: inline;
		text-decoration: none;
		display: inline-block;
		font-weight: bold;
		font-size: 20px;
		margin: 4px 2px;
		cursor: pointer;
		border-radius: 50px;
	}
	.buttonred {border-color: #ED5961;}
	.buttonyellow {border-color: #fcca00;}
	.buttongreen {border-color: #48bd81;}  
  </style>
</head>
<body>
  <h2>Garagentor</h2>  
	<canvas width="250px" height="250px" id="dc"></canvas>
	<h3 id="status">warte auf Verbindung.</h3>	
	
	<hr/>
	<button class="button buttonred" onclick="doCommand(1)">Auf</button> <button class="button buttonyellow" onclick="doCommand(2)">Stop</button> <button class="button buttongreen" onclick="doCommand(0)">Zu</button>
	<hr/>
	<h4>Licht</h4><label class="switch"><input type="checkbox" onchange="doCommand(5)" id="light"><span class="slider"></span></label>
	<hr/>
					
	<script>
	
	
	doorpos = 10;
	dir = -1;
	isconnected = false;
	var animation;
	function startDoorAnimation() {
		if(!animation){
			animation = setInterval(Draw, 200);
		}
		
	}
	function stopDoorAnimation() {
		if(animation){
			clearInterval(animation);
		}
		animation = null;
	}
	
	function Draw(){		
		var svg =document.getElementById("svg");
		var dc = document.getElementById("dc");		
		var ctx = dc.getContext("2d");
		width = dc.width;
		height = dc.height;
		ctx.clearRect(0, 0, width, height);		
		xa= [18,18,10,3,174,347,340,332,332,297,297,52,52,18];
		ya= [327,114,117,100,22,100,117,114,327,327,112,112,327,327];
		
		ctx.fillStyle = "black";
		ctx.beginPath();
		for (i =0;i<xa.length;i++){			
			if(i==0){
				ctx.moveTo((xa[i]/350) * width , (ya[i]/350)*width);
			}else{
				ctx.lineTo((xa[i]/350) * width, (ya[i]/350)*width);
			}
		}
		ctx.fill();
		
		for(i=0;i<doorpos;i++){			
			ctx.fillRect((62/350) * width, ((120+21*i)/350) * width, (225/350) * width, (18/350) * width);
		}
		doorpos+=dir;	
		
		if(dir<0 && doorpos<=0){
			dir=dir*-1;			
		}
		if(dir>0 &&doorpos>=10){
			dir=dir*-1;			
		}
	}
	
	function doCommand(action) {
      if(!isconnected){return;}
	  var xhr = new XMLHttpRequest();
	  xhr.open("GET", "/command?action="+action, true); 	  
	  xhr.send();
	}  
	
	function setDoorState(state){
		stopDoorAnimation();		
		if(state == 0) {doorpos = 10;dir = -1};
		if(state == 1) {doorpos = 0; dir = 1};		
		if(state == 2) {doorpos = 5; dir = 1};		
		Draw();		
		if(state == 3) startDoorAnimation();
	}
	
	function getStatusText(id){
		result = "Das Tor "
		switch(id)
		{
			case 0x20: setDoorState(1); return result+"ist geöffnet.";
			case 0x40: setDoorState(0); return result+"ist geschlossen.";
			case 0x80: setDoorState(2); return result+"ist teilgeöffnet.";
			case 0x00: setDoorState(2); return result+"ist teilgeöffnet.";
			case 0x02: setDoorState(3); return result+"schließt.";
			case 0x01: setDoorState(3); return result+"öffnet.";
			case -1: setDoorState(0); return "keine Verbindung zum Tor.";
			default: return "unbekanter Status: " + id;
		}    
	}
	
	function updateData(){
			var xmlhttp = new XMLHttpRequest();
			xmlhttp.onreadystatechange = function() {
			  if (this.readyState == 4 && this.status == 200) {
				var status = JSON.parse(this.responseText);	
                isconnected = status.valid;
				document.getElementById("status").innerHTML = getStatusText(status.valid?status.doorstate:-1);
				document.getElementById("light").checked = status.lamp & status.valid;
				return;
			  }
			  isconnected= false;
			};			
			xmlhttp.open("GET", "/status", true);
			xmlhttp.send();
	}
		
	Draw();
	updateData();	
	setInterval(updateData, 3000);
	
	
</script>
</body>
</html>