Readingsgroup Alternative

Begonnen von Nogga, 22 Februar 2018, 07:58:20

Vorheriges Thema - Nächstes Thema

Nogga

Ich habe eine Menge n an Dummy devices, die ich gerne ähnlich einer ReadingsGroup darstellen möchte (Tabelle oder Liste wäre egal). Eine RG mit dem entsprechenden Widget wäre möglich. Jetzt möchte ich aber auch zwei Commands darin platzieren zur Steuerung jedes Devices. Das endet aber leider immer in einem Fehler...

Hat jemand eine Idee wie ich eine Liste von Devices, dass ich ähnlich selektiere (über eine Regex) darstellen kann und auch Commands hinterlegen kann (immer die gleichen Commands)?

Folgendes habe ich momentan:


Internals:
   CFGFN     
   DEF        Pflanze.*:state,<complete>,snooze
   NAME       ReadingsGroup_Periodics
   NR         544
   NTFY_ORDER 50-ReadingsGroup_Periodics
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   CONTENT:
     Pflanze_1  1
     Pflanze_2  1
   CONTENT2:
   DEVICES:
     ARRAY(0x3a64138)
     ARRAY(0x3b570c8)
   fhem:
     lastDefChange 64
     last_update 1519249744.70203
   helper:
     DEF       
     mapping    %ALIAS
     commands:
       ReadingsGroup_Periodics.complete set %DEVICE complete
     positions:
       Pflanze_1.state 1:1
       Pflanze_2.state 2:1
     recalc:
       undef
       ARRAY(0x3d54718)
     valueFormat:
       snooze     <a href='#'>test</a>
     values:
       formated:
         undef
         ARRAY(0x3a8d6f8)
       orig:
         undef
         ARRAY(0x3a37108)
       prefixsuffix:
         undef
         ARRAY(0x3afa490)
Attributes:
   commands   {"ReadingsGroup_Periodics.complete"=>"set %DEVICE complete"}
   mapping    %ALIAS
   notime     1
   room       Tablet-UI

(Ist per RG Widget eingebunden)

Nogga

Ich habe es jetzt anders gelöst:
Ich habe die relevanten Funktionen aus der FHEM.js einfach rauskopiert und manuell in mein Tablet-UI reingehängt. Damit nutzt er jetzt die Standard-Funktionalität der Readingsgroup(-Links).

Im Moment funktioniert es problemlos. Habe weder im Log noch in der Konsole Fehler finden können...

Folgender Inhalt in einer rg.js:
function
addcsrf(arg)
{
  if(typeof FW_csrfToken != "undefined") {
    arg = arg.replace(/&fwcsrf=[^&]*/,'');
    arg += '&fwcsrf='+encodeURIComponent(FW_csrfToken);
  }
  return arg;
}

function
FW_csrfRefresh(callback)
{
  log("FW_csrfRefresh, last was "+(FW_csrfOk ? "ok":"bad"));
  if(!FW_csrfOk)        // avoid endless loop
    return;
  $.ajax({
    url:location.pathname+"?XHR=1",
    success: function(data, textStatus, request){
      FW_csrfToken = request.getResponseHeader('x-fhem-csrftoken');
      FW_csrfOk = false;
      if(callback)
        callback();
    }
  });
}

function
FW_errmsg(txt, timeout)
{
  log("ERRMSG:"+txt+"<");
  var errmsg = document.getElementById("errmsg");
  if(!errmsg) {
    if(txt == "")
      return;
    errmsg = document.createElement('div');
    errmsg.setAttribute("id","errmsg");
    document.body.appendChild(errmsg);
  }
  if(txt == "") {
    document.body.removeChild(errmsg);
    return;
  }
  errmsg.innerHTML = txt;
  if(timeout)
    setTimeout("FW_errmsg('')", timeout);
}


function
FW_cmd(arg, callback)
{
  //log("FW_cmd:"+arg);
  $.ajax({
    url:addcsrf(arg)+'&fw_id='+$("body").attr('fw_id'),
    method:'POST',
    success: function(data, textStatus, req){
      FW_csrfOk = true;
      if(callback)
        callback(req.responseText);
      else if(req.responseText)
        FW_errmsg(req.responseText, 5000);
    },
    error:function(xhr, status, err) {
      if(xhr.status == 400 && typeof FW_csrfToken != "undefined") {
        FW_csrfToken = "";
        FW_csrfRefresh(function(){FW_cmd(arg, callback)});
      }
    }
  });
}


eingebunden über

<script src="js/rg.js"></script>

Nogga

Die Links funktionieren zwar und auch die Darstellung in Tablet UI.
Nur leider aktualisiert sich meine Readingsgroup nicht. Egal wie lange ich warte - erst ein kompletter Refresh der Tablet UI-Seite im Browser aktualisiert die Tabelle.

Kennt jemand das Problem? Ggf die Lösung?