|
|
|
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
|
|
|
|
|
|
|
<head>
|
|
|
|
<title>Bootstrap Example</title>
|
|
|
|
<!-- Required meta tags -->
|
|
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
|
|
|
|
<!-- Bootstrap CSS -->
|
|
|
|
<link rel="stylesheet" href="css/bootstrap.min.css">
|
|
|
|
<link rel="stylesheet" href="css/main.css">
|
|
|
|
|
|
|
|
<!-- JS -->
|
|
|
|
<script src="js/jquery-3.3.1.min.js"></script>
|
|
|
|
<script src="js/bootstrap.min.js"></script>
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
var sock = null;
|
|
|
|
var ellog = null;
|
|
|
|
var video_sock = "http://" + window.location.hostname + ":8081/";
|
|
|
|
var servo_sock = "ws://" + window.location.hostname + ":45684/ws?a=23&foo=bar";
|
|
|
|
|
|
|
|
window.onload = function () {
|
|
|
|
|
|
|
|
ellog = document.getElementById('log');
|
|
|
|
|
|
|
|
var wsuri = servo_sock;
|
|
|
|
//if (window.location.protocol === "file:") {
|
|
|
|
// wsuri = "ws://10.174.136.143:45684/ws?a=23&foo=bar";
|
|
|
|
//} else {
|
|
|
|
// wsuri = "ws://" + window.location.hostname + ":45684/ws?a=23&foo=bar";
|
|
|
|
//}
|
|
|
|
|
|
|
|
if ("WebSocket" in window) {
|
|
|
|
sock = new WebSocket(wsuri);
|
|
|
|
} else if ("MozWebSocket" in window) {
|
|
|
|
sock = new MozWebSocket(wsuri);
|
|
|
|
} else {
|
|
|
|
console.log("Browser does not support WebSocket!");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sock) {
|
|
|
|
sock.onopen = function () {
|
|
|
|
console.log("Connected to " + wsuri);
|
|
|
|
}
|
|
|
|
|
|
|
|
sock.onclose = function (e) {
|
|
|
|
console.log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");
|
|
|
|
sock = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
sock.onmessage = function (e) {
|
|
|
|
console.log("Got echo: " + e.data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function send() {
|
|
|
|
if (sock) {
|
|
|
|
var msg = document.getElementById("x-pos").value + "/" + document.getElementById("y-pos").value;
|
|
|
|
sock.send(msg);
|
|
|
|
console.log("Sent " + msg);
|
|
|
|
} else {
|
|
|
|
console.log("Not connected.");
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function send_button(ch) {
|
|
|
|
if (sock) {
|
|
|
|
switch (ch) {
|
|
|
|
case 'F':
|
|
|
|
var msg = 'F';
|
|
|
|
break;
|
|
|
|
case 'D':
|
|
|
|
var msg = 'D';
|
|
|
|
break;
|
|
|
|
case 'R':
|
|
|
|
var msg = 'R';
|
|
|
|
break;
|
|
|
|
case 'L':
|
|
|
|
var msg = 'L';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
sock.send(msg);
|
|
|
|
console.log("Sent " + msg);
|
|
|
|
} else {
|
|
|
|
console.log("Not connected.");
|
|
|
|
}
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<nav class="navbar navbar-default navbar-static-top">
|
|
|
|
<div class="container-fluid">
|
|
|
|
<!-- Brand and toggle get grouped for better mobile display -->
|
|
|
|
<div class="navbar-header">
|
|
|
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
|
|
|
|
data-target="#bs-example-navbar-collapse-1">
|
|
|
|
<span class="sr-only">Toggle navigation</span>
|
|
|
|
<span class="icon-bar"></span>
|
|
|
|
<span class="icon-bar"></span>
|
|
|
|
<span class="icon-bar"></span>
|
|
|
|
</button>
|
|
|
|
<a class="navbar-brand" href="#">Умный дом</a>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- Collect the nav links, forms, and other content for toggling -->
|
|
|
|
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
|
|
|
|
|
|
|
<ul class="nav navbar-nav navbar-right">
|
|
|
|
<li><a href="https://gitlab.com/zenls/rpi_remote_cam.git" target="_blank">Gitlab</a></li>
|
|
|
|
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
<div class="container-fluid main-container">
|
|
|
|
<div class="col-md-2 sidebar">
|
|
|
|
<ul class="nav nav-pills nav-stacked">
|
|
|
|
<li class="active"><a href="index.html">Видео стрим</a></li>
|
|
|
|
<li><a href="info.html">Информация</a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<div class="col-md-10 content">
|
|
|
|
<div class="panel panel-default">
|
|
|
|
<div class="panel-heading">
|
|
|
|
Видео
|
|
|
|
</div>
|
|
|
|
<div class="text-center">
|
|
|
|
<br>
|
|
|
|
<img style="-webkit-user-select: none;" src="http://10.253.35.143:8081/">
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<table width="100%">
|
|
|
|
<tr>
|
|
|
|
<th width="20%">
|
|
|
|
|
|
|
|
<p align="center"><input type="button" style="width:120px;height:35px" id="forword-butt" value=⇑ accesskey="w"
|
|
|
|
onclick="send_button('F')">
|
|
|
|
</p>
|
|
|
|
<p align="center"><input type="button" style="width:80px;height:35px" id="left-butt" value=⇐ accesskey="a"
|
|
|
|
onclick="send_button('L')">
|
|
|
|
<input type="button" style="width:80px;height:35px" id="right-butt" value=⇒ accesskey="d"
|
|
|
|
onclick="send_button('R')">
|
|
|
|
</p>
|
|
|
|
<p align="center"><input type="button" style="width:120px;height:35px;" id="down-butt" value=⇓ accesskey="s"
|
|
|
|
onclick="send_button('D')">
|
|
|
|
</p>
|
|
|
|
|
|
|
|
</th>
|
|
|
|
|
|
|
|
<th width="80%">
|
|
|
|
|
|
|
|
<form class="range-field">
|
|
|
|
<p>Вертикаль:<input type="range" min="50" max="250" id="y-pos" oninput="send();"
|
|
|
|
value="140" />
|
|
|
|
</p>
|
|
|
|
<p>Горизонталь:<input type="range" min="50" max="250" id="x-pos"
|
|
|
|
oninput="send();" value="140" /></p>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
</th>
|
|
|
|
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<footer class="pull-left footer">
|
|
|
|
<p class="col-md-12">
|
|
|
|
<hr class="divider">Проект создан в образовательных целях, при поддержке <a
|
|
|
|
href="https://t.me/baumanrobotics">Bauman
|
|
|
|
Robotics</a>.</a>
|
|
|
|
</p>
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
|
</html>
|