1 var received_data; 2 var main_checkbox, timer_checkbox; 3 var time_div, system_ip_addr, wifi_ssid, wifi_rssi; 4 var system_time, system_time_elem; 5 var to_time, from_time, temp_now, temp_set_value; 6 var temp_save_button, timer_save_button; 7 8 const time_formatter = new Intl.DateTimeFormat('en-GB', { 9 timeZone: 'America/Argentina/Buenos_Aires', 10 year: 'numeric', 11 month: '2-digit', 12 day: '2-digit', 13 hour: '2-digit', 14 minute: '2-digit', 15 hour12: false 16 }); 17 18 const query_types = { 19 "QUERY_STATUS": 0, 20 "QUERY_MAIN_OUTPUT_TOGGLE": 1, 21 "QUERY_TIMER_TOGGLE": 2, 22 "QUERY_TIMER_SET_VALUES": 3, 23 "QUERY_TEMP_SET": 4 24 } 25 26 function rssi_to_percentage(rssi) { 27 var quality = 0; 28 29 if (rssi <= -100) { 30 quality = 0; 31 } else if (rssi >= -50) { 32 quality = 100; 33 } else { 34 quality = 2 * (rssi + 100); 35 } 36 return quality; 37 } 38 39 function update_checkbox() { 40 main_checkbox.setAttribute("checked", received_data["main-output-enabled"]); 41 timer_checkbox.setAttribute("checked", received_data["timer"]["enabled"]); 42 } 43 44 function update_time() { 45 system_time = received_data["system-time"]; 46 // system_time_elem.innerHTML = time_formatter.format(new Date(system_time*1000)) 47 // .replaceAll("/", "-") 48 // .replaceAll(",", "") + " GMT-3"; 49 50 date = new Date(system_time*1000) 51 const hours = date.getUTCHours(); 52 const minutes = date.getUTCMinutes(); 53 const seconds = date.getUTCSeconds(); 54 55 system_time_elem.innerHTML = String(hours).padStart(2, "0") + ":" + 56 String(minutes).padStart(2, "0") + ":" + 57 String(seconds).padStart(2, "0") 58 } 59 60 function update_now_temp() { 61 temp_now.textContent = received_data["temp-now"] + "°C"; 62 } 63 64 function update_temp() { 65 temp_now.textContent = received_data["temp-now"] + "°C"; 66 temp_set_value.value = received_data["temp-set"]; 67 } 68 69 function update_timer() { 70 from_time.value = received_data["timer"]["from"]["hour"] + ":" 71 + received_data["timer"]["from"]["minute"]; 72 to_time.value = received_data["timer"]["to"]["hour"] + ":" 73 + received_data["timer"]["to"]["minute"]; 74 } 75 76 function update_all() { 77 update_checkbox(); 78 update_time(); 79 update_timer(); 80 update_temp(); 81 82 system_ip_addr.href = received_data["system-ip-addr"]; 83 system_ip_addr.innerHTML = received_data["system-ip-addr"]; 84 85 wifi_ssid.innerHTML = received_data["wifi-ssid"]; 86 const rssi = received_data["wifi-rssi"]; 87 wifi_rssi.innerHTML = rssi + "dBm (" + rssi_to_percentage(rssi) + "%)"; 88 } 89 90 function socket_onmessage_handler(event) { 91 received_data = JSON.parse(event.data); 92 // console.log(received_data); 93 94 switch(received_data["type"]) { 95 case "all": 96 update_all(); 97 break; 98 case "time": 99 update_time(); 100 break; 101 case "cb": 102 update_checkbox(); 103 break; 104 case "timer": 105 update_timer(); 106 break; 107 case "temp-values": 108 update_temp(); 109 break; 110 case "temp-now-values": 111 update_now_temp(); 112 break; 113 default: 114 console.log("[SOCKET] received_data: type not known, updating all..."); 115 update_all(); 116 } 117 } 118 119 function socket_onopen_handler(event) { 120 console.log("[SOCKET] Connection established") 121 socket.send(query_types["QUERY_STATUS"]); 122 } 123 124 function handle_click(cb) { 125 if(cb == 'main-toggle') { 126 socket.send(query_types["QUERY_MAIN_OUTPUT_TOGGLE"]); 127 } else if(cb == 'timer-toggle') { 128 socket.send(query_types["QUERY_TIMER_TOGGLE"]); 129 } else { 130 console.log("handle_click: wrong target"); 131 } 132 } 133 134 function update_system_time() { 135 socket.send(query_types["QUERY_STATUS"]); 136 } 137 138 function timer_set_time() { 139 var query_json = new Object(); 140 141 query_json.from = new Object(); 142 query_json.from.hour = from_time.value.slice(0, 2); 143 query_json.from.minute = from_time.value.slice(3, 5); 144 145 query_json.to = new Object(); 146 query_json.to.hour = to_time.value.slice(0, 2); 147 query_json.to.minute = to_time.value.slice(3, 5); 148 149 socket.send(query_types["QUERY_TIMER_SET_VALUES"] + JSON.stringify(query_json)); 150 } 151 152 function temp_set() { 153 var query_json = new Object(); 154 155 query_json.temp_set_point_new = temp_set_value.value.slice(0, 2); 156 socket.send(query_types["QUERY_TEMP_SET"] + JSON.stringify(query_json)); 157 } 158 159 160 function query_data() { 161 main_checkbox = document.getElementById("main-checkbox"); 162 timer_checkbox = document.getElementById("timer-checkbox"); 163 system_time_elem = document.getElementById("system-time"); 164 system_ip_addr = document.getElementById("system-ip-addr"); 165 wifi_ssid = document.getElementById("wifi-ssid"); 166 wifi_rssi = document.getElementById("wifi-rssi"); 167 168 from_time = document.getElementById("from-time"); 169 to_time = document.getElementById("to-time"); 170 171 temp_now = document.getElementById("main-now-value"); 172 temp_set_value = document.getElementById("main-set-value"); 173 temp_set_value.addEventListener("keydown", (e) => { 174 if (e.key === "Enter") { 175 temp_set_value.blur(); 176 } 177 }); 178 179 temp_save_button = document.getElementById("main-save"); 180 temp_save_button.addEventListener( "click", temp_set, false); 181 182 timer_save_button = document.getElementById("timer-save"); 183 timer_save_button.addEventListener( "click", timer_set_time, false); 184 185 // setInterval(update_system_time, 30*1000); // update time every 30 secs 186 } 187 188 const socket = new WebSocket("ws:/" + "/" + location.host + ":81"); 189 socket.onmessage = socket_onmessage_handler; 190 socket.onopen = socket_onopen_handler; 191 window.onload = query_data;
