Write('{'); boolean dFirst = true; Write('"Devices":['); string deviceId; foreach (deviceId, root.Devices().EnumUsedIDs()) { object oDevice = dom.GetObject(deviceId); boolean bDevReady = oDevice.ReadyConfig(); string sDevInterfaceId = oDevice.Interface(); string sDevInterface = dom.GetObject(sDevInterfaceId).Name(); string deviceAddress = oDevice.Address(); if (bDevReady) { if (dFirst) { dFirst = false; } else { WriteLine(','); } Write('{'); Write('"ID":"' # oDevice.ID()); Write('","Name":"' # oDevice.Name()); Write('","HssType":"' # oDevice.HssType() # '","Address":"' # oDevice.Address() # '","Interface":"' # sDevInterface); Write('","Datapoints":['); boolean dpFirst = true; string sValue; string sValueType; string channelId; foreach(channelId, oDevice.Channels()) { object oChannel = dom.GetObject(channelId); string channelName = oChannel.Name(); string channelAddress = oChannel.Address(); integer iChnDir = oChannel.ChnDirection(); if (iChnDir == 2) { object oWork = oChannel.DPByHssDP('WORKING'); if (oWork) { if (dpFirst) { dpFirst = false; } else { WriteLine(','); } oWId = oWork.ID(); Write('{'); Write('"ID":"' # oWork.ID()); Write('","Name":"' # oWork.Name()); Write('","TypeName":"HSSDP","Operations":"5",'); Write('"ValueType":2,"ValueUnit":"","Timestamp":"' # oWork.Timestamp()); Write('","Value":null'); Write(',"ChannelName":' # '"' # channelName # '"'); Write(',"ChannelAddress":' # '"' # channelAddress # '"'); Write(',"DeviceAddress":' # '"' # deviceAddress # '"'); Write(',"ChannelId":' # '"' # channelId # '"'); Write(',"DeviceId":' # '"' # deviceId # '"'); Write('}'); } object oDir = oChannel.DPByHssDP('DIRECTION'); if (oDir) { if (dpFirst) { dpFirst = false; } else { WriteLine(','); } Write('{'); Write('"ID":"' # oDir.ID()); Write('","Name":"' # oDir.Name()); Write('","TypeName":"HSSDP","Operations":"5",'); Write('"ValueType":16,"ValueList":"' # oDir.ValueList() # '","Timestamp":"' # oDir.Timestamp()); Write('","Value":null'); Write(',"ChannelName":' # '"' # channelName # '"'); Write(',"ChannelAddress":' # '"' # channelAddress # '"'); Write(',"DeviceAddress":' # '"' # deviceAddress # '"'); Write(',"ChannelId":' # '"' # channelId # '"'); Write(',"DeviceId":' # '"' # deviceId # '"'); Write('}'); } } if (oChannel.HssType() == "SMOKE_DETECTOR") { object oDP = oChannel.DPByHssDP('STATE'); if(oDP.ID()) { if (dpFirst) { dpFirst = false; } else { WriteLine(','); } Write('{'); Write('"ID":"' # oDP.ID()); Write('","Name":"' # oDP.Name()); Write('","TypeName":"HSSDP'); Write('","Operations":5'); Write(',"ValueType":2'); Write(',"ValueUnit":"'); Write('","Timestamp":"' # oDP.Timestamp()); Write('","Value":'); sValue = oDP.Value(); if (sValue) { Write('"' # 'true' # '"'); } else { Write('"' # 'false' # '"'); } Write(',"ChannelName":' # '"' # channelName # '"'); Write(',"ChannelAddress":' # '"' # channelAddress # '"'); Write(',"DeviceAddress":' # '"' # deviceAddress # '"'); Write(',"ChannelId":' # '"' # channelId # '"'); Write(',"DeviceId":' # '"' # deviceId # '"'); Write('}'); } } string sDPId; foreach(sDPId, oChannel.DPs().EnumUsedIDs()) { object oDP = dom.GetObject(sDPId); if (oDP.ID()) { if (oDP.TypeName() != "VARDP") { if (dpFirst) { dpFirst = false; } else { WriteLine(','); } sValueType = oDP.ValueType(); Write('{'); Write('"ID":"' # oDP.ID()); Write('","Name":"' # oDP.Name()); Write('","TypeName":"' # oDP.TypeName()); Write('","Operations":' # oDP.Operations()); Write(',"ValueType":' # sValueType); if (sValueType == 16) { Write(',"ValueList":"'); WriteURL(oDP.ValueList()); Write('"'); } if(oDP.ValueUnit() == '""') { Write(',"ValueUnit":"' # ""); } else { Write(',"ValueUnit":"' # oDP.ValueUnit()); } Write('",'); Write('"Timestamp":"' # oDP.Timestamp()); Write('","Value":'); if (sValueType == 20) { Write('"'); WriteURL(oDP.Value()); Write('"'); } else { sValue = oDP.Value(); if (sValueType == 2) { if (sValue) { Write('"' # 'true' # '"'); } else { Write('"' # 'false' # '"'); } } else { if (sValue == "") { Write('"' # '0' # '"'); } else { Write('"' # sValue # '"'); } } } Write(',"ChannelName":' # '"' # channelName # '"'); Write(',"ChannelAddress":' # '"' # channelAddress # '"'); Write(',"DeviceAddress":' # '"' # deviceAddress # '"'); Write(',"ChannelId":' # '"' # channelId # '"'); Write(',"DeviceId":' # '"' # deviceId # '"'); Write('}'); } } } } Write(']}'); } } Write(']}');