wsdl에서 제공하는 읽기 기능을 사용하여 smartserver 데이터 포인트를 가져 오는 콘솔 응용 프로그램을 작성합니다. suds를 통해 나는 smartserver에 성공적으로 연결하여 메서드와 유형 목록을 제공하는 클라이언트 wsdl을 인쇄 할 수 있습니다. 어떻게 suds를 통해 이러한 방법을 사용하여 데이터를 가져올 수 있습니까? 필자는이 서버의 프로그래머 문서에 따라 데이터 포인트를 주어야하는 print client.service.List()를 시도했지만이 URL은 urlopen 오류를 발생시킵니다. [Errno 13] 권한이 거부되었습니다. 설명서는 데이터를 가져 오기 위해 SOAP를 사용하는 예제 코드를 제공하지만이 코드를 suds로 많이 사용하고 있으므로 간소화되었으며 client.service.somemethod (매개 변수) 만 수행해야합니다. 지금까지 내 코드를 첨부했으며 목록 클라이언트를 인쇄 할 때 얻을 수있는 메소드 중 하나입니다.suds를 사용하여 Smartserver 2.0에서 wsdl을 통해 데이터 포인트를 가져옴
대단히 감사합니다.
import suds
from suds.client import Client
from suds.transport.http import HttpAuthenticated
url = "http://example/WSDL/v4.0/foo.WSDL"
client = Client(url, username='foo', password='bar')
myheaders = dict(userid='foo', passwd='bar')
client.set_options(soapheaders=myheaders)
name = client.factory.create('ns0:E_xSelect')
print name
name['xSelect'] = """//Item[UCPTpointName = "Net/MB485/MAIN POWER/Fb/PowerSum"]"""
print client.service.Read(name)
내가 콘솔에서 무엇을 얻을 설명서의
Ports (1):
(iLON100httpPort)
Methods (8):
Clear(ns0:Item_Coll iLonItem,)
Delete(ns0:Item_Coll iLonItem,)
Get(ns0:Item_Coll iLonItem,)
InvokeCmd(ns0:Item_Coll iLonItem,)
List(ns0:E_xSelect iLonItem,)
Read(ns0:Item_Coll iLonItem,)
Set(ns0:Item_CfgColl iLonItem,)
Write(ns0:Item_DataColl iLonItem,)
예제 코드는 당신에게 내가 문제를 알아 낸 아이디어
static void Main(string[] args)
{
iLON_SoapCalls.BindClientToSmartServer(); iLON_SmartServer.iLON100portTypeClient SmartServer = iLON_SoapCalls._iLON;
// -------------- READING A DATA POINT VALUE --------------
try
{
// instantiate the member object
iLON_SmartServer.Item_Coll itemColl = new iLON_SmartServer.Item_Coll(); itemColl.Item = new iLON_SmartServer.Item[1];
itemColl.Item[0] = new iLON_SmartServer.Dp_Data();
// set the DP name
itemColl.Item[0].UCPTname = "Net/LON/iLON App/Digital Output 1/nviClaValue_1";
// set maxAge to get the updated DP value in case it has been cached for more than 10 // seconds on the Data Server (see section 4.3.4.1 for more information) ((iLON_SmartServer.Dp_Data)(itemColl.Item[0])).UCPTmaxAge = 10; ((iLON_SmartServer.Dp_Data)(itemColl.Item[0])).UCPTmaxAgeSpecified = true;
//call the Read Function
iLON_SmartServer.Item_DataColl dataColl = SmartServer.Read(itemColl);
if (dataColl.Item == null)
{
// sanity check. this should not happen
Console.Out.WriteLine("No items were returned");
}
else if (dataColl.Item[0].fault != null)
{
// error
Console.Out.WriteLine("An error occurred. Fault code = " +
dataColl.Item[0].fault.faultcode +
". Fault text = %s." +
dataColl.Item[0].fault.faultstring);
}
else
{
// success
Console.Out.WriteLine("Read is successful");
Console.Out.WriteLine(((iLON_SmartServer.Dp_Data)dataColl.Item[0]).UCPTname + " = " + ((iLON_SmartServer.Dp_Data)dataColl.Item[0]).UCPTvalue[0].Value + "\n");
}