esp01s-serial-remote-controller

Serial communication from ESP-01S served webpage
Index Commits Files Refs README LICENSE
data/main.js (5787B)
   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;