FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: WhyTea am 26 Oktober 2018, 09:16:38

Titel: [gelöst] Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 09:16:38
Moin
Ich versuche seit einigen Tagen per HTTPMOD die Statusseite meiner Solaranlage auszulesen.
Leider ohne Erfolg. :-(

Die Seite ist per Browser erreichbar unter IP 192.168.6.101 aufrufbar. Siehe Screenshot.

Ich habe ein Device Solaranlage angelegt das alle 60 Sekunden die Daten abfragen soll. Siehe List
List des Device
Internals:
   BUSY       0
   CFGFN     
   CHANGED   
   DEF        http://192.168.6.101/home.html 60
   Interval   60
   LASTSEND   1540537119.26324
   MainURL    http://192.168.6.101/home.html
   ModuleVersion 3.5.1 - 5.7.2018
   NAME       Solaranlage
   NR         54681
   STATE      ???
   TRIGGERTIME 1540537179.26238
   TRIGGERTIME_FMT 2018-10-26 08:59:39
   TYPE       HTTPMOD
   addr       http://192.168.6.101:80
   auth       0
   buf       
   code       505
   compress   1
   conn       
   data       
   displayurl http://192.168.6.101/home.html
   header     1
   host       192.168.6.101
   httpheader HTTP/1.1 505 HTTP Version Not Supported
Transfer-Encoding: chunked
Content-Type: text/plain
   httpversion 1.0
   hu_blocking 0
   hu_filecount 43
   hu_port    80
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /home.html
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.6.101/home.html
   value      0
   Helper:
     DBLOG:
       state:
         mylogdb:
           TIME       1540536884.25137
           VALUE      reread
   QUEUE:
   READINGS:
   REQUEST:
     data       
     header     1
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.6.101/home.html
     value      0
   sslargs:
Attributes:
   enableControlSet 1


Zunächst kommt die Rückmeldung: "HTTP/1.1 505 HTTP Version Not Supported".
Nach etwas lesen und überlegen habe ich das Attribut httpVersion 1.1 gesetzt. Und siehe da ich bekomme eine Antwort.

Gruß
Daniel

httpheader


HTTP/1.1 200 OK
Server: MXCHIP
Connection: close
Cache-Control: max-age=36000
Content-Encoding: gzip
Expires: Wed, 31 Dec 2070 23:00:00 GMT
Last-Modified: Fri, 17 Feb 2017 06:10:54 GMT
Content-Type: text/html
Content-Length: 2811


Aber was nun. Ich hänge fest und weis nicht was ich als nächstes tun muss. :-(

Im Logfile finde ich noch diese Meldungen:
2018.10.26 09:16:39 3: Solaranlage: Read response to update didn't match any Reading

Der Screenshot der Seite ist ja schon dran und hier ist auch nochmal der Quelltext.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Home</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width"/>
<!meta name="MobileOptimized" content="320">

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

</head>

<body onload="loop()">
<div id="menu">
<div id="nav">
<ul>
<li><a id="hom" href="home.html" style="background-color:#555"><span data-locale="nav_home">Home</span></a></li>
<li><a id="net" href="ethernet.html"><span data-locale="nav_lan">Ethernet</span></a></li>
<li><a id="adv" href="advanced.html"><span data-locale="nav_advanced">Advanced</span></a></li>

<div id="wifi_nav" style="display:show;">
                <li><a id="wir" href="wireless.html"><span data-locale="nav_wireless">Wireless</span></a></li>
</div>

<li class="pull-right" id="cnpic"><a href="#" onclick="choose_cn()"></a></li>
<li class="pull-right" id="depic"><a href="#" onclick="choose_de()"></a></li>
<li class="pull-right" id="enpic"><a href="#" onclick="choose_en()"></a></li>
</ul>
</div>
</div>

<div id="container">
<div class="corner5px mb15 pa14item">
<div class="title"><h2><span data-locale="device_information">Device Information</span></h2></div>
<div class="condiv">
<table rules="rows" width=520>
<tr id="sn_div" style="display:none">
<td width= 340 id="sn_dis"><span data-locale="serial_number">Serial Number</span>:</td>
<td width= 180 id="sn"></td>
</tr>
<tr id="id_div" style="display:none">
<td width=340 id="id_dis"><span data-locale="registry_id">Registry ID</span>:</td>
<td width=180 id="id"></td>
</tr>
<tr>
<td><span data-locale="registry_key">Registry Key</span>:</td>
<td id="key"></td>
</tr>
<tr>
<td><span data-locale="hard_version">Hardware Version</span>:</td>
<td id="hv"></td>
</tr>
<tr>
<td><span data-locale="software_version">Software Version</span>:</td>
<td id="sv"></td>
</tr>
<tr>
<td><span data-locale="time">Time</span>:</td>
<td id="time"></td>
</tr>
</table>
</div>
</div>

<div class="corner5px mb15 pa14item">
<div class="title"><h2><span data-locale="comm_w_sc">Communication with Zevercloud</span></h2></div>
<div class="condiv">
<table rules="rows">
<tr>
<td width = 450><span data-locale="status">Status</span>:</td>
<td><div id="cld" style="display:none;" class="ok"></div></td>
<td id="cld_error" style="display:none;"><a id="errorpic" OnClick="show_cld_info();" style="cursor:pointer"></a></td>
</tr>
</table>

<div class="tipdvi corner5px mb15 pa14item" id="cninfo" style="display:none;">
<div class="condiv">
<span id="errtip11" style="display:none;" data-locale="cld_unk">Connect fail,unknown reason</span>
<span id="errtip12" style="display:none;" data-locale="cld_cnn_rt">Not connected to the router</span>
<span id="errtip13" style="display:none;" data-locale="cld_eth_ist">Not inserted ethernet cable</span>
<span id="errtip14" style="display:none;" data-locale="cld_resp">Zevercloud no response</span>
<span id="errtip15" style="display:none;" data-locale="cld_err_check">Failed with Zevercloud authentication</span>
<span id="errtip16" style="display:none;" data-locale="cld_err_int">Can't connect to Internet</span>
<span id="errtip17" style="display:none;" data-locale="cld_err_dns">DNS server exception</span>
<span id="errtip18" style="display:none;" data-locale="cld_err_dev">Device information error</span>
<span id="errtip19" style="display:none;" data-locale="cld_err_bind">Not bind a plant</span>
</br>
</br>
<button class="btn" type="button" style="margin-left:300px;" OnClick="hide_cld_info();"><span data-locale="btn_ok">Ok</span></button>
</div>
</div>

</div>
</div>

<div class="corner5px mb15 pa14item">
<div class="title"><h2><span data-locale="comm_w_in">Communication with Inverter</span></h2></div>
<div class="condiv" id="inv_tab">


<table id='inv_tb' rules="rows" >
<tr><td width = 150><span data-locale="sn">SN.</span></td>
<td width =120><span data-locale="pacw">Pac(W)</span></td>
<td width =150><span data-locale="etoday">E_Today(KWh)</span></td>
<td width =130><span data-locale="status">Status</span></td>
<td width =60><span data-locale="set">Set</span></td></tr>
<tr style="display:none">
<td></td><td></td><td></td><td></td>
<td><div class="btn-group"> <a class="dropdown-toggle" data-toggle="dropdown" type="button" onfocus="this.blur()" href="#"><img src="pic.png" style="position:absolute;border:0;left:0px;top:-95px;clip:rect(78px 30px 108px 0px)"></img></a>
<ul class="dropdown-menu">
<li><a href="#" onclick="menuc_on(this);return false;" data-toggle="modal"><span data-locale="pwr_on">Power On</span></a></li>
<li><a href="#" onclick="menuc_off(this);return false;" data-toggle="modal"><span data-locale="pwr_off">Power Off</span></a></li>
</ul></div>
</td>
</tr>
<tr style="display:none">
<td></td><td></td><td></td><td></td>
<td><div class="btn-group"> <a class="dropdown-toggle" data-toggle="dropdown" type="button" onfocus="this.blur()" href="#"><img src="pic.png" style="position:absolute;border:0;left:0px;top:-95px;clip:rect(78px 30px 108px 0px)"></img></a>
<ul class="dropdown-menu">
<li><a href="#" onclick="menuc_on(this);return false;" data-toggle="modal"><span data-locale="pwr_on">Power On</span></a></li>
<li><a href="#" onclick="menuc_off(this);return false;" data-toggle="modal"><span data-locale="pwr_off">Power Off</span></a></li>
</ul></div>
</td>
</tr>
<tr style="display:none">
<td></td><td></td><td></td><td></td>
<td><div class="btn-group"> <a class="dropdown-toggle" data-toggle="dropdown" type="button" onfocus="this.blur()" href="#"><img src="pic.png" style="position:absolute;border:0;left:0px;top:-95px;clip:rect(78px 30px 108px 0px)"></img></a>
<ul class="dropdown-menu">
<li><a href="#" onclick="menuc_on(this);return false;" data-toggle="modal"><span data-locale="pwr_on">Power On</span></a></li>
<li><a href="#" onclick="menuc_off(this);return false;" data-toggle="modal"><span data-locale="pwr_off">Power Off</span></a></li>
</ul></div>
</td>
</tr>
<tr style="display:none">
<td></td><td></td><td></td><td></td>
<td><div class="btn-group"> <a class="dropdown-toggle" data-toggle="dropdown" type="button" onfocus="this.blur()" href="#"><img src="pic.png" style="position:absolute;border:0;left:0px;top:-95px;clip:rect(78px 30px 108px 0px)"></img></a>
<ul class="dropdown-menu">
<li><a href="#" onclick="menuc_on(this);return false;" data-toggle="modal"><span data-locale="pwr_on">Power On</span></a></li>
<li><a href="#" onclick="menuc_off(this);return false;" data-toggle="modal"><span data-locale="pwr_off">Power Off</span></a></li>
</ul></div>
</td>
</tr>
<tr style="display:none">
<td></td><td></td><td></td><td></td>
<td><div class="btn-group"> <a class="dropdown-toggle" data-toggle="dropdown" type="button" onfocus="this.blur()" href="#"><img src="pic.png" style="position:absolute;border:0;left:0px;top:-95px;clip:rect(78px 30px 108px 0px)"></img></a>
<ul class="dropdown-menu">
<li><a href="#" onclick="menuc_on(this);return false;" data-toggle="modal"><span data-locale="pwr_on">Power On</span></a></li>
<li><a href="#" onclick="menuc_off(this);return false;" data-toggle="modal"><span data-locale="pwr_off">Power Off</span></a></li>
</ul></div>
</td>
</tr>
        </table>
</div>
</div>

<div class="corner5px mb15 pa14item" id="meter" style="display:none;">
<div class="title"><h2><span data-locale="e_meter">Energy Meter</span></h2></div>
<div class="condiv">
<table rules="rows">
<tr>
<td width = 170><span data-locale="pacw">Pac(W)</span></td>
<td width = 200><span data-locale="m_in">E_Total In(KWh)</span></td>
<td width = 130><span data-locale="m_out">E_Total Out(KWh)</span></td>
</tr><tr></tr>
<tr>
<td><div id="m_p"></div></td>
<td><div id="m_in"></div></td>
<td><div id="m_out"></div></td>
</tr>
<tr><td colspan="3"><span data-locale="note">Note:</span></td></tr>
<tr><td colspan="3">"+/-"&nbsp;<span data-locale="info">Pac means:import power from grid/export power to grid</span></td></tr>
</table>
</div>
</div>

</div>

<br class="clearfloat" />

<div id="footer">
</div>

<script src="zepto.min.js"></script>
<script src="dropdown.js"></script>


<script type="text/javascript">

    if (window.attachEvent) {
        window.attachEvent("onload", sfHover2);
    }

    var data_received = 0;
var error_info="";

    function parse_vars(data) {
        var parsed = data.split("\n");
        enable_wifi(parsed[0]);
if(0==parsed[1]){
$("#sn_div").show();
}
else if(3==parsed[1]){
$("#sn_div").show();
}
else{
$("#id_div").show();
}
$('#sn').text(parsed[2]);
$('#id').text(parsed[2]);
        $('#key').text(parsed[3]);
        $('#hv').text(parsed[4]);
        $('#sv').text(parsed[5]);
        $('#time').text(parsed[6]);

        error_info = parsed[7];
        if (error_info ==0)
        {
$("#cld_error").hide();
$("#cld").show();
        }
        else
        {
$("#cld").hide();
$("#cld_error").show();
        }

        var row = parsed[8];
var item = 9;
var tb = document.getElementById('inv_tb');
var td;
        for (var i = 0; i < 5; i++)
        {
if(i<row)
{
for(var j = 0; j < 3; j++)
{
td = tb.rows[i+1].cells[j];
td.innerHTML = parsed[item++];
}
td = tb.rows[i+1].cells[3];   
if ("OK" == parsed[item].substr(0,2))
{
td.setAttribute("class","ok");
item++;
}
else
{
td.setAttribute("class","error");
td.style.position="relative";
td.innerHTML='<div style="position: absolute;left:30px;top: 2px;"width=20>'+parsed[item++]+'</div>';
}
tb.rows[i+1].style.display="";
}
else{
tb.rows[i+1].style.display="none";
}
}

if ("OK" == parsed[item++].substr(0,2))
{
$('#m_p').text(parsed[item++]);
$('#m_in').text(parsed[item++]);
$('#m_out').text(parsed[item++]);
$("#meter").show();
}
else{
$("#meter").hide();
}
    }

    function loop()
    {
        if (!data_received){
            makeRequest("home.cgi");
}
        setTimeout("loop()", 30000);
    }
function menuc_on(data){
var $this=$(data);
var sn=$this.parents('td').siblings('td:eq(0)').text();
$.post("inv_ctrl.cgi", "sn="+sn+"&mode=0", function(data){
if(data !="ok"){
alert("Set fail!\r\n");
}
});
}
function menuc_off(data){
var $this=$(data);
var sn=$this.parents('td').siblings('td:eq(0)').text();
$.post("inv_ctrl.cgi", "sn="+sn+"&mode=1", function(data){
if(data !="ok"){
alert("Set fail!\r\n");
}
});
}



function hide_cld_info()
{
$("#cninfo").hide();
}

function show_cld_info()
{
$("#errtip11").hide();
$("#errtip12").hide();
$("#errtip13").hide();
$("#errtip14").hide();
$("#errtip15").hide();
$("#errtip16").hide();
$("#errtip17").hide();
$("#errtip18").hide();
$("#errtip19").hide();
if(error_info ==1){
$("#errtip11").show();
}
else if(error_info ==2){
$("#errtip12").show();
}
else if(error_info ==3){
$("#errtip13").show();
}
else if(error_info ==4){
$("#errtip14").show();
}
else if(error_info ==5){
$("#errtip15").show();
}
else if(error_info ==6){
$("#errtip16").show();
}
else if(error_info ==7){
$("#errtip17").show();
}
else if(error_info ==8){
$("#errtip18").show();
}
else if(error_info ==9){
$("#errtip19").show();
}
$("#cninfo").show();
}
</script>

</body>
</html>

Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: t1me2die am 26 Oktober 2018, 11:22:44
Du benötigst natürlich noch ein RegEx für das HTTPMOD, welches den Quelltext sozusagen durchsucht und dir das Ergebnis als Reading ausspuckt.

Ich nutze sehr gerne: https://regex101.com/
Haue unten meinen Quellcode von der Website rein, die ich auslesen möchte.
Oben gebe ich meinen regulären Ausdruck ein und schaue dann rechts, ob das Result das ist, was ich erwarte.

Wir brauchen natürlich auch die Info's, welche Informationen du auslesen möchtest?!

Gruß
Mathze
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: MadMax-FHEM am 26 Oktober 2018, 11:25:58
Jetzt musst du dir noch überlegen, welche Daten aus der html Antwort dich interessieren und du simit als Reading im Modul extrahiert haben möchtest.

Die Meldung sagt nur, dass nichts als Reading extrahiert werden konnte.
Ist klar weil ja noch nichts angegeben wurde.

Wenn du weißt was du extrahieren willst, dann musst du über entsprechende Attribute den gewünschten Readingnamen angeben und dann eine RegEx für den dazugehörigen Wert.

Also immer paarweise bis du alles hast was du "auslesen" willst...

EDIT2: DeviceSpecificHelp ("unter dem HTTPMOD"), commandref oder wiki sollten da unterstützen... Und dann nat. der RegEx-Link von Mathze

Kurz da nur Handy grad...

EDIT: und zu langsam... ;)

Gruß, Joachim
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: t1me2die am 26 Oktober 2018, 11:31:31
Wenn ich das jetzt im "überfliegen" richtig gesehen habe, werden die angezeigten Daten per Javascript ermittelt und angezeigt.
Die Werte, die du wahrscheinlich haben möchtest wie z.B. Seriennummer, Verbrauch in kWh usw. liegen nicht als Konstanten im Quellcode vor.

Ich glaube also dass das Auslesen der relevanten Informationen in diesem Fall nicht über HTTPMOD und RegEx geht.
(Ich kann mich natürlich auch täuschen und lasse mich gerne eines besseren belehren, falls jemand einen Tipp hat)

Gruß
Mathze
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 11:48:34
Danke für die Antworten.
Ich hatte schon diverse Versuche mit Namen gemacht und nie eine verwertbare Antwort bekommen.  :(

Zitat von: t1me2die am 26 Oktober 2018, 11:31:31
Die Werte, die du wahrscheinlich haben möchtest wie z.B. Seriennummer, Verbrauch in kWh usw. liegen nicht als Konstanten im Quellcode vor.
Ja genau es geht um Seriennummer, Pac(W), E_Today(KWh) und Status.

Zitat von: t1me2die am 26 Oktober 2018, 11:31:31
Ich glaube also dass das Auslesen der relevanten Informationen in diesem Fall nicht über HTTPMOD und RegEx geht.
Was müsste ich denn statt dessen tun?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: MadMax-FHEM am 26 Oktober 2018, 12:01:58
Zumindest mal das Script "debuggen" (F12 / zumindest in FireFox und Chrome) um zu sehen wie die Daten "geladen" werden.

Kannst leider nur du selber machen, da nur du Verbindung zum Server hast.

Je nachdem wie die Daten geholt werden entweder doch per HTTPMOD oder evtl. selbst was mit wget/curl und dann direkt die Daten abrufen (wie es das javascript tut) und dann nach fhem schreiben, z.B. in einen Dummy...

Gruß, Joachim
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 14:46:21
Ich hab das mal versucht zu verstehen was die Webseite macht.

So wie ich das sehe werden die Daten per javascript namens zepto.min.js abgerufen.
Ich habe in das Script mal reingeschaut und sehe zwei Funktionen ein jquery und eine Funktionen namens vue.
Insgesamt hat das Script 160 Tausend Zeichen und verstehen tu ich davon mal nicht viel. :-(
Die 160T Zeichen poste ich jetzt natürlich nicht hier sondern habe die in die angehängte Datei kopiert.

Ich bin mir gerade nicht sicher ob man so etwas damit anfangen kann aber ich hoffe es.

Ich habe mir das glaube ich viel zu einfach vorgestellt. :-(
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: amenomade am 26 Oktober 2018, 15:21:49
Grundsätzlich kann man leider nicht: die Seite wird geladen, die ruft die .js Funktion, und diese Javascript Funktion ändert direkt die Struktur der schon geladenen Seite (ein bisschen wie das Greasemonkey Plugin von Firefox, die Gestaltung einer Seite nachträglich ändern kann).

Es würde sich aber lohnen, den Traffic mit Burp (oder evtl. mit der Console F12 im Browser aber man sieht da weniger) zu analysieren, um zu sehen, ob Einzelqueries dann zur Aktualisierung gesendet werden, und eine entspr. Antwort bekommen. Sowas könnte man dann vielleicht in HTTMOD fangen.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 15:29:50
Kannst Du mal bitte hinter der IP folgende URL ran klemmen

/api/v1

Kannst mit nem Browser aufrufen. Bekommst Du da irgendwas ausser einen Fehler angezeigt?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 15:39:09
Es wird eine leere Seite angezeigt.
Quelltext auch leer.
Größe 0 Byte.

Aber kein Fehler.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 15:42:48
Dann gibt es eine lokale API Schnittstelle die Du anrufen kannst und wo du json Daten zurück bekommst. Ich habe einfach deine Software Versionsnummer bei Google eingegeben und so Informationen bekommen. Kann da gerne heute Abend noch Mal googeln. Du musst hinter dem v1 weitere url teile aufrufen. Dann kommen die Daten
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 16:25:24
Bin ein wenig weiter danke für den Tipp!

Wenn ich http://192.168.6.101/home.cgi aufrufe bekomme ich folgende Antwort:
1 1 EAB961723105 QN6PAX3SS4VHW8AX M11 17A31-727R+17829-719R 16:21 26/10/2018 0 1 BS15006011720112 150 0.54 OK Error
Quelltext
<html><head></head><body>1
1
EAB961723105
QN6PAX3SS4VHW8AX
M11
17A31-727R+17829-719R
16:21 26/10/2018
0
1
BS15006011720112
150
0.54
OK
Error
</body></html>


Das müsste ich doch besser verwenden können oder?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 16:28:01
Also ich würde wirklich versuchen die API zu verwenden wenn es geht. Dafür wäre sie ja da

http://192.168.6.101/api/v1/getPlantOverview

Was bekommst da?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 16:29:25
leere Seite.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 16:29:53
und was sagt F12 Developer seite?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 16:33:17
Fehler beim Laden der folgenden Adresse: Could not load the source for http://192.168.6.101/api/v1/getPlantOverview.
[Exception... "Component returned failure code: 0x80470002 (NS_BASE_STREAM_CLOSED) [nsIInputStream.available]"  nsresult: "0x80470002 (NS_BASE_STREAM_CLOSED)"  location: "JS frame :: resource://devtools/shared/base-loader.js -> resource://devtools/shared/DevToolsUtils.js :: onResponse :: line 569"  data: no]
Stack: onResponse@resource://devtools/shared/base-loader.js -> resource://devtools/shared/DevToolsUtils.js:569:25
onStopRequest@resource://gre/modules/NetUtil.jsm:126:17
Line: 569, column: 0
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 16:34:13
Habe noch was gefunden

https://community.zipato.com/topic/local-api_2

http://<ip>:8080/v2

Bekommst über die Adresse Daten?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 16:39:25
http://192.168.6.101:8080/v2 kommt nix

http://192.168.6.101/v2 kommt eine leere Seite
Fehler beim Laden der folgenden Adresse: Could not load the source for http://192.168.6.101/v2.
[Exception... "Component returned failure code: 0x80470002 (NS_BASE_STREAM_CLOSED) [nsIInputStream.available]"  nsresult: "0x80470002 (NS_BASE_STREAM_CLOSED)"  location: "JS frame :: resource://devtools/shared/base-loader.js -> resource://devtools/shared/DevToolsUtils.js :: onResponse :: line 569"  data: no]
Stack: onResponse@resource://devtools/shared/base-loader.js -> resource://devtools/shared/DevToolsUtils.js:569:25
onStopRequest@resource://gre/modules/NetUtil.jsm:126:17
Line: 569, column: 0
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 16:44:39
Schade. Hätte da jetzt was erwartet. Dann bin ich auch erstmal ratlos.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 16:46:12
Aber ich kann mir doch den Body laden und parsen oder nicht?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 16:51:41
Bringt dir ja nichts. In einem Body stehen glauben keine Nutzdaten
Das ist Unsinn. Ich dachte da an den Header. Sorry
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 16:53:49
Der Body:
1
1
EAB961723105
QN6PAX3SS4VHW8AX
M11
17A31-727R+17829-719R
16:53 26/10/2018
0
1
BS15006011720112
68
0.60
OK
Error
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 16:57:55
Und? Was ist das? Kannst du die Daten denn irgendwie zu ordnen?
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 19:13:01
Ja kann ich.
Zeile 10: Seriennummer
Zeile 11: aktuelle Leistung
Zeile 12: produzierte kwh des Tages
Zeile 13: Erreichbarkeit

Der Rest ist uninteressant.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 19:26:17
OK. Und das kommt auch so in HTTPMOD an?
Dann kannst ja RegEx machen.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 19:38:51
Naja, mit dem Attribut showBody ist es als Wert in dem Internal httpbody.
Da muss ich mir dann die Werte raussuchen und in Userreadings oder dummies schreiben.
Aber im Log steht natürlich noch:
Solaranlage: Read response to update didn't match any Reading

Und die Anlage schaltet ab wenn kein Strom mehr produziert wird und daher erscheinen dann Timeouts im Log.
Solaranlage: Read callback: Error: connect to http://192.168.6.101:80 timed out
Dazu müsste ich mir dann ein Script einfallen lassen was z.B. einen Helligkeitssensor abfragt und entsprechend die Abfrage startet bzw. stoppt.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 26 Oktober 2018, 19:39:33
Aber für heute ist erstmal schluß. Es ist zu dunkel.  ;D
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: CoolTux am 26 Oktober 2018, 19:41:03
Du musst natürlich die Attribute setzen. Also das Reading Attribut und die zum Reading passende RegEx als Attribut.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 28 Oktober 2018, 13:49:40
Ok ich verstehe aber ich finde keine passende Regex.

1
1
EAB961723105
QN6PAX3SS4VHW8AX
M11
17A31-727R+17829-719R
13:37 28/10/2018
0
1
BS15006011720112
155
0.82
OK
Error


Das ist der aktuelle Body. Es sind immer 14 Zeilen. Interessant für mich sind die Zeilen 10,11,12.
Der Inhalt von Zeile 10 ist konstant. Das ist die Seriennummer.
Der Inhalt von Zeile 11 ist variabel. Das ist die aktuelle Leistung iin Watt.
Der Inhalt von Zeile 12 ist variabel. Das ist die bisher am Tag erzeugte Leistung in kwh.

Nach meinem verständnis müsste ich jetzt in den Body in einzelne Zeilen zerlegen und die ganannten Zeilen in Readings schrieben.

Dafür habe ich drei Attribute hinzugefügt
attr Solaranlage reading01Name SNR
attr Solaranlage reading02Name Watt
attr Solaranlage reading03Name kwh


Aber an Regex verzweifel ich gerade.  :-\
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 29 Oktober 2018, 11:06:18
So ich hab es.  ;D

defmod Solaranlage HTTPMOD http://192.168.6.101/home.cgi 900
attr Solaranlage userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex
attr Solaranlage enableControlSet 1
attr Solaranlage enableCookies 1
attr Solaranlage httpVersion 1.1
attr Solaranlage reading01Name SNR
attr Solaranlage reading01Regex (?:[^\r\n]*(?:\r|\rn|\n)){27}([^\r\n]*)(?:\r|\rn|\n).*
attr Solaranlage reading02Name Watt
attr Solaranlage reading02Regex (?:[^\r\n]*(?:\r|\rn|\n)){28}([^\r\n]*)(?:\r|\rn|\n).*
attr Solaranlage reading03Name kwh
attr Solaranlage reading03Regex (?:[^\r\n]*(?:\r|\rn|\n)){29}([^\r\n]*)(?:\r|\rn|\n).*
attr Solaranlage showBody 1

setstate Solaranlage 2018-10-29 11:02:57 SNR BS15006011720112
setstate Solaranlage 2018-10-29 11:02:57 Watt 62
setstate Solaranlage 2018-10-29 11:02:57 kwh 0.15


So hat mein
Device Solaranlage drei Readings SNR, Watt und kwh. :-)
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 30 Oktober 2018, 10:06:33
Da sich die Anlage automatisch abschaltet wenn es dunkel ist und ich dann Fehlermeldungen im Log habe.
2018.10.30 07:30:34 3: Solaranlage: Read callback: Error: connect to http://192.168.6.101:80 timed out

Habe ich zusätzlich ein DOIF-Device erstellt welches meine Helligkeitssensoren prüft und emsprechend den Lichtverhältnissen das HTTPMOD-Device startet bzw. stoppt.
defmod di.Solaranlage_on DOIF ([OG1_AZ_Helligkeitssensor:luminosity] >= 50 or [OG2_KZ_Helligkeitssensor:luminosity] >= 50) (set Solaranlage start) DOELSE (set Solaranlage stop)


Eine paar Sachen fehlen mir jetzt allerdings noch.  Die Anlage teilt mir mit wie viel kwh diesen Tag produziert wurden. Ich möchte also jeweils den letzten Rückgabewert des Tages zu einem Monatswert aufsummieren. Und diese dann wiederum auf einen Jahreswert. Schlussendlich möchte ich dann noch die erzeugten kwh mit dem Preis pro kwh multiplizieren um den täglichen , monatlichen und jährlichen Ertrag zu sehen.

Den Preis pro kwh habe ich schon per Userreading eingetragen.  Allerdings fehlt mir eine Idee wie ich die kwh aufsummieren kann.

Ich hoffe dabei kann mir noch jemand helfen. :-)

Gruß
Daniel
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: amenomade am 30 Oktober 2018, 13:26:09
Schau mal https://fhem.de/commandref_DE.html#statistics
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 30 Oktober 2018, 14:02:05
Ich glaube das kann ich mit Statistics nicht abbilden da am Ende eines Tages der Wert "kwh" wieder auf Null gesetzt wird.
Wenn er einfach weiter Zählen würde könnte ich mit Deltas arbeiten aber so?  ???

Trotzdem vielen Dank für den Tipp!
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 30 Oktober 2018, 14:45:18
Ich habe das commandref durchstöbert und bin auf etwas gestoßen.
https://fhem.de/commandref.html#userReadings (https://fhem.de/commandref.html#userReadings)

Wenn ich nun Userreadings mit dem modifier monotonic benutze müsste das doch eigentlich gehen.

userReadings Preis_pro_kwh, kwh_Monat monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_Jahr monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_gesamt monotonic {ReadingsVal("Solaranlage","kwh",0)}, Gesamtertrag {ReadingsVal("Solaranlage","kwh_gesamt",0) * ReadingsVal("Solaranlage","Preis_pro_kwh",0)}

Aber mein Versuch schlug fehl. Obwohl sich das Reading kwh positiv geändert hat addiert er die Differenz nicht zu den anderen Werten.
:-\
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 30 Oktober 2018, 15:49:13
Ich google und probiere komme aber nicht weiter. Daher hier nochmal das List.
Internals:
   BUSY       0
   CFGFN      /var/fhem/FHEM/OG2_Dachboden.cfg
   DEF        http://192.168.6.101/home.cgi 900
   Interval   900
   LASTSEND   1540910069.11135
   MainURL    http://192.168.6.101/home.cgi
   ModuleVersion 3.5.1 - 5.7.2018
   NAME       Solaranlage
   NR         1067
   STATE      ???
   TRIGGERTIME 1540910969.11069
   TRIGGERTIME_FMT 2018-10-30 15:49:29
   TYPE       HTTPMOD
   addr       http://192.168.6.101:80
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl http://192.168.6.101/home.cgi
   header     
   host       192.168.6.101
   httpbody   1
1
EAB961723105
QN6PAX3SS4VHW8AX
M11
17A31-727R+17829-719R
15:34 30/10/2018
0
1
BS15006011720112
28
0.72
OK
Error

   httpheader HTTP/1.1 200 OK
Server: MXCHIP
Connection: close
Cache-Control: max-age=36000
Expires: Wed, 31 Dec 2070 23:00:00 GMT
Last-Modified: Fri, 17 Feb 2017 06:10:54 GMT
Content-Type: text/html
Content-Length: 116
   httpversion 1.1
   hu_blocking 0
   hu_filecount 7
   hu_port    80
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /home.cgi
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.6.101/home.cgi
   value      0
   Helper:
     DBLOG:
       Preis_pro_kwh:
         mylogdb:
           TIME       1540908203.67375
           VALUE      0.28
       SNR:
         mylogdb:
           TIME       1540910069.14053
           VALUE      BS15006011720112
       Watt:
         mylogdb:
           TIME       1540910069.14053
           VALUE      28
       kwh:
         mylogdb:
           TIME       1540910107.99533
           VALUE      0.72
       kwh_Jahr:
         mylogdb:
           TIME       1540905793.0181
           VALUE      0
       kwh_Monat:
         mylogdb:
           TIME       1540907207.30829
           VALUE      95.08
       kwh_gesamt:
         mylogdb:
           TIME       1540906228.33862
           VALUE      2416
       state:
         mylogdb:
           TIME       1540906627.24925
           VALUE      kwh 1
   QUEUE:
   READINGS:
     2018-10-30 15:03:23   Preis_pro_kwh   0.28
     2018-10-30 15:34:29   SNR             BS15006011720112
     2018-10-30 15:34:29   Watt            28
     2018-10-30 15:35:07   kwh             0.72
     2018-10-30 14:23:13   kwh_Jahr        0
     2018-10-30 14:46:47   kwh_Monat       95.08
     2018-10-30 14:30:28   kwh_gesamt      2416
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.6.101/home.cgi
     value      0
   defptr:
     readingBase:
       SNR        reading
       Watt       reading
       kwh        reading
     readingNum:
       SNR        01
       Watt       02
       kwh        03
     readingOutdated:
     requestReadings:
       update:
         SNR        reading 01
         Watt       reading 02
         kwh        reading 03
   sslargs:
Attributes:
   enableControlSet 1
   enableCookies 1
   httpVersion 1.1
   reading01Name SNR
   reading01Regex (?:[^\r\n]*(?:\r|\rn|\n)){27}([^\r\n]*)(?:\r|\rn|\n).*
   reading02Name Watt
   reading02Regex (?:[^\r\n]*(?:\r|\rn|\n)){28}([^\r\n]*)(?:\r|\rn|\n).*
   reading03Name kwh
   reading03Regex (?:[^\r\n]*(?:\r|\rn|\n)){29}([^\r\n]*)(?:\r|\rn|\n).*
   room       OG2_Dachboden
   showBody   1
   timeout    2
   userReadings Preis_pro_kwh, kwh_Monat monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_Jahr monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_gesamt monotonic {ReadingsVal("Solaranlage","kwh",0)}, Gesamtertrag {ReadingsVal("Solaranlage","kwh_gesamt",0) * ReadingsVal("Solaranlage","Preis_pro_kwh",0)}
   userattr   reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: amenomade am 30 Oktober 2018, 16:20:53
Versuch mal explizit ein Trigger zu definieren.
kwh_Monat:kwh monotonic {ReadingsVal("Solaranlage","kwh",0)}
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 30 Oktober 2018, 18:39:36
Hab ich probiert. Leider ebenfalls kein Erfolg.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: amenomade am 31 Oktober 2018, 16:50:31
Sorry, hatte vergessen, dass es irgendwann mal eine Änderung gab.
kwh_Monat:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}

Im Denkkonzept musst Du aber auch überlegen, wie am Ende des Monats, kwh_Monat wieder auf 0 gesetzt wird. Und das gleiche beim Jahreswechsel.
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 01 November 2018, 11:45:53
Ich habe das entsprechend Deinem Vorschlag geändert.
Leider wieder ohne den erhofften Erfolg.
userReadings  Preis_pro_kwh, kwh_Monat:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_Jahr:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_gesamt:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, Gesamtertrag:kwh.* {ReadingsVal("Solaranlage","kwh_gesamt",0) * ReadingsVal("Solaranlage","Preis_pro_kwh",0)}

Zusätzlich habe ich mir eine Testnotify gemacht um zu überpüfen ob ein Event ausgelöst wird und ob der Inhalt von kwh eine Zahl ist.
Und ja es wird ein Event ausgelöst und der übergebene Wert ist eine Zahl.

define not.Solaranlage_test notify Solaranlage:kwh.* {\
if (ReadingsVal("Solaranlage","kwh",0) >= 0) {\
Log 3, "Solartest = 1";;\
}\
}


Auszuga aus dem Eventlog:
2018-11-01 11:38:15 HTTPMOD Solaranlage reread
2018-11-01 11:38:15 HTTPMOD Solaranlage SNR: BS15006011720112
2018-11-01 11:38:15 HTTPMOD Solaranlage Watt: 107
2018-11-01 11:38:15 HTTPMOD Solaranlage kwh: 0.35


Auszug aus dem Log:
2018.11.01 11:38:15 3: Solartest = 1

Hier sieht man das die Readings aktualisiert werden aber die Userreadings werden nicht:
Preis_pro_kwh 0.28 2018-10-30 15:03:23
SNR BS15006011720112 2018-11-01 11:38:15
Watt 107 2018-11-01 11:38:15
kwh 0.35 2018-11-01 11:38:15
kwh_Jahr 0 2018-10-30 14:23:13
kwh_Monat 95.08 2018-10-30 14:46:47
kwh_gesamt 2416 2018-10-30 14:30:28


Zu dem zurücksetzen von Monat und Jahr habe ich schon eine Idee aber zunächst muss es ja erst einmal gezählt werden. :-(
Titel: Antw:[gelöst] Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 01 November 2018, 12:10:02
Danke für die Hilfe!
Da das ursprüngliche Problem gelöst wurde schließe ich diesen Thread und eröffne mit dem aktuellen Problem einen Neuen.
https://forum.fhem.de/index.php/topic,92696.0.html (https://forum.fhem.de/index.php/topic,92696.0.html)
Titel: Antw:Anfängerprobleme mit HTTPMOD
Beitrag von: WhyTea am 01 November 2018, 12:56:02
Zitat von: amenomade am 31 Oktober 2018, 16:50:31
Im Denkkonzept musst Du aber auch überlegen, wie am Ende des Monats, kwh_Monat wieder auf 0 gesetzt wird. Und das gleiche beim Jahreswechsel.

Dazu habe mir flgendes Überlegt:
define Solaranlage_at.kwh_Monat_reset at *00:00:01 {\
if ($mday = 1 ) {\
fhem("setreading Solaranlage:kwh_Monat 0")\
}\
}
attr Solaranlage_at.kwh_Monat_reset room OG2_Dachboden

define Solaranlage_at.kwh_Jahr_reset at *00:00:01 {\
if ($yday = 1 ) {\
fhem("setreading Solaranlage:kwh_Jahr 0")\
}\
}
attr Solaranlage_at.kwh_Jahr_reset room OG2_Dachboden


Das sollte funktionieren denke ich.