Gibt es zu den Access violations News? So ist es nicht wirklich nutzbar, wenn einige wichtige Datenpunkte nicht erstellt werden können (z.B. die Fehleranzeige ist unverzichtbar).
Danke, kjb
Gibt es zu den Access violations News? So ist es nicht wirklich nutzbar, wenn einige wichtige Datenpunkte nicht erstellt werden können (z.B. die Fehleranzeige ist unverzichtbar).
Danke, kjb
Es gab glaub ich einen Workarround den ich gefunden hatte um auch die DP mit Fehler auswerten zu koennen. Schaus mir an, bin unterwegs aktuell und weiss nicht ob der mit der neuen FW tut Aber denke ja. Kannst du PHP gut? Wenn du den Inhalt meiner Scriptes verstehst kannst es nutzen bis es native geht. Die profis hier haben aktuel viel zu tun mit einer neuen Version.
Die AccessViolation hatte ich gar nicht mehr auf dem Schirm. Schaue ich mir an.
paresy
@ swissboy: Danke für die Hilfe. PHP kann ich ordentlich aber nicht auf höchstem Niveau.
@ paresy: Das wäre cool. Ist ja schon eine sehr schöne Sache, wenn es flutscht
ok mit dem Code unten kannst du jeden DP auslesen. über das Webinterface. Einfach gesagt macht das die function ElcoHeating_getDp dort und im Code musst du einfach den DP-Punkt ändern auf den, denn du möchtest. Dann ist noch wichtig, du brauchst für die abfrage eine gültige SSID, die wird geprüft im code, wenn sie nicht mehr gültig ist kommt der Access denied und eine neue ssid wird abgefragt, gespeichert und hinterlegt. Ist alles in dem Code drinn. Frage so insbesonders die Error-DP’s ab. Hab ich mal so entwickelt und es hat einige beispiel dp punkte in dem Code. ACHTUNG, es sind andere DP-Punkte Nummern als die im IPS Konfigurator… du musst diese DPS aus dem Webinterface abschreiben.
Hier noch die URL für den WWW-Reader der die aktuelle SSID rausholt im Code:
http://192.168.3.59/main.app?user=Deinuser&pwd=DeinpasswortimWebinterface
Gruss
//ElcoHeating_getDp Function laden
function ElcoHeating_getDp($plantItemId)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla 4.0');
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
$service="getDp";
curl_setopt ($ch, CURLOPT_URL, 'http://'.trim(GetValueString(39485 /*[DIVERSE DEVICES\WOHNRAUM\Alle\HEIZUNG\#DVALHEIZUNG\sSDVALHEIZUNGIP]*/)).'/ajax.app?SessionId='.trim(GetValueString(35551 /*[WWWPARSER\Heizung\sKSDVTEHEIZUNGSSID]*/)).'&service='.trim($service).'&plantItemId='.trim($plantItemId));
$object = json_decode(curl_exec ($ch), true);
$value = trim($object["value"]);
curl_close($ch);
return $value;
}
set_time_limit(50); //Timeout auf 30s setzen
$timestamp=time();
$MTdatum = date("m",$timestamp);
$YEdatum = date("y",$timestamp);
//-------------------------------------------------------------------------------------------------------
//Auszulesende Elemente müssen definiert werden
//Heissgastemperatur 1 - 1731 Sample Value: 31,8 Grad
$value = ElcoHeating_getDp(1731);
//echo $value;
//-------------------------------------------------------------------------------------------------------
if($value=="Access denied")
{
$bool = Sys_Ping(GetValueString(39485 /*[DIVERSE DEVICES\WOHNRAUM\Alle\HEIZUNG\#DVALHEIZUNG\sSDVALHEIZUNGIP]*/),30);
if($bool)
{
SetValueBoolean(51732 /*[DIVERSE DEVICES\WOHNRAUM\Alle\HEIZUNG\#DVALHEIZUNG\bSDVALHEIZUNGDEVIP]*/, True);
//Neue Session-ID nötig.. vielleicht Device oder IPS länger down..?
//RUN WWW Browser
//WWWReader_SetPage(56501 /*[Objekt #56501 existiert nicht]*/,"http://IPOZW/cgi-bin/rc?116");
//IPS_ApplyChanges(56501 /*[Objekt #56501 existiert nicht]*/);
WWWReader_UpdatePage(53677 /*[#DVALWRHEIZUNGSESSID]*/);
}
else
{
SetValueBoolean(51732 /*[DIVERSE DEVICES\WOHNRAUM\Alle\HEIZUNG\#DVALHEIZUNG\bSDVALHEIZUNGDEVIP]*/, False);
}
}
elseif($value!="")
{//SSID Stimmt somit weiter mit auslesen
//Zuerst den bestehenden Waermepumpenstatus in Variable übernehmen
//Status Wärmepumpe - 1418 Sample Value: Verdichter 1 ein
SetValue(26034 /*[Objekt #26034 existiert nicht]*/, ElcoHeating_getDp(1418));
IPS_Sleep(3000);
//LETZTE AKTIVITAET DER WAERMEPUMPE Zeitstempel - 1421 Sample Value: 21. November 2011 13:50
SetValue(42256 /*[Objekt #42256 existiert nicht]*/, ElcoHeating_getDp(1421));
IPS_Sleep(3000);
//Statuscode Historie Eintrag 1 - 1422 Sample Value: Zwangsabtauen aktiv
SetValue(55864 /*[Objekt #55864 existiert nicht]*/, ElcoHeating_getDp(1422));
IPS_Sleep(3000);
//LETZTER FEHLER DER WAERMEPUMPE Zeitstempel - 1058 Sample Value: 16. Dezember 2010 00:32
SetValue(16528 /*[Objekt #16528 existiert nicht]*/, ElcoHeating_getDp(1058));
IPS_Sleep(3000);
//Fehlercode Historie Eintrag 1 - 1059 Sample Value: 247:Abtaustörung
SetValue(11295 /*[Objekt #11295 existiert nicht]*/, ElcoHeating_getDp(1059));
IPS_Sleep(3000);
//Verdampfertemperatur - 1758 Sample Value: -12,4 Grad
SetValue(46099 /*[Objekt #46099 existiert nicht]*/, ElcoHeating_getDp(1758));
IPS_Sleep(3000);
//Temperaturdifferenz Abtauen Istwert - 1759 Sample Value: 19 Grad
SetValue(29051 /*[Objekt #29051 existiert nicht]*/, ElcoHeating_getDp(1759));
IPS_Sleep(3000);
//Temperaturdifferenz Abtauen Sollwert - 1760 Sample Value: 21,4 Grad
SetValue(34458 /*[Objekt #34458 existiert nicht]*/, ElcoHeating_getDp(1760));
IPS_Sleep(3000);
}
else
{
//fehler
}
}
Bisher nichts mit WWW Reader gemacht. Vermutlich Anfängerfrage aber wie kommt die Session ID in die Variable ‚35551‘?
Durch den www reader wird diese variable mit der ssid gefuellt. Gib mal im webbrowser die URL des wwwreaders ein dann siehst du es sicher.
Braucht aber noch einen Text Parser und die entsprechenden Reglen oder wär das einfacher gegangen? Naja, eben keine Ahnung vom WWW Reader
Session ID funktioniert nun, Antwort ist aber immer ein leerer String:
{„service“:„getDp“,„plantItemId“:„700“,„value“:"",„unit“:"",„hasEni“:„false“}
Was mach ich falsch?
Danke übrigens für die freundliche Hilfe. Einfacher wär’s natürlich, wenn wir diesen Umweg nicht gehen müssten
Poste bitte mal den ganzen Code wie du ihn angepasst hast und einen echo/ausgabe von
curl_setopt ($ch, CURLOPT_URL, 'http://'.trim(GetValueString(39485 /*[DIVERSE DEVICES\WOHNRAUM\Alle\HEIZUNG\#DVALHEIZUNG\sSDVALHEIZUNGIP]*/)).'/ajax.app?SessionId='.trim(GetValueString(35551 /*[WWWPARSER\Heizung\sKSDVTEHEIZUNGSSID]*/)).'&service='.trim($service).'&plantItemId='.trim($plantItemId));
also echo ‚http://‘.trim(GetValueString(39485 /[DIVERSE DEVICES\WOHNRAUM\Alle\HEIZUNG#DVALHEIZUNG\sSDVALHEIZUNGIP]/)).’/ajax.app?SessionId=’.trim(GetValueString(35551 /[WWWPARSER\Heizung\sKSDVTEHEIZUNGSSID]/)).’&service=’.trim($service).’&plantItemId=’.trim($plantItemId);
Wie sieht der finalstring/url bei dir aus?
Gruss
Final String:
http://10.10.11.33/ajax.app?SessionId=72348260-593b-46bd-b464-f490d452c107&service=getDp&plantItemId=500
mit dieser Antwort:
Array
(
[service] => getDp
[plantItemId] => 500
[value] =>
[unit] =>
[hasEni] => false
)
<?
function OZW_getDp($plantItemId)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla 4.0');
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
$service="getDp";
curl_setopt ($ch, CURLOPT_URL, 'http://10.10.11.33/ajax.app?SessionId='.trim(GetValueString(22517 /*[OZW\SessionID]*/)).'&service='.trim($service).'&plantItemId='.trim($plantItemId));
//echo 'http://10.10.11.33/ajax.app?SessionId='.trim(GetValueString(22517 /*[OZW\SessionID]*/)).'&service='.trim($service).'&plantItemId='.trim($plantItemId);
$object = json_decode(curl_exec ($ch), true);
//print_r ($object);
$value = trim($object["value"]);
curl_close($ch);
return $value;
}
set_time_limit(50); //Timeout auf 30s setzen
$timestamp = time();
$MTdatum = date("m",$timestamp);
$YEdatum = date("y",$timestamp);
//-------------------------------------------------------------------------------------------------------
//Abfrage um zu überprüfen ob Session ID noch aktuell ('Access denied' wenn nicht mehr aktuell)
$value = OZW_getDp(500);
echo $value;
//-------------------------------------------------------------------------------------------------------
if($value=="Access denied")
{
$bool = Sys_Ping("10.10.11.33",30);
if($bool)
{
SetValueBoolean(42506 /*[OZW\OZW erreichbar]*/, True);
WWWReader_UpdatePage(18790 /*[WWW Reader OZW Manuell]*/);
}
else
{
SetValueBoolean(42506 /*[OZW\OZW erreichbar]*/, False);
}
}
elseif($value!="")
{//SSID gültig, somit weiter mit auslesen
SetValue(15062 /*[OZW\Test String]*/, OZW_getDp(700));
IPS_Sleep(3000);
}
else
{
//fehler
}
?>
Danke, Samstag geniessen nicht vergessen
Das passt aber gibts es bei dir den DP 500? Vermutlich nicht. Die DPs hier werden automatisch im webinterface OZW generiert. Schau mal im webinterface auf eine statusseite des Devices. Dann Quelltext und von da DP Wert uebernehmen ins Script und dann kommt vermutlich ne Antwort. Nimm Vorallem einen lesewert also zuerst nicht einen den du du verändern-setzen kannst.
Ich dachte der Datenpunkt sei identisch mit dem ‚Bedienzeilen‘ Wert. Jetzt geht’s.
Wirklich herzlichen Dank für die Zeit und schönen 1. Advent.
Grüsse aus dem verschneiten Uster, kjb
Das ist etwas speziell meinte ich in dem Initial-Beitrag. Uster…ZH? Dann wärest du ja nur ein paar Meter weg…
Ja dann haben wir drei Nummern für den gleichen Wert, DP-Wert Webseite, Bedienzeilenwert und Wert in IPS…
Ganz genau wäre Greifensee, ZH
Genau drei sind’s. Greifensee, da bin ich aufgewachsen.was steuerst du denn mit dem OZW?
CTA Wärmepumpe Sole-Wasser. Gut zu wissen jemanden in der Nähe zu haben
Ah cool, ja eh da können wir mal auf einen Kaffe was machen oder einden Stammtisch in ZH wenn es noch mehr gibt
Ajo zudem ich denk mein Script macht genau das gleiche wie die Instanz in IPS. Einfach kann man mit dem Konfigurator etc. das Ganze viel einfacher zusammenklicken und muss nicht php kennen. Du hast ja in der Instanz auch einen Reader indem du ein Passwort und einen Usernamen konfigurierst. Du definierst einen Leseintervall und danach werden die Variablen gefüllt. Ist auch leider auch ein ständiges abfragen. Ganz schön wäre es natürlich, wenn man in IPS die Änderungen als Push erhalten würde und nicht immer danach pollen müsste. Das ist aber eher ein Problem/Beschränkung seitens der SW Siemens als von IPS. Zu wenig kenne ich mich mit AJAX aus, ob man da vielleicht irgendwie eine Callbackroutine oder so machen könnte die nur Änderungen an einen Host zurück liefert… falls du da ganz fit bist findest du ja vielleicht noch etwas besseres. Hatte schon ein zeitchen für dieses Abfrage zu tun und die DP’s heraussuchen.
In 3.1 immer noch vorhanden…
Geht da noch was oder bleibt das so?
kjb