Hi everybody.
I´m stucked and cant find how to change this 2 javascript files intop rule to get data to the items. I have these files localy. I cant use regex, because it gets javascript and not the data and in the rule that scipt show error, probably isnt compatible with OH. Normally it works (there is testing dataout in the second html. Can you give me some hint, where to start or what to do to create items based on return values from the script? Thank you very much for any help.
var signalName1 = [];
var signalName2 = [];
var signalNumberMax;
var DBFixedNum = [];
var signalNameGraph = [];
var SIGNAL_MAX_NUM = 20;
var POS_PUDO = 8; //PER_USB_DATA_OUT
var POS_DEVNAME = 7;
var PERUSB_MODULE = "SE1-PM5";
var PERUSB_SIGNAL = [ //signaly pro zobrazeni //signaly pro alarm
18,12,
];
var PERUSB_QUANTITY = [ //1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20
"Voltage 1", "Voltage 2", "Voltage 3", "Current 1", "Current 2", "Current 3", "Energy F1", "Energy F2", "Energy F3", "Energy R1", "Energy R2", "Energy R3", "Energy F", "Energy R", "Power 1", "Power 2", "Power 3", "Power", "", "",
];
var PERUSB_QUANTITY_UNIT = [//1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20
"V", "V", "V", "A", "A", "A", "kWh", "kWh", "kWh", "kWh", "kWh", "kWh", "kWh", "kWh", "W", "W", "W", "W", "", "",
];
//1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20
var PERUSB_QUANTITY_FIRST_BYTE = [
1, 3, 5, 7, 9, 11, 20, 24, 28, 33, 37, 41, 0, 0, 0, 0, 0, 0, 0, 0,
];
var BY0 = 0; var BY1 = 255; var BY2 = 65535; var BY3 = 16777215; var BY4 = 4294967295;
var PERUSB_QUANTITY_HIGH = [//1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20
BY2, BY2, BY2, BY2, BY2, BY2, 1000000000, 1000000000, 1000000000, 1000000000, 1000000000, 1000000000, 0, 0, 0, 0, 0, 0, 0, 0,
];
var PERUSB_QUANTITY_LOW = [ //1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
var PERUSB_FIXED_NUM = [//1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20
2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 255, 255,
];
//*************************************************************************************************************
function myRound(retVal)
{
if(retVal>100000) retVal=Math.round(retVal); //999,999
else if(retVal>10000) retVal=Math.round(retVal*10)/10; // 99,999.9
else if(retVal>1000) retVal=Math.round(retVal*100)/100; // 9,999.99
else if(retVal>100) retVal=Math.round(retVal*1000)/1000; // 999.999
else if(retVal>10) retVal=Math.round(retVal*10000)/10000; // 99.9999
else if(retVal>1) retVal=Math.round(retVal*100000)/100000; // 9.99999
else retVal=Math.round(retVal*1000000)/1000000; // .999999
return retVal;
}
//*************************************************************************************************************
function getPerusbRetVal(dataLine,signalNumber)
{
var retVal;
var dataArray;
dataArray=dataLine.split(';'); //split line to discrete cells
switch(dataArray[POS_DEVNAME])
{
case "SE1-PM5":
if(signalNumber==17) retVal=((parseInt(dataArray[POS_PUDO+1])+parseInt(dataArray[POS_PUDO+2])*256)/100)*((parseInt(dataArray[POS_PUDO+7])+parseInt(dataArray[POS_PUDO+8])*256)/10000)*Math.cos(((parseInt(dataArray[POS_PUDO+13])+parseInt(dataArray[POS_PUDO+14])*256)/10)/180*Math.PI)+((parseInt(dataArray[POS_PUDO+3])+parseInt(dataArray[POS_PUDO+4])*256)/100)*((parseInt(dataArray[POS_PUDO+9])+parseInt(dataArray[POS_PUDO+10])*256)/10000)*Math.cos(((parseInt(dataArray[POS_PUDO+15])+parseInt(dataArray[POS_PUDO+16])*256)/10)/180*Math.PI)+((parseInt(dataArray[POS_PUDO+5])+parseInt(dataArray[POS_PUDO+6])*256)/100)*((parseInt(dataArray[POS_PUDO+11])+parseInt(dataArray[POS_PUDO+12])*256)/10000)*Math.cos(((parseInt(dataArray[POS_PUDO+17])+parseInt(dataArray[POS_PUDO+18])*256)/10)/180*Math.PI);
else if(signalNumber==16) retVal=((parseInt(dataArray[POS_PUDO+5])+parseInt(dataArray[POS_PUDO+6])*256)/100)*((parseInt(dataArray[POS_PUDO+11])+parseInt(dataArray[POS_PUDO+12])*256)/10000)*Math.cos(((parseInt(dataArray[POS_PUDO+17])+parseInt(dataArray[POS_PUDO+18])*256)/10)/180*Math.PI);
else if(signalNumber==15) retVal=((parseInt(dataArray[POS_PUDO+3])+parseInt(dataArray[POS_PUDO+4])*256)/100)*((parseInt(dataArray[POS_PUDO+9])+parseInt(dataArray[POS_PUDO+10])*256)/10000)*Math.cos(((parseInt(dataArray[POS_PUDO+15])+parseInt(dataArray[POS_PUDO+16])*256)/10)/180*Math.PI);
else if(signalNumber==14) retVal=((parseInt(dataArray[POS_PUDO+1])+parseInt(dataArray[POS_PUDO+2])*256)/100)*((parseInt(dataArray[POS_PUDO+7])+parseInt(dataArray[POS_PUDO+8])*256)/10000)*Math.cos(((parseInt(dataArray[POS_PUDO+13])+parseInt(dataArray[POS_PUDO+14])*256)/10)/180*Math.PI);
else if(signalNumber==13) retVal=(parseInt(dataArray[POS_PUDO+33])+parseInt(dataArray[POS_PUDO+34])*256+parseInt(dataArray[POS_PUDO+35])*65536+parseInt(dataArray[POS_PUDO+36])*16777216)/10000+(parseInt(dataArray[POS_PUDO+37])+parseInt(dataArray[POS_PUDO+38])*256+parseInt(dataArray[POS_PUDO+39])*65536+parseInt(dataArray[POS_PUDO+40])*16777216)/10000+(parseInt(dataArray[POS_PUDO+41])+parseInt(dataArray[POS_PUDO+42])*256+parseInt(dataArray[POS_PUDO+43])*65536+parseInt(dataArray[POS_PUDO+44])*16777216)/10000;
else if(signalNumber==12) retVal=(parseInt(dataArray[POS_PUDO+20])+parseInt(dataArray[POS_PUDO+21])*256+parseInt(dataArray[POS_PUDO+22])*65536+parseInt(dataArray[POS_PUDO+23])*16777216)/10000+(parseInt(dataArray[POS_PUDO+24])+parseInt(dataArray[POS_PUDO+25])*256+parseInt(dataArray[POS_PUDO+26])*65536+parseInt(dataArray[POS_PUDO+27])*16777216)/10000+(parseInt(dataArray[POS_PUDO+28])+parseInt(dataArray[POS_PUDO+29])*256+parseInt(dataArray[POS_PUDO+30])*65536+parseInt(dataArray[POS_PUDO+31])*16777216)/10000;
else if(signalNumber==11) retVal=(parseInt(dataArray[POS_PUDO+41])+parseInt(dataArray[POS_PUDO+42])*256+parseInt(dataArray[POS_PUDO+43])*65536+parseInt(dataArray[POS_PUDO+44])*16777216)/10000;
else if(signalNumber==10) retVal=(parseInt(dataArray[POS_PUDO+37])+parseInt(dataArray[POS_PUDO+38])*256+parseInt(dataArray[POS_PUDO+39])*65536+parseInt(dataArray[POS_PUDO+40])*16777216)/10000;
else if(signalNumber==9) retVal=(parseInt(dataArray[POS_PUDO+33])+parseInt(dataArray[POS_PUDO+34])*256+parseInt(dataArray[POS_PUDO+35])*65536+parseInt(dataArray[POS_PUDO+36])*16777216)/10000;
else if(signalNumber==8) retVal=(parseInt(dataArray[POS_PUDO+28])+parseInt(dataArray[POS_PUDO+29])*256+parseInt(dataArray[POS_PUDO+30])*65536+parseInt(dataArray[POS_PUDO+31])*16777216)/10000;
else if(signalNumber==7) retVal=(parseInt(dataArray[POS_PUDO+24])+parseInt(dataArray[POS_PUDO+25])*256+parseInt(dataArray[POS_PUDO+26])*65536+parseInt(dataArray[POS_PUDO+27])*16777216)/10000;
else if(signalNumber==6) retVal=(parseInt(dataArray[POS_PUDO+20])+parseInt(dataArray[POS_PUDO+21])*256+parseInt(dataArray[POS_PUDO+22])*65536+parseInt(dataArray[POS_PUDO+23])*16777216)/10000;
else if(signalNumber==5) retVal=(parseInt(dataArray[POS_PUDO+11])+parseInt(dataArray[POS_PUDO+12])*256)/10000;
else if(signalNumber==4) retVal=(parseInt(dataArray[POS_PUDO+9])+parseInt(dataArray[POS_PUDO+10])*256)/10000;
else if(signalNumber==3) retVal=(parseInt(dataArray[POS_PUDO+7])+parseInt(dataArray[POS_PUDO+8])*256)/10000;
else if(signalNumber==2) retVal=(parseInt(dataArray[POS_PUDO+5])+parseInt(dataArray[POS_PUDO+6])*256)/100;
else if(signalNumber==1) retVal=(parseInt(dataArray[POS_PUDO+3])+parseInt(dataArray[POS_PUDO+4])*256)/100;
else retVal=(parseInt(dataArray[POS_PUDO+1])+parseInt(dataArray[POS_PUDO+2])*256)/100;
break;
default:
retVal=0;
}
return retVal;
}
//*************************************************************************************************************
function getPerusbParam(deviceName)
{
var indexModule=PERUSB_MODULE.indexOf(deviceName)
if(indexModule>-1)
{ //pokud zarizeni existuje
signalNumberMax = PERUSB_SIGNAL[2*indexModule]-1;
for(var i=0;i<=signalNumberMax;i++)
{
signalName1[i]=PERUSB_QUANTITY[indexModule*SIGNAL_MAX_NUM+i];
signalName2[i]=PERUSB_QUANTITY_UNIT[indexModule*SIGNAL_MAX_NUM+i];
DBFixedNum[i]=PERUSB_FIXED_NUM[indexModule*SIGNAL_MAX_NUM+i];
}
}
else
{ //pokud zarizeni neexistuje
signalNumberMax = 0;
signalName1[0] = "No";
signalName2[0] = "";
DBFixedNum[0] = 255;
}
}
var head=document.getElementsByTagName("head")[0]; var script=document.createElement("script");
script.type="text/javascript"; script.src="http://192.168.0.220/dataout.js"; head.appendChild(script);
//************************************************startupPage************************************************
function startupPage()
{
var xValue; var xTime; var xDate; var yValue = [];
dataout="19;06;24;11;46;00;0083951644;SE1-PM4;000;000;000;000;000;000;000;000;180;188;011;000;163;000;033;000;115;231;002;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;" //for testing purposes only
var dataoutArray=dataout.split(';'); //split line to discrete cells
var deviceName=dataoutArray[POS_DEVNAME]; //get devicename
getPerusbParam(deviceName); //get definitions
for(var v=0;v<=signalNumberMax;v++) yValue[v]=(myRound(getPerusbRetVal(dataout, v))).toFixed(DBFixedNum[v]); //get y values
xValue=new Date(Date.UTC(parseInt(dataoutArray[0])+2000, parseInt(dataoutArray[1])-1, parseInt(dataoutArray[2]), parseInt(dataoutArray[3]), parseInt(dataoutArray[4]), parseInt(dataoutArray[5]))); //get x value
xTime=""; if(xValue.getDate()<10) xTime+="0"; xTime+=xValue.getDate()+"."; if((xValue.getMonth()+1)<10) xTime+="0"; xTime+=(xValue.getMonth()+1)+"."; xTime+=1900+xValue.getYear(); //get time
xDate=""; if(xValue.getHours()<10) xDate+="0"; xDate+=xValue.getHours()+":"; if(xValue.getMinutes()<10) xDate+="0"; xDate+=xValue.getMinutes()+":"; if(xValue.getSeconds()<10) xDate+="0"; xDate+=xValue.getSeconds(); //get date
//*****************************create table*****************************
var table; var row; var cell; var myBackColor = "#FFFFDD"; var myBackColor2 = "#FFFFFF";
table = document.getElementById("table_data"); table.style.width = "850px"; table.style.textAlign = "center";
table.style.borderColor = "#DDD"; table.style.backgroundColor = table.style.borderColor;
//***title row***
row = table.insertRow(0); row.style.fontSize = "26px";
cell = row.insertCell(0); cell.colSpan = 3;
cell.innerHTML = deviceName + ", " + ipAddress + ", " + devid + ", " + xTime + ", " + xDate;
//***data rows***
for(var i=0;i<=signalNumberMax;i++)
{
row = table.insertRow(i+1); row.style.backgroundColor = myBackColor; row.style.fontSize = "32px";
//Quantity
cell = row.insertCell(0); cell.style.width = "420px";
cell.innerHTML = signalName1[i];
//VALUE
cell = row.insertCell(1); cell.style.width = "280px";
cell.style.backgroundColor = myBackColor2; cell.style.fontWeight = "bold";
cell.style.textAlign = "right"; cell.style.paddingRight = "18px";
cell.innerHTML = yValue[i];
//UNIT
cell = row.insertCell(2); cell.style.width = "150px";
cell.innerHTML = signalName2[i];
}
//***************************end create table***************************
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta charset="UTF-8">
<title id="htmlTitle">SensorFor OFFLINE Page</title>
<meta name="keywords" content="sensor, measurement, automatization">
<meta name="author" content="Mikromarz">
<link rel="stylesheet" href="./style/style_basic.css">
<script type="text/javascript" src="./script/perusb_param.js"></script>
<script type="text/javascript">
ipAddress=window.location.search.substr(1);
var head=document.getElementsByTagName("head")[0]; var script=document.createElement("script");
script.type="text/javascript"; script.src="http://192.168.0.220/dataout.js"; head.appendChild(script);
//************************************************startupPage************************************************
function startupPage()
{
var xValue; var xTime; var xDate; var yValue = [];
//dataout="19;06;24;11;46;00;0083951644;SE1-PM5;000;000;000;000;000;000;000;000;180;188;011;000;163;000;033;000;115;231;002;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;" //for testing purposes only
var dataoutArray=dataout.split(';'); //split line to discrete cells
var deviceName=dataoutArray[POS_DEVNAME]; //get devicename
getPerusbParam(deviceName); //get definitions
for(var v=0;v<=signalNumberMax;v++) yValue[v]=(myRound(getPerusbRetVal(dataout, v))).toFixed(DBFixedNum[v]); //get y values
xValue=new Date(Date.UTC(parseInt(dataoutArray[0])+2000, parseInt(dataoutArray[1])-1, parseInt(dataoutArray[2]), parseInt(dataoutArray[3]), parseInt(dataoutArray[4]), parseInt(dataoutArray[5]))); //get x value
xTime=""; if(xValue.getDate()<10) xTime+="0"; xTime+=xValue.getDate()+"."; if((xValue.getMonth()+1)<10) xTime+="0"; xTime+=(xValue.getMonth()+1)+"."; xTime+=1900+xValue.getYear(); //get time
xDate=""; if(xValue.getHours()<10) xDate+="0"; xDate+=xValue.getHours()+":"; if(xValue.getMinutes()<10) xDate+="0"; xDate+=xValue.getMinutes()+":"; if(xValue.getSeconds()<10) xDate+="0"; xDate+=xValue.getSeconds(); //get date
//*****************************create table*****************************
var table; var row; var cell; var myBackColor = "#FFFFDD"; var myBackColor2 = "#FFFFFF";
table = document.getElementById("table_data"); table.style.width = "850px"; table.style.textAlign = "center";
table.style.borderColor = "#DDD"; table.style.backgroundColor = table.style.borderColor;
//***title row***
row = table.insertRow(0); row.style.fontSize = "26px";
cell = row.insertCell(0); cell.colSpan = 3;
cell.innerHTML = deviceName + ", " + ipAddress + ", " + devid + ", " + xTime + ", " + xDate;
//***data rows***
for(var i=0;i<=signalNumberMax;i++)
{
row = table.insertRow(i+1); row.style.backgroundColor = myBackColor; row.style.fontSize = "32px";
//Quantity
cell = row.insertCell(0); cell.style.width = "420px";
cell.innerHTML = signalName1[i];
//VALUE
cell = row.insertCell(1); cell.style.width = "280px";
cell.style.backgroundColor = myBackColor2; cell.style.fontWeight = "bold";
cell.style.textAlign = "right"; cell.style.paddingRight = "18px";
cell.innerHTML = yValue[i];
var JSONdata=JSON.stringify([new String(cell.innerHTML), new Number(cell.innerHTML), new Boolean(false)])
console.log(JSONdata);
//UNIT
cell = row.insertCell(2); cell.style.width = "150px";
cell.innerHTML = signalName2[i];
// expected output: "[3,"false",false]"
}
//***************************end create table***************************
}
</script>
</head>
<body onload="startupPage();">
<div id="mypage">
<div id="myheader"><h1 id="header_label">SensorFor OFFLINE Page</h1></div>
<div id="mycontent"><table id="table_data"> </table></div>
<div id="myfooter"><div id="footer_label" style="padding: 0px; margin: 0px; margin-top: 10px; padding-top: 4px; padding-bottom: 4px;"><label style="font-weight: normal; width: auto;">
<a href="http://www.sensorfor.com/www/manual/SSF_Cloud_user_guide.pdf">HELP</a> Mikromarz 2010 - 2022, version 1.001 <a href="http://www.sensorfor.com/www/manual/SSF_Cloud_terms.pdf">TERMS</a>
</label></div></div>
</div>
</body>
</html>