SOAP - Befehle vom APACHE-Server aufrufen

Hallo,
ich will gerade vom APACHE-Server aus Daten vom IPS-Server laden, dabei möchte ich die SOAP-Befehle „GetObject“ und „GetVariable“ nutzen, laut Doku sollte doch der SOAP-Befehl gleich den PHP-Befehlen sein (jedoch ohne Prefix „IPS_“)

… bei mir liefert aber beide Befehle kein ARRAY als Rückgabewert zurück ???

… und somit steht in APACHE-ERROR-Log, dann


//wenn PHP-Version: 5.1.6
PHP Fatal error:  Cannot use object of type stdClass as array in K:\\WWW\\.....

//wenn PHP-Version: 5.2.9-2
PHP Catchable fatal error:  Object of class stdClass could not be converted to string in K:\\WWW\\.....

folgende Programmzeilen (PHP-Version:5.1.6), geben „Object id #2“ aus

<?php
$ObjektID = 14267;

$IIPSObjectManager = new SoapClient("http://localhost:3773/wsdl/IIPSObjectManager");
$VarObjArray = $IIPSObjectManager->GetObject($ObjektID);

print("<h1>" . $VarObjArray . "</h1>");

?>

Hat dazu jemand eine Idee woran das liegen kann bzw. was ich da falsch mache

Danke
tgusi74

Hast Du es mal so probiert.

print_r("<h1>" . $VarObjArray . "</h1>"); 

Hallo RWN,
das macht keinen Unterschied

… eigentlich wollte ich nur damit zeigen das hier eben wenn man einfach die Variable „$VarObjArray“ ausgeben will die Ausgabe „Object id #2“ erscheint, normalerweise wenn man eine Ausgabe auf ein Array versucht erscheint „Array“

eigentlich will ich natürlich einen Arraywert erhalten also $VarObjArray[‚ObjectType‘] und hier erzeugt mir dann der Apacheserver eben den Fehler „PHP Fatal error: Cannot use object of type stdClass as array in K:\WWW…“ anstatt eben eine „2“ für eine Variable zurückzugeben

… aber z.B. der Befehl „GetChildrenIDs“ geht ohne Probleme, dieser gehört auch der Gruppe „IIPSObjectManager“ an und liefert eben ein Array mit allen ChildIDs zurück

tgusi74


echo $VarObjArray->ObjectName;

Funktioniert super :slight_smile:


print_r($VarObjArray); //Geht auch

Hier noch ein Beispiel zum Variablen Auslesen:


 //Remote VariableID
 $id = 49180 /*[Objekt #49180 existiert nicht]*/;

 //Wert auslesen
 $IIPSVariableManager = new SoapClient("http://localhost:3773/wsdl/IIPSVariableManager");
 echo $IIPSVariableManager->ReadVariableFloat($id);

paresy

Danke PARESY,
wenn man sich etwas besser mit der objektorientierten Programmierung auskennen würde :smiley:

Habe jetzt mal einen Test gemacht

<?php
$IIPSObjectManager = new SoapClient("http://localhost:3773/wsdl/IIPSObjectManager");
$IIPSVariableManager = new SoapClient("http://localhost:3773/wsdl/IIPSVariableManager");

$ObjektID = 57028;

print("<H1>GetObject(".  $ObjektID .")</H1>");
$VarObjArray = $IIPSObjectManager->GetObject($ObjektID);

print_r($VarObjArray);
print("<H3>Objekttyp der ObjektID " . $ObjektID . " ==> Typ='" . $VarObjArray->ObjectType  . "'</H3>");

print("<H1>GetVariable(". $ObjektID . ")</H1>");
$VariablenInfo = $IIPSVariableManager->GetVariable($ObjektID);

print_r($VariablenInfo);
print("<H3>Typ der VariableID " . $ObjektID . " ==> Typ='" . $VariablenInfo->VariableValue->ValueIndex->IndexType . "'</H3>");
?>

dieser gibt mit folgendes aus

GetObject(57028)

stdClass Object ( [ParentID] => 35554 [ObjectID] => 57028 [ObjectName] => AGG01_HOUR [ObjectInfo] => [ObjectSummary] => [ObjectType] => otVariable [ObjectPosition] => 0 [ObjectFlag] => 0 [IsPersistent] => 1 [HasChildren] => [ChildrenIDs] => Array ( ) ) 

Objekttyp der ObjektID 57028 ==> Typ='otVariable'


GetVariable(57028)

stdClass Object ( [VariableID] => 57028 [VariableProfile] => stdClass Object ( [ProfileName] => [Prefix] => [Suffix] => [MinValue] => 0 [MaxValue] => 0 [StepSize] => 0 [Digits] => 0 [NamedValues] => Array ( ) ) [VariableUpdated] => 2009-05-26T23:40:35.984+02:00 [VariableChanged] => 2009-05-26T23:40:35.984+02:00 [VariableValue] => stdClass Object ( [ValueIndex] => stdClass Object ( [IndexType] => itInt [IndexInt] => 0 [IndexStr] => ) [ValueType] => vtInteger [ValueBoolean] => [ValueInteger] => 123456 [ValueFloat] => 0 [ValueString] => [ValueVariant] => [ValueArray] => Array ( ) ) [VariableIsBinary] => ) 

Typ der VariableID 57028 ==> Typ='itInt'

Habe nun dazu nochmals einige Fragen,

  1. von woher weis ich das 'otVariable" eine Variable ist / ‚itInt‘ ein Integer / der Zeitstempel folgendes Format ‚2009-05-26T23:40:35.984+02:00‘ hat ???
    ==> oder ist das SOAP-Insiderwissen ??
    ==> kann man das wo nachlesen ??

  2. wenn ich einen Variablenwert über SOAP auslesen will muss ich immer zuvor den Variablentyp ermitteln (wenn unbekannt),
    bevor ich mit „ReadVariable*“ lesen kann (oder gibts da auch eine Funktion wie unter IPS-PHP „GetValue“)

Danke
tgusi74

  1. Ist im IP-Symcon SDK so definiert. Kannst du dort nachlesen.
  2. Du musst vorher den Typ bestimmen oder am besten direkt vorher wissen.

Zeitstempel:


 echo date("d.m.y H:i", strtotime($var->VariableUpdated));

VariablenTyp:


echo $var->VariableValue->ValueType;

paresy