Hallo, ich versuche gerade einen Weg zu finden meine neue Heizungsregelung in IPS einzubinden. Die Regler kommunizieren untereinander über einen eBus, ein Modul zur Webanbindung erlaubt mir Zugriff über LAN auf Soll- und Istwerte.
IPS sollte doch eigentlich über eine Client Socket Instanz mit entsprechender Registervariable mit dem Modul Kontakt aufnehmen können … die Einrichtung des Client Servers klappt, aber nach ein paar Sekunden wird die Instanz im Objektbaum rot markiert.
Nach weiteren Sekunden wird die Verbindung automatisch wiederhergesteltt … dann bricht sie wieder ab … und so weiter. Der Debug String zeigt:
[i]"HTTP/1.1 500 Internal Server Error
Server: RC7000/1.0
Content-Type: text/xml; charset=utf-8
Content-Length: 434
Connection: close
IPS-Seitig sieht das doch ganz gut aus. Nur Dein Modbus-Controler versteht scheinbar nicht, was Du von ihm willst, schickt eine Errormessage und beendet dann von sich aus die Verbindung.
Auf diesem RC7000 kann ich einwandfrei vom Internet Explorer aus zugreifen, leider sind die von mir gesuchten Daten tief in den Seiten verschachtelt und ich wüsste nicht wie ich auf die richtige Seite via IPS zugreifen könnte um mir den fraglichen Wert herauszuziehen. Diese Art von Verbindung klappt einwandfrei
Alternativ läuft ein kleines Progrämmchen vom Hersteller welches die gewünschten Werte zyklisch in dem Programmfenster updatet … da kann ich meines Wissens nach auch nicht via IPS zugreifen.
Nächste Möglichkeit wäre das Auslesen eines .cvs Files welches das obige Progrämmchen mit den interessanten Daten füllt - da fehlt mir die Möglichkeit den Zugriff von IPS mit dem des Programmes zu synchronisieren.
=> die beste Möglichkeit wäre doch direkt mit dem Gerät zu kommunizieren, ich möchte auf meinem Server nicht unnötige Last verursachen …
ich weiß der Thread ist sehr alt, aber vielleicht ja doch für den ein oder anderen noch interessant
da ich in den Besitz einer RC7000 Schnittstelle für den e-bus (TEM) Regler gekommen bin und auch eine Beschreibung der Schnittstelle habe, zwar in einem sehr frühen Stand aber sie funktioniert
Leider habe ich Probleme mit der SOAP Schnittstelle in php…
Daher wäre es prima wenn vielleicht einer Helfen könnte.
Hier ein Beispiel das in html das funktioniert.
Viele Grüße
Stefan
<head>
<title>ICOM Soap SimpleTest</title>
<style type="text/css">
.style1
{
width: 123px;
}
</style>
<script type="text/javascript">
<!--
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari, IE>=7.0
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer < 7.0
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
}
}
}
return xmlHttp;
}
function stateChanged()
{
if (xmlHttp.readyState==4) {
document.getElementById("txtStatus").innerHTML= "("+xmlHttp.status+") "+ xmlHttp.statusText;
var response= xmlHttp.responseXML.documentElement;
var value= response.getElementsByTagName("value")[0].firstChild.data;
document.getElementById("txtHint").innerHTML=value;
alert ("2");
}
}
function GetDP(oid)
{
alert ("1");
var xml=
'<?xml version="1.0" encoding="utf-8"?>'
+'<soap:Envelope'
+' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'
+' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
+' xmlns:xsd="http://www.w3.org/2001/XMLSchema">'
+'<soap:Body>'
+'<readDpRequest xmlns="http://ws01.lom.ch/soap/">'
+'<ref xmlns="">'
+'<oid>' + oid + '</oid>'
+'</ref>'
+'<startIndex xmlns="">0</startIndex>'
+'<count xmlns="">-1</count>'
+'</readDpRequest>'
+'</soap:Body>'
+'</soap:Envelope>';
return xml;
}
function showHint(oid, url)
{
document.getElementById("txtStatus").innerHTML= "Status= ...";
document.getElementById("txtHint").innerHTML= "..";
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null) {
return;
}
var soapAction= "http://ws01.lom.ch/soap/readDP";
xmlHttp.onreadystatechange=stateChanged;
var sRequestBody;
sRequestBody= GetDP(oid);
xmlHttp.open("POST" , url , true, "OEM", "123");
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttp.setRequestHeader("SOAPAction", soapAction);
xmlHttp.send(sRequestBody);
}
//-->
</script>
</head>
<body>
<h3>ICOM einfacher WebService-Test mit AJAX
<input type="button" value="Quadrat errechnen" onclick="cmd()">
</h3>
<p>Wähle ein Service aus der untenstehenden Box und drücke die
"Invoke"-Taste</p>
<table>
<tr>
<td class="style1">URL:</td>
<td><input id="URL" name="url" type="text" style="width: 199px"
value="http://192.168.2.34/?wsdl" />
</td>
</tr>
<tr>
<td class="style1">Web Services (readDP(OID)): </td>
<td>
<select id="WebServices" style="width: 199px"
name="WebServices">
<option selected="selected" value="/0/0/2">DateTime</option>
<option value="/1/0/0/11/0">Version</option>
<option></option>
</select>
<!--
<input id="Button1" type="button" value="Invoke the Web Service" onclick="showHint('/0/1/0/2','http://192.168.2.34/?wsdl')" //-->
<input id="Button1" type="button" value="Invoke the Web Service" onclick="showHint('/1/2/0/120/5','http://192.168.2.34/?wsdl')"
/>
</td>
</tr>
</table>
<p> </p>
<hr />
<table>
<tr>
<td class="style1">Response:</td>
</tr>
<tr>
<td>HTTP Status:</td>
<td><span id="txtStatus">cbvdfhh</span></td>
</tr>
<tr>
<td>SOAP Resp:</td>
<td><span id="txtHint"></span></td>
</tr>
</table>
</body>
</html>
Du machst das mit den Parametern im Funktionsaufruf leider falsch. Du darfst keinen XML Content in dem Aufruf von readDP über geben, sondern SoapParameter. Beispiele sind bei den SOAP-Scripten der Fritzbox (Forum und Wiki) oder auch bei PHP.net.
OID wäre dein Parameter.
Result enthält dann das Ergebnis der Funktion, also deine Temperatur.
Das simpleloadxml gehört zur Anrufliste der FB, und hatte hier erst mal nix zu suchen.
Michael
danke für die Hilfe, leider komme ich aber trotzdem nicht wirklich weiter, werde noch ein wenig herumprobieren…
Vielleicht hat jemand ja noch ein paar Infos für mich…
Alternativ so wie im JavaScript.
Alles zu Fuß (Content und Header) erzeugen und dann per Socket (PHP nicht IPS-Socket) raushauen und Antwort auswerten (altes Script für UP/Downstream der FB von paresy ist ein schönes Beispiel).
Gibt es denn eine Doku über die Funktionen ? Vielleicht sogar eine XML Datei ? Sonst ist das ohne HW immer schwer umzusetzen.
Michael
Mit dieser WSDL wird das noch einfach (glaub ich)
Die musst du dann im SoapClient angeben (wo du null stehen hast).
Und brauchst dann auch location Uri etc nicht selbst raus suchen, das steht ja in der WSDL.
Einfach mal etwas einlesen (selbst habe ich es mit WSDL noch nicht gemacht).
so jetzt klappt es endlich mit der Schnittstelle.
das script ist zwar noch nicht schön aber es funktioniert erstmal mit ein paars Werten
Schreiben der Werte sollte so auch möglich sein, nächster Schritt
Übrigens die RC7000 Schnittstelle sollte mit den unterschiedlichsten Herrstellern, die TEM Regler, verbaut haben passen, da ich eine von Kroll an meiner Hautec habe…
Vielen Dank nochmal an Michael für die Unterstützung
ich bin auch gerade im Kampf mit der Anbindung Ebus // IPSymcon. Genauer gesagt Weishaupt WRsol 2.1 // IPSymcon.
Bei mir funktioniert das von dir gepostete SOAP Script leider nicht. Fehlermeldung:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‚http://192.168.50.167/?wsdl‘ : failed to load external entity „http://192.168.50.167/?wsdl“
in C:\IP-Symcon\scripts\16941.ips.php:9
Im Script hab ich die obersten Zeilen auf die IP meines RC7000 angepasst. Ein direkter Aufruf des angegebenen Links im Browser des Servers funktioniert… :