UNPKG

smart-bus

Version:

Node.js implementation of HDL SmartBus protocol

843 lines (747 loc) 20.6 kB
module.exports = { /* 4.1 Scene */ // 4.1.1 Scene Control '0x0002': { payload: new Buffer('0403', 'hex'), data: { area: 4, scene: 3 } }, // 4.1.2 Scene Control Response '0x0003': [ { payload: new Buffer('0201060A', 'hex'), data: { area: 2, scene: 1, channels: [ { number: 1, status: false }, { number: 2, status: true }, { number: 3, status: false }, { number: 4, status: true }, { number: 5, status: false }, { number: 6, status: false } ] } }, { payload: new Buffer('02010608', 'hex'), data: { area: 2, scene: 1, channels: [ { number: 1, status: false }, { number: 2, status: false }, { number: 3, status: false }, { number: 4, status: true }, { number: 5, status: false }, { number: 6, status: false } ] } }, { payload: new Buffer('01010CA508', 'hex'), data: { area: 1, scene: 1, channels: [ { number: 1, status: true }, { number: 2, status: false }, { number: 3, status: true }, { number: 4, status: false }, { number: 5, status: false }, { number: 6, status: true }, { number: 7, status: false }, { number: 8, status: true }, { number: 9, status: false }, { number: 10, status: false }, { number: 11, status: false }, { number: 12, status: true } ] } } ], // 4.1.3 Read Status of Scene '0x000C': { payload: new Buffer('06', 'hex'), data: { area: 6 } }, // 4.1.4 Response Read Status of Scene '0x000D': { payload: new Buffer('06FE', 'hex'), data: { area: 6, scene: 254 } }, // 4.1.5 Broadcast Status of Scene '0xEFFF': [ { payload: new Buffer('04FEFEFEFE060B', 'hex'), data: { areas: [ { number: 1, scene: 254 }, { number: 2, scene: 254 }, { number: 3, scene: 254 }, { number: 4, scene: 254 } ], channels: [ { number: 1, status: true }, { number: 2, status: true }, { number: 3, status: false }, { number: 4, status: true }, { number: 5, status: false }, { number: 6, status: false }, ] }, }, { payload: new Buffer('04FEFEFEFE0C0B08', 'hex'), data: { areas: [ { number: 1, scene: 254 }, { number: 2, scene: 254 }, { number: 3, scene: 254 }, { number: 4, scene: 254 } ], channels: [ { number: 1, status: true }, { number: 2, status: true }, { number: 3, status: false }, { number: 4, status: true }, { number: 5, status: false }, { number: 6, status: false }, { number: 7, status: false }, { number: 8, status: false }, { number: 9, status: false }, { number: 10, status: false }, { number: 11, status: false }, { number: 12, status: true } ] } } ], // 4.1.6 Read Area Information // 4.1.7 Response Read Area Information '0x0005': { payload: new Buffer('0269010404010200040003', 'hex'), data: { device: { type: 617, subnet: 1, id: 4 }, areas: 4, channels: [ { number: 1, area: 1 }, { number: 2, area: 2 }, { number: 3, area: 0 }, { number: 4, area: 4 }, { number: 5, area: 0 }, { number: 6, area: 3 } ] } }, // 4.1.8 Read Scene Information '0x0000': { payload: new Buffer('0102', 'hex'), data: { area: 1, scene: 2 } }, // 4.1.9 Read Scene Information Response '0x0001': [ { payload: new Buffer('010205AD326464323232', 'hex'), data: { area: 1, scene: 2, time: 1453, channels: [ { number: 1, level: 50 }, { number: 2, level: 100 }, { number: 3, level: 100 }, { number: 4, level: 50 }, { number: 5, level: 50 }, { number: 6, level: 50 }, ] } }, { payload: new Buffer('010305A032646432', 'hex'), data: { area: 1, scene: 3, time: 1440, channels: [ { number: 1, level: 50 }, { number: 2, level: 100 }, { number: 3, level: 100 }, { number: 4, level: 50 } ] } } ], // 4.1.10 Modify Scene Information // 4.1.11 Response Modify Scene Information // TODO: add test /* 4.2 Sequence */ // 4.2.1 Sequence Control '0x001A': { payload: new Buffer('0102', 'hex'), data: { area: 1, sequence: 2 } }, // 4.2.2 Response Sequence Control '0x001B': { payload: new Buffer('020A', 'hex'), data: { area: 2, sequence: 10 } }, // 4.2.3 Read Status of Sequence '0xE014': { payload: new Buffer('08', 'hex'), data: { area: 8 } }, // 4.2.4 Response Read Status of Sequence '0xE015': { payload: new Buffer('08A0', 'hex'), data: { area: 8, sequence: 160 } }, // 4.2.5 Broadcast Status of Sequence '0xF036': { payload: new Buffer('0A050B370163', 'hex'), data: { areas: [ { number: 1, sequence: 10 }, { number: 2, sequence: 5 }, { number: 3, sequence: 11 }, { number: 4, sequence: 55 }, { number: 5, sequence: 1 }, { number: 6, sequence: 99 } ] } }, /* 4.3 Channels */ // 4.3.1 Single Channel Control '0x0031': { payload: new Buffer('04640190', 'hex'), data: { channel: 4, level: 100, time: 400 } }, // 4.3.2 Response Single Channel Control '0x0032': [ { payload: new Buffer('0AF864', 'hex'), data: { channel: 10, level: 100, success: true } }, { payload: new Buffer('06F532', 'hex'), data: { channel: 6, level: 50, success: false } } ], // 4.3.3 Read Status of Channels // '0x0033' // 4.3.4 Response Read Status of Channels '0x0034': { payload: new Buffer('06643250006428', 'hex'), data: { channels: [ { number: 1, level: 100 }, { number: 2, level: 50 }, { number: 3, level: 80 }, { number: 4, level: 0 }, { number: 5, level: 100 }, { number: 6, level: 40 } ] } }, // 4.3.5 Read Current Level of Channels // '0x0038' // 4.3.6 Response Read Current Level of Channels '0x0039': { payload: new Buffer('06643250006428', 'hex'), data: { channels: [ { number: 1, level: 100 }, { number: 2, level: 50 }, { number: 3, level: 80 }, { number: 4, level: 0 }, { number: 5, level: 100 }, { number: 6, level: 40 } ] } }, /* 5. Logic */ // 5.1.1 Logic Control '0xF116': [ { payload: new Buffer('0100', 'hex'), data: { block: 1, status: false } }, { payload: new Buffer('FA01', 'hex'), data: { block: 250, status: true } }, ], // 5.1.2 Response Logic Control '0xF117': [ { payload: new Buffer('0201', 'hex'), data: { block: 2, status: true } }, { payload: new Buffer('FB00', 'hex'), data: { block: 251, status: false } }, ], // 5.1.3 Read Status of Logic Control '0xF112': [ { payload: new Buffer('05', 'hex'), data: { block: 5 } }, { payload: new Buffer('FF', 'hex'), data: { block: 255 } } ], // 5.1.4 Response Read Status of Logic Control '0xF113': [ { payload: new Buffer('0501', 'hex'), data: { block: 5, status: true } }, { payload: new Buffer('F900', 'hex'), data: { block: 249, status: false } }, ], // 5.1.5 Broadcast Status of Status of Logic Control '0xF12F': [ { payload: new Buffer('0101', 'hex'), data: { block: 1, status: true } }, { payload: new Buffer('F501', 'hex'), data: { block: 245, status: true } }, ], // 5.1.6 Read System Date and Time // 0xDA00 // 5.1.7 Response Read System Date and Time '0xDA01': { payload: new Buffer('F812020C16020E01', 'hex'), data: { success: true, date: new Date(2018, 1, 12, 22, 02, 14) } }, // 5.1.8 Modify Read System Date and Time '0xDA02': { payload: new Buffer('12020C161B1D01', 'hex'), data: { date: new Date(2018, 1, 12, 22, 27, 29) } }, // 5.1.9 Response Modify Read System Date and Time '0xDA03': [ { payload: new Buffer('F8', 'hex'), data: { success: true } }, { payload: new Buffer('F5', 'hex'), data: { success: false } }, ], // 5.1.10 Broadcast System Date and Time (Every Minute) '0xDA44': { payload: new Buffer('12020C162C27', 'hex'), data: { date: new Date(2018, 1, 12, 22, 44, 39) } }, /* 6. Universal Switch */ // 6.1.1 UV Switch Control '0xE01C': [ { payload: new Buffer('10FF', 'hex'), data: { switch: 16, status: true } }, { payload: new Buffer('0500', 'hex'), data: { switch: 5, status: false } } ], // 6.1.2 Response UV Switch Control '0xE01D': [ { payload: new Buffer('0A01', 'hex'), data: { switch: 10, status: true } }, { payload: new Buffer('0200', 'hex'), data: { switch: 2, status: false } } ], // 6.1.3 Read Status of UV Switch '0xE018': [ { payload: new Buffer('0A', 'hex'), data: { switch: 10 } }, { payload: new Buffer('05', 'hex'), data: { switch: 5 } } ], // 6.1.4 Response Read Status of UV Switch '0xE019': [ { payload: new Buffer('0A01', 'hex'), data: { switch: 10, status: true } }, { payload: new Buffer('0500', 'hex'), data: { switch: 5, status: false } }, ], // 6.1.5 Broadcast Status of Status of UV Switches '0xE017': { payload: new Buffer('06010001010000', 'hex'), data: { switches: [ { number: 1, status: true }, { number: 2, status: false }, { number: 3, status: true }, { number: 4, status: true }, { number: 5, status: false }, { number: 6, status: false } ] } }, /* 7. Curtain Switch */ // 7.1.1 Curtain Switch Control '0xE3E0': [ { payload: new Buffer('0102', 'hex'), data: { curtain: 1, status: 2 } }, { payload: new Buffer('115A', 'hex'), data: { curtain: 17, status: 90 } } ], // 7.1.2 Response Curtain Switch Control '0xE3E1': [ { payload: new Buffer('0102', 'hex'), data: { curtain: 1, status: 2 } }, { payload: new Buffer('115A', 'hex'), data: { curtain: 17, status: 90 } }, { payload: new Buffer('11EE', 'hex'), data: { curtain: 17, status: 238 } } ], // 7.1.3 Read Status of Curtain Switch '0xE3E2': { payload: new Buffer('04', 'hex'), data: { curtain: 4 } }, // 7.1.4 Response Read Status of Curtain Switch '0xE3E3': [ { payload: new Buffer('0102', 'hex'), data: { curtain: 1, status: 2 } }, { payload: new Buffer('115A', 'hex'), data: { curtain: 17, status: 90 } } ], // 7.1.5 Broadcast Status of Status of Curtain Switches '0xE3E4': { payload: new Buffer('00000201', 'hex'), data: { curtains: [ { number: 1, level: 0, status: 2 }, { number: 2, level: 0, status: 1 } ] } }, /* 9. Panel Control */ // 9.1.1 Panel Control '0xE3D8': [ { payload: new Buffer('0D64', 'hex'), data: { key: 13, value: 100 } }, { payload: new Buffer('0E32', 'hex'), data: { key: 14, value: 50 } }, ], // 9.1.2 Response Panel Control '0xE3D9': [ { payload: new Buffer('0D64', 'hex'), data: { key: 13, value: 100 } }, { payload: new Buffer('0E32', 'hex'), data: { key: 14, value: 50 } }, ], // 9.1.3 Read Status of Panel Control '0xE3DA': [ { payload: new Buffer('0D', 'hex'), data: { key: 13 } }, { payload: new Buffer('0E', 'hex'), data: { key: 14 } } ], // 9.1.4 Response Read Status of Panel Control '0xE3DB': [ { payload: new Buffer('0D64', 'hex'), data: { key: 13, value: 100 } }, { payload: new Buffer('0E32', 'hex'), data: { key: 14, value: 50 } }, ], /* 10. AC Control */ // 10.1.1 Read AC Status // 0x1938 // 10.1.2 Response Read AC Status // 0x1939 // 10.1.3 Control AC Status '0x193A': { payload: new Buffer('01001C10131516230101001311', 'hex'), data: { ac: 1, temperature: { type: 'C', current: 28, cooling: 16, heating: 19, auto: 21, dry: 22 }, current: { mode: 'fan', speed: 'low' }, status: true, setup: { mode: 'heating', speed: 'auto', temperature: 19 }, swing: { enabled: true, active: true } } }, // 10.1.4 Response Control AC Status '0x193B': { payload: new Buffer('01001C10131516010100001000', 'hex'), data: { ac: 1, temperature: { type: 'C', current: 28, cooling: 16, heating: 19, auto: 21, dry: 22 }, current: { mode: 'cooling', speed: 'high' }, status: true, setup: { mode: 'cooling', speed: 'auto', temperature: 16 }, swing: { enabled: false, active: false } } }, /* 11.1 Floor Heating Control from DLP */ // 11.1.1 Read Floor Heating Status // '0x1944' // 11.1.2 Response Read Floor Heating Status '0x1945': [ { payload: new Buffer('001800011414141401', 'hex'), data: { temperature: { type: 0, current: 24, normal: 20, day: 20, night: 20, away: 20 }, status: false, mode: 1, timer: 1 } }, { payload: new Buffer('0018000114141414', 'hex'), data: { temperature: { type: 0, current: 24, normal: 20, day: 20, night: 20, away: 20 }, status: false, mode: 1 } } ], // 11.1.3 Control Floor Heating Status '0x1946': { payload: new Buffer('00010116161412', 'hex'), data: { temperature: { type: 0, normal: 22, day: 22, night: 20, away: 18 }, status: true, mode: 1 } }, // 11.1.4 Response Control Floor Heating Status '0x1947': { payload: new Buffer('F800010116161412', 'hex'), data: { success: true, temperature: { type: 0, normal: 22, day: 22, night: 20, away: 18 }, status: true, mode: 1 } }, /* 11.2 Floor Heating Control from Floor Heating Module */ // 11.2.1 Read Floor Heating Status '0x1C5E': [ { payload: new Buffer('01', 'hex'), data: { channel: 1 } }, { payload: new Buffer('0A', 'hex'), data: { channel: 10 } }, ], // 11.2.2 Response Read Floor Heating Status '0x1C5F': { payload: new Buffer('012100021818161400011E010A', 'hex'), data: { channel: 1, work: { type: 2, status: true }, temperature: { type: 0, normal: 24, day: 24, night: 22, away: 20 }, mode: 2, timer: 0, valve: true, PWD: 30, watering: { type: 0, status: true, time: 10 } } }, // 11.2.3 Control Floor Heating Status '0x1C5C': { payload: new Buffer('0121000218181614010A', 'hex'), data: { channel: 1, work: { type: 2, status: true }, temperature: { type: 0, normal: 24, day: 24, night: 22, away: 20 }, mode: 2, valve: true, watering: { time: 10 } } }, // 11.2.4 Response Control Floor Heating Status '0x1C5D': { payload: new Buffer('0121000218181614010A', 'hex'), data: { channel: 1, work: { type: 2, status: true }, temperature: { type: 0, normal: 24, day: 24, night: 22, away: 20 }, mode: 2, valve: true, watering: { time: 10 } } }, /* 12.1 Read Sensors Status (8in1 DeviceType315) */ // 12.1.1 Read Sensors Status '0xDB00': [ { payload: new Buffer('01', 'hex'), data: { logic: 1 } }, { payload: new Buffer('18', 'hex'), data: { logic: 24 } }, ], // 12.1.2 Response Read Sensors Status '0xDB01': { payload: new Buffer('010000010000012C', 'hex'), data: { movement: true, delay: 300, dryContacts: [ { number: 1, status: true }, { number: 2, status: false } ] } }, /* 12.2 Read Sensors Status (8in1 DeviceType314) */ // 12.2.1 Read Sensors Status // 0x1645 // 12.2.2 Response Read Sensors Status '0x1646': [ { payload: new Buffer('F82D016A000000', 'hex'), data: { success: true, temperature: 25, brightness: 362, movement: false, dryContacts: [ { number: 1, status: false }, { number: 2, status: false } ] } }, { payload: new Buffer('F82D016A01010000', 'hex'), data: { success: true, temperature: 25, brightness: 362, movement: true, sonic: true, dryContacts: [ { number: 1, status: false }, { number: 2, status: false } ] } } ], /* 12.3 Read Sensors Status (12in1) */ // Same codes as for 12.2 // 12.3.3 Broadcast Sensors Status Automatically '0x1647': { payload: new Buffer('2D03F701000001', 'hex'), data: { temperature: 25, brightness: 1015, movement: true, sonic: false, dryContacts: [ { number: 1, status: false }, { number: 2, status: true } ] } }, /* 12.4 Read Sensors Status (SensorsInOne) */ // 12.4.1 Read Sensors Status // 0x1604 // 12.4.2 Response Read Sensors Status '0x1605': { payload: new Buffer('F82C0108280000010100', 'hex'), data: { success: true, temperature: 24, brightness: 264, humidity: 40, air: 0, gas: 0, movement: true, dryContacts: [ { number: 1, status: true }, { number: 2, status: false } ] } }, // 12.4.3 Broadcast Sensors Status '0x1630': { payload: new Buffer('F82C01080000010100', 'hex'), data: { success: true, temperature: 24, brightness: 264, air: 0, gas: 0, movement: true, dryContacts: [ { number: 1, status: true }, { number: 2, status: false } ] } }, /* 13.1 Read Temperature */ // 13.1.1 Read Temperature '0xE3E7': [ { payload: new Buffer('01', 'hex'), data: { channel: 1 } }, { payload: new Buffer('FF', 'hex'), data: { channel: 255 } } ], // 13.1.2 Response Read Temperature '0xE3E8': [ { payload: new Buffer('0100', 'hex'), data: { channel: 1, temperature: 0 } }, { payload: new Buffer('0116', 'hex'), data: { channel: 1, temperature: 22 } }, { payload: new Buffer('018F', 'hex'), data: { channel: 1, temperature: -15 } }, ], // 13.1.3 Broadcast Temperature '0xE3E5': [ { payload: new Buffer('0189', 'hex'), data: { channel: 1, temperature: -9 } }, { payload: new Buffer('0100', 'hex'), data: { channel: 1, temperature: 0 } }, { payload: new Buffer('0105', 'hex'), data: { channel: 1, temperature: 5 } }, { payload: new Buffer('0119', 'hex'), data: { channel: 1, temperature: 25 } } ], /* 13.2 Read Temperature New */ // 13.2.1 Read Temperature New '0x1948': { payload: new Buffer('01', 'hex'), data: { channel: 1 } }, // 13.2.2 Response Temperature '0x1949': [ { payload: new Buffer('019A99C141', 'hex'), data: { channel: 1, temperature: 24.200000762939453 } }, { payload: new Buffer('010000B441', 'hex'), data: { channel: 1, temperature: 22.5 } } ], // 16.1.3 Read Dry Contact Status '0x15CE': { payload: new Buffer('0102', 'hex'), data: { area: 1, switch: 2 } }, // 16.1.4 Response Read Dry Contact Status 0x15CF: [ { payload: new Buffer('010201', 'hex'), data: { area: 1, switch: 2, contact: true} }, { payload: new Buffer('010100', 'hex'), data: { area: 1, switch: 1, contact: false} } ], /* XX. Undocumented Operation Codes */ // XX.1 Panel // XX.1.1 Panel brightness/lock '0xE012': { payload: new Buffer('140101', 'hex'), data: { backlight: 20, statusLights: 1, autoLock: 1 } }, // XX.1.2 Panel brighness/lock Response '0xE013': [ { payload: new Buffer('F8', 'hex'), data: { success: true } }, { payload: new Buffer('F5', 'hex'), data: { success: false } } ], // XX.1.3 Panel button color '0xE14E': { payload: new Buffer('04681766FFFFFF', 'hex'), data: { button: 4, color: { on: [104, 23, 102], off: [255, 255, 255] } } }, // XX.1.4 Panel button color Response, '0xE14F': { payload: new Buffer('04', 'hex'), data: { button: 4 } } };