Ups powercom

The UPS monitoring program issues a TXT file at the address: http://192.168.31.9:8000/ups.txt. From this file, i need to take values and substitute them in the sensors. Help me please . File Syntax:
210
210
0
50
50
100
1
1
1
1
(The values are as follows: Input-Voltage, Output-Voltage, Load-Level, Input Frequency, Output-Frequency, Battery Level, AVR-Mode, Utility-State, UPS-State)

The program also generates such a web page:

> <head>
> <title>UPSMON PRO WEB</title>
> <script src="prototype.js"></script>
> <script type = "text/JavaScript">
> <!--
> 	var listINT =0;
> 	var url = "ups.txt";
> 	var data = ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0"];
> 	var oldata1 = ["0", "0", "0", "0"];
> 	var oldata2 = ["0", "0", "0", "0", "0", "0"];
> 	var first = ["0", "0", "0", "0", "0", "0"];
> 	var second= ["0", "0", "0", "0", "0", "0"];
> 	
> 	function getFile(){					
> 		var myAjax = new Ajax.Request(url,{method: "get", onComplete: showMsg});
> 		setTimeout("getFile()", 1500);  
> 	}
> 	
> 	function showMsg(xmlhttp){
> 		var txtCSV = xmlhttp.responseText;
> 		var result = parseText(txtCSV);		
> 		
> 		var divDisp0 = document.getElementById("disp0");
> 		var divDisp1 = document.getElementById("disp1");
> 		var divDisp2 = document.getElementById("disp2");
> 		var divDisp3 = document.getElementById("disp3");
> 		var divDisp4 = document.getElementById("disp4");
> 		var divDisp5 = document.getElementById("disp5");		
> 		var divDisp6 = document.getElementById("dispic1");
> 		var divDisp7 = document.getElementById("dispic2");
> 		var divDisp8 = document.getElementById("dispic3");
> 		var divDisp9 = document.getElementById("dispic4");
> 		var divDisp10= document.getElementById("arrow1");
> 		var divDisp11= document.getElementById("arrow2");
> 		var divDisp12= document.getElementById("arrow3");
> 		var divDisp13= document.getElementById("arrow4");
> 		var divDisp14= document.getElementById("arrow5");
> 		var divDisp15= document.getElementById("arrow6");
> 		var divDisp16= document.getElementById("Background");
> 		
> 		//Data : Input-Voltage
> 		if(second[0]==0){
> 			divDisp0.innerHTML = "&nbsp;            "+"0";
> 			second[0]=1;
> 		}
> 		else if(data[0]<10){
> 			divDisp0.innerHTML = "&nbsp;            "+data[0];
> 		}
> 		else if(data[0]<100){
> 			divDisp0.innerHTML = "&nbsp;"+data[0];
> 		}
> 		else{
> 			divDisp0.innerHTML = " "+data[0];
> 		}
> 		
> 		//Data : Output-Voltage
> 		if(second[1]==0){
> 			divDisp1.innerHTML = "&nbsp;            "+"0";
> 			second[1]=1;
> 		}
> 		else if(data[1]<10){
> 			divDisp1.innerHTML = "&nbsp;            "+data[1];
> 		}
> 		else if(data[1]<100){
> 			divDisp1.innerHTML = "&nbsp;"+data[1];
> 		}
> 		else{
> 			divDisp1.innerHTML = " "+data[1];
> 		}
> 		
> 		//Data : Load-Level
> 		if(second[2]==0){
> 			divDisp2.innerHTML = "&nbsp;            "+"0";
> 			second[2]=1;
> 		}
> 		else if(data[2]<10){
> 			divDisp2.innerHTML = "&nbsp;            "+data[2];
> 		}
> 		else if(data[2]<100){
> 			divDisp2.innerHTML = "&nbsp;"+data[2];
> 		}
> 		else{
> 			divDisp2.innerHTML = " "+data[2];
> 		}
> 		
> 		//Data : Input Frequency
> 		if(second[3]==0){
> 			divDisp3.innerHTML = "&nbsp;            "+"0";
> 			second[3]=1;
> 		}
> 		else if(data[3]<10){
> 			divDisp3.innerHTML = "&nbsp;            "+data[3];
> 		}
> 		else if(data[3]<100){
> 			divDisp3.innerHTML = "&nbsp;"+data[3];
> 		}
> 		else{
> 			divDisp3.innerHTML = " "+data[3];
> 		}
> 		
> 		//Data : Temperature or Output-Frequency
> 		if(second[4]==0){
> 			divDisp4.innerHTML = "&nbsp;            "+"0";
> 			second[4]=1;
> 		}
> 		else if(data[4]<10){
> 			divDisp4.innerHTML = "&nbsp;            "+data[4];
> 		}
> 		else if(data[4]<100){
> 			divDisp4.innerHTML = "&nbsp;"+data[4];
> 		}
> 		else{
> 			divDisp4.innerHTML = " "+data[4];
> 		}
> 		
> 		//Data : Battery Level
> 		if(second[5]==0){
> 			divDisp5.innerHTML = "&nbsp;            "+"0";
> 			second[5]=1;
> 		}
> 		else if(data[5]<10){
> 			divDisp5.innerHTML = "&nbsp;            "+data[5];
> 		}
> 		else if(data[5]<100){
> 			divDisp5.innerHTML = "&nbsp;"+data[5];
> 		}
> 		else{
> 			divDisp5.innerHTML = " "+data[5];
> 		}
> 		
> 		//Background
> 		if(oldata1[3]!=data[9]){
> 			if(data[9]==1){
> 				divDisp16.innerHTML= "<img src = pic/meter_background1.jpg></img>";
> 			}
> 			else if(data[9]==2){
> 				divDisp16.innerHTML= "<img src = pic/meter_background2.jpg></img>";
> 			}
> 			oldata1[3]=data[9];
> 		}
> 		
> 		//AVR-Mode
> 		if(oldata1[0]!=data[6]){
> 			if(data[6]==1){
> 				divDisp6.innerHTML = "<img src = pic/avr_1.gif></img>";
> 			}
> 			else if(data[6]==2){
> 				divDisp6.innerHTML = "<img src = pic/avr_2.gif></img>";
> 			}
> 			else if(data[6]==3){
> 				divDisp6.innerHTML = "<img src = pic/avr_3.gif></img>";
> 			}
> 			else if(data[6]==4){
> 				divDisp6.innerHTML = "<img src = pic/avr_4.gif></img>";
> 			}
> 			else if(data[6]==5){
> 				divDisp6.innerHTML = "<img src = pic/avr_5.gif></img>";
> 			}
> 			oldata1[0]=data[6];
> 		}
> 		
> 		//Utility-State
> 		if(oldata1[1]!=data[7]){
> 			if(data[7]==1){
> 				divDisp7.innerHTML = "<img src = pic/power_1.gif></img>";
> 			}
> 			else if(data[7]==2){
> 				divDisp7.innerHTML = "<img src = pic/power_2.gif></img>";
> 			}
> 			else if(data[7]==3){
> 				divDisp7.innerHTML = "<img src = pic/power_3.gif></img>";
> 			}
> 			oldata1[1]=data[7];
> 		}
> 		
> 		//UPS-State
> 		if(oldata1[2]!=data[8]){
> 			if(data[8]==1){
> 				divDisp8.innerHTML = "<img src = pic/ups_1.gif></img>"
> 			}
> 			else if(data[8]==2){
> 				divDisp8.innerHTML = "<img src = pic/ups_2.gif></img>"
> 			}
> 			else if(data[8]==3){
> 				divDisp8.innerHTML = "<img src = pic/ups_3.gif></img>"
> 			}
> 			else if(data[8]==4){
> 				divDisp8.innerHTML = "<img src = pic/ups_4.gif></img>"
> 			}
> 			oldata1[2]=data[8];
> 		}
> 		/*
> 		var strDate = new Date();
> 		var ss = strDate.getSeconds();	
> 		if(ss<10){
> 			ss= "0"+ss;
> 		}	
> 		var m1 = strDate.getMinutes();
> 		if(m1<10){
> 			m1= "0"+m1;
> 		}
> 		var hh = strDate.getHours();
> 		if(hh<10){
> 			hh= "0"+hh;
> 		}
> 		var yy = strDate.getYear();
> 		var m2 = strDate.getMonth()+1;
> 		if(m2<10){
> 			m2= "0"+m2;
> 		}
> 		var dd = strDate.getDate();
> 		if(dd<10){
> 			dd= "0"+dd;
> 		}
> 		divDisp9.innerHTML = hh+ " : " + m1 + " : "+ss;
> 		*/
> 		//Meter : Input Voltage
> 		var meter1 = parseInt(data[0]);
> 		if(first[0]==0){
> 			divDisp10.innerHTML= "<img src = pic/a0.gif></img>";
> 			first[0]=1;
> 		}
> 		else{
> 			if(meter1!=oldata2[0]){
> 				if(meter1==0){
> 					divDisp10.innerHTML= "<img src = pic/a0.gif></img>";
> 				}
> 				else if(meter1<=30){
> 					divDisp10.innerHTML= "<img src = pic/a15.gif></img>";
> 				}
> 				else if(meter1<=60){
> 					divDisp10.innerHTML= "<img src = pic/a30.gif></img>";
> 				}
> 				else if(meter1<=90){
> 					divDisp10.innerHTML= "<img src = pic/a45.gif></img>";
> 				}
> 				else if(meter1<=120){
> 					divDisp10.innerHTML= "<img src = pic/a60.gif></img>";
> 				}
> 				else if(meter1<=150){
> 					divDisp10.innerHTML= "<img src = pic/a75.gif></img>";
> 				}
> 				else if(meter1<=180){
> 					divDisp10.innerHTML= "<img src = pic/a90.gif></img>";
> 				}
> 				else if(meter1<=210){
> 					divDisp10.innerHTML= "<img src = pic/a105.gif></img>";
> 				}
> 				else if(meter1<=240){
> 					divDisp10.innerHTML= "<img src = pic/a120.gif></img>";
> 				}
> 				else if(meter1<=270){
> 					divDisp10.innerHTML= "<img src = pic/a135.gif></img>";
> 				}
> 				else if(meter1<=300){
> 					divDisp10.innerHTML= "<img src = pic/a150.gif></img>";
> 				}
> 				else if(meter1<=330){
> 					divDisp10.innerHTML= "<img src = pic/a165.gif></img>";
> 				}
> 				else if(meter1>330){
> 					divDisp10.innerHTML= "<img src = pic/a180.gif></img>";
> 				}
> 				oldata2[0]=meter1;
> 			}
> 		}
> 		//Meter : Output Voltage
> 		meter1 = parseInt(data[1]);
> 		if(first[1]==0){
> 			divDisp11.innerHTML= "<img src = pic/a0.gif></img>";
> 			first[1]=1;
> 		}
> 		else if(meter1!=oldata2[1]){
> 			if(meter1==0){
> 				divDisp11.innerHTML= "<img src = pic/a0.gif></img>";
> 			}
> 			else if(meter1<=30){
> 				divDisp11.innerHTML= "<img src = pic/a15.gif></img>";
> 			}
> 			else if(meter1<=60){
> 				divDisp11.innerHTML= "<img src = pic/a30.gif></img>";
> 			}
> 			else if(meter1<=90){
> 				divDisp11.innerHTML= "<img src = pic/a45.gif></img>";
> 			}
> 			else if(meter1<=120){
> 				divDisp11.innerHTML= "<img src = pic/a60.gif></img>";
> 			}
> 			else if(meter1<=150){
> 				divDisp11.innerHTML= "<img src = pic/a75.gif></img>";
> 			}
> 			else if(meter1<=180){
> 				divDisp11.innerHTML= "<img src = pic/a90.gif></img>";
> 			}
> 			else if(meter1<=210){
> 				divDisp11.innerHTML= "<img src = pic/a105.gif></img>";
> 			}
> 			else if(meter1<=240){
> 				divDisp11.innerHTML= "<img src = pic/a120.gif></img>";
> 			}
> 			else if(meter1<=270){
> 				divDisp11.innerHTML= "<img src = pic/a135.gif></img>";
> 			}
> 			else if(meter1<=300){
> 				divDisp11.innerHTML= "<img src = pic/a150.gif></img>";
> 			}
> 			else if(meter1<=330){
> 				divDisp11.innerHTML= "<img src = pic/a165.gif></img>";
> 			}
> 			else if(meter1>330){
> 				divDisp11.innerHTML= "<img src = pic/a180.gif></img>";
> 			}
> 			oldata2[1]=meter1;
> 		}
> 		
> 		//Meter : Load Level 
> 		meter1 = parseInt(data[2]);
> 		if(first[2]==0){
> 			divDisp12.innerHTML= "<img src = pic/a0.gif></img>";
> 			first[2]=1;
> 		}
> 		else if(meter1!=oldata2[2]){
> 			if(meter1==0){
> 				divDisp12.innerHTML= "<img src = pic/a0.gif></img>";
> 			}
> 			else if(meter1<=15){
> 				divDisp12.innerHTML= "<img src = pic/a15.gif></img>";
> 			}
> 			else if(meter1<=30){
> 				divDisp12.innerHTML= "<img src = pic/a30.gif></img>";
> 			}
> 			else if(meter1<=45){
> 				divDisp12.innerHTML= "<img src = pic/a45.gif></img>";
> 			}
> 			else if(meter1<=60){
> 				divDisp12.innerHTML= "<img src = pic/a60.gif></img>";
> 			}
> 			else if(meter1<=75){
> 				divDisp12.innerHTML= "<img src = pic/a75.gif></img>";
> 			}
> 			else if(meter1<=90){
> 				divDisp12.innerHTML= "<img src = pic/a90.gif></img>";
> 			}
> 			else if(meter1<=105){
> 				divDisp12.innerHTML= "<img src = pic/a105.gif></img>";
> 			}
> 			else if(meter1<=120){
> 				divDisp12.innerHTML= "<img src = pic/a120.gif></img>";
> 			}
> 			else if(meter1<=135){
> 				divDisp12.innerHTML= "<img src = pic/a135.gif></img>";
> 			}
> 			else if(meter1<=150){
> 				divDisp12.innerHTML= "<img src = pic/a150.gif></img>";
> 			}
> 			else if(meter1<=165){
> 				divDisp12.innerHTML= "<img src = pic/a165.gif></img>";
> 			}
> 			else if(meter1>165){
> 				divDisp12.innerHTML= "<img src = pic/a180.gif></img>";
> 			}
> 			oldata2[2]=meter1;
> 		}
> 		//Meter : Input Frequency 
> 		meter1 = parseInt(data[3]);
> 		if(first[3]==0){
> 			divDisp13.innerHTML= "<img src = pic/a0.gif></img>";
> 			first[3]=1;
> 		}
> 		else if(meter1!=oldata2[3]){
> 			if(meter1==0){
> 				divDisp13.innerHTML= "<img src = pic/a0.gif></img>";
> 			}
> 			else if(meter1<=8){
> 				divDisp13.innerHTML= "<img src = pic/a15.gif></img>";
> 			}
> 			else if(meter1<=15){
> 				divDisp13.innerHTML= "<img src = pic/a30.gif></img>";
> 			}
> 			else if(meter1<=23){
> 				divDisp13.innerHTML= "<img src = pic/a45.gif></img>";
> 			}
> 			else if(meter1<=30){
> 				divDisp13.innerHTML= "<img src = pic/a60.gif></img>";
> 			}
> 			else if(meter1<=38){
> 				divDisp13.innerHTML= "<img src = pic/a75.gif></img>";
> 			}
> 			else if(meter1<=45){
> 				divDisp13.innerHTML= "<img src = pic/a90.gif></img>";
> 			}
> 			else if(meter1<=53){
> 				divDisp13.innerHTML= "<img src = pic/a105.gif></img>";
> 			}
> 			else if(meter1<=60){
> 				divDisp13.innerHTML= "<img src = pic/a120.gif></img>";
> 			}
> 			else if(meter1<=68){
> 				divDisp13.innerHTML= "<img src = pic/a135.gif></img>";
> 			}
> 			else if(meter1<=75){
> 				divDisp13.innerHTML= "<img src = pic/a150.gif></img>";
> 			}
> 			else if(meter1<=83){
> 				divDisp13.innerHTML= "<img src = pic/a165.gif></img>";
> 			}
> 			else if(meter1>83){
> 				divDisp13.innerHTML= "<img src = pic/a180.gif></img>";
> 			}
> 			oldata2[3]=meter1;
> 		}
> 		//Meter : Temperature
> 		meter1 = parseInt(data[4]);
> 		if(first[4]==0){
> 			divDisp14.innerHTML= "<img src = pic/a0.gif></img>";
> 			first[4]=1;
> 		}
> 		else if(meter1!=oldata2[4]){
> 			if(meter1==0){
> 				divDisp14.innerHTML= "<img src = pic/a0.gif></img>";
> 			}
> 			else if(meter1<=8){
> 				divDisp14.innerHTML= "<img src = pic/a15.gif></img>";
> 			}
> 			else if(meter1<=15){
> 				divDisp14.innerHTML= "<img src = pic/a30.gif></img>";
> 			}
> 			else if(meter1<=23){
> 				divDisp14.innerHTML= "<img src = pic/a45.gif></img>";
> 			}
> 			else if(meter1<=30){
> 				divDisp14.innerHTML= "<img src = pic/a60.gif></img>";
> 			}
> 			else if(meter1<=38){
> 				divDisp14.innerHTML= "<img src = pic/a75.gif></img>";
> 			}
> 			else if(meter1<=45){
> 				divDisp14.innerHTML= "<img src = pic/a90.gif></img>";
> 			}
> 			else if(meter1<=53){
> 				divDisp14.innerHTML= "<img src = pic/a105.gif></img>";
> 			}
> 			else if(meter1<=60){
> 				divDisp14.innerHTML= "<img src = pic/a120.gif></img>";
> 			}
> 			else if(meter1<=68){
> 				divDisp14.innerHTML= "<img src = pic/a135.gif></img>";
> 			}
> 			else if(meter1<=75){
> 				divDisp14.innerHTML= "<img src = pic/a150.gif></img>";
> 			}
> 			else if(meter1<=83){
> 				divDisp14.innerHTML= "<img src = pic/a165.gif></img>";
> 			}
> 			else if(meter1>83){
> 				divDisp14.innerHTML= "<img src = pic/a180.gif></img>";
> 			}
> 			oldata2[4]=meter1;
> 		}
> 		//Meter : Battery Level 
> 		meter1 = parseInt(data[5]);
> 		if(first[5]==0){
> 			divDisp15.innerHTML= "<img src = pic/a0.gif></img>";
> 			first[5]=1;
> 		}
> 		else if(meter1!=oldata2[5]){
> 			if(meter1==0){
> 				divDisp15.innerHTML= "<img src = pic/a0.gif></img>";
> 			}
> 			else if(meter1<=15){
> 				divDisp15.innerHTML= "<img src = pic/a15.gif></img>";
> 			}
> 			else if(meter1<=30){
> 				divDisp15.innerHTML= "<img src = pic/a30.gif></img>";
> 			}
> 			else if(meter1<=45){
> 				divDisp15.innerHTML= "<img src = pic/a45.gif></img>";
> 			}
> 			else if(meter1<=60){
> 				divDisp15.innerHTML= "<img src = pic/a60.gif></img>";
> 			}
> 			else if(meter1<=75){
> 				divDisp15.innerHTML= "<img src = pic/a75.gif></img>";
> 			}
> 			else if(meter1<=90){
> 				divDisp15.innerHTML= "<img src = pic/a90.gif></img>";
> 			}
> 			else if(meter1<=105){
> 				divDisp15.innerHTML= "<img src = pic/a105.gif></img>";
> 			}
> 			else if(meter1<=120){
> 				divDisp15.innerHTML= "<img src = pic/a120.gif></img>";
> 			}
> 			else if(meter1<=135){
> 				divDisp15.innerHTML= "<img src = pic/a135.gif></img>";
> 			}
> 			else if(meter1<=150){
> 				divDisp15.innerHTML= "<img src = pic/a150.gif></img>";
> 			}
> 			else if(meter1<=165){
> 				divDisp15.innerHTML= "<img src = pic/a165.gif></img>";
> 			}
> 			else if(meter1>165){
> 				divDisp15.innerHTML= "<img src = pic/a180.gif></img>";
> 			}
> 			oldata2[5]=meter1;
> 		}
> 	}
> 	function parseText(txtCSV) {
> 		var chr10 = String.fromCharCode(10);  //line feed		
> 		var lines = txtCSV.split(chr10);  //儲存每一筆記錄
> 		for (var i = 0; i < lines.length; i++) {
> 			data[i] = lines[i];
> 		}
> 	}
> -->
> </script>
> </head>
> <body bgcolor="#6699CC" onload="getFile()">
> <p align="center">
> <font color="#ff0000">
> 	
> 	<div id = "disp0" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:80px; top:129px;  width:205px; height:123px; z-index:2"></div>
> 	<div id = "disp1" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:259px; top:129px; width:205px; height:123px; z-index:3"></div></div>
> 	<div id = "disp2" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:423px; top:130px; width:205px; height:123px; z-index:4"></div></div>
> 	<div id = "disp3" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:80Px; top:329px;  width:205px; height:100px; z-index:5"></div></div>
> 	<div id = "disp4" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:256px; top:329px;  width:205px; height:100px; z-index:6"></div></div>
> 	<div id = "disp5" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:424px; top:325px;  width:205px; height:100px; z-index:7"></div></div>
> 
> 	<div id = "dispic1" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:543px; top:111px;  width:80px; height:123px; z-index:8"></div></div>
> 	<div id = "dispic2" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:543px; top:211px;  width:80px; height:123px; z-index:9"></div></div>
> 	<div id = "dispic3" style="color: #1848A9; font-size:22; font-family: Times New Roman; position:absolute; left:543px; top:311px;  width:80px; height:123px; z-index:10"></div></div>
> 	<div id = "dispic4" style="color: #1848A9; font-size:16; font-family: Times New Roman; position:absolute; left:550px; top:410px;  width:90px; height:23px; z-index:11"></div></div>
> 	
> 	<div id = "arrow1" style="position:absolute; left:47px; top:49px;  width:100px; height:123px; z-index:12"></div>
> 	<div id = "arrow2" style="position:absolute; left:225px;top:50px;  width:100px; height:123px; z-index:13"></div>
> 	<div id = "arrow3" style="position:absolute; left:390px;top:50px;  width:100px; height:123px; z-index:14"></div>
> 	<div id = "arrow4" style="position:absolute; left:47px; top:249px;  width:100px; height:123px; z-index:15"></div>
> 	<div id = "arrow5" style="position:absolute; left:225px; top:249px;  width:100px; height:123px; z-index:16"></div>
> 	<div id = "arrow6" style="position:absolute; left:391px; top:246px;  width:100px; height:123px; z-index:17"></div>
> 	
> 	<div id = "Background" style="position:absolute; left:0px; top:0px;  width:205px; height:123px; z-index:1"></div>
> </font>
> </p>
> 
> </body>
> </html>
> '

If the .txt contains all the data you need, you should be able to get it via https://www.home-assistant.io/integrations/rest/
You can set sensor attributes with this as well.
Be aware that you receive plain text, not formatted JSON.
If you want to scrape the webpage, use https://www.home-assistant.io/integrations/scrape/

Thank you.
I created a sensor

it returns the entire value of the ups.txt file
216 216 0 50 50 100 1 1 1 1

How do I cut out the values that I need? For example, the first three characters or the ninth character?

You probably want to use regex
Create a new template sensorand use regular expressions to get the nth group of numbers or. As for the syntax you’ll just need to look it up for yourself, there’s a lot of examples on stackoverflow, I’m sure one of them will fit your use case.

- platform: rest
    resource: http://192.168.31.9:8000/ups.txt
    name: ts
 - platform: template
    sensors:
      ups_input_voltage:
        friendly_name: "UPS Input-Voltage"
        value_template: "{{ states('sensor.ts')[:3] }}"
        unit_of_measurement: 'V'

Please format your code.
Yes, this could work as well, does it? You didn’t write anything other than the code :confused:

Summarize:
UPS: Powercom imperial
Software: UPSMON PRO for Linux or for Windows http://pcm.ru/support/soft/
In the program we launch the web server, the server generates the ups.txt file. We create a rest sensor which takes information from a TXT file, then we create template sensors into which we substitute values from a previously created sensor.
Everything is working !

Can somebody please assist on how to create all other sensors for each of the values that ups.txt provides?
Thanks.

sensor:
  - platform: rest
    resource: http://192.168.1.95:8000/ups.txt
    name: ts
    
  - platform: template
    sensors:
      ups_input_voltage:
        friendly_name: "UPS Input-Voltage"
        value_template: "{{ states('sensor.ts')[:3] }}"
        unit_of_measurement: 'V'
        
  - platform: template
    sensors:
      ups_output_voltage:
        friendly_name: "UPS Output-Voltage"
        value_template: "{{ states('sensor.ts')[3:8] }}"
        unit_of_measurement: 'V'
        
  - platform: template
    sensors:
      ups_load_level:
        friendly_name: "UPS Load Level"
        value_template: "{{ states('sensor.ts')[8:13] }}"
        unit_of_measurement: '%'
        
  - platform: template
    sensors:
      ups_frequency:
        friendly_name: "UPS Frequency"
        value_template: "{{ states('sensor.ts')[13:17] }}"
        unit_of_measurement: 'Hz'
        
  - platform: template
    sensors:
      ups_temperature:
        friendly_name: "UPS Temperature"
        value_template: "{{ states('sensor.ts')[17:21] }}"
        unit_of_measurement: '°C'
        
  - platform: template
    sensors:
      ups_battery_level:
        friendly_name: "UPS Battery Level"
        value_template: "{{ states('sensor.ts')[21:26] }}"
        unit_of_measurement: '%'
1 Like

Use this for WOW-300. This displays the data correctly.

rest:
  - resource: http://{IP}:{PORT}/ups.txt
    sensor:
      - name: "UPS input voltage"
        unique_id: ups_input_voltage
        device_class: voltage
        state_class: measurement
        value_template: "{{ value.split()[0] }}"
        unit_of_measurement: 'V'

      - name: "UPS output voltage"
        unique_id: ups_output_voltage
        device_class: voltage
        state_class: measurement
        value_template: "{{ value.split()[1] }}"
        unit_of_measurement: 'V'

      - name: "UPS Load Level"
        unique_id: ups_load_level
        device_class: power_factor
        state_class: measurement
        value_template: "{{ value.split()[2] }}"
        unit_of_measurement: '%'

      - name: "UPS input frequency"
        unique_id: ups_input_frequency
        device_class: frequency
        state_class: measurement
        value_template: "{{ value.split()[3] }}"
        unit_of_measurement: 'Hz'

      - name: "UPS output frequency"
        unique_id: ups_output_frequency
        device_class: frequency
        state_class: measurement
        value_template: "{{ value.split()[4] }}"
        unit_of_measurement: 'Hz'
        
      - name: "UPS battery level"
        unique_id: ups_battery_level
        device_class: battery
        state_class: measurement
        value_template: "{{ value.split()[5] }}"
        unit_of_measurement: '%'

      - name: "UPS AVR mode"
        unique_id: ups_avr_mode
        value_template: >
            {% set v = value.split()[6] | int %}
            {% if v == 1 %}
            Normal
            {% elif v == 2 %}
            Вecrease
            {% elif v == 3 %}
            Increase
            {% elif v == 4 %}
            Bypass
            {% elif v == 5 %}
            On-line
            {% else %}  
            {{ v }}
            {% endif %} 

      - name: "UPS utility state"
        unique_id: ups_utility_state
        value_template: >
            {% set v = value.split()[7] | int %}
            {% if v == 1 %}
            AC power
            {% elif v == 2 %}
            Battery power
            {% elif v == 3 %}
            Discharged
            {% else %}
            {{ v }}
            {% endif %} 

      - name: "UPS state"
        unique_id: ups_state
        value_template: >
            {% set v = value.split()[8] | int %}
            {% if v == 1 %}
            Normal
            {% elif v == 2 %}
            Not connected
            {% elif v == 3 %}
            Disabled
            {% else %}  
            {{ v }}
            {% endif %}