- Добавлен процесс для чтения iio-датчиков
[weathermon.git] / openwrt-web / meteo / meteo.js
diff --git a/openwrt-web/meteo/meteo.js b/openwrt-web/meteo/meteo.js
new file mode 100644 (file)
index 0000000..f56bc2d
--- /dev/null
@@ -0,0 +1,85 @@
+urlbase="/meteo/cgi?"
+
+currentState=""
+
+function RefreshPageState() {
+
+  var req = new XMLHttpRequest();
+
+  req.onreadystatechange = function () {
+
+    if (this.readyState != 4) return;
+    if (this.status == 200) {
+
+      var returnedData = JSON.parse(this.responseText);
+
+      var template = document.getElementById("template").innerHTML;
+      var value_color = document.getElementById("value").style.color;
+
+      var html = "";
+      
+      for (var sensor_id in returnedData) {
+        var timestamp = returnedData[sensor_id]["timestamp"];
+        for (var sensor in returnedData[sensor_id]) {
+          if (sensor != "timestamp") {
+            for (var param in returnedData[sensor_id][sensor]) {
+              sensor_path = sensor_id+"."+sensor+"."+param;
+              value = returnedData[sensor_id][sensor][param];
+              name = properties["names"][sensor_path];
+              if (! name) { name = sensor_path; }
+              units = properties["units"][sensor_path];
+              scale = properties["scale"][sensor_path];
+              color = properties["colors"][sensor_path];
+              if (scale) {
+                value = (scale[0] * value).toFixed(scale[1]);
+              }
+              if (! color) {
+                color =  value_color;
+              }
+              var section = template.replace(/\$SENSOR_ID/g,sensor_id);
+              section = section.replace(/\$SENSOR/g,sensor);
+              section = section.replace(/\$PARAM/g,param);
+              section = section.replace(/\$NAME/g,name);
+              section = section.replace(/\$UNITS/g,units);
+              section = section.replace(/\$VALUE/g,value);
+              section = section.replace(/\$COLOR/g,color);
+              section = section.replace(/\$TIMESTAMP/g,timestamp);
+              html = html + section;
+            }
+          }  
+        }
+      }
+      
+      document.getElementById("meteo").innerHTML = html;
+
+      setTimeout(RefreshPageState,5000)
+    } else {
+      setTimeout(RefreshPageState,15000)
+    }    
+  };
+
+  req.open("GET", urlbase+"state", true);
+  req.send();
+
+}
+
+function GetProperties() {
+  var req = new XMLHttpRequest();
+
+  req.onreadystatechange = function () {
+    if (this.readyState != 4) return; 
+    if (this.status != 200) {
+      setTimeout(GetProperties,30000);
+      return;
+    }
+    properties = JSON.parse(this.responseText);
+    RefreshPageState();
+  };
+
+  req.open("GET", urlbase+"props", true);
+  req.send();
+
+}
+
+
+setTimeout(GetProperties,100)