index.html 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <html>
  2. <head>
  3. <meta name="apple-mobile-web-app-capable" content="yes" />
  4. <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
  5. <meta charset="UTF-8">
  6. <title>ArozOS IoT Hub</title>
  7. <link rel="stylesheet" href="../../../script/tocas/tocas.css">
  8. <link rel="manifest" href="manifest.json">
  9. <script src="../../../script/tocas/tocas.js"></script>
  10. <script src="../../../script/jquery.min.js"></script>
  11. <script src="../../../script/ao_module.js"></script>
  12. <style>
  13. .ultrasmall.image{
  14. height:35px;
  15. margin:0px !important;
  16. margin-right:10px !important;
  17. }
  18. .selectable{
  19. cursor:pointer;
  20. }
  21. .selectable:hover{
  22. background-color:#f0f0f0;
  23. }
  24. .noborder{
  25. border: 1px solid transparent !important;
  26. }
  27. .controlBtn{
  28. position:absolute;
  29. right:8px;
  30. bottom:8px;
  31. }
  32. .devIcon{
  33. border-radius: 10px;
  34. }
  35. .primary.button{
  36. background-color: #4aa9eb !important;
  37. }
  38. .bottom.item{
  39. position:absolute;
  40. bottom: 0px;
  41. left:0px;
  42. width:100%;
  43. font-size:80%;
  44. }
  45. #sideMenu{
  46. height: calc(100% - 85px);
  47. }
  48. body{
  49. height:100%;
  50. background:rgba(247,247,247,0.95);
  51. }
  52. </style>
  53. </head>
  54. <body>
  55. <div class="ts right sidebar overlapped vertical menu">
  56. <div class="item">
  57. <div class="ts header">
  58. ArozOS IoT Hub
  59. <div class="sub header">Universal IoT Controller</div>
  60. </div>
  61. </div>
  62. <a class="selectable item" onClick="loadDevList();hideSideMenu();">
  63. <i class="refresh icon"></i> Refresh List
  64. </a>
  65. <a class="selectable item" onClick="scanDevices();hideSideMenu();">
  66. <i class="search icon"></i> Scan Devices
  67. </a>
  68. <div class="bottom item">
  69. CopyRight ArozOS Project 2021
  70. </div>
  71. </div>
  72. <div class="pusher">
  73. <div class="ts menu">
  74. <a class="item noborder" href="index.html"><img class="ts ultrasmall circular image" src="img/main_icon.png"> IoT Hub</a>
  75. <a class="right item" onClick="toggleSideMenu();"><i class="content icon"></i></a>
  76. </div>
  77. <div id="devList" class="ts container">
  78. </div>
  79. <br><br><br>
  80. </div>
  81. <div id="moreInfoInterface" class="ts active dimmer" style="display:none;">
  82. <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#moreInfoInterface").fadeOut("fast");'>
  83. </div>
  84. <div id="informationItnerface" class="ts segment mainUI" style="height:80%;width:95%;overflow-y:auto;">
  85. <div class="ts header">
  86. Device Properties
  87. </div><br>
  88. <div class="ts horizontal form">
  89. <div class="field">
  90. <label>Device UUID</label>
  91. <input id="duid" type="text" readonly="true">
  92. </div>
  93. <div class="field">
  94. <label>Last Seen IP Address</label>
  95. <input id="lastseen" type="text" readonly="true">
  96. </div>
  97. <div class="field">
  98. <label>Device Driver Identifier</label>
  99. <input id="ddi" type="text" readonly="true">
  100. </div>
  101. <div class="field">
  102. <label>Device Information</label>
  103. <input id="dinfo" type="text" readonly="true">
  104. </div>
  105. <div class="field">
  106. <label>Driver Found</label>
  107. <input id="driverfound" type="text" readonly="true">
  108. </div>
  109. </div>
  110. <br>
  111. <button class="ts primary button" onClick='$("#moreInfoInterface").fadeOut("fast");'>Close</button>
  112. <br><br>
  113. </div>
  114. </div>
  115. <div id="actionInterface" class="ts active dimmer" style="display:none;">
  116. <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#actionInterface").fadeOut("fast");'>
  117. </div>
  118. <div id="actionMainUI" class="ts segment mainUI" style="height:80%;width:95%;">
  119. <iframe id="controlUI" src="" width="500px" height="800px"> </iframe>
  120. </div>
  121. </div>
  122. <div id="nickNameSelector" class="ts active dimmer" style="display:none;">
  123. <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#nickNameSelector").fadeOut("fast");'>
  124. </div>
  125. <div id="nicknameSelectorUI" class="ts segment mainUI" style="height:80%;width:95%;overflow-y:auto;">
  126. <div class="ts header">
  127. <div class="content">
  128. Nickname Settings
  129. <div class="sub header">Please select an UUID from below for changing its nickname.</div>
  130. </div>
  131. </div>
  132. <div class="ts container">
  133. <div id="nicknameChangeList" class="ts list">
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. <div id="manualDevConfig" class="ts active dimmer" style="display:none;">
  139. <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#manualDevConfig").fadeOut("fast");'>
  140. </div>
  141. <div id="manualDevConfigUI" class="ts segment mainUI" style="height:80%;width:95%;">
  142. <div class="ts header">
  143. <div class="content">
  144. Manual Device Configuration
  145. <div class="sub header">Add devices that runs other protocol to the system</div>
  146. </div>
  147. </div>
  148. <div class="ts container">
  149. <button class="ts primary tiny button" onClick="addDevViaIP();"><i class="add icon"></i>Add device via IP</button>
  150. <button class="ts tiny button" onClick="openFolderForDev();"><i class="folder icon"></i>Open device folder</button>
  151. <p>Current list of Non-HDS Devices</p>
  152. <div id="customDevList" class="ts ordered list">
  153. <div class="item">Loading</div>
  154. </div>
  155. </div>
  156. </div>
  157. </div>
  158. <div id="loadingMask" class="ts active dimmer" style="display:none;">
  159. <div class="ts text loader">Loading</div>
  160. </div>
  161. <script>
  162. var currentlyViewingDevices = "";
  163. var uselocal = false; //Use Local as command sender or use Host as command sender
  164. var username = $("#data_session_username").text().trim();
  165. //ao_module Float Window functions
  166. ao_module_setWindowTitle("IoT Hub");
  167. ao_module_setWindowSize(465,730,true);
  168. if (!ao_module_virtualDesktop){
  169. $("body").css("background-color","white");
  170. }
  171. //Initiate the page content
  172. loadDevList();
  173. function inputbox(message, placeholder = ""){
  174. var input = prompt(message, placeholder);
  175. if (input != null) {
  176. return input;
  177. }else{
  178. return false;
  179. }
  180. }
  181. function scanDevices(){
  182. }
  183. function hideSideMenu(){
  184. ts('.right.sidebar').sidebar('hide');
  185. }
  186. function showMore(object){
  187. var device = $(object).parent().parent();
  188. var duid = device.attr("uuid");
  189. var lastseen = device.attr("devip");
  190. var ddi = device.attr("classtype");
  191. var dinfo = device.attr("classname");
  192. var dfound = device.attr("driverfound");
  193. if (duid === undefined){
  194. duid = "Unknown";
  195. $("#setNicknameButton").hide();
  196. }else{
  197. $("#setNicknameButton").show();
  198. }
  199. if (dfound === undefined){
  200. dfound = "Offline";
  201. }
  202. $("#duid").val(duid);
  203. $("#lastseen").val(lastseen);
  204. $("#ddi").val(ddi);
  205. $("#dinfo").val(dinfo);
  206. $("#driverfound").val(dfound);
  207. currentlyViewingDevices = duid;
  208. $("#moreInfoInterface").fadeIn('fast');
  209. }
  210. function loadDevList(){
  211. $("#devList").html("");
  212. $.get("../../../system/iot/list", function(data){
  213. if (data.error !== undefined){
  214. alert(data.error);
  215. }else{
  216. data.forEach(device => {
  217. deviceData = encodeURIComponent(JSON.stringify(device));
  218. $("#devList").append(`<div class="ts segment HDSDev" devicedata="${deviceData}" uuid="${device.DeviceUUID}" devIp="${device.IPAddr}" port="${device.Port}" location="local">
  219. <div class="ts grid">
  220. <div class="four wide column"><img class="ts tiny devIcon image" src="img/system/loading.gif"></div>
  221. <div class="twelve wide column">
  222. <div class="ts container">
  223. <div class="ts header">
  224. <span class="devHeader">${device.Name}</span>
  225. <div class="sub devProperty header">${device.Model}</div>
  226. </div>
  227. </div>
  228. </div>
  229. </div>
  230. <div class="controlBtn infoMount">
  231. <button class="ts icon button" onClick="showMore(this);"><i class="notice icon"></i></button>
  232. <button class="ts primary icon button" onClick="action(this);"><i class="external icon"></i></button>
  233. </div>
  234. </div>`);
  235. });
  236. }
  237. });
  238. }
  239. function toggleSideMenu(){
  240. //$("#sideMenu").toggle();
  241. ts('.right.sidebar').sidebar('toggle');
  242. }
  243. function updateIframeSize(){
  244. $("#controlUI").attr("width",$("#actionMainUI").width());
  245. $("#controlUI").attr("height",$("#actionMainUI").height());
  246. $("#controlUI").css("width",$("#actionMainUI").width());
  247. $("#controlUI").css("height",$("#actionMainUI").height());
  248. }
  249. $(window).on("resize",function(){
  250. updateIframeSize();
  251. });
  252. </script>
  253. </body>
  254. </html>