WEB SCRAPE oder MULTISCRAPE für BENNING-01 TLS 13.3 Solar Wechselrichter

Hallo liebe Freunde von Homeassistant. Nach dem sehr spannenden Video über die Einbindung seines Bessenbach Wechselrichter habe ich mir vorgenommen eine ähnliche Integration vorzunehmen. Meine 2 BENNING Wechselrichter habe ich 2015 gekauft und diese versorgen mein Mehrfamilienhaus bereits seit 7 Jahren erfolgreich mit PV-Strom. Der Versorger hat einen Stromzähler angebracht, der leider nciht smart ist und das wird sich in den nächsten Jahren auch nicht ändern. Ich möchte aber den PV-Strom im Energie-Dashboard von HA als eigene Entity anzeigen lassen.
…Die Wechselrichter sind über ein lokale HTML erreichbar.
Ich habe es mit Simons Anleitung versucht und kann leider nur Teilerfolge verbuchen … Dabei scheitere ich vermutlich bei der Definition der CSS Selects…

Folgende Rahmenbedingungen liegen vor:
2 Benning Wechselrichter die über die lokale IP-Adresse: 192.168.1.21 und 192.198.1.2 erreichbar sind. Auch ohne Login kann man 1 Übersichtsseite und 2 Unterseiten mit AC und DC Daten anzeigen lassen.
Eventuell wären weitere Daten über das Portal von Benning über die Cloud erreichbar: https://www.portal.benning-solar.com/ …was ich aber nicht bevorzuge, da ich den Kontakt mit der Cloud nur wenn unbedingt notwendig verwenden möchte.

…das sieht dann so aus:

Ich habe folgende Methoden versucht:

  • manuelle Konfiguration in der configuration.yaml
    sowohl mit multiscrape: als auch mit der Standard Version von scrape:
  • Eingabe über die Standard Integration “Scrape” mittels GUI von “Web scrape”

Das Ergebnis bis dato:

Ich kann die 2. Tabelle auslesen und diesen Sensoren/ Attribute zuordnen … Allerdings nur die ersten 5 Werte, und der Parameter “Solar Portal letzte Übertragung” schaffe ich nicht auszulesen …
Aber viel Wichtiger sind die Werte der ersten Tabelle wie z.B.:

Zum bessere Nachvollziehen kann ich hier noch die HTML des Wechselrichters hochladen:
die Übersichtsseite:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
  <title>BENNING-01 TLS 13.3 - Inverter Info</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <link rel="stylesheet" type="text/css" href="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/style.css"> 

 <link rel="Stylesheet" type="text/css" href="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jquery-ui.custom.css"> 

 <link rel="shortcut icon" href="http://192.168.1.21/favicon.ico" type="image/x-icon"> 

  
 </head> 
 <body style="">
  <!--[if lte IE 6]>
   <div id="ie-message">
      Ihr Browser is veraltet, bitte updaten Sie ihn. Wir empfehlen die Nutzung von <a href="http://www.getfirefox.com" target="_new">Mozilla Firefox</a>. 
			Einige Ansichten und Funktionen werden nicht funktionieren.
   </div>
<![endif]-->
<script type="text/JavaScript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jquery.js"></script>
<script type="text/JavaScript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jqueryBlockUi.js"></script>
<script type="text/JavaScript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jquery-ui.custom.js"></script>
<script type="text/JavaScript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/benning.js"></script>
  <script language="javascript" type="text/javascript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/gauge.min.js"></script>
  <script language="javascript" type="text/javascript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jquery.gauge.min.js"></script>
  <script language="javascript" type="text/JavaScript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jquery.flot.min.js"></script>
  <script language="javascript" type="text/javascript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jquery.flot.resize.min.js"></script>
  <script language="javascript" type="text/javascript" src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/jquery.flot.crosshair.min.js"></script>
  <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="js/excanvas.min.js"></script><![endif]-->
  <script type="text/JavaScript">
  
  window.onerror = function() {
    location.reload();
  }
  
  function initPageOnLoad()
  {
  	initGauge();
  	initTableValues();
  	plotDayData();
  	
  	$("#column1,#column2").sortable({  
			connectWith: "#column1,#column2",  
			handle: '.WidgetHeader',
			opacity: 0.6  
		});  
		  
		$("#column1,#column2").disableSelection();
	
		// reload page every minute
		setTimeout( "window.location.reload();", 60*1000 );
  	  	
  } 
  
  function initGauge()
  {
		var optionsAc = {
				value: 0,
				colorOfCenterCircleFill:  "#5E7796",
				colorOfCenterCircleStroke:  "#5E7796",
				colorOfPointerFill:  "#7eb1cd",
				colorOfPointerStroke:  "#5E7796",
				label: 'AC Leistung',
				unitsLabel: 'W',
				
         min: 0, 
        
				max: 13000
			};
		
		$("#gaugeAcPower").gauge( optionsAc );
		
		var acPowerTotal = 0;
		$("#gaugeAcPower").gauge('setValue', acPowerTotal );
		$("#tableAcPowerTotal").text( acPowerTotal.toFixed() + ' W' );
		
		 
    var optionsTemp = {
				value: 0,
				colorOfCenterCircleFill:  "#5E7796",
				colorOfCenterCircleStroke:  "#5E7796",
				colorOfPointerFill:  "#7eb1cd",
				colorOfPointerStroke:  "#5E7796",
				label: 'Temperatur',
				unitsLabel: '°C',
				min: -20,
				max: 100
			};
		
		$("#gaugeTemp").gauge( optionsTemp );
		$("#gaugeTemp").gauge('setValue', 0.0 );
     

		
  }
  
  function OutputNumber_fixed_and_Unit(tag, val, unit)
  {
  	var tofixedval = 0;
  	
  	switch(unit)
  	{
      case 'W':
        tofixedval = 0;
        break;
      case 'kWh':
        tofixedval = 2;
        break;
      case '%':
        tofixedval = 0;
        break;
      default:
        break;
  	}
  	
  	$(tag).html( val.toFixed(tofixedval) + ' ' + unit );
  
  }
  
  function initTableValues()
  {
		 
  	var eTotal = 116476728;
  	var remunerationFactor = 0.1592;
  	var currency = "CHF";
  	
  	var revenue = (eTotal * 0.001 * remunerationFactor).toFixed() + " " + currency;
  	$("#revenueVal").text( revenue );
  	  	
  	var co2saving = (eTotal * 0.001 * 0.0007).toFixed(2) + " t";
  	$("#co2_savings").text( co2saving );
  	
  	var timeNow = 1698364427;
  	var timeMidnight = new Date( timeNow * 1000 );
  	timeMidnight.setHours(0,0,0);
     
  	
  	
  	// portal submit time
  	var lastSubmitTime = new Date( 1698363600 * 1000 ); 
				
		var lastSubmitMonth = lastSubmitTime.getMonth() + 1;
		var lastSubmitDay = lastSubmitTime.getDate();
		var lastSubmitYear = lastSubmitTime.getFullYear();
		// slice to force two digits..
		var lastSubmitMinutes = String( '00'+lastSubmitTime.getUTCMinutes() ).slice(-2);
		var lastSubmitHours = String( '00'+lastSubmitTime.getUTCHours()  ).slice(-2);
		var lastSubmitSeconds =  String( '00'+lastSubmitTime.getUTCSeconds() ).slice(-2);
		
		if( lastSubmitYear > 1970)
		{ 			
			$( "#lastTransmissionTime" ).html( lastSubmitDay + "." + lastSubmitMonth + "." + lastSubmitYear + " " + lastSubmitHours + ":" + lastSubmitMinutes + ":" + lastSubmitSeconds);
		}
		else
		{
			$( "#lastTransmissionTime" ).html( "niemals " );
		}
  	
		OutputNumber_fixed_and_Unit("#e_today", 16.019, 'kWh');
    OutputNumber_fixed_and_Unit("#tableAcPowerTotal", 0, 'W');

		 
  	$("#feedInOperatingHours").text(  (34248.480).toFixed() + ' ' + 'h' );
  	$("#e_totalval").text(  (116476.734).toFixed() + ' ' + 'kWh' );

     
       
		
  	
  }
  
	function plotDayData()
	{
		// get the data for this OID 
		//var endTime = new Date();    
		var endTime = 1698364427 * 1000; // now
				
		// get metadata
		var entryUiText = "AC Power";
		var entryScalingFactor = 1.0;
		var entryUnit = "W";
		
		var dataArrayDay  = [];
		
		var jsonDataArray = getHistoryForOID( 11365, 
														// (endTime.getTime()/1000)-(24*3600), endTime.getTime()/1000 );
														(endTime/1000)-(24*3600), endTime/1000 );      
	
		for( var i = 0; i < jsonDataArray.length ; i++ )
		{
			dataArrayDay.push( [ (jsonDataArray[i].time * 1000) , (jsonDataArray[i].value*entryScalingFactor) ] );
		}
		
		
		var seriesDay = {
				label: entryUiText+ " ["+entryUnit +"]",
				color:  "#5E7796",
				fill: true,
				fillColor: "#C4CFDB",
				data: dataArrayDay
			};

		var showBarNotLines = false;
		if( dataArrayDay.length == 1 )
		{
			showBarNotLines = true;
		}
		else
		{
			showBarNotLines = false;
		}

		var optionsDay = {
			series: 
			{
				bars: { show: showBarNotLines, fill: true, fillColor: "#C4CFDB" },
				lines: { show: !showBarNotLines, fill: true, fillColor: "#C4CFDB" },
				points: { show: false, radius: 1 }
			},
			legend: 
			{
				show: true, // show a legend,
				labelFormatter: null, // no specific formatting of the label
				labelBoxBorderColor: "#CCCCCC", 
				noColumns: 1, // one column
				position: "nw", 
				margin: 2,
				backgroundColor: null, // transparent
				backgroundOpacity: 0.5, // 0.0 to 1.0
				container: null// or jQuery object/DOM element/jQuery expression
			},
			xaxis: 
			{
				mode: "time",
				minTickSize: [1, "hour"],			    
				timeformat: "%H:%M h<br>%0d.%0m"			    		    
			},			
		
			grid: 
			{ 
				hoverable: true, 
				autoHighlight: false 
			}		  				  
		};	
		  
		plotDay = $.plot($("#chart_plot_day"), [ seriesDay ], optionsDay );
		
		legends = $("#chart_plot_day .legendLabel");
		legends.each(function () {
		// fix the widths so they don't jump around
		$(this).css('width', $(this).width());
		});

	}
  
  </script>
  <div id="PageContainer" style="display: block;">
  
   <!--  first line: header -->   
   <!--  open header -->
<div id="Header">
  
	<h1>	  		   
		BENNING-01 TLS 13.3
	</h1>	
	 <a href="http://www.portal.benning-solar.com/"> <img src="BENNING-01%20TLS%2013.3%20-%20Inverter%20Info-Dateien/logo.jpg" alt="logo"></a> 
</div>



<!--  close header -->
<div id="MenuAndContent">     
   
     <!-- Navigation menu -->
   <div id="Menu">
<ul id="NavMenu"> 
 <!--  open menu -->
 <li class="NavGroupName">Betriebsdaten</li>
 <li>
  <ul>
   <a href="http://192.168.1.21/Dashboard.htm"><li>Übersicht</li></a>
    <a href="http://192.168.1.21/MeasurementsInput.htm"><li>DC Eingang</li></a> 
   
   <a href="http://192.168.1.21/MeasurementsOutput.htm"><li>AC Ausgang</li></a>
   
   <a href="http://192.168.1.21/Archive.htm"><li>Verlauf</li></a>
  </ul>
 </li>
 
 <li class="NavGroupName">Sitzung</li>
 <li>
  <ul>
   <a href="http://192.168.1.21/Login.htm"><li>Anmelden</li></a> 
  </ul>
 </li>
</ul>
<!--  close menu -->
</div> <!-- id="Menu" -->
    

   <div id="ContentAndBreadcrumb">

    <div id="BreadcrumbNav">  
    Betriebsdaten &gt; Übersicht
    </div> <!-- id=BreadcrumbNav -->
    <div id="Content">

	<div id="column1" class="ui-sortable">
	
		<div class="Widget">  
		          
            <div class="WidgetHeader">Wechselrichter</div>
            <div class="WidgetBody">
			 <table class="dashboardTable">
			 <tbody>
		
			 	<tr><td>AC Leistung</td>
			    	<td id="tableAcPowerTotal">0 W</td></tr>        

		 
			 	<tr><td>E heute</td>
			    	<td id="e_today">16.02 kWh</td></tr>
			    <tr><td>produzierte Gesamtenergie</td>
			    	<td id="e_totalval">116477 kWh</td></tr>        
			    <tr><td>CO2 Einsparung</td>
			    	<td id="co2_savings">81.53 t</td></tr>        
			    <tr><td>Ertrag</td>
			    	<td><span id="revenueVal">18543 CHF</span></td></tr>        
			   <tr><td>Einspeisestunden</td>
			    	<td id="feedInOperatingHours">34248 h</td></tr>        
     

		
			 </tbody>
			 </table>
		</div><!-- widget body -->
		</div><!-- Widget -->
		
		<div class="Widget">
			<div class="WidgetHeader">Letzte 24 Stunden</div>
			<div class="WidgetBody">
				<div id="chart_plot_day" style="height: 200px; width: 350px; padding: 0px; position: relative;"><canvas class="base" width="350" height="200"></canvas><canvas class="overlay" width="350" height="200" style="position: absolute; left: 0px; top: 0px;"></canvas><div class="tickLabels" style="font-size:smaller"><div class="xAxis x1Axis" style="color:#545454"><div class="tickLabel" style="position:absolute;text-align:center;left:9px;top:176px;width:43px">00:00 h<br>26.10</div><div class="tickLabel" style="position:absolute;text-align:center;left:62px;top:176px;width:43px">04:00 h<br>26.10</div><div class="tickLabel" style="position:absolute;text-align:center;left:115px;top:176px;width:43px">08:00 h<br>26.10</div><div class="tickLabel" style="position:absolute;text-align:center;left:168px;top:176px;width:43px">12:00 h<br>26.10</div><div class="tickLabel" style="position:absolute;text-align:center;left:222px;top:176px;width:43px">16:00 h<br>26.10</div><div class="tickLabel" style="position:absolute;text-align:center;left:275px;top:176px;width:43px">20:00 h<br>26.10</div></div><div class="yAxis y1Axis" style="color:#545454"><div class="tickLabel" style="position:absolute;text-align:right;top:163px;right:328px;width:22px">0</div><div class="tickLabel" style="position:absolute;text-align:right;top:121px;right:328px;width:22px">2000</div><div class="tickLabel" style="position:absolute;text-align:right;top:80px;right:328px;width:22px">4000</div><div class="tickLabel" style="position:absolute;text-align:right;top:38px;right:328px;width:22px">6000</div><div class="tickLabel" style="position:absolute;text-align:right;top:-4px;right:328px;width:22px">8000</div></div></div><div class="legend"><div style="position: absolute; width: 167px; height: 19px; top: 4px; left: 31px; background-color: rgb(255, 255, 255); opacity: 0.5;"> </div><table style="position:absolute;top:4px;left:31px;;font-size:smaller;color:#545454"><tbody><tr><td class="legendColorBox"><div style="border:1px solid #CCCCCC;padding:1px"><div style="width:4px;height:0;border:5px solid #5E7796;overflow:hidden"></div></div></td><td class="legendLabel" style="width: 140px;">AC Power [W]</td></tr></tbody></table></div></div>
			</div><!-- widget body -->
		</div> <!-- widget -->
			
	
	</div><!-- column 1-->

	<div id="column2" class="ui-sortable">
	
		<div class="Widget">
			<div class="WidgetHeader">Information</div>
			<div class="WidgetBody">
				<table class="dashboardTable">			
				<tbody>				
				<tr><td>Status</td>
					<td id="sysStatusDisplay">Inaktiv</td></tr>
				<tr><td>Name</td>
					<td id="sysNameDisplay">BENNING-01 TLS 13.3</td></tr>
       			<tr><td>Standort</td>
       				<td id="sysLocationDisplay">Au (SG)</td></tr>
       			<tr><td>Beschreibung</td>
       				<td id="sysDescriptionDisplay">Quartier4u Au(SG)</td></tr> 
		 
				<tr><td>Firmware Version</td>
					<td>10069454.28 </td></tr>
     
		
				<tr><td>Seriennummer</td>
					<td>106007229839 </td></tr>
           <tr><td>Solar Portal: Letzte erfolgreiche Übertragung</td>	
            <td id="lastTransmissionTime">27.10.2023 23:40:00</td></tr> 
				</tbody>
			 	</table>
		 	</div><!-- widget body -->
		</div> <!-- widget -->

		<div class="Widget">
			<div class="WidgetHeader">Leistungsdaten</div>
			<div class="WidgetBody" style="height: 140px;">                
				<canvas id="gaugeAcPower" width="130" height="130"></canvas>				
		 
				<canvas id="gaugeTemp" width="130" height="130"></canvas>
     
		

      </div>
			</div> <!--	WidgetBody -->
		</div> <!-- Widget -->
		
		
	</div> <!-- column 2-->
    </div><!-- id=Content -->
   
   </div> <!-- id="ContentAndBreadcrumb" -->

   </div> <!-- id="MenuAndContent" -->
<div id="Footer">
 Copyright (C) Benning GmbH 2015. Alle Rechte vorbehalten. 

</div> <!-- id=Footer -->
<!--[if IE]>
<script>
	$('div#Content tr:nth-child(even)').addClass('evenDts');
	$('div#Content input[type="file"]').addClass('firmware');
</script>
<![endif]-->

   
   <!-- id=PageContainer -->
 



</body></html>

…hier die1. Unterseite mit DC Daten:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<title>BENNING-01 TLS 13.3 - aktuelle Messwerte</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <link rel="stylesheet" type="text/css" href="css/style.css"> 

 <link rel="Stylesheet" type="text/css" href="css/JQueryUI/jquery-ui.custom.css"  /> 

 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> 


	</head>
	<body>
		<!--[if lte IE 6]>
   <div id="ie-message">
      Ihr Browser is veraltet, bitte updaten Sie ihn. Wir empfehlen die Nutzung von <a href="http://www.getfirefox.com" target="_new">Mozilla Firefox</a>. 
			Einige Ansichten und Funktionen werden nicht funktionieren.
   </div>
<![endif]-->
<script type="text/JavaScript" src="js/jquery.js"></script>
<script type="text/JavaScript" src="js/jqueryBlockUi.js"></script>
<script type="text/JavaScript" src="js/jquery-ui.custom.js"></script>
<script type="text/JavaScript" src="js/benning.js"></script>
		<script language="javascript" type="text/javascript" src="js/gauge.min.js"></script>
		<script language="javascript" type="text/javascript" src="js/jquery.gauge.min.js"></script>
		<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="js/excanvas.min.js"></script><![endif]-->
		<script type="text/JavaScript">

		var showMpp1 = false;
		var showMpp2 = false;
		var showMpp3 = false;

		var channelToUpdate = 0;

		function initPageOnLoad()
		{
			var wiringMode = 0;

			switch( wiringMode )
			{
				default:
				case 0:
					showMpp1 = true;
					showMpp2 = true;
					showMpp3 = true;
					$('table.contentTable tbody tr').filter(":visible").filter(":odd").css("background-color", "#C4CFDB");
					$('table.contentTable tbody tr').filter(":visible").filter(":even").css("background-color","#FFFFFF");
				break;
				case 1:
					showMpp1 = true;
					showMpp2 = false;
					showMpp3 = true;
					$("#MPP2_ROW_U").hide();
					$("#MPP2_ROW_I").hide();
					$("#MPP2_ROW_P").hide();
					$('table.contentTable tbody tr').filter(":visible").filter(":odd").css("background-color", "#C4CFDB");
					$('table.contentTable tbody tr').filter(":visible").filter(":even").css("background-color","#FFFFFF");
				break;
				case 2:
					showMpp1 = true;
					showMpp2 = false;
					showMpp3 = false;
					$("#MPP2_ROW_U").hide();
					$("#MPP2_ROW_I").hide();
					$("#MPP2_ROW_P").hide();
					$("#MPP3_ROW_U").hide();
					$("#MPP3_ROW_I").hide();
					$("#MPP3_ROW_P").hide();
					$('table.contentTable tbody tr').filter(":visible").filter(":odd").css("background-color", "#C4CFDB");
					$('table.contentTable tbody tr').filter(":visible").filter(":even").css("background-color","#FFFFFF");
				break;
			}

			var numTrackers = 3;

			switch( numTrackers )
			{
				case 1: // 1 Tracker
          showMpp2 = false;
					showMpp3 = false;
          $("#MPP2_ROW_U").hide();
          $("#MPP2_ROW_I").hide();
          $("#MPP2_ROW_P").hide();
					$("#MPP3_ROW_U").hide();
					$("#MPP3_ROW_I").hide();
					$("#MPP3_ROW_P").hide();
				break;
        
				case 2: // 2 Trackers				
          showMpp3 = false;
          $("#MPP3_ROW_U").hide();
          $("#MPP3_ROW_I").hide();
          $("#MPP3_ROW_P").hide();
				break;		
				
				case 3:
				default:
					// hide nothing
				break;
			}

			$('table.contentTable tbody tr').filter(":visible").filter(":odd").css("background-color", "#C4CFDB");
      $('table.contentTable tbody tr').filter(":visible").filter(":even").css("background-color","#FFFFFF");

			initGauges();
			reloadPage();

			$("#MPP_TOT_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#MPP1_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#MPP2_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#MPP3_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#MPP1_U").html( (0.00).toFixed(1) + ' ' + 'V' );
			$("#MPP2_U").html( (0.00).toFixed(1) + ' ' + 'V' );
			$("#MPP3_U").html( (0.00).toFixed(1) + ' ' + 'V' );
			$("#MPP1_I").html( (0.000).toFixed(1) + ' ' + 'A' );
			$("#MPP2_I").html( (0.000).toFixed(1) + ' ' + 'A' );
			$("#MPP3_I").html( (0.000).toFixed(1) + ' ' + 'A' );

			// reload page every 10 minutes
			setTimeout( "window.location.reload();", 600*1000 );

		}

		function initGauges()
		{

			var options1 = {
					value: 0,
          colorOfCenterCircleFill:  "#5E7796",
          colorOfCenterCircleStroke:  "#5E7796",
          colorOfPointerFill:  "#ADBBCA",
          colorOfPointerStroke:  "#5E7796",
					label: 'MPPT 1',
					unitsLabel: 'W',
					min: 0,
					max: 5750.00 * 1.2
				};
			if( showMpp1 )
			{
				$("#gaugeMpp1Power").gauge( options1 );
				$("#gaugeMpp1Power").gauge('setValue', 0 );
			}

			var options2 = {
					value: 0,
	        colorOfCenterCircleFill:  "#5E7796",
          colorOfCenterCircleStroke:  "#5E7796",
          colorOfPointerFill:  "#ADBBCA",
          colorOfPointerStroke:  "#5E7796",
					label: 'MPPT 2',
					unitsLabel: 'W',
					min: 0,
					max: 5750.00 * 1.2
				};
			if( showMpp2 )
			{
				$("#gaugeMpp2Power").gauge( options2 );
				$("#gaugeMpp2Power").gauge('setValue', 0 );
			}

			var options3 = {
					value: 0,
					colorOfCenterCircleFill:  "#5E7796",
          colorOfCenterCircleStroke:  "#5E7796",
          colorOfPointerFill:  "#ADBBCA",
          colorOfPointerStroke:  "#5E7796",
					label: 'MPPT 3',
					unitsLabel: 'W',
					min: 0,
					max: 3750.00 * 1.2
				};
			if( showMpp3 )
			{
				$("#gaugeMpp3Power").gauge( options3 );
				$("#gaugeMpp3Power").gauge('setValue', 0 );
			}
		}

		function reloadPage()
		{
			// silent ajax requests
			$("#PageContainer").unbind( "ajaxSend"  );
			$("#PageContainer").unbind( "ajaxStop"  );
			$("#PageContainer").unbind( "ajaxError" );

			switch( channelToUpdate )
			{
				case 0:
					dbAccessGetAsync( 11400, ajaxResultCallback );
					break;

				case 1:
					dbAccessGetAsync( 11410, ajaxResultCallback );
					break;

				case 2:
					dbAccessGetAsync( 11420, ajaxResultCallback );
					break;

				case 3:
					dbAccessGetAsync( 11395, ajaxResultCallback );
					break;

				case 4:
					dbAccessGetAsync( 11570, ajaxResultCallback );
					break;

				case 5:
					dbAccessGetAsync( 11580, ajaxResultCallback );
					break;

				case 6:
					dbAccessGetAsync( 11590, ajaxResultCallback );
					break;

				case 7:
					dbAccessGetAsync( 11340, ajaxResultCallback );
					break;

				case 8:
					dbAccessGetAsync( 11350, ajaxResultCallback );
					break;

				case 9:
					dbAccessGetAsync( 11360, ajaxResultCallback );
					channelToUpdate = -1;
					break;

				default:
					channelToUpdate = 0;
					break;
			}

			setTimeout( "reloadPage();", 1000 );
		}

		function ajaxResultCallback( data )
		{
			switch( data.oid )
			{
				case 11400:
					$("#gaugeMpp1Power").gauge('setValue', parseInt(data.val) );
					$("#MPP1_P").html( (data.val*data.factor).toFixed(0) + ' ' + data.unit );
					break;

				case 11410:
					$("#gaugeMpp2Power").gauge('setValue', parseInt(data.val) );
					$("#MPP2_P").html( (data.val*data.factor).toFixed(0) + ' ' + data.unit );
					break;

				case 11420:
					$("#gaugeMpp3Power").gauge('setValue', parseInt(data.val) );
					$("#MPP3_P").html( (data.val*data.factor).toFixed(0) + ' ' + data.unit );
					break;

				case 11395:
					$("#MPP_TOT_P").html( (data.val*data.factor).toFixed(0) + ' ' + data.unit );
					break;

				case 11570:
					$("#MPP1_U").html( (data.val*data.factor).toFixed(1) + ' ' + data.unit );
					break;

				case 11580:
					$("#MPP2_U").html( (data.val*data.factor).toFixed(1) + ' ' + data.unit );
					break;

				case 11590:
					$("#MPP3_U").html( (data.val*data.factor).toFixed(1) + ' ' + data.unit );
					break;

				case 11340:
					$("#MPP1_I").html( (data.val*data.factor).toFixed(1) + ' ' + data.unit );
					break;

				case 11350:
					$("#MPP2_I").html( (data.val*data.factor).toFixed(1) + ' ' + data.unit );
					break;

				case 11360:
					$("#MPP3_I").html( (data.val*data.factor).toFixed(1) + ' ' + data.unit );
					break;

				default:
					channelToUpdate = 0;
					break;
			}
			channelToUpdate++;
		}

		</script>
		<div id="PageContainer">

			<!--  first line: header -->
			<!--  open header -->
<div id="Header">
  
	<h1>	  		   
		BENNING-01 TLS 13.3
	</h1>	
	 <a href="http://www.portal.benning-solar.com"> <img src="images/logo.jpg" alt="logo"></a> 
</div>



<!--  close header -->
<div id="MenuAndContent">

		  	<!-- Navigation menu -->
			<div id="Menu">
<ul id="NavMenu" > 
 <!--  open menu -->
 <li class="NavGroupName">Betriebsdaten</li>
 <li>
  <ul>
   <a href="Dashboard.htm"><li>Übersicht</li></a>
    <a href="MeasurementsInput.htm"><li>DC Eingang</li></a> 
   
   <a href="MeasurementsOutput.htm"><li>AC Ausgang</li></a>
   
   <a href="Archive.htm"><li>Verlauf</li></a>
  </ul>
 </li>
 
 <li class="NavGroupName">Sitzung</li>
 <li>
  <ul>
   <a href="Login.htm"><li>Anmelden</li></a> 
  </ul>
 </li>
</ul>
<!--  close menu -->
</div> <!-- id="Menu" -->


			<div id="ContentAndBreadcrumb">

				<div id="BreadcrumbNav">
         Betriebsdaten > DC Eingang 
        
				</div> <!-- id=BreadcrumbNav -->
				<div id="Content">

					<div class="Widget3Gauge">
           <div class="WidgetHeader">DC Eingang</div> 
          
						
						<div class="WidgetBody3Gauge" >
							<div>
								<canvas id="gaugeMpp1Power" width="125" height="125"></canvas>
								<canvas id="gaugeMpp2Power" width="125" height="125"></canvas>
								<canvas id="gaugeMpp3Power" width="125" height="125"></canvas>
							</div>
						</div> <!--	WidgetBody -->
					</div> <!-- Widget -->

					<table  class="contentTable">
						<thead>
							<tr><th>Bezeichnung</th><th>Wert</th></tr>
						</thead>
						<tbody>
							<tr id="MPP_TOT_ROW_P"><td>DC Leistung gesamt</td>
								<td id="MPP_TOT_P"></td></tr>
							<tr id="MPP1_ROW_P"><td>DC Leistung MPP Tracker 1</td>
								<td id="MPP1_P"></td></tr>
							<tr id="MPP2_ROW_P"><td>DC Leistung MPP Tracker 2</td>
								<td id="MPP2_P"></td></tr>
							<tr id="MPP3_ROW_P"><td>DC Leistung MPP Tracker 3</td>
								<td id="MPP3_P"></td></tr>

							<tr id="MPP1_ROW_U"><td>MPP Tracker 1 DC Spannung</td>
								<td id="MPP1_U"></td></tr>
							<tr id="MPP2_ROW_U"><td>MPP Tracker 2 DC Spannung</td>
								<td id="MPP2_U"></td></tr>
							<tr id="MPP3_ROW_U"><td>MPP Tracker 3 DC Spannung</td>
								<td id="MPP3_U"></td></tr>

							<tr id="MPP1_ROW_I"><td>DC Strom MPP Tracker 1</td>
								<td id="MPP1_I"></td></tr>
							<tr id="MPP2_ROW_I"><td>DC Strom MPP Tracker 2</td>
								<td id="MPP2_I"></td></tr>
							<tr id="MPP3_ROW_I"><td>DC Strom MPP Tracker 3</td>
								<td id="MPP3_I"></td></tr>

						</tbody>
					</table>

				</div><!-- id=Content -->

			</div> <!-- id="ContentAndBreadcrumb" -->

			</div> <!-- id="MenuAndContent" -->
<div id="Footer" >
 Copyright (C) Benning GmbH 2015. Alle Rechte vorbehalten. 

</div> <!-- id=Footer -->
<!--[if IE]>
<script>
	$('div#Content tr:nth-child(even)').addClass('evenDts');
	$('div#Content input[type="file"]').addClass('firmware');
</script>
<![endif]-->


		</div> <!-- id=PageContainer -->
	</body>
</html>

…und hier die 2. Unterseite mit AC Messdaten:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<title>BENNING-01 TLS 13.3 - aktuelle Messwerte</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

     <link rel="stylesheet" type="text/css" href="css/style.css"> 

 <link rel="Stylesheet" type="text/css" href="css/JQueryUI/jquery-ui.custom.css"  /> 

 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> 


	</head>	
	<body>
		<!--[if lte IE 6]>
   <div id="ie-message">
      Ihr Browser is veraltet, bitte updaten Sie ihn. Wir empfehlen die Nutzung von <a href="http://www.getfirefox.com" target="_new">Mozilla Firefox</a>. 
			Einige Ansichten und Funktionen werden nicht funktionieren.
   </div>
<![endif]-->
<script type="text/JavaScript" src="js/jquery.js"></script>
<script type="text/JavaScript" src="js/jqueryBlockUi.js"></script>
<script type="text/JavaScript" src="js/jquery-ui.custom.js"></script>
<script type="text/JavaScript" src="js/benning.js"></script>		
		<script language="javascript" type="text/javascript" src="js/gauge.min.js"></script>
		<script language="javascript" type="text/javascript" src="js/jquery.gauge.min.js"></script>
		<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="js/excanvas.min.js"></script><![endif]-->
		<script type="text/JavaScript">
		
		// depending on the system type, show 1 or 3 phases
		var showL1 = true;
		var showL2 = true;
		var showL3 = true;
		
		var maxPowerPerPhase = 0;
		
		var channelToUpdate = 0;
		
		function initPageOnLoad()
		{
			if(  6 == 1 )
			{
				showL1 = true;
				showL2 = false;
				showL3 = false;
				
				$("#AC_L2_ROW_P").hide();
				$("#AC_L2_ROW_U").hide();
				
				$("#AC_L3_ROW_P").hide();
				$("#AC_L3_ROW_U").hide();

        

				maxPowerPerPhase = 13000 ;
				
				$('table.contentTable tbody tr').filter(":visible").filter(":odd").css("background-color","#C4CFDB");
				$('table.contentTable tbody tr').filter(":visible").filter(":even").css("background-color","#FFFFFF");
			}
			else
			{
				showL1 = true;
				showL2 = true;
				showL3 = true;
				maxPowerPerPhase = 13000 / 3;
			}
			initGauges();
			reloadPage();
			
			// Init table:
			$("#AC_TOT_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#AC_L1_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#AC_L2_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#AC_L3_P").html( (0).toFixed(0) + ' ' + 'W' );
			$("#AC_L1_U").html( (0.00).toFixed(1) + ' ' + 'V' );
			$("#AC_L2_U").html( (0.00).toFixed(1) + ' ' + 'V' );
			$("#AC_L3_U").html( (0.00).toFixed(1) + ' ' + 'V' );

         
			$("#AC_L1_I").html( (0.000).toFixed(1) + ' ' + 'A' );
			$("#AC_L2_I").html( (0.000).toFixed(1) + ' ' + 'A' );
			$("#AC_L3_I").html( (0.000).toFixed(1) + ' ' + 'A' );
				 

			// reload page every 10 minutes
			setTimeout( "window.location.reload();", 600*1000 );
			
		}
		
		function initGauges()
		{	
		
			var options1 = {
					value: 0,
					colorOfCenterCircleFill:  "#5E7796",
          colorOfCenterCircleStroke:  "#5E7796",
          colorOfPointerFill:  "#ADBBCA",
          colorOfPointerStroke:  "#5E7796",
					label: 'L1',
					unitsLabel: 'W',
         min: 0, 
        
					
					max: ( maxPowerPerPhase )
				};
			if( showL1 )
			{
				$("#gaugeL1Power").gauge( options1 );
				$("#gaugeL1Power").gauge('setValue', 0 );
			}
			
			var options2 = {
					value: 0,
					colorOfCenterCircleFill:  "#5E7796",
          colorOfCenterCircleStroke:  "#5E7796",
          colorOfPointerFill:  "#ADBBCA",
          colorOfPointerStroke:  "#5E7796",
					label: 'L2',
					unitsLabel: 'W',
         min: 0, 
        
					max: maxPowerPerPhase
				};		
			if( showL2 )
			{
				$("#gaugeL2Power").gauge( options2 );
				$("#gaugeL2Power").gauge('setValue', 0 );
			}
			
			var options3 = {
					value: 0,
					colorOfCenterCircleFill:  "#5E7796",
          colorOfCenterCircleStroke:  "#5E7796",
          colorOfPointerFill:  "#ADBBCA",
          colorOfPointerStroke:  "#5E7796",
					label: 'L3',
					unitsLabel: 'W',
         min: 0, 
        
					max: maxPowerPerPhase	
				};		
			if( showL3 )
			{
				$("#gaugeL3Power").gauge( options3 );
				$("#gaugeL3Power").gauge('setValue', 0 );
			}
		}
		
		function reloadPage()
		{ 
			// silent ajax requests
			$("#PageContainer").unbind( "ajaxSend" );
			$("#PageContainer").unbind( "ajaxStop" );
 			$("#PageContainer").unbind( "ajaxError" );
			
			switch( channelToUpdate )
			{
				case 0:
					var entry = dbAccessGetAsync( 11365, resultCallback );
					break;
				
				case 1:
					var entry = dbAccessGetAsync( 11370, resultCallback );
					break;				
				
				case 2:
					var entry = dbAccessGetAsync( 11380, resultCallback );
					break;
				
				case 3:
					var entry = dbAccessGetAsync( 11390, resultCallback );
					break;
				
				case 4:
					var entry = dbAccessGetAsync( 11480, resultCallback );
					break;
					
				case 5:
					var entry = dbAccessGetAsync( 11490, resultCallback );
					break;
				
				case 6:
					var entry = dbAccessGetAsync( 11500, resultCallback );
					break;
										
         
				case 7:
					var entry = dbAccessGetAsync( 11310, resultCallback );
					break;

				case 8:
					var entry = dbAccessGetAsync( 11315, resultCallback );
					break;

				case 9:
					var entry = dbAccessGetAsync( 11320, resultCallback );
					break;
				 

				default:
					channelToUpdate = 0;
					break;
			}

			setTimeout( "reloadPage();", 1000 );
		}
		
		
		function resultCallback( entry )
		{
			switch( entry.oid )
			{
				case 11365:	
					$("#AC_TOT_P").html( (entry.val*entry.factor).toFixed(0) + ' ' + entry.unit );
					break;
				case 11370:
					$("#AC_L1_P").html( (entry.val*entry.factor).toFixed(0) + ' ' + entry.unit );
					$("#gaugeL1Power").gauge('setValue', parseInt(entry.val*entry.factor) );
					break;
				
				case 11380:
					$("#AC_L2_P").html( (entry.val*entry.factor).toFixed(0) + ' ' + entry.unit );
					$("#gaugeL2Power").gauge('setValue', parseInt(entry.val*entry.factor) );
					break;
				
				case 11390:
					$("#AC_L3_P").html( (entry.val*entry.factor).toFixed(0) + ' ' + entry.unit );
					$("#gaugeL3Power").gauge('setValue', parseInt(entry.val*entry.factor) );
					break;
				
				case 11480:
					$("#AC_L1_U").html( (entry.val*entry.factor).toFixed(1) + ' ' + entry.unit );
					break;
					
				case 11490:
					$("#AC_L2_U").html( (entry.val*entry.factor).toFixed(1) + ' ' + entry.unit );
					break;
				
				case 11500:
					$("#AC_L3_U").html( (entry.val*entry.factor).toFixed(1) + ' ' + entry.unit );
					break;
					
         
				case 11310:
					$("#AC_L1_I").html( (entry.val*entry.factor).toFixed(1) + ' ' + entry.unit );
					break;

				case 11315:
					$("#AC_L2_I").html( (entry.val*entry.factor).toFixed(1) + ' ' + entry.unit );
					break;

				case 11320:
					$("#AC_L3_I").html( (entry.val*entry.factor).toFixed(1) + ' ' + entry.unit );
					break;
				 

				default:
					channelToUpdate = 0;
					break;	
			}
			
			channelToUpdate++;
		}
		
		
		</script>
		<div id="PageContainer">
		
			<!--  first line: header -->
			<!--  open header -->
<div id="Header">
  
	<h1>	  		   
		BENNING-01 TLS 13.3
	</h1>	
	 <a href="http://www.portal.benning-solar.com"> <img src="images/logo.jpg" alt="logo"></a> 
</div>



<!--  close header -->
<div id="MenuAndContent">
			
		  	<!-- Navigation menu -->
			<div id="Menu">
<ul id="NavMenu" > 
 <!--  open menu -->
 <li class="NavGroupName">Betriebsdaten</li>
 <li>
  <ul>
   <a href="Dashboard.htm"><li>Übersicht</li></a>
    <a href="MeasurementsInput.htm"><li>DC Eingang</li></a> 
   
   <a href="MeasurementsOutput.htm"><li>AC Ausgang</li></a>
   
   <a href="Archive.htm"><li>Verlauf</li></a>
  </ul>
 </li>
 
 <li class="NavGroupName">Sitzung</li>
 <li>
  <ul>
   <a href="Login.htm"><li>Anmelden</li></a> 
  </ul>
 </li>
</ul>
<!--  close menu -->
</div> <!-- id="Menu" -->
	

			<div id="ContentAndBreadcrumb">

				<div id="BreadcrumbNav">		
				Betriebsdaten > AC Ausgang
				</div> <!-- id=BreadcrumbNav -->
				<div id="Content">
										
					<div class="Widget3Gauge">
						<div class="WidgetHeader">AC Ausgang</div>
						<div class="WidgetBody3Gauge" >
							<div>								
								<canvas id="gaugeL1Power" width="125" height="125"></canvas>
								<canvas id="gaugeL2Power" width="125" height="125"></canvas>
								<canvas id="gaugeL3Power" width="125" height="125"></canvas>
							</div>						
						</div> <!--	WidgetBody -->
					</div> <!-- Widget -->
					
					<table  class="contentTable">
						<thead>
							<tr><th>Bezeichnung</th><th>Wert</th></tr>
						</thead>
						<tbody>	
							<tr id="AC_TOT_ROW_P"><td>AC Leistung gesamt</td>
								<td id="AC_TOT_P"></td></tr>
								
							<tr id="AC_L1_ROW_P"><td>AC Leistung L1</td>
								<td id="AC_L1_P"></td></tr>
							<tr id="AC_L2_ROW_P"><td>AC Leistung L2</td>
								<td id="AC_L2_P"></td></tr>
							<tr id="AC_L3_ROW_P"><td>AC Leistung L3</td>
								<td id="AC_L3_P"></td></tr>	
								
							<tr id="AC_L1_ROW_U"><td>AC Spannung L1</td>
								<td id="AC_L1_U"></td></tr>
							<tr id="AC_L2_ROW_U"><td>AC Spannung L2</td>
								<td id="AC_L2_U"></td></tr>
							<tr id="AC_L3_ROW_U"><td>AC Spannung L3</td>
								<td  id="AC_L3_U"></td></tr>

         
							<tr id="AC_L1_ROW_I"><td>AC Strom L1</td>
								<td id="AC_L1_I"></td></tr>
							<tr id="AC_L2_ROW_I"><td>AC Strom L2</td>
								<td  id="AC_L2_I"></td></tr>
							<tr id="AC_L3_ROW_I"><td>AC Strom L3</td>
								<td  id="AC_L3_I"></td></tr>
				 
							
						</tbody>
					</table>
								
				</div><!-- id=Content -->
			
			</div> <!-- id="ContentAndBreadcrumb" -->
		    
			</div> <!-- id="MenuAndContent" -->
<div id="Footer" >
 Copyright (C) Benning GmbH 2015. Alle Rechte vorbehalten. 

</div> <!-- id=Footer -->
<!--[if IE]>
<script>
	$('div#Content tr:nth-child(even)').addClass('evenDts');
	$('div#Content input[type="file"]').addClass('firmware');
</script>
<![endif]-->

			
		</div> <!-- id=PageContainer -->
	</body>
</html>


Hier ein Auszug aus meiner Configuratio.yaml:

…das ist der Abschnitt der zum Teil funktioniert:

multiscrape:
######################################################
  - name: WR1 Benning
    resource: http://192.168.1.21/Dashboard.htm
    scan_interval: 60     # jedee minute
    log_response: true   # nur für Testzwecke
    sensor:
      - name: "WR1 Wechselrichter"
#       select: "sysStatusDisplay"
        select: "#column2 > div:nth-child(1) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)"
        #        value_template: '{{ value }}'
        # Inaktiv
        attributes:
          - name: "Name"
            select: "#sysNameDisplay"
            # BENNING-01 TLS 13.3
          - name: "Standort"
            #select: "#sysLocationDisplay"
            select: "#column2 > div:nth-child(1) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(2)"
            # Au (SG)
          - name: "Beschreibung"
            select: "#sysDescriptionDisplay"        
            # Quartier4u Au(SG)
          - name: "Firmware Version"
            select: "#column2 > div:nth-child(1) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(5) > td:nth-child(2)"
            # 10069454.28 
          - name: "Seriennummer"
            select: "#column2 > div:nth-child(1) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6) > td:nth-child(2)"
            # 10069454.28 
          - name: "Solar Portal Letzte Übertragung"
            # select: "#lastTransmissionTime"
            select: "#column2 > div:nth-child(1) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(7) > td:nth-child(2)"
            # ?????

hier die Version mit Standard Scrape Integration die überhaupt nur teilweise funktioniert:



scrape:
  - resource: https://www.home-assistant.io
    sensor:
      - name: "WEBSCRAPE Current version"
        select: ".current-version h1" 
      - name: "Release Date"
        select: ".release-date"

# WR1 Benning

  - resource: http://192.168.1.21/Dashboard.htm
#    authentication: basic
#    username: admin
#    password: admin
    sensor:
      - name: "WR1 AC Leistung"
        select: "#tableAcPowerTotal"
      - name: "WR1 E heute"
        select: "#e_today"
      - name: "WR1 produzierte Gesamtenergie"
        select: "#e_totalval"
      - name: "WR1 CO2 Einsparung"
        select: "#co2_savings"
      - name: "WR1 Ertrag"
        select: "#revenueVal"
      - name: "WR1 Einspeisestunden"
        select: "#feedInOperatingHours"

      - name: "WR1 Status"
        select: "sysStatusDisplay"
#        value_template: '{{ value }}'
      - name: "WR1 Name"
        select: "#sysNameDisplay"
      - name: "WR1 Standort"
        select: "html body div#PageContainer div#MenuAndContent div#ContentAndBreadcrumb div#Content div#column2.ui-sortable div.Widget div.WidgetBody table.dashboardTable tbody tr td#sysLocationDisplay"
      - name: "WR1 Beschreibung"
        select: "#sysDescriptionDisplay"
      - name: "WR1 Firmware Version"
        select: "#column2 > div:nth-child(1) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(5) > td:nth-child(2)"
      - name: "WR1 Seriennummer"
        select: "#column2 > div:nth-child(1) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6) > td:nth-child(2)"
      - name: "WR1 Solar Portal Letzte Übertragung"
        select: "#lastTransmissionTime"


…ich verzweifle und verstehe vermutlich das Konzept noch nicht … Hilfe willkommen !!!

Warum scrapen wenns ne HTTP API gibt?
Das ist dann ja fast wie emails ausdrucken mit nem Kuli kommentieren, einscannen um den Scan dann als Antwort zu verschicken :slight_smile:

https://openwb.de/forum/viewtopic.php?p=41691

Hi lieber justone - danke für Deine Hilfe. Diese Angaben habe ich auch vom Hersteller erhalten. Die API anzuwenden habe ich mich jedoch nicht getraut, da ich im gleichen Arbeitsschritt auch die Daten von meinem Gasversorger - aktueller Gaspreis ist auf der Seite unter dem Link aktueller Gaspreis meines Gasversorgers abrufbar.
Das sollte dann aus dem “lessons learned” dann der nächste Schritt sein.

Kannst Du mir eine Anleitung zur Anwendung der API senden?

Ich hab natürlich leider keinen Benning, sprich ich hatte rein Interessehalber mal google bemüht. Denn ohne eine API wäre so ein Wechselrichter ja schlicht unverkaufbar. Sprich den kaufen dann ja dei technikaffinen Leute schon allein deshalb nicht, egal zu welchem Preis.

Hab mir jetzt grad nochmal das PDF angeschaut. Eigentlich ist das alles sehr gut erklärt.
Da sind sogar Beispiele drin.

Ich überlege grade wie man das an einem Beispiel am besten erklärt.
Dinge wie RESTful Sensor, HTTP GET und JSON sind dann aber schon Sachen die man zumindest mal anlesen sollte.
Wie erklärt man jemand wie Fahrrad fahren geht … halt so wie immer … verdampt.

Vielleicht findet sich ja wer mit ner kurzen Idee anhand dessen man das Prinzip direkt erkennt.

Eigentlich ist’s wie scrapen nur viel einfacher. Scrapen nimmt man wenn es keine API gibt denn man muss sich die einzelne Info aus einer kompletten Website fischen. beim der API fragst du das Gerät gezielt nach der gewünschten Information und bekommst in der Regel eine sehr kleine Untermenge wenn nicht exakt die gewünschte Info.
Schau die mal den home assistant RESTful sensor an und dann den Punkt 3 in der API vom Benning. Das ist wirklich verständlich erkärt.