Textparser + www reader & Javascript (BYD Battery Box LV)

Hallo zusammen,

ich als nicht Coder benötige mal einen Tip von euch.

Ich habe seit kurzen eine BYD Battery Box LV (Photovoltaikspeicher), wo man per html an die Daten kommt, welche ich auch mehr oder weniger erfolgreich in symcon übertragen bekomme.

Mein Problem: Die html Seite hat immer den selben Link, ändert aber den angezeigten Inhalt über ein Javasscript, je nach dem welche der 3 Seiten ich im Browser angezeigt bekomme. Man kann sich unten durch 3 Seiten blättern. Klicke ich Seite 1 oder 2 an, funktioniert mein Textparser nicht, da meine Ergebnisse in Seite 3 stehen. Befinde ich mich mit dem Browser auf Seite 3, kann der Textparser erfolgreich die Werte auslesen. Soweit so gut. Nur über Nacht, nach ein paar Stunden kann der keine Werte mehr auslesen. Ich weiß nicht wie ich dem Texparser dauerhaft sagen kann er soll sie aus Seite 3 des Javascriptes holen, ohne das ich alle paar Stunden per Rechner die Seite öffne.
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

http://192.168.2.248/dev_set.html

Die Ergebnisse stehen immer in Zeile 34.

Zeile 32 änder sich mit den entsprechenden Seiten von 1-3

var pg = "3";

Page 1:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <style type="text/css">
.back_div_hide
{
	margin:auto;
	padding:40px 20px 40px 20px;
	
}
#cfg_txt
{
    width:800px;
    height:600px;
}
.btn
{
	margin-top:5px;
	width:60px;
}
table
{
	width:600px;
}
table tr td
{
    padding:5px;	
}
    </style>
<script type="text/javascript">
var pg = "1";
var mpg = "5";
var cfg_s = "BCU1,BCUStatus=Ok,BICNum=4,BIC1Status=Ok,BIC2Status=Ok,BIC3Status=Ok,BIC4Status=Ok,BIC5Status=-,VerY-M-D=18/9/7,Ver=V1-2,BCU2,BCUStatus=-,BICNum=0,BIC1Status=-,BIC2Status=-,BIC3Status=-,BIC4Status=-,BIC5Status=-,VerY-M-D=0/0/0,Ver=V0-0,BCU3,BCUStatus=-,BICNum=0,BIC1Status=-,BIC2Status=-,BIC3Status=-,BIC4Status=-,BIC5Status=-,VerY-M-D=0/0/0,Ver=V0-0,";

function getCon(id)
{
    return document.getElementById(id);
}
function loadpage()
{
    var s = cfg_s.split(',');
    var re = "";
    for(var i=0;i<s.length;i++)
    {
        if(s[i]!="")
        {
            var a = s[i].split('=');
            if(a.length==2)
            {
                var b = a[1].split(':');
                if(b.length==1)
                {
                    b.push("");
                }
                re+="<tr><td><font id='c_t_"+i+"'>"+a[0]+"</font></td><td><input type='text' id='c_v_"+i+"' value='"+b[0]+"'/> <font id='c_d_"+i+"'>"+b[1]+"</font></td></tr>";
            }
            else
            {
                re+="<tr><td colspan='2'>"+a[0]+"</td></tr>";
            }
        }
    }
    getCon("cfg_div").innerHTML = "<table border='1' cellspacing='0'>"+re+"</table>";
}
function save()
{
    var f=document.form_cfg_set;
    var re = "";
    for(var i=0;i<500;i++)
    {
        var c = getCon("c_t_"+i);
        if(c!=null)
        {
            if(re!="")
            {
                re += ",";
            }
            re += c.innerHTML+"="+getCon("c_v_"+i).value;
        }
    }
    f.pg.value = pg;
    f.cfg_s.value = re;
    f.submit();
}
function jump(v)
{
    var pn = parseInt(pg);
    var mpn = parseInt(mpg);
    if(mpn<1)
    {
        mpn=1;
    }
    if(v=="s")
    {
        pn=1;
    }
    if(v=="u")
    {
        pn-=1;
        if(pn<1)
        {
            pn=1;
        }
    }
    if(v=="d")
    {
        pn+=1;
        if(pn>mpn)
        {
            pn = mpn;
        }
    }
    if(v=="e")
    {
        pn = mpn;
    }
    var f=document.form_cfg_set;
    f.pg.value = pn;
    f.submit();
}
</script>
</head>
<body style="background-color:#F5F5F5" onload="loadpage()">
	<div class="back_div_hide">
	    <form name= "form_cfg_set" method="post" action="dev_set.html">
	        <input type="hidden" name="cfg_s"/>
	        <input type="hidden" name="pg"/>
            <div id="cfg_div"></div>
            <input onclick="save()" type="button" class="btn" value="Save"/>
            <input type="button" class="btn"  onclick="jump('s')" value=" << "/>
            <input type="button" class="btn"  onclick="jump('u')" value=" < "/>
            <input type="button" class="btn"  onclick="jump('d')" value=" > "/>
            <input type="button" class="btn"  onclick="jump('e')" value=" >> "/>
	    </form>
	</div>
</body>
</html>

Page 2:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <style type="text/css">
.back_div_hide
{
	margin:auto;
	padding:40px 20px 40px 20px;
	
}
#cfg_txt
{
    width:800px;
    height:600px;
}
.btn
{
	margin-top:5px;
	width:60px;
}
table
{
	width:600px;
}
table tr td
{
    padding:5px;	
}
    </style>
<script type="text/javascript">
var pg = "2";
var mpg = "5";
var cfg_s = "RunInfo,InveterBrand=1,ClusterNum=1,InverterCom=1,ContactorSta=0,ClusterCom=0,SOC=18,SOH=100,Temp=8:1C,Volt=515:0.1V,Current=-7:0.1A,DisVoltLimit=430:0.1V,DisCurrLimit=1700:0.1A,ChgCurrLimit=680:0.1A,ChgVoltLimit=565:0.1V,InverterAlarm=0x2aaaaaa,InveterWarning=0x2aaaaaa,VER=A907V01.02";

function getCon(id)
{
    return document.getElementById(id);
}
function loadpage()
{
    var s = cfg_s.split(',');
    var re = "";
    for(var i=0;i<s.length;i++)
    {
        if(s[i]!="")
        {
            var a = s[i].split('=');
            if(a.length==2)
            {
                var b = a[1].split(':');
                if(b.length==1)
                {
                    b.push("");
                }
                re+="<tr><td><font id='c_t_"+i+"'>"+a[0]+"</font></td><td><input type='text' id='c_v_"+i+"' value='"+b[0]+"'/> <font id='c_d_"+i+"'>"+b[1]+"</font></td></tr>";
            }
            else
            {
                re+="<tr><td colspan='2'>"+a[0]+"</td></tr>";
            }
        }
    }
    getCon("cfg_div").innerHTML = "<table border='1' cellspacing='0'>"+re+"</table>";
}
function save()
{
    var f=document.form_cfg_set;
    var re = "";
    for(var i=0;i<500;i++)
    {
        var c = getCon("c_t_"+i);
        if(c!=null)
        {
            if(re!="")
            {
                re += ",";
            }
            re += c.innerHTML+"="+getCon("c_v_"+i).value;
        }
    }
    f.pg.value = pg;
    f.cfg_s.value = re;
    f.submit();
}
function jump(v)
{
    var pn = parseInt(pg);
    var mpn = parseInt(mpg);
    if(mpn<1)
    {
        mpn=1;
    }
    if(v=="s")
    {
        pn=1;
    }
    if(v=="u")
    {
        pn-=1;
        if(pn<1)
        {
            pn=1;
        }
    }
    if(v=="d")
    {
        pn+=1;
        if(pn>mpn)
        {
            pn = mpn;
        }
    }
    if(v=="e")
    {
        pn = mpn;
    }
    var f=document.form_cfg_set;
    f.pg.value = pn;
    f.submit();
}
</script>
</head>
<body style="background-color:#F5F5F5" onload="loadpage()">
	<div class="back_div_hide">
	    <form name= "form_cfg_set" method="post" action="dev_set.html">
	        <input type="hidden" name="cfg_s"/>
	        <input type="hidden" name="pg"/>
            <div id="cfg_div"></div>
            <input onclick="save()" type="button" class="btn" value="Save"/>
            <input type="button" class="btn"  onclick="jump('s')" value=" << "/>
            <input type="button" class="btn"  onclick="jump('u')" value=" < "/>
            <input type="button" class="btn"  onclick="jump('d')" value=" > "/>
            <input type="button" class="btn"  onclick="jump('e')" value=" >> "/>
	    </form>
	</div>
</body>
</html>

Page 3:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <style type="text/css">
.back_div_hide
{
	margin:auto;
	padding:40px 20px 40px 20px;
	
}
#cfg_txt
{
    width:800px;
    height:600px;
}
.btn
{
	margin-top:5px;
	width:60px;
}
table
{
	width:600px;
}
table tr td
{
    padding:5px;	
}
    </style>
<script type="text/javascript">
var pg = "3";
var mpg = "5";
var cfg_s = "BCU1,BicNum=4,WorkStatus=2,PackVolt=515:0.1V,CondiTemp=10:1C,SOC=18,SOCAH=51:1AH,SOH=100,Current=-5:0.1A,InvtVolt=515:0.1V,WarnStatus=0x00000000,AlarmStatus=0x00000000,FaultStatus=0x00000000,DefectStatus=0,OtherInfo=0x0,BIC1,BatVolt=51619:0.001V,CellVoltMax=3238:0.001V,CellVoltMin=3209:0.001V,CellTempMax=8:1C,BalStatus=0,BIC2,BatVolt=51635:0.001V,CellVoltMax=3237:0.001V,CellVoltMin=3215:0.001V,CellTempMax=7:1C,BalStatus=0,BIC3,BatVolt=51630:0.001V,CellVoltMax=3239:0.001V,CellVoltMin=3220:0.001V,CellTempMax=7:1C,BalStatus=0,BIC4,BatVolt=51619:0.001V,CellVoltMax=3234:0.001V,CellVoltMin=3219:0.001V,CellTempMax=7:1C,BalStatus=0,BIC5,BatVolt=0:0.001V,CellVoltMax=0:0.001V,CellVoltMin=0:0.001V,CellTempMax=0:1C,BalStatus=0,";

function getCon(id)
{
    return document.getElementById(id);
}
function loadpage()
{
    var s = cfg_s.split(',');
    var re = "";
    for(var i=0;i<s.length;i++)
    {
        if(s[i]!="")
        {
            var a = s[i].split('=');
            if(a.length==2)
            {
                var b = a[1].split(':');
                if(b.length==1)
                {
                    b.push("");
                }
                re+="<tr><td><font id='c_t_"+i+"'>"+a[0]+"</font></td><td><input type='text' id='c_v_"+i+"' value='"+b[0]+"'/> <font id='c_d_"+i+"'>"+b[1]+"</font></td></tr>";
            }
            else
            {
                re+="<tr><td colspan='2'>"+a[0]+"</td></tr>";
            }
        }
    }
    getCon("cfg_div").innerHTML = "<table border='1' cellspacing='0'>"+re+"</table>";
}
function save()
{
    var f=document.form_cfg_set;
    var re = "";
    for(var i=0;i<500;i++)
    {
        var c = getCon("c_t_"+i);
        if(c!=null)
        {
            if(re!="")
            {
                re += ",";
            }
            re += c.innerHTML+"="+getCon("c_v_"+i).value;
        }
    }
    f.pg.value = pg;
    f.cfg_s.value = re;
    f.submit();
}
function jump(v)
{
    var pn = parseInt(pg);
    var mpn = parseInt(mpg);
    if(mpn<1)
    {
        mpn=1;
    }
    if(v=="s")
    {
        pn=1;
    }
    if(v=="u")
    {
        pn-=1;
        if(pn<1)
        {
            pn=1;
        }
    }
    if(v=="d")
    {
        pn+=1;
        if(pn>mpn)
        {
            pn = mpn;
        }
    }
    if(v=="e")
    {
        pn = mpn;
    }
    var f=document.form_cfg_set;
    f.pg.value = pn;
    f.submit();
}
</script>
</head>
<body style="background-color:#F5F5F5" onload="loadpage()">
	<div class="back_div_hide">
	    <form name= "form_cfg_set" method="post" action="dev_set.html">
	        <input type="hidden" name="cfg_s"/>
	        <input type="hidden" name="pg"/>
            <div id="cfg_div"></div>
            <input onclick="save()" type="button" class="btn" value="Save"/>
            <input type="button" class="btn"  onclick="jump('s')" value=" << "/>
            <input type="button" class="btn"  onclick="jump('u')" value=" < "/>
            <input type="button" class="btn"  onclick="jump('d')" value=" > "/>
            <input type="button" class="btn"  onclick="jump('e')" value=" >> "/>
	    </form>
	</div>
</body>
</html>

Na, kennt jemand mein Dilemma und hat eine einfache Idee für mich ? :smiley:

Danke
Gruß
Zeppi

Mal mal im Chrome die Dev Tools auf und schau mal, was der Browser so sendet, wenn du die Seiten wechselst. Dann würde ich ein kleines Skript schreiben, welches auf Seite 3 wechselt (schau dir mal file_get_contents an) und danach den WWWReader aufruft. (WWW_UpdatePage). Timer im WWWReader muss dann natürlich aus :slight_smile:

paresy

Danke für den Tip paresy, hab ich gemacht… (wie gesagt, habe von php, html etc nur sehr sehr begrenzt Ahnung ^^)
Was ich feststellen konnte ist, dass er beim drücken des Pfeils (zum Seite wechseln) den entsprechenden Wert für die Seite (z.B. Seite 3) an eine Codezeile anhängt.

z.B. aus

<input type="hidden" name="pg">

wird beim drücken des Buttons zum Seitewechseln

<input type="hidden" name="pg" value"3">

Und ab hier verstehe ich nur Banhof… :confused: file_get_contents :confused:

Nen einfaches Script was die Seite 3 aufruft… hmm jaaa wenn ich wüsste wie. Wieso hab ich das nicht zu meinem Beruf gemacht. Dann wäre das hier alles etwas einfach. Ich schau mal ob ich den alten Kollegen dazu befrage…