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)
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>
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?