'..tHeader[i]..' | ' end elseif tHeader[i]:find("Item") then zBuffer[#zBuffer+1]=" "..tHeader[i].." | "
elseif tHeader[i]:find("Act") then if dataCol[tHeader[i]] then zBuffer[#zBuffer+1]=''..tHeader[i]..' | ' end elseif tHeader[i]:find("Time Slot") then if dataCol["timeSlot"] then zBuffer[#zBuffer+1]=''..tHeader[i]..' | ' end else zBuffer[#zBuffer+1]=''..tHeader[i]..' | ' end end zBuffer[#zBuffer+1]="|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
"..dColor[jD[i].idType].." "..tableOrder[3][k].." | "
else zBuffer[#zBuffer+1]=""..dColor[jD[i].idType].." "..tableOrder[3][k].." | " end end if jD[i].pRef.batteryLevel then tmpNum=tonumber(jD[i].pRef.batteryLevel) if tmpNum<30 then tmpStr="#550000" end; tmpStr=""..(#noAct>5 and noAct or dColor[jD[i].idType])..tmpStr..(jAlarm[realId(i)] and dArm[jAlarm[realId(i)]] or "" )..(jAlarm[tableId(i)] and dArm[jAlarm[tableId(i).."value"]] or "" )..inRoom.." | " end if k>7 then zBuffer[#zBuffer+1] =""..dColor[jD[i].idType]..noAct..inRoom.." | " end if jD[i].idType:find("Scene") then if jD[i].tstRate<0 then noAct=sColor[5] end if jD[i].lAct[1] then zBuffer[#zBuffer+1]=""..sColor[jD[i].status+1]..noAct..mStr..jD[i].runningInstances.value.." | "
else zBuffer[#zBuffer+1]=""..sColor[jD[i].status+1]..noAct..jD[i].runningInstances.value.." | " end elseif jD[i][jD[i].property] then tmpNum=jD[i].status+1; if os_time()-jD[i].lagTime<0 then tmpNum=6 end zBuffer[#zBuffer+1]=""..mStr..sColor[tmpNum]..cutStr(jD[i][jD[i].property].value,15).." | "
else zBuffer[#zBuffer+1]="" end if jD[i].state<3 then if (string.match(jD[i].stateValue,'[%(%+%-%*%$/@&]') and not tonumber(jD[i].stateValue) ) or (jD[i].userTerms..jD[i].stateValue):len()>30+3 then zBuffer[#zBuffer+1] =" | "..sColor[jD[i].status+1].." "..cutStr(jD[i] .userTerms..doTheMath(jD[i].stateValue,i),30,true)..jD[i].lagStr.." | "
else zBuffer[#zBuffer+1] =""..sColor[jD[i].status+1]..jD[i].userTerms..jD[i].stateValue..jD[i].lagStr.." | " end elseif jD[i].state==3 then zBuffer[#zBuffer+1]="("..sColor[jD[i].status+1]..jD[i].property..") | " elseif not jD[i].idType:find("Auto") and jD[i].idType:find("Scene") and not rowSpan then zBuffer[#zBuffer+1] =""..sColor[jD[i].status+1]..noAct.." instances | " elseif jD[i].idType:find("Auto") and not rowSpan then zBuffer[#zBuffer+1]=""..dColor[jD[i].idType].." ⟳ | " elseif not rowSpan then zBuffer[#zBuffer+1]="" end zBuffer[#zBuffer+1]=" | "..(jD[i].timeoutAct and not jD[i].active and "" or sColor[jD[i].status+1])..(#noAct==0 and (" %02d:"):format(math.floor((os_time()-jD[i].lTime)/3600))..os.date("!%M:%S",os_time()-jD[i].lTime) or " --:--:--").." | " if gData.numAlerts>0 then zBuffer[#zBuffer+1]="" end if jD[i].tAlerts~=0 then zBuffer[#zBuffer]=" | "..jD[i].tAlerts.." ").."","left:-",true).." | " end
if jD[i].tstRate>0 then tmpNum=0
if jD[i].status==1 or jD[i].timeSpanOn then
tmpNum=math.min(math.floor((os_time()-jD[i].lTime)/(jD[i].tstRate*60)*100),100) end
if jD[i].status==0 then tmpNum=math.min(math.floor(setTickTime(i,true)/(jD[i].tstRate*60)*100),100) end
tmpStr=(jD[i].timeoutAct and " " or jD[i].timeLoopAct and " " or " | "
else zBuffer[#zBuffer+1]=(jD[i].tstRate==0 and " ")
zBuffer[#zBuffer+1]=tmpStr..(" %02d:"):format(math.floor(jD[i].tstRate/60))..os.date("!%M:%S",math.ceil(jD[i].tstRate*60)).." max. elapsed "..rF..os.date("!%H:%M:%S",setTickTime(i,true)),"right:-",true).." Activity | " or jD[i].tstRate< -1 and ""..sColor[5].." | " or jD[i].tstRate==-1 and ""..sColor[5].." Suspend | ") end
if dataCol["timeSlot"] then
if jD[i].timeSlot then tmpStr=meanVsSlot(i,jD[i].timeSlot,"disp"):sub(2,-3);
if json.encode(jD[i].timeSlot):find("%b??") or json.encode(jD[i].timeSlot):find("sun") or tmpStr:find("pink>") then zBuffer[#zBuffer+1] =" "..yF..noAct..tmpStr.." | "
else zBuffer[#zBuffer+1] =""..doTheMath(json.encode(jD[i].timeSlot),i,"parse"),"right:-",true).." "..yF..noAct..tmpStr.." | " end
else zBuffer[#zBuffer+1]="" end
end
tmpNum=0
--##############################################################################
for k1=1,#devAct do tmpNum=tmpNum+1; tmpStr=""
if jD[i][devAct[k1]] then
-- if ("okAct errAct"):find(devAct[k1])
if jD[i].lineState then
if ("okAct errAct"):find(devAct[k1]) and json.encode(jD[i]):find("!%b{}") then tmpStr=""
else indent="";tmpStr=(logTrueFalse(jD[i].lineState[1],i)):gsub("if","if lineState ") end
end
if jD[i][devAct[k1].."State"] then indent=indent.." ";tmpStr=tmpStr..(logTrueFalse(jD[i][devAct[k1].."State"][1],i)):gsub("if","if "..devAct[k1].."State ");indent=indent.." " end
log_trueFalse=false;tmpStr=tmpStr..setTipTxt(jD[i][devAct[k1]],i,devAct[k1])
if jD[i][devAct[k1].."State"] then
tmpStr=tmpStr:gsub("( | and )$","") tmpStr=tmpStr..bF.." end"..devAct[k1].."State"..eF end if jD[i].lineState and tmpStr:find("if lineState") then tmpStr=tmpStr.." "..bF.."endlineState"..eF end if os.time()-dispGuide>time2disp then tmpStr=bF.."Do Manual refresh for details "..eF end zBuffer[#zBuffer+1]=" "..noAct..cutStr(setToolTipTxt(jD[i][devAct[k1]],i,k1),50)..eF.." | "
else if dataCol[devAct[k1]] then zBuffer[#zBuffer+1] =""..tmpStr,"left:-",true,tmpNum).." " end
end
end --for k1=1,#devAct do tmpNum=tmpNum+1
zBuffer[#zBuffer+1]=" | "..dColor[jD[i].idType]..noAct..">"..jD[i].lineNum.." | "
zBuffer[#zBuffer+1]=" "..(#noAct==0 and "" or noAct.." | "
if dataCol["Active Rules"] then
zBuffer[#zBuffer+1]=jD[i].rules and ""..jM2n[jD[i].lineNum.."act"],"right:1px;",true).." "..jD[i].rules.." | " or "" end
rowSpan=true
if os_time()-jD[i].lagTime<0 then inBuffer=inBuffer..dColor[jD[i].idType].." "..inRoom.."?"..jD[i].lagTime- os_time().."s" end
::nextType:: end --for j=1,#jI do i=jI[j]
end -- for k=1,#tableOrder do
zBuffer[#zBuffer+1]=" | "..table.concat(gData.logAct," ").." | "..yF.."In buffer:"..eF..inBuffer.." | |
"..rmdHeader[i].." | " end for i=1,#jMem do tmpStr=vF.."if "..eF..jMem[i].srcTrg:gsub("}{","}||||
---|---|---|---|---|
'..jMem[i].remRate.."/"..math.max(0,jMem[i].remRate-(os_time()-jMem[i].lTime))..' | ' if jMem[i].srcTrg:len()>5 then zBuffer[#zBuffer+1]=" "..tmpStr.." | " else zBuffer[#zBuffer+1]="" end zBuffer[#zBuffer+1]=' | '..trueFalseColor[jMem[i].note]..tostring(jMem[i].note)..eF..' | ' zBuffer[#zBuffer+1]=" "..jMem[i].remMsg.." |
'..gHeader[i]..' | ' end for i,j in pairs(jGvar) do zBuffer[#zBuffer+1] ="|||
---|---|---|---|
"..tmpStr..jDid[i].name..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..i:gsub("&","")..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..cutStr(jDp[i].value.value,25)..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..math.floor((os_time()-jDp[i].value.mTime)/86400).."d, "..os.date("!%H:%M:%S",(os_time()-jDp[i].value.mTime))..eF.." |
'..gpsHeader[i]..' | ' end for i,j in pairs(jGps) do if not ("data user ios"):find(i) then zBuffer[#zBuffer+1] ="|||
---|---|---|---|
"..j.name.." | ";zBuffer[#zBuffer+1]=""..i.." | "; zBuffer[#zBuffer+1]=""..j.radius.." | ";zBuffer[#zBuffer+1]=""..j.address.." | " end end zBuffer[#zBuffer+1] ="
'..slaveHeader[i]..' | ' end for i,j in pairs(jSlave) do tmpStr=trueFalseColor[true] if i~="local" then tmpStr=trueFalseColor[j.online] end zBuffer[#zBuffer+1]="|||||||
---|---|---|---|---|---|---|---|
"..tmpStr..i..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..j.platform..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..(j.ip..":"):match("(%S-):")..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..tostring(j.online)..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..(j.tApiGet== 0 and "-" or (j.tApiGet>1000 and j.tApiGet/1000 or j.tApiGet))..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..(j.tApiPost==0 and "-" or (j.tApiPost>1000 and j.tApiPost/1000 or j.tApiPost))..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..(j.tApiPut== 0 and "-" or (j.tApiPut>1000 and j.tApiPut/1000 or j.tApiPut))..eF.." | " zBuffer[#zBuffer+1]=""..tmpStr..(j.slaveApiTime/1000)..eF.." |
'..dHeader[i]..' | ' end for i,_ in pairs(jF) do tipTxt="";tmpStr=api_get(i,"/devices/"..sysId(i))["properties"]["dead"]; if type(tmpStr)~="boolean" then tmpStr="na" end zBuffer[#zBuffer+1]="||||||
---|---|---|---|---|---|---|
"..deadColor[tmpStr]..findNameRoom(i,2).." | " if jF[i].nack >0 then zBuffer[#zBuffer+1]=""..rF..jF[i].nack .." | " else zBuffer[#zBuffer+1]="" end if jF[i].total>0 then zBuffer[#zBuffer+1]=" | "..rF..jF[i].total.." | " else zBuffer[#zBuffer+1]="" end zBuffer[#zBuffer+1] =" | "..deadColor[tmpStr]..tostring(tmpStr).." | ";tmpStr="" for j=1,#jF[i].reason do if jF[i].reason[j]:find("wkUp") then tmpStr=tmpStr.."("..jF[i].reason[j]..")" else tmpStr=tmpStr.."("..jF[i].reason[j]..")" end end zBuffer[#zBuffer+1]=""..rF..tmpStr:gsub(os.date(" %d %b",os_time()),"").." |
"..zHeader[i].." | " end for i=1,math.min(top.zwave,#tab) do tmpStr=""; for _,k in pairs(jEvent[tab[i]].child) do tmpStr=tmpStr..k[2] end zBuffer[#zBuffer+1]="||
---|---|---|
"..dColor[tableOrder[1][1]]..jEvent[tab[i]].name..eF.." | "
zBuffer[#zBuffer+1]=""..jEvent[tab[i]].total.." | "..math.floor(jEvent[tab[i]].total/gData.zTotal*100+.5) .."% |