mirror of https://github.com/lumapu/ahoy.git
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							152 lines
						
					
					
						
							6.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							152 lines
						
					
					
						
							6.2 KiB
						
					
					
				| <!doctype html> | |
| <html> | |
|     <head> | |
|         <title>Live</title> | |
|         <link rel="stylesheet" type="text/css" href="style.css"/> | |
|         <meta name="viewport" content="width=device-width, initial-scale=1"> | |
|         <meta name="apple-mobile-web-app-capable" content="yes"> | |
|         <script type="text/javascript" src="api.js"></script> | |
|     </head> | |
|     <body> | |
|         <div class="topnav"> | |
|             <a href="/" class="active">AhoyDTU</a> | |
|             <a href="javascript:void(0);" class="icon" onclick="topnav()"> | |
|                 <span></span> | |
|                 <span></span> | |
|                 <span></span> | |
|             </a> | |
|             <div id="topnav" class="hide"></div> | |
|         </div> | |
|         <div id="content" class="content"> | |
|             <div id="live"></div> | |
|             <p>Every <span id="refresh"></span> seconds the values are updated</p> | |
|         </div> | |
|         <div id="footer"> | |
|             <p class="left">© 2022</p> | |
|             <p class="right" id="version"></p> | |
|         </div> | |
|         <script type="text/javascript"> | |
|             var exeOnce = true; | |
| 
 | |
|             function topnav() { | |
|                 toggle("topnav"); | |
|             } | |
| 
 | |
|             function parseMenu(obj) { | |
|                 if(true == exeOnce) { | |
|                     var e = document.getElementById("topnav"); | |
|                     e.innerHTML = ""; | |
|                     for(var i = 0; i < obj["name"].length; i ++) { | |
|                         e.appendChild(link(obj["link"][i], obj["name"][i])); | |
|                     } | |
|                 } | |
|             } | |
| 
 | |
|             function parseSys(obj) { | |
|                 if(true == exeOnce) { | |
|                     document.getElementById("version").appendChild( | |
|                         link("https://github.com/lumapu/ahoy/commits/" + obj["build"], "Git SHA: " + obj["build"] + " :: " + obj["version"], "_blank") | |
|                     );} | |
|             } | |
| 
 | |
|             function parseIv(obj, root) { | |
|                 var ivHtml = []; | |
| 
 | |
|                 var tDiv = div(["ch-all", "iv"]); | |
|                 tDiv.appendChild(span("Total", ["head"])); | |
|                 var total = new Array(root.ch0_fld_names.length).fill(0); | |
|                 if(obj.length > 1) | |
|                     ivHtml.push(tDiv); | |
| 
 | |
|                 for(var iv of obj) { | |
|                     main = div(["iv"]); | |
|                     var ch0 = div(["ch-iv"]); | |
|                     var limit = iv["power_limit_read"] + "%"; | |
|                     if(limit == "65535%") | |
|                         limit = "n/a"; | |
|                     ch0.appendChild(span(iv["name"] + " Limit " + limit + " | last Alarm: " + iv["last_alarm"], ["head"])); | |
| 
 | |
|                     for(var j = 0; j < root.ch0_fld_names.length; j++) { | |
|                         var val = Math.round(iv["ch"][0][j] * 100) / 100; | |
|                         if(val > 0) { | |
|                             var sub = div(["subgrp"]); | |
|                             sub.appendChild(span(val + " " + span(root["ch0_fld_units"][j], ["unit"]).innerHTML, ["value"])); | |
|                             sub.appendChild(span(root["ch0_fld_names"][j], ["info"])); | |
|                             ch0.appendChild(sub); | |
| 
 | |
|                             switch(j) { | |
|                                 case 2:  total[j] += val; break; // P_AC | |
|                                 case 6:  total[j] += val; break; // YieldTotal | |
|                                 case 7:  total[j] += val; break; // YieldDay | |
|                                 case 8:  total[j] += val; break; // P_DC | |
|                                 case 10: total[j] += val; break; // Q_AC | |
|                             } | |
|                         } | |
|                     } | |
|                     main.appendChild(ch0); | |
| 
 | |
| 
 | |
|                     for(var i = 1; i < (iv["channels"] + 1); i++) { | |
|                         var ch = div(["ch"]); | |
|                         ch.appendChild(span(("" == iv["ch_names"][i]) ? ("CHANNEL " + i) : iv["ch_names"][i], ["head"])); | |
| 
 | |
|                         for(var j = 0; j < root.fld_names.length; j++) { | |
|                             var val = Math.round(iv["ch"][i][j] * 100) / 100; | |
|                             if(val > 0) { | |
|                                 ch.appendChild(span(val + " " + span(root["fld_units"][j], ["unit"]).innerHTML, ["value"])); | |
|                                 ch.appendChild(span(root["fld_names"][j], ["info"])); | |
|                             } | |
|                         } | |
|                         main.appendChild(ch); | |
|                     } | |
| 
 | |
|                     var ts = div(["ts"]); | |
|                     var ageInfo = "Last received data requested at: "; | |
|                     if(iv["ts_last_success"] > 0) { | |
|                         var date = new Date(iv["ts_last_success"] * 1000); | |
|                         ageInfo += date.toLocaleString('de-DE'); | |
|                     } | |
|                     else | |
|                         ageInfo += "nothing received"; | |
| 
 | |
|                     ts.innerHTML = ageInfo; | |
| 
 | |
|                     main.appendChild(ts); | |
|                     ivHtml.push(main); | |
|                 } | |
| 
 | |
|                 // total | |
|                 if(obj.length > 1) { | |
|                     for(var j = 0; j < root.ch0_fld_names.length; j++) { | |
|                         var val = total[j]; | |
|                         if(val > 0) { | |
|                             var sub = div(["subgrp"]); | |
|                             sub.appendChild(span(val + " " + span(root["ch0_fld_units"][j], ["unit"]).innerHTML, ["value"])); | |
|                             sub.appendChild(span(root["ch0_fld_names"][j], ["info"])); | |
|                             tDiv.appendChild(sub); | |
|                         } | |
|                     } | |
|                 } | |
| 
 | |
|                 document.getElementById("live").replaceChildren(...ivHtml); | |
|             } | |
| 
 | |
|             function parse(obj) { | |
|                 if(null != obj) { | |
|                     parseMenu(obj["menu"]); | |
|                     parseSys(obj["system"]); | |
|                     parseIv(obj["inverter"], obj); | |
|                     document.getElementById("refresh").innerHTML = obj["refresh_interval"]; | |
|                     if(true == exeOnce) { | |
|                         window.setInterval("getAjax('/api/live', parse)", obj["refresh_interval"] * 1000); | |
|                         exeOnce = false; | |
|                     } | |
|                 } | |
|                 else | |
|                     document.getElementById("refresh").innerHTML = "n/a"; | |
|             } | |
| 
 | |
|             getAjax("/api/live", parse); | |
|         </script> | |
|     </body> | |
| </html>
 | |
| 
 |