1 var received_data; 2 var main_checkbox, timer_checkbox; 3 var time_div, system_local_domain, system_ip_addr, wifi_ssid, wifi_rssi; 4 var system_time, system_time_elem, last_ntp_sync, last_ntp_sync_elem; 5 var to_time, from_time, timer_save_button; 6 7 const time_formatter = new Intl.DateTimeFormat('en-GB', { 8 timeZone: 'America/Argentina/Buenos_Aires', 9 year: 'numeric', 10 month: '2-digit', 11 day: '2-digit', 12 hour: '2-digit', 13 minute: '2-digit', 14 hour12: false 15 }); 16 17 const query_types = { 18 "MAIN_OUTPUT_STATUS": 0, 19 "MAIN_OUTPUT_TOGGLE": 1, 20 "TIMER_TOGGLE": 2, 21 "TIMER_SET_VALUES": 3 22 } 23 24 function rssi_to_percentage(rssi) { 25 var quality = 0; 26 27 if (rssi <= -100) { 28 quality = 0; 29 } else if (rssi >= -50) { 30 quality = 100; 31 } else { 32 quality = 2 * (rssi + 100); 33 } 34 return quality; 35 } 36 37 function update_checkbox() { 38 main_checkbox.setAttribute("checked", received_data["main-output-enabled"]); 39 timer_checkbox.setAttribute("checked", received_data["timer"]["enabled"]); 40 } 41 42 function update_time() { 43 system_time = received_data["system-time"]; 44 system_time_elem.innerHTML = time_formatter.format(new Date(system_time*1000)) 45 .replaceAll("/", "-") 46 .replaceAll(",", "") + " GMT-3"; 47 } 48 49 function update_timer() { 50 from_time.value = received_data["timer"]["from"]["hour"] + ":" 51 + received_data["timer"]["from"]["minute"]; 52 to_time.value = received_data["timer"]["to"]["hour"] + ":" 53 + received_data["timer"]["to"]["minute"]; 54 } 55 56 function update_all() { 57 update_checkbox(); 58 update_time(); 59 update_timer(); 60 61 system_local_domain.href = "http://" + received_data["system-local-domain"] + ".local"; 62 system_local_domain.innerHTML = "http://" + received_data["system-local-domain"] + ".local"; 63 64 system_ip_addr.href = received_data["system-ip-addr"]; 65 system_ip_addr.innerHTML = received_data["system-ip-addr"]; 66 67 last_ntp_sync = received_data["last-ntp-sync"]; 68 last_ntp_sync_elem.innerHTML = time_formatter.format(new Date(last_ntp_sync*1000)) 69 .replaceAll("/", "-") 70 .replaceAll(",", "") + " GMT-3"; 71 72 wifi_ssid.innerHTML = received_data["wifi-ssid"]; 73 const rssi = received_data["wifi-rssi"]; 74 wifi_rssi.innerHTML = rssi + "dBm (" + rssi_to_percentage(rssi) + "%)"; 75 } 76 77 function socket_onmessage_handler(event) { 78 received_data = JSON.parse(event.data); 79 80 switch(received_data["type"]) { 81 case "all": 82 update_all(); 83 break; 84 case "time": 85 update_time(); 86 break; 87 case "cb": 88 update_checkbox(); 89 break; 90 case "timer": 91 update_timer(); 92 break; 93 default: 94 console.log("[SOCKET] received_data: type not known, updating all..."); 95 update_all(); 96 } 97 } 98 99 function socket_onopen_handler(event) { 100 console.log("[SOCKET] Connection established") 101 socket.send(query_types["MAIN_OUTPUT_STATUS"]); 102 } 103 104 function handle_click(cb) { 105 if(cb == 'main-toggle') { 106 socket.send(query_types["MAIN_OUTPUT_TOGGLE"]); 107 } else if(cb == 'timer-toggle') { 108 socket.send(query_types["TIMER_TOGGLE"]); 109 } else { 110 console.log("handle_click: wrong target"); 111 } 112 } 113 114 function update_system_time() { 115 socket.send(query_types["MAIN_OUTPUT_STATUS"]); 116 } 117 118 function timer_set_time() { 119 var query_json = new Object(); 120 121 query_json.from = new Object(); 122 query_json.from.hour = from_time.value.slice(0, 2); 123 query_json.from.minute = from_time.value.slice(3, 5); 124 125 query_json.to = new Object(); 126 query_json.to.hour = to_time.value.slice(0, 2); 127 query_json.to.minute = to_time.value.slice(3, 5); 128 129 socket.send(query_types["TIMER_SET_VALUES"] + JSON.stringify(query_json)); 130 } 131 132 function query_data() { 133 main_checkbox = document.getElementById("main-checkbox"); 134 timer_checkbox = document.getElementById("timer-checkbox"); 135 system_local_domain = document.getElementById("system-local-domain"); 136 last_ntp_sync_elem = document.getElementById("last-ntp-sync"); 137 system_time_elem = document.getElementById("system-time"); 138 system_ip_addr = document.getElementById("system-ip-addr"); 139 wifi_ssid = document.getElementById("wifi-ssid"); 140 wifi_rssi = document.getElementById("wifi-rssi"); 141 142 from_time = document.getElementById("from-time"); 143 to_time = document.getElementById("to-time"); 144 145 timer_save_button = document.getElementById("timer-save"); 146 timer_save_button.addEventListener( "click", timer_set_time, false); 147 148 // setInterval(update_system_time, 30*1000); // update time every 30 secs 149 } 150 151 const socket = new WebSocket("ws:/" + "/" + location.host + ":81"); 152 socket.onmessage = socket_onmessage_handler; 153 socket.onopen = socket_onopen_handler; 154 window.onload = query_data;
