Logic Machine Forum
Group adress updated at - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Visualization (https://forum.logicmachine.net/forumdisplay.php?fid=9)
+--- Thread: Group adress updated at (/showthread.php?tid=2327)



Group adress updated at - PassivPluss - 06.11.2019

Hi
As subject indicated iam wondering if it is possible to get a "tooltip" when holding mouse over objects in visu that grabs the updated at from group adress?
This is to indicate if the value is new or old?


RE: Group adress updated at - buuuudzik - 06.11.2019

As I know only by Custom Javascript + .lp file.

Custom JS could lhave such code:
Code:
$(function(){
  const updatetimes = {};
  const marked = document.querySelectorAll(".when-updated");
  const gaMatcher = /wh\-([0-9]+)_([0-9]+)_([0-9]+)/i;
  const isDef = n => typeof n !== "undefined";
  const showDate = updatetime => new Date(updatetime * 1000).toString();

  marked.forEach(element => {
    let loaded = false;
   
    const [matching, a, b, c] = element.className.match(gaMatcher);
    if (!matching) return;
    const ga = `${a}/${b}/${c}`;

    if (typeof updatetimes[ga] === "undefined") updatetimes[ga] = 0;

    grp.listen(ga, (object, state) => {
      if (state === "value" && loaded) {
        updatetimes[ga] = Date.now()/1000;
        element.title = updatetimes[ga] ? showDate(updatetimes[ga]) : null;
      }
    }, true);
  });
 
  const updateUpdatetimes = data => {
      if (!data) return;
   
    const objects = JSON.parse(data);
   
    Object.keys(updatetimes).forEach(ga => {
      const found = objects.find(obj => obj.address === ga);
      if (found.updatetime > updatetimes[ga]) {
        updatetimes[ga] = found.updatetime;
        document.querySelectorAll(`.wh-${ga.split("/").join("_")}`).forEach(element => element.title = showDate(updatetimes[ga]))
      }
    });
   
    loaded = true;
  }
 
  // download current grp.all() from object.lp
  $.get("/user/objects.lp", data => updateUpdatetimes(data));
});

You need also /user/objects.lp file with such content:
Code:
<?
require("json")
require("genohm-scada")
require("apps")

objects = json.encode(grp.all())
print(objects)
?>

Then all controls on the visu which will have special classes e.g. "when-updated wh-1_1_1" (for 1/1/1 address) will have title with last updated info ().

This is only some scratch, for a startWink