Codecs for every Baichuan parameter element the RLC-823A firmware (IPC_523SD10.2898_23110119) reads or writes, one per element name.

Each codec is an XmlParam from @hertzg/reolink-api/protocol/xml: encode builds the element for a request, decode reads it from a reply or push. Commands that carry them are in @hertzg/reolink-api/protocol/commands.

Examples

Read a pushed <Serial> element

import { assertEquals } from "@std/assert";
import { parse } from "@std/xml";
import { serial } from "@hertzg/reolink-api/protocol/params";

const root = parse(
  '<Serial version="1.1"><channelId>0</channelId><baudRate>9600</baudRate>' +
    "<dataBit>CS8</dataBit><stopBit>1</stopBit><parity>none</parity>" +
    "<flowControl>none</flowControl><controlProtocol>PELCO_D</controlProtocol>" +
    "<controlAddress>1</controlAddress></Serial>",
).root;

assertEquals(serial.decode(root).baudRate, 9600);

Type Aliases

T
AbilityAlarmModule = { subModule: { channelId?: number; abilityValue: string; }[]; }

The alarm module: an optional device-wide entry, then per-channel ones.

T
AbilityChannelModule = { subModule: { channelId: number; abilityValue: string; }[]; }

A module with permissions per channel.

T
AbilityInfo = { userName: string; system?: AbilityGlobalModule; streaming?: AbilityChannelModule; record?: AbilityChannelModule; network?: AbilityGlobalModule; PTZ?: AbilityGlobalModule; IO?: AbilityGlobalModule; alarm?: AbilityAlarmModule; image?: AbilityChannelModule; video?: AbilityChannelModule; audio?: AbilityGlobalModule; security?: AbilityGlobalModule; replay?: AbilityChannelModule; disk?: AbilityGlobalModule; }

The user's permissions in <AbilityInfo>.

T
AccessInfo = { userName: string; accesskey: string; }

The credentials in <accessInfo>.

T
AccessUser = { userId?: string; notes?: string; phoneModel?: string; userLevel?: number; validHours?: number; loginState?: number; ability?: number; userSetState?: "delete" | "modify"; }

One shared user, a <User> in <accessUserList>.

T
AccessUserList = { maxAccessUserNum?: number; availableAbility?: number; User: AccessUser[]; }

The shared users in <accessUserList>.

T
AfAlgorithm = { channelId?: number; algorithm?: number; }

The autofocus algorithm setting in <afAlgorithm>.

T
AfLearn = { channelId?: number; }

The autofocus learning request in <AfLearn>.

T
AfLearnRes = { zoomPos?: number; focusPos?: number; rangeMin?: number; rangeMax?: number; afStudyState?: number; afStudyRusult?: number; backLashz?: number; backLashf?: number; }

The autofocus learning outcome in <AfLearnRes>.

T
AgingTest = { channelId?: number; enable?: number; fileName?: string; size?: number; }

The aging test request in <AgingTest>.

T
AiCfg = { channelId?: number; smartTrack?: number; smartTrackMode?: number; smartTrackModeAbility?: number; detectType?: string; smartTrackType?: string; smartTrackPt?: number; smartTrackObjectStopDelay?: number; smartTrackObjectDisappearDelay?: number; }

The AI settings in <AiCfg>.

T
AiDetectCfg = { chn?: number; type?:
"people"
| "vehicle"
| "face"
| "dog_cat"
| "other"
| "package"
; sensitivity?: number; stayTime?: number; minTargetHeight?: number; minTargetWidth?: number; maxTargetHeight?: number; maxTargetWidth?: number; width?: number; height?: number; area?: string; }

AI detection settings for one target type, in <AiDetectCfg>.

T
AiTrackData = { fileName?: string; size?: number; year?: number; month?: number; day?: number; }

The AI tracking data request and reply in <AiTrackData>.

T
AiyuvCfg = { needTLV?: number; gapms?: number; resoWidth?: number; resoHeight?: number; algorithm?: number; }

The AI YUV stream settings in <AIYUVCfg>.

T
AlarmAreaGrid = { width: number; height: number; area: string; }

One detection grid inside <AlarmArea>.

T
AlarmVideoInfo = { channelId: number; fileHandle: number; bFinished: number; alarmVideoList: AlarmVideoInfoItem[]; }

One page of search results in <alarmVideoInfo>.

T
AlarmVideoInfoItem = { fileName: string; alarmType: string; fileId: string; typeExtension?: number; startTime: AlarmVideoInfoTime; endTime: AlarmVideoInfoTime; }

One recording, an <alarmVideo> in <alarmVideoList>.

T
AnswerEvent = { startTime?: number; }

The answered call in <answerEvent>.

  • startTime: number

    When the call was answered. Parsed as a 64-bit integer but stored in 32 bits, so only the low 32 bits reach the device.

T
AudioCfg = { channelId?: number; timeout?: number; audioSelect?: number; volume?: number; preAlarm?: number; visitorLoudspeaker?: number; }

The alarm sound settings in <audioCfg>.

T
AudioFileInfo = { channelId?: number; fileSize?: number; audioLen?: number; customName?: string; id?: number; timeout?: number; }

The custom alarm sound file in <audioFileInfo>.

T
AudioFileInfoList = { audioFileInfo: AudioFileInfoListItem[]; item?: AudioFileInfoListLegacyItem[]; maxFileNumber?: number; }

The audio file list in <audioFileInfoList>.

T
AudioFileInfoListItem = { id?: number; fileSize?: number; audioLen?: number; fileName?: string; extId?: string; type?: "alarm" | "reply"; }

One stored audio file, an <audioFileInfo> in <audioFileInfoList>.

T
AudioFileInfoListLegacyItem = { id?: number; fileSize?: number; audioLen?: number; customName?: string; }

One file in the RLC-823A's cmd 347 reply, an <item>.

T
AudioPlayInfo = { channelId?: number; playMode?: number; playDuration?: number; playTimes?: number; onOff?: number; }

The play request in <audioPlayInfo>.

T
AudioTask = { channelId?: number; enable?: number; typeScheduleList?: { type: string; valueTable: string; }[]; }

The alarm sound schedule in <AudioTask>.

T
AuthInfo = { notes?: string; validhours?: number; userLevel?: number; ability?: number; channelAbility?: bigint; code?: number; }

The authorization code request and reply in <authInfo>.

T
AutoDns = { enable: number; }

The automatic DNS switch in <AutoDns>.

T
AutoFocus = { channelId?: number; disable?: number; }

The autofocus switch in <AutoFocus>.

T
AutoReply = { enable?: number; timeout?: number; audioId?: number; extId?: string; fileName?: string; fesEnable?: number; fesAudioId?: number; fesExtId?: string; fesFileName?: string; startTime?: AutoReplyTime; endTime?: AutoReplyTime; current?: number; }

The automatic reply settings in <AutoReply>.

T
AutoUpdate = { enable?: number; }

The automatic update setting in <AutoUpdate>.

  • enable: number

    1 to update automatically, 0 not to; the reply always carries it.

T
BandWidthTest = { enable?: number; }

The bandwidth test switch in <BandWidthTest>.

  • enable: number

    1 to run the test, 0 to stop it; the firmware rejects a negative value.

T
BatteryInfo = { channelId: number; chargeStatus: "none" | "charging" | "chargeComplete"; adapterStatus: "none" | "adapter" | "solarPanel"; voltage: number; current: number; temperature: number; batteryPercent: number; lowPower: number; batteryVersion: number; }

The battery state in <BatteryInfo>.

T
BatteryRemainList = { channelId: number; batteryTable: string; }

The battery level table in <BatteryRemainList>.

T
BindCloud = { authToken?: string; }

The bind request in <BindCloud>.

T
BindNasInfo = { devName?: string; uid?: string; bBinded?: number; }

One bound NAS in <BindNasInfoList>.

T
BindNasInfoList = { info?: BindNasInfo[]; }

The bound NAS devices in <BindNasInfoList>.

T
BindUnbindNas = { userName?: string; password?: string; devName?: string; uid?: string; token?: string; }

The NAS bind request in <BindUnbindNas>.

T
BinoAdjust = { lineWidthRef?: number; lineWidthMin?: number; lineWidthMax?: number; heightDiffMax?: number; heightDiff?: number; widthDiff?: number; }

The binocular alignment request and result in <BinoAdjust>.

T
Blc = { enable: number; BLCMode: "backLight" | "dynamicRange"; level: number; }

The backlight compensation setting in <BLC>.

T
Button443 = Record<PropertyKey, never>

The value of <Button443>: the firmware reads no fields.

T
CertificateInfo = { enable?: number; certName?: string; keyName?: string; key?: string; cert?: string; option?: "import" | "clear"; }

The HTTPS certificate in <certificateInfo>.

T
CloudBindInfo = { binded: number; }

The cloud binding state in <CloudBindInfo>.

T
CloudLoginKey = { enable?: number; }

The cloud login switch in <CloudLoginKey>.

T
CloudTask = { channelId?: number; enable?: number; typeScheduleList?: { type: string; valueTable: string; }[]; }

The cloud upload schedule in <CloudTask>.

T
CloudTestResult = { rspCode: number; detail: string; }

The cloud test outcome in <CloudTestResult>.

T
CloudUploadCfg = { enable?: number; version?: number; streamOpList?: string; streamCfgList?: string; }

The cloud upload settings in <CloudUploadCfg>.

T
Compression = { channelId?: number; isNoTranslateFrame?: number; mainStream?: CompressionStream; subStream?: CompressionStream; thirdStream?: CompressionStream; }

The video encoder settings in <Compression>.

T
CompressionStream = { audio?: number; resolutionName?: string; width?: number; height?: number; encoderType?: "vbr" | "cbr"; frame?: number; bitRate?: number; encoderProfile?: "default" | "baseLine" | "high" | "main"; gop?: { cur?: number; max?: number; min?: number; }; }

One stream's encoder settings in <Compression>.

T
ConfigFileInfo = { fileName?: string; fileSize?: number; curSize?: number; updateParameter?: number; usedForFactory?: number; }

The configuration file transfer in <ConfigFileInfo>.

T
CoverPreview = { channelId?: number; streamType?: "mainStream" | "subStream" | "mobileStream" | "externStream"; startTime?: CoverPreviewTime; endTime?: CoverPreviewTime; frameList?: number[]; }

The preview request in <CoverPreview>.

T
CoverPreviewTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A date and time in <CoverPreview>.

T
Crop = { channelId?: number; topLeftX?: number; topLeftY?: number; cropWidth?: number; cropHeight?: number; mainWidth?: number; mainHeight?: number; subHeight?: number; subWidth?: number; version?: number; }

The crop region in <Crop>.

T
CropSnap = { channelId?: number; width?: number; heigth?: number; }

The snapshot size in <CropSnap>.

T
CropSnapReply = { channelId: number; pictureSize: number; }

The snapshot description in <cropSnap>.

T
DayNightMode = { mode: "auto" | "color" | "blackAndWhite"; }

The day/night setting in <DayNightMode>.

T
DayNightThreshold = { channelId?: number; threshold?: "default" | "custom"; stat?: "day" | "night"; thresholdval?: DayNightThresholdValue; }

The day/night switch point in <DayNightThreshold>.

T
DayNightThresholdValue = { min?: number; max?: number; cur?: number; }

The threshold range in <DayNightThreshold>.

T
DayRecordsChannel = { index?: number; channelId?: number; dayTypeList?: DayRecordsDayType[]; }

One channel's days, in <DayRecord>.

T
DayRecordsDayType = { index: number; type: "none" | "normal" | "alarm" | "all"; }

One day with recordings, in <dayType>.

T
DayRecordsTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A point in time in <startTime> or <endTime>.

T
Ddns = { enable?: number; ddnsType?: "swann" | "dyndns" | "peatnuts" | "3322" | "no-ip"; ddnsName?: string; userName?: string; password?: string; }

The dynamic DNS settings in <Ddns>.

T
DeleteRecordFile = { chnbits?: bigint; streamType?: number; bmerge?: number; startTime?: DeleteRecordFileTime; endTime?: DeleteRecordFileTime; }

The recordings to delete in <DeleteRecordFile>.

T
DeleteRecordFileTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A point in time in <startTime> or <endTime> of <DeleteRecordFile>.

T
DevBodyCode = Record<PropertyKey, never>

The value of <DevBodyCode>: the firmware reads and writes no fields.

T
DeviceInfo = { firmVersion: string; IOInputPortNum: number; IOOutputPortNum: number; diskNum: number; type:
"dvr"
| "ipc"
| "nvr"
| "wifi_ipc"
| "wifi_nvr"
| "nxp_ipc"
| "wifi_solo_ipc"
| "base"
| "alertor"
| "smart_bell"
| "smart_plug"
; channelNum: number; audioNum: number; ipChannel: number; analogChnNum: number; resolution?: { resolutionName: string; width: number; height: number; }; secretCode?: string; bootSecret?: string; language: string; sdCard: number; ptzMode: "none" | "af" | "ptz" | "pt" | "p"; typeInfo: string; softVer: number; hardVer: number; panelVer: number; hdChannel1: number; hdChannel2: number; hdChannel3: number; hdChannel4: number; norm: "NTSC" | "PAL"; osdFormat: string; B485: number; supportAutoUpdate: number; userVer: number; FrameworkVer: number; authMode: number; sleep?: number; feature?: number; binoType?: number; }

The device identity and capabilities in <DeviceInfo>.

T
Dhcp = { enable: number; }

The DHCP switch in <Dhcp>.

T
DingdongCfg = { deviceCfg: DingdongCfgDevice[]; pairThreshold?: number; }

The chime alarm rules in <dingdongCfg>.

T
DingdongCfgAlarm = { type?:
"visitor"
| "people"
| "package"
| "MD"
| "vehicle"
| "dog_cat"
; valid?: number; musicId?: number; }

One alarm rule of a chime, an <alarminCfg> in <deviceCfg>.

T
DingdongCfgDevice = { id?: number; name?: string; alarminCfg: DingdongCfgAlarm[]; }

One paired chime, a <deviceCfg> in <dingdongCfg>.

T
DingdongCtrl = { opt?: "enter" | "exit" | "reset"; }

The chime pairing control in <dingdongCtrl>.

T
DingdongDeviceOpt = { id?: number; opt?:
"addDevice"
| "delDevice"
| "getParam"
| "setParam"
| "ringWithMusic"
; musicId?: number; volLevel?: number; ledState?: number; name?: string; }

The chime operation in <dingdongDeviceOpt>.

T
DingdongList = { maxPairNumber?: number; pairedList?: DingdongListPairedDevice[]; scanList?: DingdongListScannedDevice[]; }

The chime list in <dingdongList>.

T
DingdongListPairedDevice = { id: number; netstate?: number; name: string; netState?: number; }

A paired chime, a <dingdongDeviceInfo> in <pairedList>.

T
DingdongListScannedDevice = { id: number; name: string; }

A chime found by a pairing scan, a <dingdongDeviceInfo> in <scanList>.

T
DingdongSilentMode = { id?: number; time?: number; remainTime?: number; type?: number; }

The chime silent mode in <dingdongSilentMode>.

  • id: number

    The paired chime id.

  • remainTime: number

    Reply only: how much of the silent period is left.

  • time: number

    The silent period. Parsed as a 64-bit integer but stored in 32 bits, so only the low 32 bits survive; replies write it sign-extended.

  • type: number

    The silent mode kind; its values are not established.

T
Dns = { dns1?: string; dns2?: string; }

The static DNS servers in <Dns>.

T
DoorbellDingdingtest = { freq?: number; curFreq?: number; sub1gTestResult?: number; update?: DoorbellDingdingtestUpdate[]; dingdongTestResult?: DoorbellDingdingtestResult[]; }

The factory chime test result in <doorbellDingdingtest>.

T
DoorbellDingdingtestResult = { state: number; verifyResult: number; agingResult: number; }

One chime test, a <dingdongTestResult> in <doorbellDingdingtest>.

T
DoorbellDingdingtestUpdate = { result: number; curVer: string; reqVer: string; }

One chime firmware update, an <update> in <doorbellDingdingtest>.

T
Email = { smtpServer?: string; userName?: string; senderMaxLen?: number; password?: string; pwdMaxLen?: number; address1?: string; address2?: string; address3?: string; sendNickname?: string; smtpPort?: number; attachment?: number; attachmentType?: "none" | "picture" | "video"; textType?: "mustBeText" | "withText" | "withoutText"; ssl?: number; interval?: number; emailAttachType?: number; }

The SMTP settings in <Email>.

T
EmailTask = { channelId?: number; enable?: number; typeScheduleList?: { type: string; valueTable: string; }[]; }

The alarm email schedule in <EmailTask>.

T
ExposureCfg = { exposureType: "auto" | "shutterFirst" | "gainFist" | "manual"; }

The exposure setting in <ExposureCfg>.

T
FileInfoTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A wall-clock time in a <FileInfo>, as the firmware writes it.

T
FindAlarmVideo = { channelId?: number; fileHandle?: number; streamType?: number; startTime?: FindAlarmVideoTime; endTime?: FindAlarmVideoTime; alarmType?: string; }

The alarm recording search in <findAlarmVideo>.

T
FindAlarmVideoTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A point in time in <startTime> or <endTime> of <findAlarmVideo>.

T
Flip = { status: number; }

The flipping setting in <Flip>.

T
FloodlightManual = { channel?: number; status?: number; }

The manual floodlight switch in <FloodlightManual>.

T
FloodlightSchedule = { startHour?: number; startMin?: number; endHour?: number; endMin?: number; }

A daily time window in <FloodlightTask>.

T
FloodlightStatus = { channel: number; status: number; }

One floodlight in <FloodlightStatusList>.

T
FloodlightStatusList = { FloodlightStatus: FloodlightStatus[]; }

The floodlight states in <FloodlightStatusList>.

T
FloodlightTask = { channel?: number; alarmMode?: number; enable?: number; preview_auto?: number; duration?: number; brightness_cur?: number; brightness_max?: number; brightness_min?: number; schedule?: FloodlightSchedule; lightAlarmSchedule?: FloodlightSchedule; detectType?: string; }

The automatic floodlight settings in <FloodlightTask>.

T
FreqCorrectResult = { result: "success" | "fail" | "unknow"; }

The frequency correction outcome in <freqCorrectResult>.

T
Ftp = { server?: string; port?: number; nonymous?: number; remoteDir?: string; userName?: string; password?: string; pwdMaxLen?: number; fileLen?: number; supportTest?: number; streamType?: number; ftpVersion?: number; intervals?: number; mode?: number; bnameEncrypt?: number; autoDir?: number; picPolicy?: number; picName?: string; picType?: number; picHeight?: number; picWidth?: number; picIntervals?: number; videoPolicy?: number; videoName?: string; onlyFtps?: number; }

The FTP upload settings in <Ftp>.

T
FtpTestResult = { rspCode?: number; detail?: string; }

The FTP test outcome in <FtpTestResult>.

  • detail: string

    The FTP server's reply text; written together with rspCode.

  • rspCode: number

    The FTP server's reply code; written only when the test produced a result.

T
FtyAudioTest = { ratedPower?: number; difPower?: number; difHz?: number; difZero?: number; difCrest?: number; difSame?: number; difFreq?: number; flitFreq?: number; }

The factory audio test parameters in <ftyAudioTest>.

T
FtyDoorbellTest = { testDuration?: number; testTimes?: number; result?: number; op?: number; testTotalCount?: number; }

The factory doorbell button test in <ftyDoorbellTest>.

T
FtyImageDetechRet = { deadpix?: number; blot?: number; }

The image defect detection result in <ftyImageDetechRet>.

T
FtySnapCfg = Record<PropertyKey, never>

The value of <ftySnapCfg>: the firmware reads and writes no fields.

T
FtyTestRangeBounds = { max?: number; min?: number; }

One pass range in <ftyTestRange>.

T
Gain = { gainLevel: number; }

The gain setting in <Gain>.

T
GopCfg = { channel?: number; streamType?: number; gopTime?: number; }

The GOP setting in <GopCfg>.

T
HddInitList = { HddInit: { initId?: number; }[]; }

The storage devices to format in <HddInitList>.

T
HeartBeat = { size?: number; sec: number; usec: number; }

The keep-alive timestamp in <HeartBeat>.

T
HttpPort = { httpPort?: number; enable?: number; }

The port settings in <HttpPort>.

T
HttpsPort = { httpsPort?: number; enable?: number; }

The port settings in <HttpsPort>.

T
ImageCheck = Record<PropertyKey, never>

The value of <ImageCheck>: the firmware reads and writes no fields.

T
ImageFileInfo = { channelId?: number; fileSize?: number; imageName?: string; delete?: number; }

An image file to import or export, in <imageFileInfo>.

T
InputAdvanceCfg = { channelId?: number; digitalChannel?: number; PowerLineFrequency?: { mode?: "outdoor" | "50hz" | "60hz"; enable?: number; }; Exposure?: { mode?: "auto" | "shutterFirst" | "gainFist" | "manual"; Gainctl?: IspAreaCtrl; Shutterctl?: IspAreaCtrl; shutterLevel?:
"1/3"
| "1/4"
| "1/5"
| "1/6"
| "1/8"
| "1/12"
| "1/15"
| "1/25"
| "1/30"
| "1/50"
| "1/60"
| "1/100"
| "1/120"
| "1/250"
| "1/500"
| "1/1000"
| "1/2000"
| "1/4000"
| "1/10000"
; gainLevel?: number; }
; Scene?: { mode?: "auto" | "indoor" | "outdoor" | "manual"; modeList?: string; Redgain?: IspRange; Bluegain?: IspRange; }; DayNight?: { mode?: "auto" | "color" | "blackAndWhite"; IrcutMode?: "auto" | "ir"; Threshold?: "low" | "medium" | "high"; }; BLC?: { enable?: number; mode?: "backLight" | "dynamicRange"; backlight?: IspRange; dynamicrange?: IspRange; }; bdDayColor?: IspBrightDark; bdNight?: IspBrightDark; bdNightColor?: IspBrightDark; mirror?: number; flip?: number; Iris?: { enable?: number; state?: string; focusAutoiris?: number; }; nr3d?: { value?: "high" | "medium" | "low" | "off"; enable?: number; }; firstFrameStrategy?: number; constantFrameRate?: number; constantFrameRateAbility?: number; binning_mode?: number; encTypeAbility?: number; encType?: number; hdrAbility?: number; hdrSwitch?: number; }

The image settings in <InputAdvanceCfg>.

T
IotAction = { channelBits?: bigint; setState?: number; actionID?: number; name?: string; uid?: string; content?: string; alarmType?: string; timeTable?: string; }

One IoT action in <IOTAction>.

T
IotActionList = { item: IotActionListItem[]; }

The IoT linkage actions in <IOTActionList>.

T
IotActionListItem = { actionID: number; channelBits: bigint; deviceType: number; name: string; uid: string; content: string; alarmType: string; timeTable: string; }

One IoT linkage action, an <item> in <IOTActionList>.

T
IotBindUnBind = { name?: string; uid?: string; userName?: string; password?: string; token?: string; deviceType?: number; }

An IoT device to bind or unbind, in <IOTBindUnBind>.

T
Ip = { ip?: string; mask?: string; mac?: string; gateway?: string; }

The wired address in <Ip>.

T
IrCutInfo = Record<PropertyKey, never>

The value of <IrCutInfo>: the firmware reads and writes no fields.

T
IrcutMode = { mode: "auto" | "ir"; }

The IR-cut filter setting in <IrcutMode>.

T
IspAreaCtrl = { defMin?: number; defMax?: number; curMin?: number; curMax?: number; }

A default and a current range, used by the exposure gain and shutter.

T
IspBrightDark = { mode: "auto" | "manual"; bright?: IspRange; dark?: IspRange; }

Brightness and darkness limits for one day/night state.

T
IspRange = { min?: number; max?: number; cur?: number; }

A bounded value as min, max and current value cur.

T
LedState = { channelId?: number; ledVersion?: number; state?: "auto" | "close" | "open"; lightState?: "close" | "open"; doorbellLightState?: "close" | "open" | "keepOff" | "keepOn"; }

The LED settings in <LedState>.

T
LinkType = { type: "LAN" | "PPPOE" | "CDMA"; }

The network link in <LinkType>.

T
LoginErrInfo = { remainTimes?: number; unlockTime?: number; }

The lockout state in <LoginErrInfo>.

T
LoginNet = { type?: "LAN" | "WAN"; udpPort?: number; }

The client network settings in <LoginNet>.

T
LoginUser = { userName?: string; password?: string; userVer?: number; handleSpecial?: number; authSignature?: string; authToken?: string; authUser?: string; admin?: number; scopes?: { channelId: number; privileges?: string; }[]; }

The login credentials in <LoginUser>.

T
MdSensInfo = { priority: number; sensitivity?: number; beginHour?: number; beginMinute?: number; endHour?: number; endMinute?: number; }

One enabled sensitivity period in <sensInfoList>.

T
MdSensitivityInfo = { id?: number; sensitivity?: number; beginHour?: number; beginMinute?: number; endHour?: number; endMinute?: number; enable?: number; }

One fixed sensitivity period in <sensitivityInfoList>.

T
Mirror = { status: number; }

The mirroring setting in <Mirror>.

T
MuteAudio = { channelId?: number; mute?: number; }

The mute request in <muteAudio>.

T
NasUploadCfg = { enable?: number; streamAbility?: number; streamConfig?: number; }

The NAS upload settings in <NasUploadCfg>.

T
Net3g4gInfo = { sigIntensityLevel: number; sigIntensityValue: number; netMode: number; mobileOperator: number; }

The cellular state in <Net3g4gInfo>.

T
Net3g4gModuleInfo = { iccid?: string; imei?: string; phoneNumber?: string; }

The cellular module identifiers in <Net3g4gModuleInfo>.

T
NetworkDiagnosisData = { channelId?: number; fileName?: string; size?: number; }

A network diagnosis data file, in <NetworkDiagnosisData>.

T
Norm = { norm: "PAL" | "NTSC"; }

The video standard in <Norm>.

T
Ntp = { enable?: number; server?: string; synchronizeInterval?: number; port?: number; }

The time sync settings in <Ntp>.

T
OffsetAdjust = { maxOffset?: number; OffsetX?: number; OffsetY?: number; Offset?: number; }

The offset calibration request and result in <OffsetAdjust>.

T
OnlineNewFirmwareInfo = { hasNewFirmware: number; }

The online firmware check result in <OnlineNewFirmwareInfo>.

T
OnlineUpdate = { needUpdate?: number; }

The online update request in <OnlineUpdate>.

T
OnlineUser = { userId?: number; sessionId: number; userName?: string; password?: string; userLevel?: number; ipAddress?: string; macAddress?: string; enableOutoffLine?: number; isOnline?: number; }

One logged-in session in <OnlineUser>.

T
OnlineUserList = { OnlineUser: OnlineUser[]; }

The logged-in sessions in <OnlineUserList>.

T
OnvifPort = { onvifPort?: number; enable?: number; }

The port settings in <OnvifPort>.

T
OsdChannelName = { channelId?: number; name?: string; enable?: number; topLeftX?: number; topLeftY?: number; enWatermark?: number; enBgcolor?: number; }

The channel name overlay in <OsdChannelName>.

T
OsdDatetime = { channelId?: number; enable?: number; topLeftX?: number; topLeftY?: number; width?: number; height?: number; language?: "Chinese" | "English"; }

The date and time overlay in <OsdDatetime>.

T
ParamDataV20 = Record<PropertyKey, never>

The value of <PARAM_DATA_V20>: none, the payload is raw bytes.

T
PerformanceInfo = { cpuUseRate: number; codeRate: number; netDataRate: number; }

CPU load and bitrates in <PerformanceInfo>.

T
PeriPheralStat = Record<PropertyKey, never>

The value of <PeriPheralStat>: the firmware reads no fields.

T
PowerLineFrequency = { mode: "outdoor" | "50hz" | "60hz"; enable: number; }

The anti-flicker setting in <PowerLineFrequency>.

T
Preview = { channelId?: number; handle?: number; streamType?:
"mainStream"
| "subStream"
| "mobileStream"
| "externStream"
| "aiYuvData"
; preRec?: number; resolution?: number; fps?: number; needTLV?: number; gapms?: number; resoWidth?: number; resoHeight?: number; algorithm?: number; }

The live stream selection in <Preview>.

T
Ptop = { enable: number; }

The peer-to-peer setting in <PTOP>.

T
Ptz3DLocation = { channelId?: number; topLeftX?: number; topLeftY?: number; width?: number; height?: number; speed?: number; streamType?: "mainStream" | "subStream" | "mobileStream" | "externStream"; }

The rectangle to move onto, in <Ptz3DLocation>.

T
PtzAutoTest = { testStat: number; }

The PTZ self-test state in <PtzAutoTest>.

  • testStat: number

    Self-test state as a number; the firmware does not name the values.

T
PtzControl = { channelId?: number; command?:
"stop"
| "left"
| "right"
| "up"
| "down"
| "leftUp"
| "leftDown"
| "rightUp"
| "rightDown"
| "irisDec"
| "irisInc"
| "zoomDec"
| "zoomInc"
| "focusDec"
| "focusInc"
| "setPos"
| "delPos"
| "toPos"
| "auto"
| "highSpeed"
| "startPatrol"
| "stopPatrol"
| "clearPatrol"
| "enablePattern"
| "startPattern"
| "stopPattern"
| "startSavePattern"
| "stopSavePattern"
| "cleanPattern"
| "zoomPos"
| "focusPos"
| "zoomStepInc"
| "zoomStepDec"
| "focusStepInc"
| "focusStepDec"
| "setGrd"
| "toGrd"
; patrolId?: number; keyPos?: number; presetId?: number; patternId?: number; speed?: number; dwellTime?: number; }

The PTZ command in <PtzControl>.

T
PtzCurPos = { pPos: number; tPos: number; }

The current PTZ position in <ptzCurPos>; units are not established.

T
PtzGuard = { channelId?: number; timeout?: number; benable?: number; bvalid?: number; imageName?: string; needSetPos?: number; command?: string; }

The PTZ guard position settings in <PtzGuard>.

  • benable: number

    Nonzero when returning to the guard position is on.

  • bvalid: number

    Nonzero when a guard position is stored; written in replies only.

  • channelId: number

    Zero-based channel; the parser rejects 64 and above.

  • command: string

    PTZ command name, such as setGrd or toGrd; the parser rejects a name outside the firmware's 37 PTZ commands. Read from requests only.

  • imageName: string

    Name of the guard position preview image, up to 31 characters.

  • needSetPos: number

    Nonzero to store the current position as the guard position; read from requests only.

  • timeout: number

    Seconds idle before the camera returns to the guard position.

T
PtzPreset = { channelId: number; maxPresetNum?: number; maxPresetPicNum?: number; presetList?: { id: number; name?: string; imageName?: string; command?:
"stop"
| "left"
| "right"
| "up"
| "down"
| "leftUp"
| "leftDown"
| "rightUp"
| "rightDown"
| "irisDec"
| "irisInc"
| "zoomDec"
| "zoomInc"
| "focusDec"
| "focusInc"
| "setPos"
| "delPos"
| "toPos"
| "auto"
| "highSpeed"
| "startPatrol"
| "stopPatrol"
| "clearPatrol"
| "enablePattern"
| "startPattern"
| "stopPattern"
| "startSavePattern"
| "stopSavePattern"
| "cleanPattern"
| "zoomPos"
| "focusPos"
| "zoomStepInc"
| "zoomStepDec"
| "focusStepInc"
| "focusStepDec"
| "setGrd"
| "toGrd"
; }[]
; }

The saved PTZ positions in <PtzPreset>.

T
PtzZoomFocusRange = { maxPos: number; minPos: number; curPos: number; }

One motor's range and position; units are not established.

T
PushCfg = { interval?: number; richNotificationEnable?: number; consentAgreement?: number; }

The push notification settings in <PushCfg>.

T
PushClientId = { clientType?: string; pushToken?: string; clientID?: string; }

The push registration in <PushClientID>.

T
PushClientState = { clientID?: string; channelIdList?: string[]; }

The push client state in <PushClientState>.

T
PushCreateListener = { clientID?: string; channelId?: string; }

The listener request in <PushCreateListener>.

T
PushInfo = { token?: string; phoneType?: string; clientID?: string; }

The push registration in <PushInfo>.

T
PushRspInfo = { registerHandle: number; uid: string; uidKey: string; }

The push registration result in <PushRspInfo>.

T
PushTask = { channelId?: number; enable?: number; typeScheduleList?: { type: string; valueTable: string; }[]; }

The push notification schedule in <PushTask>.

T
PushTestResult = { rspCode: number; detail: string; }

The push test outcome in <PushTestResult>.

T
RecordCfg = { channelId?: number; cycle?: number; recordAbility?: number; smartRecord?: number; talkRecord?: number; recordDelayTime?: number; preRecordTime?: number; packageTime?: number; cyclelist?: number[]; timeList?: number[]; }

The recording settings in <RecordCfg>.

T
ReplayByTimeV2Duration = { channelId?: number; times?: ReplayByTimeV2Period[]; }

The recorded periods of one channel, a <duration> in <durationList>.

T
ReplayByTimeV2DurationList = { year?: number; month?: number; day?: number; duration: ReplayByTimeV2Duration[]; }

The recorded periods of one day, in <durationList>.

T
ReplayByTimeV2Period = { s?: number; e?: number; }

One recorded period, an <i> in <times>.

  • e: number

    End, in seconds since midnight; must not be negative.

  • s: number

    Start, in seconds since midnight; must not be negative.

T
ReplayByTimeV2Time = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A date and time in <ReplayByTimeV2>.

T
ReplaySeek = { channelId?: number; seekTime?: ReplaySeekTime; seq?: number; }

The playback seek request in <ReplaySeek>.

T
ReplaySeekTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

The point in time to seek to, in <seekTime>.

T
ReplaySeekV2 = { seekTime?: ReplaySeekV2Time; seq?: number; durationList?: ReplaySeekV2DurationList; }

The playback seek request in <ReplaySeekV2>.

T
ReplaySeekV2Duration = { channelId?: number; times?: ReplaySeekV2Period[]; }

The recorded periods of one channel, a <duration> in <durationList>.

T
ReplaySeekV2DurationList = { year?: number; month?: number; day?: number; duration: ReplaySeekV2Duration[]; }

The recorded periods of one day, in <durationList>.

T
ReplaySeekV2Period = { s?: number; e?: number; }

One recorded period, an <i> in <times>.

  • e: number

    End, in seconds since midnight; must not be negative.

  • s: number

    Start, in seconds since midnight; must not be negative.

T
ReplaySeekV2Time = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

The point in time to seek to, in <seekTime>.

T
Restore = { all?: number; display?: number; recording?: number; network?: number; alarm?: number; device?: number; system?: number; wifi?: number; IPC?: number; }

The settings groups to reset in <Restore>; 1 resets, 0 keeps.

T
RfAlarmCfg = { enable?: number; sensiValue?: number; reduceFalseAlarm?: number; }

The PIR alarm settings in <rfAlarmCfg>.

T
RtmpPort = { rtmpPort?: number; enable?: number; }

The port settings in <RtmpPort>.

T
RtspPort = { rtspPort?: number; enable?: number; }

The port settings in <RtspPort>.

T
ScanAp = { udidList?: ScanApUdid[]; }

The scanned access points in <ScanAp>.

T
ScanApUdid = { name: string; signal: number; encrypt: number; type?: number; }

One access point in <udidList>, as a <udid> element.

T
Scene = { sceneMode: "indoor" | "outdoor"; }

The scene setting in <Scene>.

T
ServerPort = { serverPort?: number; enable?: number; }

The port settings in <ServerPort>.

T
Shelter = { channelId?: number; enable?: number; shelterList?: ShelterArea[]; }

The privacy masks in <Shelter>.

T
SleepState = { operate?: number; sleep?: number; mode?: number; panPos?: number; tiltPos?: number; imageName?: string; }

The privacy state in <sleepState>.

  • imageName: string

    Request only: an image name up to 32 bytes; parsed but unused on the doorbell.

  • mode: number

    Request only: parsed but unused on the doorbell.

  • operate: number

    Request only: the operation; cmd 575 succeeds only with 2.

  • panPos: number

    Request only: pan position; parsed but unused on the doorbell.

  • sleep: number

    The stored sleep word. 1 makes the doorbell refuse live view (cmd 3) and snapshots (cmd 109); 0 is the ordinary state.

  • tiltPos: number

    Request only: tilt position; parsed but unused on the doorbell.

T
SleepStatus = { sleep: number; }

The pushed privacy state in <sleepStatus>.

  • sleep: number

    The stored sleep word. 1 makes the doorbell refuse live view (cmd 3) and snapshots (cmd 109); 0 is the ordinary state.

T
SmtPlayUrl = { channelId?: number; stream_type?: number; }

The play URL request in <SmtPlayUrl>.

T
SmtPlayUrlReply = { url: string; }

The play URL in <SmtPlayURL>.

T
Snap = { channelId?: number; fileName?: string; time?: number; pictureSize?: number; snapPolicy?: number; }

The snapshot request or reply in <Snap>.

T
StartFtyImageClarityDetect = { threshold?: string; aeExpTime?: number; aeIsoGain?: number; awbRgain?: number; awbGgain?: number; awbBgain?: number; desc?: string; }

The image clarity check settings in <startFtyImageClarityDetect>.

T
StreamInfo = { channelBits: number; encodeTable: StreamInfoEncodeTable[]; }

One group of channels and its streams, in <StreamInfo>.

T
StreamInfoEncodeTable = { type: "mainStream" | "subStream" | "mobileStream" | "externStream"; resolution: { width: number; height: number; }; defaultFramerate: number; defaultBitrate: number; framerateTable: string; bitrateTable: string; defaultGop?: number; }

One stream's encoder choices, in <encodeTable>.

T
StreamInfoList = { StreamInfo: StreamInfo[]; }

The encoder capabilities in <StreamInfoList>.

T
Sub1gTest = { correctResult?: number; }

The radio test result in <sub1gTest>.

T
Support = { IOInputPortNum: number; IOOutputPortNum: number; diskNum: number; channelNum: number; audioNum: number; ptzMode: "none" | "af" | "ptz" | "pt" | "p"; ptzCfg: number; B485: number; autoUpdate: number; pushAlarm: number; ftp: number; ftpTest: number; email: number; wifi: number; record: number; wifiTest: number; rtsp: number; onvif: number; audioTalk: number; rfVersion: number; rtmp: number; noExternStream: number; timeFormat: number; ddnsVersion: number; emailVersion: number; pushVersion: number; pushType: number; audioAlarm: number; apMode: number; cloudVersion: number; replayVersion: number; mobComVersion: number; ExportImport: number; languageVer: number; videoStandard: number; syncTime: number; netPort: number; nasVersion: number; needReboot: number; reboot: number; audioCfg: number; networkDiagnosis: number; loginLocked?: number; heightDiffAdjust?: number; wifiVersion: number; previewVersion: number; netSecurity: number; user?: number; IOTLink: number; IOTLinkActionMax: number; autoTest?: number; recordCfg?: number; smartHome: SupportSmartHome; item: SupportChannel[]; }

The device features in <Support>.

T
SupportChannel = { chnID: number; ptzType: number; rfCfg: number; noAudio: number; autoFocus: number; videoClip: number; battery: number; ispCfg: number; osdCfg: number; batAnalysis: number; dynamicReso: number; audioVersion: number; ledCtrl: number; ptzControl: number; newIspCfg: number; ptzPreset: number; ptzPatrol: number; ptzTattern: number; autoPt: number; h264Profile: number; motion: number; aitype: number; aiAnimalType?: number; eventTypeVersion?: number; timelapse: number; snap: number; encCtrl: number; zfBacklash: number; IOTLinkAbility: number; ipcAudioTalk?: number; shelter?: number; thumbnail?: number; doorbellVersion?: number; aiUpdateAbility?: number; remoteAbility?: number; }

One channel's feature flags, in a top-level <item>.

T
SupportSmartHome = { version?: number; item: SupportSmartHomeItem[]; }

The smart home assistants, in <smartHome>.

T
SupportSmartHomeItem = { name: string; ver: number; }

One smart home assistant, in <smartHome><item>.

T
SyncSsid = { ssid2Dot4G?: string; ssid5G?: string; }

The Wi-Fi network names in <syncSSID>.

T
SystemGeneral = { timeZone?: number; osdFormat?: "MDY" | "YMD" | "DMY" | "MDY_CN" | "YMD_CN" | "DMY_CN"; year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; deviceId?: number; timeFormat?: number; language?: string; deviceName?: string; loginLock?: number; lockTime?: number; allowedTimes?: number; isDst?: number; }

The general system settings in <SystemGeneral>.

T
T1MicTest = Record<PropertyKey, never>

The value of <T1MicTest>: the firmware reads and writes no fields.

T
TalkConfig = { duplex?: "FDX" | "HDX"; audioStreamMode?: "followVideoStream" | "onlyAudioStream" | "mixAudioStream"; audioConfig?: TalkAudioConfig; }

The two-way audio session in <TalkConfig>.

T
TimeCfg = { realTime?: number; }

The clock setting in <TimeCfg>.

T
TimelapseCfg = { channelId?: number; overwrite?: number; maxFileNum?: number; item?: TimelapseCfgItem; }

The time-lapse settings in <timelapseCfg>.

T
TimelapseCfgTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A date and time in <timelapseCfg>. The item's range is written with year to minute, a duration window with hour to second.

T
TimelapseCover = { id?: string; }

The file reference in <timelapseCover>.

T
TimelapseDateTbl = { channelId?: number; uid?: string; id?: string; item?: TimelapseDateTblItem[]; }

The days with time-lapse files in <timelapseDateTbl>.

T
TimelapseDateTblItem = { year?: number; dateTable?: string; }

One year in <timelapseDateTbl>.

T
TimelapseDownload = { position?: bigint; id?: string; taskType?: "mp4" | "jpeg"; }

One timelapse file to download, in <timelapseDownload>.

T
TimelapseFile = { id?: string; fileName?: string; resoHight?: number; resowidth?: number; size?: bigint; duration?: number; startTime?: TimelapseFileTime; endTime?: TimelapseFileTime; }

One stored file in a <timelapseFileSearch> item.

T
TimelapseFileDel = { taskType?: "mp4" | "jpeg"; item: { id?: string; }[]; }

Timelapse files to delete, in <timelapseFileDel>.

T
TimelapseFileItem = { original?: TimelapseFile; thumbnail?: TimelapseFile; }

One result in <timelapseFileSearch>.

T
TimelapseFileSearch = { channelId?: number; handle?: number; totalNum?: number; finished?: number; uid?: string; id?: string; fromWhere?: number; startTime?: TimelapseFileTime; endTime?: TimelapseFileTime; taskType?: "mp4" | "jpeg"; item?: TimelapseFileItem[]; }

The search state and results in <timelapseFileSearch>.

T
TimelapseFileTime = { year?: number; month?: number; day?: number; hour?: number; minute?: number; second?: number; }

A date and time in <timelapseFileSearch>.

T
TimelapseTaskDel = { uid?: string; id?: string; }

A timelapse task to delete, in <timelapseTaskDel>.

T
TimelapseTasks = { channelId?: number; uid?: string; item?: TimelapseTask[]; }

The stored time-lapse tasks in <timelapseTasks>.

T
TrackLimit = { channelId?: number; leftLimit?: number; leftImageName?: string; rightLimit?: number; rightImageName?: string; }

The AI tracking pan limits in <trackLimit>.

T
TrackSchedule = { channelId?: number; timeTable?: string; }

The AI tracking schedule in <trackSchedule>.

  • channelId: number

    Zero-based channel.

  • timeTable: string

    Schedule as text of up to 168 characters, stored as-is. The same field in <IOTAction> holds one 0 or 1 per hour of the week.

T
Uid = { uid: string; }

The camera's P2P UID in <Uid>.

T
Upnp = { enable: number; }

The UPnP switch in <Upnp>.

T
UserList = { User: UserListUser[]; }

The user accounts in <UserList>.

T
UserListUser = { userId?: number; userName?: string; userLevel?: number; loginState?: number; userSetState?: "none" | "add" | "delete" | "modify"; password?: string; }

One account in <UserList>.

T
VersionInfo = { name: string; type: string; serialNumber: string; buildDay: string; hardwareVersion: string; cfgVersion: string; firmwareVersion: string; detail: string; IEClient: string; pakSuffix: string; itemNo?: string; aiVersion?: string; anotherPakSuffix?: string; helpVersion?: string; }

The device and firmware identity in <VersionInfo>.

T
VideoInput = { channelId?: number; bright?: number; contrast?: number; saturation?: number; hue?: number; sharpen?: number; }

The image adjustments in <VideoInput>.

T
WhiteLightInfo = Record<PropertyKey, never>

The value of <whiteLightInfo>: the firmware reads and writes no fields.

T
Wifi = { scanAp?: number; freqPolicy?: number; protocol?: number; mode?: "station" | "ap"; authMode?: "open" | "shared" | "wpapsk" | "wpa2psk" | "detect"; encryptType?: "none" | "wep" | "tkip" | "aes" | "detect"; udidList?: WifiUdid[]; ssid?: string; key?: string; channel?: number; type?: number; staticSsid?: string; staticKey?: string; countryCode?: string; }

The Wi-Fi client settings in <Wifi>.

T
WifiSignal = { signal: number; }

The Wi-Fi signal strength in <WifiSignal>.

T
WifiUdid = { name?: string; signal?: number; encrypt?: number; type?: number; protocol?: number; }

One access point in <udidList>, as a <udid> element.

T
ZfBacklash = { fBacklash?: number; zBacklash?: number; }

The zoom and focus motor backlash in <ZfBacklash>.

T
ZoomFocusInfo = { channelId?: number; zoom?: ZoomFocusPos; focus?: ZoomFocusPos; }

The zoom and focus positions in <ZoomFocusInfo>.

T
ZoomFocusPos = { maxPos?: number; minPos?: number; curPos?: number; }

One motor's range and position in <ZoomFocusInfo>.

Variables

v
v
devBodyCode: XmlParam<"DevBodyCode", DevBodyCode>

Codec for <DevBodyCode>. It reads any element as {}.

v
v
v
v
ftySnapCfg: XmlParam<"ftySnapCfg", FtySnapCfg>

Codec for <ftySnapCfg>. It reads any element as {}.

v
imageCheck: XmlParam<"ImageCheck", ImageCheck>

Codec for <ImageCheck>. It reads any element as {}.

v
ip: XmlParam<"Ip", Ip>

Codec for <Ip>.

v
irCutInfo: XmlParam<"IrCutInfo", IrCutInfo>

Codec for <IrCutInfo>. It reads any element as {}.

v
md: XmlParam<"MD", Md>

Codec for <MD>.

v
v
paramDataV20: XmlParam<"PARAM_DATA_V20", ParamDataV20>

Codec for <PARAM_DATA_V20>. It has no fields: the payload it names is binary and is not part of the XML body.

v
v
whiteLightInfo: XmlParam<"whiteLightInfo", WhiteLightInfo>

Codec for <whiteLightInfo>. It reads any element as {}.

Usage

import * as mod from "protocol/params/mod.ts";