Daten aus Dimplex-Schnittstelle auslesen

Hallo zusammen

Ich wage mich an ein Projekt, das im Ansatz meine Fähigkeiten übersteigt und wende mich deshalb an die Community.

Ich möchte die Daten meiner Wärmepumpe auf IP-Symcon anzeigen:

Ich habe eine Wärmepumpensteuerung WPM 2006 von Glen-Dimplex. Dazu habe ich mir eine Ethernet-Schnittstelle (pCOWeb rsp. NWPM) angeschafft, welche mir über den Browser sämtliche Daten der Steuerung zur Verfügung stellt (siehe angehängte Bilder). Die Schnittstelle hat eine eingebaute Speicherkarte, auf welche über FTP oder den Browser zugegriffen werden kann. Über den Browser kann man auch ein Logging von 10 Variabeln konfigurieren, welche dann scheinbar in eine csv-Datei auf der Speicherkarte geschrieben werden. Ich bringe jedoch das Logging nicht zum Laufen und mit 10 Variabeln bin ich relativ stark eingeschränkt. Die Beschreibung der Schnittstellenkarte ist leider sehr kurz.

Die Schnittstelle bietet die Möglichkeit, über SNMP oder BACnetIP/BACnetEthernet eine Kommunikation aufzubauen. Davon verstehe ich leider gar nichts.

Eine Excel-Datei mit den Angaben, welche Variable was bedeutet habe ich bereits im KNX-User-Forum gefunden (siehe Anhang).

Wäre es möglich, die Informationsseite mit dem WWW Reader auszulesen und die Daten mit dem Text Parser herauszuschneiden? Dies wird natürlich eine aufwendige Angelegenheit bei der Anzahl Informationen, welche zur Verfügung steht. Ausserdem muss ich mich auch erst in diese Funktionen einarbeiten. Aufgrund der Länge habe ich den Quelltext der Tabelle mit den Variabeln als txt-Datei angehängt.

Gäbe es aus der Sicht von erfahrenen Anwendern bessere Lösungsansätze?

Herzlichen Dank im Voraus für eure Anregungen zu diesem für mich ambitiösen Vorhaben.

Christoph

Datenübertragung_H55.xls (128 KB)

Quelltext_pw_main.txt (9.91 KB)

Hi!

Vielleicht könntest du dir ein passendes Execel Macro schreiben und folgende Excelfunktion verwenden um die Daten vom Webinterface abzuzapfen und via CSV nach IPS zu schieben.
http://office.microsoft.com/de-de/excel/HA102184721031.aspx

Damit habe ich schonmal Aktiendaten in Excel visualisiert.

Nur so als Anregung.

Viele Grüße
Chris

Hallo Chris

Deinen Ansatz mit Excel finde ich ganz gut. Nur möchte ich mir keine MS Office Installation für meinen Homeserver leisten. Ich werde mal schauen, ob die Webabfrage mit Openoffice auch möglich wäre.

Christoph

Hi!

Poste doch mal ne HTML Seite, dann kann man evtl. schauen ob man nicht nen einfachen Parser in VBScript oder so bauen könnte.

Viele Grüße
Chris

Über den Browser kann man auch ein Logging von 10 Variabeln konfigurieren, welche dann scheinbar in eine csv-Datei auf der Speicherkarte geschrieben werden.

Wenn das so sein sollte, dürfte doch das meiste schon passen. Zugriff über IPS auf die Speicherkarte und die csv einlesen.

@RWN:
Ich kriege leider zurzeit die Logging-Funktion nicht zum Laufen. Müsste zuerst den Zeitabgleich zwischen Schnittstellenkarte und Wärmepumpenregler machen können. Aber irgendwie funktioniert das nicht. Alle Informationen des Reglers liegen aber auf dem Browser vor meiner Nase. Da kann ich erst noch mehr als nur 10 Variabeln auswerten.

@spaceguy:
Im Anhang habe ich die zwei html-Dateien der Informationsseiten (siehe Printscreen in meiner ersten Nachricht) hochgeladen.

Danke für eure Mithilfe.

Christoph

HTML-Infoseite.zip (76.6 KB)

@spaceguy:
Habe mit Excel 2007 versucht, die Daten abzuholen. Leider erhalte ich nur eine leere Tabelle mit den Überschriften.

Christoph

Ich grabe den alten Schinken mal aus, da ich gleiches mit unserer Dimplex Wärmepumpe vorhabe :slight_smile:

Der Text-Parser wäre mir als Lösung am liebsten. Das Problem ist, das die Variablen auf der Seite mittels Java erzeugt werden. Im Quelltext ist also keine Variable zum auslesen vorhanden, sondern nur die einzelnen Scripte.

Die Logging-Funktion ist irgendwie totaler Müll. Das ganze System kommt mir sehr Beta-mäßig vor :mad:

Hier noch der Quelltext der Seite auf der die ganzen Variablen ausgegeben werden:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!-- The tag filter musb be specified in the first 10 lines,
     after the '<html>' statment, with the sintax: -->
<!--tagparser="/pcotagfilt"-->
<head>
  <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type">
  <link rel="stylesheet" href="style.css" type="text/css">
  <title>pCOWeb Configuration</title>
  <style type="text/css">
    td { text-align: '.' }
  </style>
  <script src="pw_ajax.js" type="text/javascript"></script>

  <script type="text/javascript">

  digitals = new Array;
  integers = new Array;
  analogs  = new Array;
  
  var oldcolor = "#f1f1f1"

  function mouseOnOver(myId) {
      //alert("cambio sfondo"+myId);
      oldcolor=(document.getElementById(myId).style.backgroundColor);
      document.getElementById(myId).style.backgroundColor="red";
      document.getElementById(myId).style.color="white";
  }

  function mouseOnOut(myId) {
      //alert("cambio sfondo"+myId);
      //document.getElementById(myId).style.backgroundColor="#f1f1f1";
      document.getElementById(myId).style.backgroundColor=oldcolor;
      document.getElementById(myId).style.color="black";
  }

  function getVariables() {

    getParams('/config/xml.cgi','D|1|207|I|1|207|A|1|207');

    for ( i=1; i<=207; i++ ) {
      if ( digitals[i] == "E" || !digitals[i] )
        digitals[i] = "-"
      if ( analogs[i] == "E" || !analogs[i] )
        analogs[i] = "-"
      if ( integers[i] == "E" || !integers[i] )
        integers[i] = "-"
        
      // Changes the background color to the cell if the values changes
      if ( document.getElementById("dvar"+i).innerHTML != digitals[i] && ( document.getElementById("dvar"+i).innerHTML != "-" && digitals[i] != "-"))
        document.getElementById("td_dvar"+i).style.backgroundColor="#FFA500";
      else
        document.getElementById("td_dvar"+i).style.backgroundColor = document.getElementById("dig1").style.backgroundColor;

      if ( document.getElementById("avar"+i).innerHTML != analogs[i] && ( document.getElementById("avar"+i).innerHTML != "-" && analogs[i] != "-"))
        document.getElementById("td_avar"+i).style.backgroundColor="#FFA500";
      else
        document.getElementById("td_avar"+i).style.backgroundColor = document.getElementById("dig1").style.backgroundColor;

      if ( document.getElementById("ivar"+i).innerHTML != integers[i] && ( document.getElementById("ivar"+i).innerHTML != "-" && integers[i] != "-"))
        document.getElementById("td_ivar"+i).style.backgroundColor="#FFA500";
      else
        document.getElementById("td_ivar"+i).style.backgroundColor = document.getElementById("dig1").style.backgroundColor;

      // Update the values to the table
      document.getElementById("dvar"+i).innerHTML=digitals[i];
      document.getElementById("avar"+i).innerHTML=analogs[i];
      document.getElementById("ivar"+i).innerHTML=integers[i];

    }

    timer=setTimeout('getVariables()',5000);

  }

  function generateTable(idname,start,end) {

    document.write('<td class=Col1>'+start+'-'+end+'</td>');
    for (a=start;a<=end;a++) {
        if (idname=="dvar") text="Digital"
        if (idname=="avar") text="Analog"
        if (idname=="ivar") text="Integer"
                
        document.write('<td id=td_'+idname+a+' class=Col2><span id='+idname+a+' onMouseOver=\"Tip(\''+text+' Variable '+a+'\');mouseOnOver(\''+idname+a+'\');" onMouseOut="mouseOnOut(\''+idname+a+'\');\"></span></td>
')
        //document.write('<td id=td_'+idname+a+' class=Col2  onMouseOver=\"Tip(\''+text+' Variable '+a+'\');mouseOnOver(\''+idname+a+'\');" onMouseOut="mouseOnOut(\''+idname+a+'\');\"><span id='+idname+a+'></span></td>
')
//        document.write('<td class=Col2><span id='+idname+a+' onMouseOver="Tip(\'Some text\');"></span></td>
')
    }
  }

  </script>
</head>

<body bgcolor='#ffffff' onLoad="getVariables();">
  <script type="text/javascript" src="wz_tooltip.js"></script>
<h1 style="text-align: center">pCOWeb information page</h1>
<center>!! Values are updated automatically every 5s !!</center>
<br>

<center>

<table class=var1 cellpadding="0" cellspacing="0">
<tbody>
  <tr class=Head1>
    <td class=Head1>Var Idx</td><td class=Head2 colspan="15">Digital Variables</td>
  </tr>
  <tr id=dig1 class=Row1>
    <!--<td class=Col1>1-15</td>-->
    <script type="text/javascript">
        generateTable("dvar",1,15)
    </script>

  </tr>
  <tr id=dig2 class=Row2>
    <script type="text/javascript">
        generateTable("dvar",16,30)
    </script>
  </tr>
  <tr id=dig3 class=Row1>
    <script type="text/javascript">
        generateTable("dvar",31,45)
    </script>
  </tr>
  <tr id=dig4 class=Row2>

    <script type="text/javascript">
        generateTable("dvar",46,60)
    </script>
  </tr>
  <tr id=dig5 class=Row1>
    <script type="text/javascript">
        generateTable("dvar",61,75)
    </script>
  </tr>
  <tr id=dig6 class=Row2>
    <script type="text/javascript">
        generateTable("dvar",76,90)
    </script>

  </tr>
  <tr id=dig7 class=Row1>
    <script type="text/javascript">
        generateTable("dvar",91,105)
    </script>
  </tr>
  <tr id=dig8 class=Row2>
    <script type="text/javascript">
        generateTable("dvar",106,120)
    </script>
  </tr>
  <tr id=dig9 class=Row1>

    <script type="text/javascript">
        generateTable("dvar",121,135)
    </script>    
  </tr>
  <tr id=dig10 class=Row2>
    <script type="text/javascript">
        generateTable("dvar",136,150)
    </script>
  </tr>
  <tr id=dig11 class=Row1>
    <script type="text/javascript">
        generateTable("dvar",151,165)
    </script>
  </tr>

  <tr id=dig12 class=Row2>
    <script type="text/javascript">
        generateTable("dvar",166,180)
    </script>
  </tr>
  <tr id=dig13 class=Row1>
    <script type="text/javascript">
        generateTable("dvar",181,195)
    </script>
  </tr>
  <tr id=dig14 class=Row2>
    <script type="text/javascript">
        generateTable("dvar",196,207)
    </script>

  </tr>
</tbody>
</table>

<br>
<table class=var1 cellpadding="0" cellspacing="0">
<tbody>
  <tr class=Head1>
    <td class=Head1>Var Idx</td><td class=Head2 colspan="15">Analog Variables</td>
  </tr>
  <tr class=Row1>

    <script type="text/javascript">
        generateTable("avar",1,15)
    </script>
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("avar",16,30)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("avar",31,45)
    </script>  </tr>

  <tr class=Row2>
    <script type="text/javascript">
        generateTable("avar",46,60)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("avar",61,75)
    </script>
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("avar",76,90)
    </script>

  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("avar",91,105)
    </script>
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("avar",106,120)
    </script>
  </tr>
  <tr class=Row1>

    <script type="text/javascript">
        generateTable("avar",121,135)
    </script>    
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("avar",136,150)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("avar",151,165)
    </script>
  </tr>

  <tr class=Row2>
    <script type="text/javascript">
        generateTable("avar",166,180)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("avar",181,195)
    </script>
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("avar",196,207)
    </script>

  </tr>
</tbody>
</table>

<br>
<table class=var1 cellpadding="0" cellspacing="0">
<tbody>
  <tr class=Head1>
    <td class=Head1>Var Idx</td><td class=Head2 colspan="15">Integer Variables</td>
  </tr>
  <tr class=Row1>

    <script type="text/javascript">
        generateTable("ivar",1,15)
    </script>
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("ivar",16,30)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("ivar",31,45)
    </script>

  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("ivar",46,60)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("ivar",61,75)
    </script>
  </tr>
  <tr class=Row2>

    <script type="text/javascript">
        generateTable("ivar",76,90)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("ivar",91,105)
    </script>
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("ivar",106,120)
    </script>

  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("ivar",121,135)
    </script>    
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("ivar",136,150)
    </script>
  </tr>
  <tr class=Row1>

    <script type="text/javascript">
        generateTable("ivar",151,165)
    </script>
  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("ivar",166,180)
    </script>
  </tr>
  <tr class=Row1>
    <script type="text/javascript">
        generateTable("ivar",181,195)
    </script>

  </tr>
  <tr class=Row2>
    <script type="text/javascript">
        generateTable("ivar",196,207)
    </script>
  </tr>
</tbody>
</table>
</center>

<div id="back-bottom">
(C) Copyright 2003-2008 by Carel S.p.A., Brugine (PD) - Italy. All rights reserved. Contact: <a href="mailto:pcoweb@carel.com">pcoweb@carel.com</a>

</div>
</body>
</html>

Also wenn die Steuerung SNMP kann, würd ich dazu tendieren.
Gibt doch hier im Forum schon Scripte, probier´s doch mal aus.
Oder auch einfach mal nen SNMP Broswer googeln und schauen, was für Werte abgefragt werden können.

Probier mal die Daten direkt abzurufen
http://[DEIN SERVER]/usr-cgi/xml.cgi?A|1|100

Parameter wie folgt:

?A|1|100 liefert alle Analogen Parameter 1-100
?D|1|100 liefert alle Digitalen Parameter 1-100
?I|1|100 liefert alle Integer Parameter 1-100

Die Parameter lassen sich kombinieren - z.B.:
?A|1|100|D|1|100 liefert alle Analogen und Digitalen Parameter 1-100

Zurück bekommst du ein prima definiertes XML was du ohne weiters für Auswertungen jeder Art verwenden kannst.

Hinweis: Ich würde an deiner Stelle in das CGI-Verzeichnis noch eine .htaccess packen - sonst kommt jeder an die Daten deiner Anlage ran (vorrausgesetzt die Anlage ist öffentlich über das Internet erreichbar)

Hi Chris
kannst du mir bitte sagen wie ich variable in pcoweb auslesen kann
zb
Var. 14 gibt uns Aufschluss über die Betriebsart der Wärmepumpe.

Var. 27 ist die Außentemperatur

Var. 29 ist die Rücklauftemperatur
ich brauche diese wert für meeine studienarbeit