擴(kuò)充其它型態(tài)。
[0042]整數(shù)型態(tài),可以視需求定義有效范圍(range )屬性。
[0043]range
有效范圍,選擇性限制,為兩個整數(shù)的array,有效范圍包含這兩個整數(shù)。例如:{"value":2,"range": [O, 4] },有效范圍為 O 蘭 value = 4。
[0044]string
字符串型態(tài),可以視需求定義最大長度(maxLength )與有效字符串(validList )屬性。
[0045]最大長度,選擇性限制。值為用來表示最大長度的整數(shù)。為有效字符長度(UTF-8)ο例如:{ "value": "Smart PnP〃,"maxLength": 8 },最大有效長度為8,正好是字符串Smart PnP的長度。在軟件中若以C字符串存放,array長度需大于等于9以確保有足夠空間加入 NULL terminator ο
[0046]設(shè)置有效字符串選項,選擇性限制。為一字符串a(chǎn)rray。值只能是這個array的其中—個。例如:{ "value": "bright","validList": ["bright","normal","dark"]},即有效字符串有〃bright〃、〃normal〃與〃dark〃三種D
[0047]State Subscript1n
對 state URL (底下以 /api/spnp/FixedApplianceBasic/state/ 為例)發(fā)送SUBSCRIBE請求,可以訂閱裝置狀態(tài)的變動,具體代碼如下:
SUBSCRIBE /api/spnp/FixedApplianceBasic/state/ HTTP/1.1
HOST: 10.70.10.21
CALLBACK: callback URL
NT: spnp:event
TIMEOUT: Second-3600
其中,各字段定義為:HOST:訂閱者IP地址,CALLBACK:消息回呼URL,NT:通知類型(Notificat1n Type) ? TIMEOUT:請求的訂閱持續(xù)時間。
[0048]若訂閱請求正確,將會回傳如下的消息:
HTTP/1.1 200 OK
DATE: Thuj 03 Jul 2014 04:07:37 GMTSERVER: OS/vers1n UPnP/1.0 product/vers1nSID: uuid:subscript1n uuidTIMEOUT: Second-3600
其中各字段定義為:DATE:響應(yīng)時間,SERVER:系統(tǒng)版本,SID:本訂閱的通用唯一標(biāo)識符,TIMEOUT:允許的訂閱持續(xù)時間。
[0049]若被訂閱裝置有狀態(tài)變化時,就會發(fā)送如下面的消息到訂閱者指定的callbackURL0具體代碼如下:
NOTIFY callback path HTTP/1.1
HOST: client address
NT: spnp:event
NTS: spnp:propchange
SID: uuid:subscript1n uuid
SEQ: 205
CONTENT-TYPE: applicat1n/jsonCONTENT-LENGTH: 39
{ ,,locat1n,,: 1,〃name〃:,,Bedroom TV〃 }
其中,各字段定義為HOST:訂閱者IP地址,NT:通知類型(Notificat1n Type),NTS:通知子類型(Notificat1n Sub Type) ? SID:本訂閱的通用唯一標(biāo)識符,SEQ:本訂閱消息的通知序號,CONTENT-TYPE:消息格式,C0NTENT-LENGTH:消息長度。
[0050]Services
Service為以REST訂制的服務(wù)。一般服務(wù)應(yīng)置于HTTP服務(wù)中/api/spnp/[ServiceName]/下,使用HTTP GET連上該網(wǎng)址可以取得服務(wù)的功能描述Jg務(wù)的所有狀態(tài)則置于該服務(wù)路徑下的state/,也就是/api/spnp/[Service Name]/state/o客戶端可以對該URL直接取得所有的狀態(tài)。也可對特定狀態(tài)逐一取得。對于特定狀態(tài)的修改,只需對其post其value所需要的新值即可。
[0051]基本定義
個別特定裝置規(guī)范均依循下面所述相同格式制定。
[0052]功能描述
針對裝置的/api/spnp/[Service Name] /發(fā)送GET請求,可以取得該服務(wù)的功能描述,格式如下:
{
"service": "[URN of the service]",
〃stateURL〃: api/spnp/[Service Name]/state/〃,
〃controlList〃: {
〃[ControlNamel]〃: {
〃url〃:〃/api/spnp/[Service Name]/[Entry]〃,
〃methocT: " [HTTP method, like GET, POST]'
〃data〃: { [Data format descript1n] }
},
〃[ControlName2]〃: {
”-1 //// , //
url: * ,
,,target,,: ,,[Invoke target identifier],,,
"method":"[HTTP method, like INVOKE]",
〃data〃: { [Data format descript1n] }
}
},
〃states〃: {
〃[Statel]〃: { [StateType of Statel] },
"[State2]": { [StateType of State2] }
}
}
Data format descript1n
數(shù)據(jù)格式描述定義。以下描述調(diào)用一個控制(Control )時所附帶的DATA字段數(shù)據(jù)格式。參數(shù)數(shù)據(jù)必須為一 JSON dict1nary ο利用此dict1nary來串起多個變動參數(shù)。而描述該數(shù)據(jù)形式的JSON也是一個dict1nary,但值部分改為依State Type章節(jié)描述的變量定義,再補上〃type〃元素來記錄變量的類別。例如integer就會補上{ 〃type〃:"integer" }。
[0053]例如,某一控制需要以下格式的參數(shù)
{
”-,////-1//
name1: valueI ,
〃name2〃: 〃value2〃,
〃name3〃: 24 }
其數(shù)據(jù)格式描述將會是類似下面表示的樣式
{
name1: { type: string I, namez: { type: string I,
”0 //「// j” //.,// ?
nameJ: { type:1nteger I
}
為具體地說明Service的描述,底下以兩項具體服務(wù)作為實例說明。
[0054]FixedApplianceBasic Service
固定式家電服務(wù),設(shè)裝置位置與自訂名稱。
[0055]功能描述具體代碼如下:
{
,,service,,: 〃urn: Smart PnP-org: service: FixedApplianceBasic: 1〃,
〃stateURL〃: 〃/api/spnp/FixedApplianceBasic/state/,,,
〃controlList〃: {},
,,states,,: {
,,power,,: { 〃value〃:l,,,compatibility,,: ,,controllable,subscribable,,, ^type^:^integer^, "range":[0,1]},
,,locat1n,,: {〃value〃:0,,,compatibility,,: ,,controllable,subscribable,,,〃type:1nteger I,
””f //I// // T.T4γγλ-?τ//
name: { value: Living Room IV ,
,,compatibility,,: ,,controllable,subscribable,,,〃type〃: ,,string,,}
}
}
States
直接使用HTTP GET連上stateURL,可以取得所有狀態(tài)的集合描述,具體代碼如下: stateURL:/api/spnp/FixedAppIianceBasic/state/
{
〃power〃: {〃value〃:l,,,compatibility,,: ,,controllable,subscribable,,,
^type^:^integer^, "range":[0,1]},
,,locat1n,,: {〃value〃:0,,,compatibility,,: ,,controllable,subscribable,,,〃type:1nteger I,
””f //I// // T.T4γγλ-?τ//
name: { value: Living Room IV ,
,,compatibility,,: ,,controllable,subscribable,,,〃type〃: ,,string,,}
}
電源狀態(tài)具體代碼如下:
stateURL:/api/spnp/FixedApplianceBasic/state/power
{〃value〃:l,,,compatibility,,: ,,controllable,subscribable,,,〃type〃: ,,integer,,,〃range,,: [0,I]} 物理位置具體代碼如下:
設(shè)置裝置在家中的哪個房間或區(qū)塊
stateURL:/api/spnp/FixedAppIianceBasic/state/locat1n
{〃value〃:0,,,compatibility,,: ,,controllable,subscribable,,,〃type〃: ,,integer,,}
裝置名稱具體代碼如下:
stateURL:/api/spnp/FixedApplianceBasic/state/name
{〃value〃: ,,Living Room TV〃,,,compatibility,,: ,,controllable,subscribable,,,〃type: string I
Announcer Service
接收通知信息,并提示或警告使用者。
[0056]功能描述,具體代碼如下:
{
,,service,,: 〃urn: Smart PnP-org: service: Announcer: 1〃,