Create rule to get javascript data

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>
 

Not sure if I understood correct, but you want to have a specific value from the js file as your items state?

In this case use http binding to read the js files content as string and use regex to only get the relevant part within the string

Hi Matthias, when I use http binding, In channel I see html sourcecode, but missing data created by the javascript. So I cant use regex to get them.

My http binding channel:

<!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://"+ipAddress+"/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***************************
			
		}	
		
	 </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>

I think it is not possible to use the http binding by ‘downloading’ the source code of the remote side.
The binding will always get the source code of that page. The java script is being used to add html items during runtime / rendering in the browser but this ( the result ) cannot be fetched.

You could use something like selenium to remote control a browser and download the rendered page. But already using selenium them that script also already can extract the values.

Thank you Wolfgang, I have found source data, I could use http binding to get them:


22;08;27;13;23;48;0083951826;SE1-PM5;000;000;000;000;000;131;092;000;000;000;000;006;000;000;000;000;000;193;001;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;000;255;
your code goes here

1st is date 27.8.22, time 13:23:48, serial number, product name (SE1-PM5) and the rest there are some values, which use the javascript

but I cant figure out, how the javascript count final values and what type of data is this. 131;092 should be something about 235.55 (voltage value) or something like this.

i dont understand this line:



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

your code goes here

especially parsing POS_PUDO

The data comes into the script as a long string of ; separated values. This line:

dataArray=dataLine.split(';');

turns that long string into an array where each element holds one of the values between the ;. So to get any of the individual values, you access the array at the position of the value you want with dataArray[number of the element of interest]. The script also define a bunch of constants for readability. So, instead of having to remember that the 7th position in the array is the device name, the variable POS_DEVNAME is set to 7

var POS_DEVNAME = 7;

The line in question:

else if(signalNumber==16) retVal=((parseInt(dataArray[POS_PUDO+5])...

calculates the value retVal from a series of the data values. Just like POS_DEVNAME, POS_PUDO is a variable indicating a position in the data array, but instead of just that element, the first data point to be used in the calculation is defined as being 5 elements after POS_PUDO by adding 5 to it.

Lastly, the data array, at the moment, contains only string values (it started as a string and was chopped up into smaller strings by the split method, but nothing has changed those string into any other variable type yet). Since you can’t do a mathematical calculation on string, each of the values accessed from the array must be parsed into a number first by using the parseInt number method.

1 Like

As you already have found out and mentioned by Justin, the shirt reply is: you need to put the URL of the relevant js file and not from the html file into the http thing and then reverse engineer what the js is doing. Developer tools within your browser can help for this

1 Like

Thank you guys for your help. Finally I have working script for implementation of MicroMarz measuring SE1-PM5 local real-time data:

import java.lang.Integer.*
rule "SE1-PM5"

when
        Time cron "0/10 * * * * ?"   
then

var String DataoutHTM = sendHttpGetRequest("http://IP-OF-DEVICE/dataout.htm")
			

 
    val delim = ";"
    val arr = DataoutHTM.split(delim).toArray()
    
 val String name = arr.get(7)
  
   
   
   
 
  var Integer Voltage1phase = ((Float::parseFloat(arr.get(8+2))*256)+ Integer::parseInt(arr.get(8+1)))/100
  var Integer Voltage2phase = ((Float::parseFloat(arr.get(8+4))*256)+ Integer::parseInt(arr.get(8+3)))/100
  var Integer Voltage3phase = ((Float::parseFloat(arr.get(8+6))*256)+ Integer::parseInt(arr.get(8+5)))/100
  
  
  var Integer Current1phase = ((Float::parseFloat(arr.get(8+8))*256)+ Integer::parseInt(arr.get(8+7)))/10000
  var Integer Current2phase = ((Float::parseFloat(arr.get(8+10))*256)+ Integer::parseInt(arr.get(8+9)))/10000
  var Integer Current3phase = ((Float::parseFloat(arr.get(8+12))*256)+ Integer::parseInt(arr.get(8+11)))/10000



  var Integer EnergyF1 =(Float::parseFloat(arr.get(8+20))+Float::parseFloat(arr.get(8+21))*256+Float::parseFloat(arr.get(8+22))*65536+Float::parseFloat(arr.get(8+23))*16777216)/10000;
  var Integer EnergyF2 =(Float::parseFloat(arr.get(8+24))+Float::parseFloat(arr.get(8+25))*256+Float::parseFloat(arr.get(8+26))*65536+Float::parseFloat(arr.get(8+27))*16777216)/10000;
  var Integer EnergyF3 =(Float::parseFloat(arr.get(8+28))+Float::parseFloat(arr.get(8+29))*256+Float::parseFloat(arr.get(8+30))*65536+Float::parseFloat(arr.get(8+31))*16777216)/10000;

  var Integer EnergyR1 =(Float::parseFloat(arr.get(8+33))+Float::parseFloat(arr.get(8+34))*256+Float::parseFloat(arr.get(8+35))*65536+Float::parseFloat(arr.get(8+36))*16777216)/10000;
  var Integer EnergyR2 =(Float::parseFloat(arr.get(8+37))+Float::parseFloat(arr.get(8+38))*256+Float::parseFloat(arr.get(8+39))*65536+Float::parseFloat(arr.get(8+40))*16777216)/10000;
  var Integer EnergyR3 =(Float::parseFloat(arr.get(8+41))+Float::parseFloat(arr.get(8+42))*256+Float::parseFloat(arr.get(8+43))*65536+Float::parseFloat(arr.get(8+44))*16777216)/10000;


var Integer Power1 =((Float::parseFloat(arr.get(8+1))+Float::parseFloat(arr.get(8+2))*256)/100)*((Float::parseFloat(arr.get(8+7))+Float::parseFloat(arr.get(8+8))*256)/10000)*Math.cos((Float::parseFloat(arr.get(8+13))+(Float::parseFloat(arr.get(8+13))*256)/10)/180*Math.PI);
var Integer Power2 =((Float::parseFloat(arr.get(8+3))+Float::parseFloat(arr.get(8+4))*256)/100)*((Float::parseFloat(arr.get(8+9))+Float::parseFloat(arr.get(8+10))*256)/10000)*Math.cos((Float::parseFloat(arr.get(8+15))+(Float::parseFloat(arr.get(8+16))*256)/10)/180*Math.PI);
var Integer Power3 =((Float::parseFloat(arr.get(8+5))+Float::parseFloat(arr.get(8+6))*256)/100)*((Float::parseFloat(arr.get(8+11))+Float::parseFloat(arr.get(8+12))*256)/10000)*Math.cos((Float::parseFloat(arr.get(8+17))+(Float::parseFloat(arr.get(8+18))*256)/10)/180*Math.PI);
					
 
{ 



	postUpdate(Voltage1stphase, Voltage1phase)
	postUpdate(Voltage2ndphase, Voltage2phase)
	postUpdate(Voltage3rdphase, Voltage3phase)
	
	postUpdate(Current1stphase, Current1phase)
	postUpdate(Current2ndphase, Current2phase)
	postUpdate(Current3rdphase, Current3phase)
	
	
	postUpdate(EnergyF1stphase, EnergyF1)
	postUpdate(EnergyF2ndphase, EnergyF2)
	postUpdate(EnergyF3rdphase, EnergyF3)
	
	postUpdate(EnergyR1stphase, EnergyR1)
	postUpdate(EnergyR2ndphase, EnergyR2)
	postUpdate(EnergyR3rdphase, EnergyR3)
	
	postUpdate(Power1stphase, Power1)
	postUpdate(Power2ndphase, Power2)
	postUpdate(Power3ndphase, Power3)
	}
		
		end
Number Voltage1stphase "Voltage 1. Fáze  [%.2f V]"
Number Voltage2ndphase "Voltage 2. Fáze  [%.2f V]"
Number Voltage3rdphase "Voltage 3. Fáze  [%.2f V]"

Number Current1stphase "Proud 1. Fáze  [%.3f A]"
Number Current2ndphase "Proud 2. Fáze  [%.3f A]"
Number Current3rdphase "Proud 3. Fáze  [%.3f A]"

Group:Number:SUM gEnergyF "Energy F [%.3f kWh]"
Number EnergyF1stphase "Energy F 1. Fáze  [%.3f kWh]" (gEnergyF)
Number EnergyF2ndphase "Energy F 2. Fáze  [%.3f kWh]" (gEnergyF)
Number EnergyF3rdphase "Energy F 3. Fáze  [%.3f kWh]" (gEnergyF)



Group:Number:SUM gEnergyR "Energy R [%.3f kWh]"
Number EnergyR1stphase "Energy R 1. Fáze  [%.3f kWh]" (gEnergyR)
Number EnergyR2ndphase "Energy R 2. Fáze  [%.3f kWh]" (gEnergyR)
Number EnergyR3rdphase "Energy R 3. Fáze  [%.3f kWh]" (gEnergyR)

Group:Number:SUM gPowerEnergy "Power  [%.3f kWh]"
Number Power1stphase "Power 1. Fáze  [%.3f kWh]" (gPowerEnergy)
Number Power2ndphase "Power 2. Fáze  [%.3f kWh]" (gPowerEnergy)
Number Power3rdphase "Power 3. Fáze  [%.3f kWh]" (gPowerEnergy)

If you find any problem, tell me. But Thank all of you one more time.