You are hereBlogs / hvandervalk's blog / SOAP en PHP in een iLon omgeving

SOAP en PHP in een iLon omgeving


By hvandervalk - Posted on 16 December 2010

Voor een PHP opdracht in de energie markt wil ik een iLon server uitlezen. Er zijn meerdere methodes om een iLon server uit te lezen. Naast de handmatige opties - via HTTP en FTP - kies ik hier voor de SOAP oplossing. Door voor de SOAP oplossing te kiezen heb ik invloed op wat ik op haal en dat ik met de gegevens doe. Tevens is het gehele proces van het uitlezen te automatiseren en zijn er geen handmatige acties meer vereist. Na het ophalen van de informatie hoeft de klant alleen de informatie te controleren op betrouwbaarheid.

SOAP Client

Voor het aanmaken van een SOAP connectie maak ik gebruik van onderstaande code.

/**
* Create a client SOAP connection
* @param $ip The requested IP address
* @return the SOAP client
*/
function create_soap_client($ip = '') {
   if ($ip == '') {
     $ip = variable_get(PROJECT_IP, PROJECT_IP_DEFAULT);
   }
   ini_set('max_execution_time', 0);
   $client = new SoapClient(get_wsdl_location($ip), array('location' => get_wsdl_location($ip), 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP, "cacheWSDL"   => true));
   ini_set('max_execution_time', 0);
   return $client;
}

/**
* Get the location of the WSDL
* @param $ip
* @return unknown_type
*/
function get_wsdl_location($ip = '') {
   if ($ip == '') {
     $ip = variable_get(PROJECT_IP, PROJECT_IP_DEFAULT);
   }
   return "http://$ip" . variable_get(PROJECT_SOAP_WSDL, PROJECT_SOAP_WSDL_DEFAULT);
}

Gegevens ophalen

Nadat de SOAP Clinet is gemaakt kan je via een XML call de gewenste informatie ophalen.

function iLonReadValues($client, $max = 20, $filter = '//Item[@xsi:type="Dp_Cfg"]')
{
  // List or Get all channels on the SmartServer:
  // read a DP, one can use any request from the 'i.LON SmartServer Programmer�s Reference' here
  $str = '';
  if ($max > 0) {
    $str = "[position()<$max]";
  }
  $dp_data = $client->Read(new SoapVar(
      '<Read xmlns="http://wsdl.echelon.com/web_services_ns/ilon100/v4.0/message/">'
      . ' <iLonItem>'
      . '   <xSelect>'
      .       $filter . $str
      . '   </xSelect>'
      . '  </iLonItem>'
      . '</Read>',
      XSD_ANYXML)
  );

  // show the result
  return $dp_data;
}