72_FRITZBOX.pm wird zu 72_FritzSmart.pm

Begonnen von JoWiemann, 02 März 2026, 16:29:49

Vorheriges Thema - Nächstes Thema

Toto1973

Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

StefanG

#286
Danke auch von mir für die Überarbeitung!

Habe von FRITZBOX auf FritzSmart umgestellt (# $Id: 72_FritzSmart.pm 31496 2026-07-18 06:45:28Z jowiemann $). Die meisten Geräte (FB7530AX, FB4040, FBWLAN1200AX, FBWLAN1200) funktionieren ohne Probleme. Bei der FB7430 wird aber regelmäßig Source-Code ins Log gepostet (FritzOS 7.31):
2026.08.02 12:51:16.970 3: [FB7430|FRITZ!Box 7430|146.07.31|call_LuaData.18056] - BASIC:Response Data:
<script>if (typeof jxl === 'undefined') {
location.href = "/start";
}
</script>

<link rel="stylesheet" type="text/css" href="/css/default/chartistplugins.css">
<link rel="stylesheet" type="text/css" href="/css/rd/inetstat.css">
<style type="text/css">
.mainContent table.newzebra {
border-collapse: collapse;
width: 100%;
margin: 1rem 0;
}
.mainContent table.newzebra td,
.mainContent table.newzebra th {
padding: 0.125rem 0.5rem;
}
.mainContent table.newzebra td {
vertical-align: top;
}
.mainContent table.newzebra tbody tr:nth-of-type(even) {
background-color: #f7f7f5;
}
.mainContent table.newzebra tbody tr:nth-of-type(odd) {
background-color: #ffffff;
}
.mainContent table.newzebra thead tr {
background-color: #d7e9f7;
}
.mainContent table.newzebra thead th {
height: 2rem;
color: #7b90a0;
}
#uiInternetMonitor table.newzebra tbody tr td {
width: auto;
}
#uiInternetMonitor table.newzebra tbody tr td.connhead {
width: 10rem;
}
#uiInternetMonitor table.newzebra tbody tr td.connstate {
width: 1.6rem;
background-position: right 0.35rem;
}
.IMonHead {
width: 10rem;
}
.IMonIcon {
width: 1.6rem;
}
.IMonDetail {
width: auto;
}
@media (max-width: 63.9375em) {
#uiInternetMonitor table.newzebra tbody tr td.connhead {
width: 7.5rem;
}
#uiInternetMonitor table.newzebra tbody tr td.connstate {
width: 1.5rem;
}
.IMonHead {
width: 7.5rem;
}
.IMonIcon {
width: 1.5rem;
}
}
@media (max-width: 37.5em) {
#uiInternetMonitor table.newzebra tbody tr td.connhead {
width: 4rem;
}
}
.ct-chart .ct-label.ct-vertical.ct-start {
word-break: normal;
line-height: 1;
}
.ct-chart .ct-label, .ct-chart .ct-extended.ct-label {
fill: black;
}
.ct-label.ct-horizontal.ct-end {
justify-content: center;
color: #3f464c;
}
span.downstream,
span.upstream {
background-position: 0 -0.25rem;
padding-left: 1rem;
padding-bottom: 0.35rem;
width: auto;
}
</style>
<script type="text/javascript" src="/js/chartistplugins.js"></script>
<script type="text/javascript">
var g_Timer;
var g_refresh_interval_object = null;
var g_refresh_time = 30000;
var g_aktPageRefreshTime = g_refresh_time;
var g_cfg = {"sample_interval":5000,"num_samples":20,"num_sgs":1,"names":["sync_ipclient"]};
var g_nqos = convertNqosValues([{"us_bps_curr_max":0,"us_default_bps_curr":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ds_bps_max":0,"_node":"sg0","mode":"IP-Client","ds_mc_bps_curr":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ds_bps_curr":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"us_bps_max":0,"dynamic":true,"us_realtime_bps_curr":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"downstream":30000000,"upstream":2000000,"name":"sync_ipclient","guest_us_bps":[0],"ds_guest_bps_curr":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"us_background_bps_curr":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ds_bps_curr_max":0,"us_important_bps_curr":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}]);
function convertNqosValues(obj) {
obj = obj || [];
var len = Math.min(obj.length, g_cfg.num_sgs);
for (var i = 0; i < len; i++) {
obj[i].us_realtime_bps_curr = bpsToIntArray(obj[i].us_realtime_bps_curr || "");
obj[i].us_important_bps_curr = bpsToIntArray(obj[i].us_important_bps_curr || "");
obj[i].us_default_bps_curr = bpsToIntArray(obj[i].us_default_bps_curr || "");
obj[i].us_background_bps_curr = bpsToIntArray(obj[i].us_background_bps_curr || "");
obj[i].ds_bps_curr = bpsToIntArray(obj[i].ds_bps_curr || "");
// Check if Guest Traffic exsit... sometimes Lua translates Empty Strings to an Array of one item of "0"
if (obj[i].ds_guest_bps_curr && Array.isArray(obj[i].ds_guest_bps_curr) && obj[i].ds_guest_bps_curr.length >1) {
obj[i].ds_guest_bps_curr = bpsToIntArray(obj[i].ds_guest_bps_curr || "");
}
// Check if Guest Traffic exsit... sometimes Lua translates Empty Strings to an Array of one item of "0"
if (obj[i].guest_us_bps && Array.isArray(obj[i].guest_us_bps) && obj[i].guest_us_bps.length > 1) {
obj[i].guest_us_bps = bpsToIntArray(obj[i].guest_us_bps || "");
}
obj[i].ds_mc_bps_curr = bpsToIntArray(obj[i].ds_mc_bps_curr || "");
if (obj[i].dynamic) {
var nMax = parseInt(obj[i].us_bps_curr_max, 10);
if (nMax) {
obj[i].upstream = 8 * nMax;
}
nMax = parseInt(obj[i].ds_bps_curr_max, 10);
if (nMax) {
obj[i].downstream = 8 * nMax;
}
obj[i].upstream = Math.max(10000, Math.floor(11 * obj[i].upstream / 10));
obj[i].downstream = Math.max(10000, Math.floor(11 * obj[i].downstream / 10));
}
}
return obj;
}
function bpsToIntArray(bps) {
for (var i = 0, len = bps.length; i < len; i++) {
bps[i] = (parseInt(bps[i],10) || 0) * 8;
}
return bps.splice(0).reverse();
}
// Add the value of the previous data serie array to the next array item within the serie.
// This process enables the data base for drawing a stracked Line / Area chart
function makeAddedValues(valArrs) {
var workOnData, result, numberOfDataSeries, numberOfDataItems, counterDataSeries, counterDataItems;
//valArrs = valArrs.slice(0).reverse();
// Remove the the first Data series, Florian do not know why, but Yakup did for an unknown purpose
// Upstream has an EdgeCase of one DataSerie only with one Empty Array, which has to be deleted
// Guess: The Upstream for Guest Traffic is sometimes an empty Array. In that Edge Case delete that Empty data from the rendering data set
if(valArrs[valArrs.length -1].length <= 1 ) {
workOnData = valArrs.slice(0, valArrs.length -1);
} else {
workOnData = valArrs.slice(0, valArrs.length);
}
// Change the order of the data series arrangement
// The first item should be on the top of the stacked area chart
workOnData = workOnData.reverse();
// Definitionsbereich Menge der dargestellten Daten im Chart
numberOfDataSeries = workOnData.length;
numberOfDataItems = workOnData[1].length;
// Create Final DataSeries Array
result = [];
var previousValue = 0;
var currentValue = 0;
for (counterDataSeries = 0; counterDataSeries < numberOfDataSeries; counterDataSeries++) {
result[counterDataSeries] = [];
for (counterDataItems = 0; counterDataItems < numberOfDataItems; counterDataItems++) {
currentValue = workOnData[counterDataSeries][counterDataItems];
// Fallback solution if no DataItem exist within the previous dataSeries
if(isNaN(currentValue) || (typeof currentValue === 'undefined')) {
currentValue = 0
}
// The first data series are transferred into the result without any operation
if(counterDataSeries === 0) {
result[counterDataSeries][counterDataItems] = currentValue;
} else {
// Add DataItem of the previous DataSerie to the current DataItem for establishing a stacked Area Chart Rendering
previousValue = result[counterDataSeries - 1][counterDataItems];
result[counterDataSeries][counterDataItems] = previousValue + currentValue;
}
}
}
// Change the order into the oppsite direction for a chart drawing from right to left
// Most current and new data items are added at the end of the chart
return result.reverse();
}
/**
* Ermöglicht eine dynamische Anpassung der y-Skalen der Grafiken basierend auf dem maximalen Wert
* @param maxValue Maximaler Wert der Skala in bit/s
*/
function ScalingHelper(maxValue) {
var texts = {
kbit: "Geschwindigkeit in kbit/s",
mbit: "Geschwindigkeit in Mbit/s",
gbit: "Geschwindigkeit in Gbit/s"
};
var scaling = 'kbit';
var scaleWith = Math.pow(10, 3);
if (maxValue >= Math.pow(10, 6) && maxValue < Math.pow(10, 9)) {
scaling = 'mbit';
scaleWith = Math.pow(10, 6);
} else if (maxValue >= Math.pow(10, 9)) {
scaling = 'gbit';
scaleWith = Math.pow(10, 9);
}
function getText() {
return texts[scaling];
}
function getLabelFormatter() {
return function (labelValue) {
if (scaling !== 'kbit') {
// Wenn der IE 10 mal nicht mehr unterstützt werden muss, kann man das hier sauberer über Number.toLocaleString lösen
return Number.isInteger(labelValue) ? labelValue : labelValue.toFixed(1).replace('.', ',');
}
// In der kbit/s Skalierung sollen nur ganze Zahlen angezeigt werden
return Math.round(labelValue);
}
}
function scaleValue(val) {
return val / scaleWith;
}
function getDataTransform() {
return scaleValue;
}
return {
getText: getText,
getLabelFormatter: getLabelFormatter,
getDataTransform: getDataTransform,
scaleValue: scaleValue
}
}
function stopTimer() {
if (g_Timer) {
window.clearTimeout(g_Timer);
g_Timer = null;
}
}
function calcTicks(maxValue)
{
var lastPercent, scaleCount, suffix;
lastPercent = 0.9;
scaleCount = 4;
// Polyfill für den IE
Math.log10 = Math.log10 || function(val) {
return Math.log(val) * Math.LOG10E;
};
suffix = Math.pow(10, Math.floor(Math.log10(maxValue)));
var step = parseInt(Math.ceil(maxValue / suffix));
var num = scaleCount - 1;
while (((step * suffix / scaleCount) * (num)) > (maxValue * lastPercent)) {
scaleCount = scaleCount + 1;
if ((scaleCount + num) > 10) {
break;
}
}
step = step * suffix / scaleCount;
var ticks = [];
for (var i = 0; i < (maxValue * lastPercent); i = i + step) {
ticks.push(i);
}
ticks.push(maxValue);
return ticks;
}
function getOptions(maxValue, scHelper)
{
var ticks = calcTicks(maxValue);
var extendedScaleOptions =
{
axisX: {
text: "Zeit in s",
textAlign: "right",
labelPercentOffset: -50
},
axisY: {
text: scHelper.getText()
},
dotted: true
};
var options = {
low: 0,
axisY: {
type: Chartist.FixedScaleAxis,
ticks: ticks,
low: 0,
high: maxValue,
offset: 55,
labelOffset: {
y: 6
},
showGrid: false,
scaleMinSpace: 10,
labelInterpolationFnc: scHelper.getLabelFormatter()
/*labelInterpolationFnc: function(val, axis) {
if (val === 0) {
return val;
}
else if (maxValue < ticks.length * 1000) {
return (val / 1000).toFixed(3).replace(".",",");
} else {
return dottedStr(val/1000);
}
}*/
},
axisX: {
showGrid: false,
labelInterpolationFnc: function(val, axis) {
if (axis % 4 == 0 || axis == 19) {
return val;
}
}
},
plugins: [ ctplugins.ctRect({showBg: true}),
ctplugins.ctScaleExtended(extendedScaleOptions)
],
chartPadding:20,
showPoint: false,
showLine: false,
showArea: true,
lineSmooth: false,
fullWidth: true
};
if (maxValue) {
options.high = maxValue;
}
return options;
}
function getLabels(data) {
var labels, i, n;
labels = new Array(data.length);
n = data.length;
for (i = 0; i < n; i = i +1) {
labels[i] = 5 * i - 100;
};
return labels;
}
var g_charts = [];
function drawChart(idx) {
var idDown = "uiQosDown" + idx;
var idUp = "uiQosUp" + idx;
var seriesDown;
var seriesUp;
if (g_charts[idDown]) {
g_charts[idDown].detach();
}
if (g_charts[idUp]) {
g_charts[idUp].detach();
}
var ds_mc_bps_curr = g_nqos[idx].ds_mc_bps_curr.slice(0);
var ds_bps_curr = g_nqos[idx].ds_bps_curr.slice(0);
if (g_nqos[idx].ds_guest_bps_curr && Array.isArray(g_nqos[idx].ds_guest_bps_curr) && g_nqos[idx].ds_guest_bps_curr.length > 1) {
seriesDown = [ds_bps_curr, makeAddedValues([g_nqos[idx].ds_guest_bps_curr.slice(0), ds_mc_bps_curr])[0], ds_mc_bps_curr];
} else {
seriesDown = [ds_bps_curr, [0], ds_mc_bps_curr];
}
if (g_nqos[idx].guest_us_bps && Array.isArray(g_nqos[idx].guest_us_bps) && g_nqos[idx].guest_us_bps.length > 1) {
seriesUp = makeAddedValues([g_nqos[idx].us_realtime_bps_curr, g_nqos[idx].us_important_bps_curr, g_nqos[idx].us_default_bps_curr, g_nqos[idx].us_background_bps_curr, g_nqos[idx].guest_us_bps]);
} else {
seriesUp = makeAddedValues([g_nqos[idx].us_realtime_bps_curr, g_nqos[idx].us_important_bps_curr, g_nqos[idx].us_default_bps_curr, g_nqos[idx].us_background_bps_curr]);
}
var scHelperDown = ScalingHelper(g_nqos[idx].downstream);
seriesDown = seriesDown.map(function (series) { return series.map(scHelperDown.getDataTransform()); });
g_charts[idDown] = new Chartist.Line(jxl.get(idDown), {labels:getLabels(ds_bps_curr), series: seriesDown},
getOptions(scHelperDown.scaleValue(g_nqos[idx].downstream), scHelperDown));
var scHelperUp = ScalingHelper(g_nqos[idx].upstream);
seriesUp = seriesUp.map(function (series) { return series.map(scHelperUp.getDataTransform()); });
g_charts[idUp] = new Chartist.Line(jxl.get(idUp), {series: seriesUp, labels:getLabels(g_nqos[idx].us_important_bps_curr)}, getOptions(scHelperUp.scaleValue(g_nqos[idx].upstream), scHelperUp));
}
function nqosConflict(newNqos) {
if (g_cfg.num_sgs !== newNqos.length) {
return true;
}
var i = g_cfg.num_sgs;
while (i > 0) {
i--;
if (g_cfg.names[i] !== newNqos[i].name) {
return true;
}
}
return false;
}
function updateNqosValues() {
var my_url = "/internet/inetstat_monitor.lua?sid=69a80931748b22dd&myXhr=1&action=get_graphic";
var jsonParse = makeJSONParser();
stopTimer();
sendUpdateRequest();
function sendUpdateRequest() {
ajaxGet(my_url, cbUpdateValues);
}
function cbUpdateValues(xhr) {
var txt, seriesDown, seriesUp;
txt = xhr.responseText || "null";
if (xhr.status != 200) {
txt = "null";
}
var newNqos = jsonParse(txt);
if (!newNqos) {
return;
}
if (nqosConflict(newNqos)) {
uiDoRefresh();
return;
}
newNqos = convertNqosValues(newNqos);
for (var i = 0; i < g_cfg.num_sgs; i++) {
if (newNqos[i].dynamic || g_nqos[i].upstream != newNqos[i].upstream || g_nqos[i].downstream != newNqos[i].downstream) {
g_nqos[i] = newNqos[i];
drawChart(i);
} else {
var ds_mc_bps_curr = newNqos[i].ds_mc_bps_curr.slice(0);
var ds_bps_curr = newNqos[i].ds_bps_curr.slice(0);
if (newNqos[i].ds_guest_bps_curr) {
seriesDown = [ds_bps_curr, makeAddedValues([newNqos[i].ds_guest_bps_curr.slice(0), ds_mc_bps_curr])[0], ds_mc_bps_curr];
} else {
seriesDown = [ds_bps_curr, [0], ds_mc_bps_curr];
}
if (g_nqos[i].guest_us_bps) {
seriesUp = makeAddedValues([newNqos[i].us_realtime_bps_curr,newNqos[i].us_important_bps_curr,newNqos[i].us_default_bps_curr,newNqos[i].us_background_bps_curr,newNqos[i].guest_us_bps]);
} else {
seriesUp = makeAddedValues([newNqos[i].us_realtime_bps_curr,newNqos[i].us_important_bps_curr,newNqos[i].us_default_bps_curr,newNqos[i].us_background_bps_curr]);
}
var scHelperDown = ScalingHelper(g_nqos[i].downstream);
seriesDown = seriesDown.map(function (series) { return series.map(scHelperDown.getDataTransform()); });
var scHelperUp = ScalingHelper(g_nqos[i].upstream);
seriesUp = seriesUp.map(function (series) { return series.map(scHelperUp.getDataTransform()); });
g_charts["uiQosDown" + i].update({labels:getLabels(ds_bps_curr), series: seriesDown});
g_charts["uiQosUp" + i].update({labels:getLabels(newNqos[i].us_default_bps_curr), series: seriesUp});
}
g_nqos[i] = newNqos[i];
}
g_Timer = jxl.setTimeout(sendUpdateRequest, g_cfg.sample_interval);
}
}
function numToStr3(num) {
var prefix = "";
if (num < 100) {
prefix += "0";
}
if (num < 10) {
prefix += "0";
}
return prefix + num;
}
function dottedStr(num, round) {
var result = [];
var z = parseInt(num,10);
while (z > 999) {
result.push(numToStr3(z % 1000));
z = Math.floor(z/1000);
}
result.push(z);
return result.reverse().join(".");
}
function change_time_interval_ajax(refresh_time)
{
g_aktPageRefreshTime = refresh_time;
resetRefreshPageContentTimer();
}
function resetRefreshPageContentTimer() {
if(g_refresh_interval_object) window.clearTimeout(g_refresh_interval_object);
g_refresh_interval_object = jxl.setTimeout(RefreshPageContent, g_aktPageRefreshTime);
}
function RefreshPageContent(part)
{
var url = encodeURI( "/internet/inetstat_monitor.lua" );
url = addUrlParam( url, "sid", "69a80931748b22dd" );
url = addUrlParam( url, "no_sidrenew", 1 );
url = addUrlParam( url, "myXhr", 1 );
url = addUrlParam( url, "action", "get_table" );
sendUpdateRequest();
function sendUpdateRequest() {
ajaxGet(url, cbUpdateTable);
}
function cbUpdateTable(xhr) {
var txt = xhr.responseText || "null";
if (xhr.status != 200) {
resetRefreshPageContentTimer();
return;
}
jxl.setHtml("uiInternetMonitor",txt);
zebra();
var obj=document.getElementById("uiConnectState");
if (obj && obj.value=="5") {
jxl.enable("uiReconnectBtn");
}
resetRefreshPageContentTimer();
}
}
function uiDoRefresh() {
if (g_refresh_interval_object) {
window.clearTimeout(g_refresh_interval_object);
}
if (g_Timer) {
window.clearTimeout(g_Timer);
}
//--location.href=""
jxl.goTo("/internet/inetstat_monitor.lua");
}
function connect_again()
{
var url = encodeURI( "/internet/inetstat_monitor.lua" );
url = addUrlParam( url, "sid", "69a80931748b22dd" );
url = addUrlParam( url, "no_sidrenew", 1 );
url = addUrlParam( url, "myXhr", 1 );
url = addUrlParam( url, "action", "connect" );
sendUpdateRequest();
function sendUpdateRequest()
{
ajaxGet( url, cbConnected );
}
function cbConnected()
{
jxl.enable("uiReconnectBtn");
jxl.hide("uiWarnDisconnecting");
RefreshPageContent();
change_time_interval_ajax(g_refresh_time);
}
}
function DoDisconnectInternet()
{
var my_url = "/internet/inetstat_monitor.lua?sid=69a80931748b22dd&myXhr=1&action=disconnect";
sendUpdateRequest();
function sendUpdateRequest()
{
change_time_interval_ajax(2000);
jxl.disable("uiReconnectBtn");
jxl.show("uiWarnDisconnecting");
ajaxGet(my_url, cbDisconnected);
}
function cbDisconnected()
{
jxl.setTimeout(connect_again, 6000);
jxl.setTimeout(function(){change_time_interval_ajax(g_refresh_time);}, 60000);
}
return false;
}
function transitionListener(event) {
if (event.target.id == "contentBox") {
for (var i = 0; i < g_cfg.num_sgs; i++) {
g_charts["uiQosDown" + i].update();
g_charts["uiQosUp" + i].update();
}
}
}
function init()
{
for (var i = 0; i < g_nqos.length || 0; i++) {
drawChart(i);
}
updateNqosValues();
change_time_interval_ajax(g_refresh_time);
RefreshPageContent();
jxl.setTimeout(uiDoRefresh, 3600000);
var contentBox = jxl.get("contentBox");
if (typeof contentBox == "object") {
jxl.addEventHandler(contentBox, "transitionend", transitionListener);
}
}
ready.onReady(init);
</script>


<form method="POST" action="/internet/inetstat_monitor.lua?sid=69a80931748b22dd" name="main_form">
<div id="uiMonitor" style="">
<p>Der Online-Monitor stellt Informationen zu Ihrer Internetverbindung und zu aktivierten Zusatzfunktionen zur Verfügung.</p>
<div id="uiInternetMonitor">
<table id="tInternetMonitor" class="zebra">
<colgroup>
<col class="IMonHead">
<col class="IMonIcon">
<col class="IMonDetail">
</colgroup>
<tr id="uiTrDsl"><td ><a href="/internet/internet_settings.lua?sid=69a80931748b22dd">DSL</a></td><td><div class="led_col led_gray"> </div></td><td class="WarnMsg">deaktiviert</td></tr><tr id='uiTrInternet'><td><div id='ipv4_title'>Internet, IPv4</div></td><td id='ipv4_led'><div class='led_col led_green'> </div></td><td><div id='ipv4_info'>Eine bestehende Internetverbindung im Netzwerk wird mitbenutzt. IPv4-Adresse: 192.168.5.3</div></td></tr><tr>
<td class="tdName">Genutzte DNS-Server</td>
<td><div class="led_col "> </div></td>
<td class="tdinfo">192.168.5.1 (aktuell genutzt für Standardanfragen)<br></td>
</tr>
<tr style="display:none">
<td colspan="3"><input type="hidden" id="uiConnectState" value="5">
</td>
</tr>
</table>

</div> <!-- uiInternetMontior -->
<!-- früher IC_Btn -->
<div id="uiReconnection_Btn" style="display:none">
<hr>
<div>
Durch einen Klick auf die Schaltfläche "Neu verbinden" wird die Internetverbindung kurzzeitig getrennt und anschließend automatisch wiederhergestellt. Die FRITZ!Box erhält dabei von Ihrem Internetanbieter in der Regel eine neue IP-Adresse.
</div>

</div><!-- uiReconnection_Btn -->
<div id="uiDownUpDiag" style="display:none">
<hr>
<h4>Aktuelle Auslastung der Internetverbindung</h4>
<div>
Die folgenden Darstellungen zeigen die aktuelle Auslastung Ihrer Internetverbindung. Downstream (Empfangsrichtung) zeigt den Datenfluss aus dem Internet in Ihr Heimnetz. Upstream (Senderichtung) zeigt den Datenfluss von Ihrem Heimnetz zum Internet.
</div>
<div class="qos_back"><h4 class="qos_title">Downstream</h4><div id="uiQosDown0" class="ct-chart ct-golden-section qos_ds"></div></div><div class="qos_back"><h4 class="qos_title">Upstream</h4><div id="uiQosUp0" class="ct-chart ct-golden-section qos_us"></div></div><div class="qos_legend"><div class="qos_back_legend"><h4 class="qos_title">Downstream</h4><div><table class="prio_legend"><tr><td class="prio_color"><div class="ds_color"> </div></td><td>Internet</td></tr><tr><td class="prio_color"><div class="guest_color"> </div></td><td>Gastzugang</td></tr><tr><td class="prio_color"><div class="mc_color"> </div></td><td>IPTV</td></tr></table></div></div><div class="qos_back_legend"><h4 class="qos_title">Upstream</h4><div><table class="prio_legend"><tr><td class="prio_color"><div class="prio_0"> </div></td><td>Echtzeitanwendungen</td></tr><tr><td class="prio_color"><div class="prio_1"> </div></td><td>Priorisierte Anwendungen</td></tr><tr><td class="prio_color"><div class="prio_2"> </div></td><td>Normale Anwendungen</td></tr><tr><td class="prio_color"><div class="prio_3"> </div></td><td>Hintergrundanwendungen</td></tr></table></div></div></div>
</div><!-- uiDownUpDiag -->
</div><!-- uiMontior -->
<div id="btn_form_foot">
<input type="hidden" name="sid" value="69a80931748b22dd">
<button type="submit" name="btn_refresh">Aktualisieren</button>
</div>
</form>
<input id="oldPageXhrSid" type="hidden" value="69a80931748b22dd"><input id="fdhidedata" type="hidden" value="{"shareUsb":true,"faxSet":true,"dslSpec":true,"trafapp":true,"portoverview":true,"kidLis":true,"trafapp_edit":true,"dslStat":true,"trafprot_edit":true,"liveTv":true,"shareVpn":true,"provServ":true,"ssoSet":true,"kidPro":true,"dslSet":true,"mobile":true,"dslFeed":true,"dyndns":true,"dslOv":true,"dslGraph":true,"trafprio":true,"netCnt":true}"><input id="oldpageactive" type="hidden" value="/internet/inetstat_monitor.lua"><input id="oldPageTitle" type="hidden" value=""><input id="gHelpPage" type="hidden" value="hilfe_online_monitor.html"><div id="domReady" style="display:none"></div>

Bitte um Info, was ich noch testen und Euch evtl. bereitstellen kann.

Danke nochmals!

JoWiemann

Hallo Stefan,

das ist HTML Code, der vom Modul nicht erkannt wird.

Bitte einmal ein List vom Device posten.

Grüße Jörg
Jörg Wiemann

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung