smart-bus 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/commands.js CHANGED
@@ -89,7 +89,7 @@ var AC = {
89
89
  },
90
90
 
91
91
  encode: function(data) {
92
- var buffer = new Buffer(13);
92
+ var buffer = Buffer.allocUnsafe(13);
93
93
 
94
94
  var temperature = data.temperature || {};
95
95
  var current = data.current || {};
@@ -144,7 +144,7 @@ module.exports = {
144
144
  },
145
145
 
146
146
  encode: function(data) {
147
- return new Buffer([data.area, data.scene]);
147
+ return Buffer.from([data.area, data.scene]);
148
148
  },
149
149
 
150
150
  response: 0x0003
@@ -180,7 +180,7 @@ module.exports = {
180
180
  var channels = data.channels || [];
181
181
  var length = channels.length;
182
182
  var bytes = Math.ceil(length / 8);
183
- var buffer = new Buffer(3 + bytes);
183
+ var buffer = Buffer.allocUnsafe(3 + bytes);
184
184
 
185
185
  buffer.writeUInt8(data.area, 0);
186
186
  buffer.writeUInt8(data.scene, 1);
@@ -210,7 +210,7 @@ module.exports = {
210
210
  },
211
211
 
212
212
  encode: function(data) {
213
- return new Buffer([data.area]);
213
+ return Buffer.from([data.area]);
214
214
  },
215
215
 
216
216
  response: 0x000D
@@ -226,7 +226,7 @@ module.exports = {
226
226
  },
227
227
 
228
228
  encode: function(data) {
229
- return new Buffer([data.area, data.scene]);
229
+ return Buffer.from([data.area, data.scene]);
230
230
  }
231
231
  },
232
232
 
@@ -266,7 +266,7 @@ module.exports = {
266
266
  var channels = data.channels || [];
267
267
  var length = channels.length;
268
268
  var bytes = Math.ceil(length / 8);
269
- var buffer = new Buffer(2 + areas.length + bytes);
269
+ var buffer = Buffer.allocUnsafe(2 + areas.length + bytes);
270
270
 
271
271
  buffer.writeUInt8(areas.length, 0);
272
272
 
@@ -329,7 +329,7 @@ module.exports = {
329
329
  var device = data.device;
330
330
  var channels = data.channels;
331
331
  var length = channels.length;
332
- var buffer = new Buffer(5 + length);
332
+ var buffer = Buffer.allocUnsafe(5 + length);
333
333
 
334
334
  word.encode(buffer, device.type, 0);
335
335
  buffer.writeUInt8(device.subnet, 2);
@@ -360,7 +360,7 @@ module.exports = {
360
360
  },
361
361
 
362
362
  encode: function(data) {
363
- return new Buffer([data.area, data.scene]);
363
+ return Buffer.from([data.area, data.scene]);
364
364
  },
365
365
 
366
366
  response: 0x0001
@@ -391,7 +391,7 @@ module.exports = {
391
391
  encode: function(data) {
392
392
  var channels = data.channels || [];
393
393
  var length = channels.length;
394
- var buffer = new Buffer(4 + length);
394
+ var buffer = Buffer.allocUnsafe(4 + length);
395
395
 
396
396
  buffer.writeUInt8(data.area, 0);
397
397
  buffer.writeUInt8(data.scene, 1);
@@ -420,7 +420,7 @@ module.exports = {
420
420
  },
421
421
 
422
422
  encode: function(data) {
423
- var buffer = new Buffer(1);
423
+ var buffer = Buffer.allocUnsafe(1);
424
424
 
425
425
  status.encode(buffer, data.success, 0);
426
426
 
@@ -440,7 +440,7 @@ module.exports = {
440
440
  },
441
441
 
442
442
  encode: function(data) {
443
- return new Buffer([data.area, data.sequence]);
443
+ return Buffer.from([data.area, data.sequence]);
444
444
  },
445
445
 
446
446
  response: 0x001B
@@ -456,7 +456,7 @@ module.exports = {
456
456
  },
457
457
 
458
458
  encode: function(data) {
459
- return new Buffer([data.area, data.sequence]);
459
+ return Buffer.from([data.area, data.sequence]);
460
460
  }
461
461
  },
462
462
 
@@ -467,7 +467,7 @@ module.exports = {
467
467
  },
468
468
 
469
469
  encode: function(data) {
470
- return new Buffer([data.area]);
470
+ return Buffer.from([data.area]);
471
471
  },
472
472
 
473
473
  response: 0xE015
@@ -483,7 +483,7 @@ module.exports = {
483
483
  },
484
484
 
485
485
  encode: function(data) {
486
- return new Buffer([data.area, data.sequence]);
486
+ return Buffer.from([data.area, data.sequence]);
487
487
  }
488
488
  },
489
489
 
@@ -502,7 +502,7 @@ module.exports = {
502
502
  encode: function(data) {
503
503
  var areas = data.areas || [];
504
504
  var length = areas.length;
505
- var buffer = new Buffer(length);
505
+ var buffer = Buffer.allocUnsafe(length);
506
506
 
507
507
  for (var i = 0; i < length; i++)
508
508
  buffer.writeUInt8(areas[i].sequence, i);
@@ -524,7 +524,7 @@ module.exports = {
524
524
  },
525
525
 
526
526
  encode: function(data) {
527
- var buffer = new Buffer(4);
527
+ var buffer = Buffer.allocUnsafe(4);
528
528
 
529
529
  buffer.writeUInt8(data.channel, 0);
530
530
  buffer.writeUInt8(data.level, 1);
@@ -546,7 +546,7 @@ module.exports = {
546
546
  },
547
547
 
548
548
  encode: function(data) {
549
- var buffer = new Buffer(3);
549
+ var buffer = Buffer.allocUnsafe(3);
550
550
 
551
551
  buffer.writeUInt8(data.channel, 0);
552
552
  status.encode(buffer, data.success, 1);
@@ -576,7 +576,7 @@ module.exports = {
576
576
  encode: function(data) {
577
577
  var channels = data.channels || [];
578
578
  var length = channels.length;
579
- var buffer = new Buffer(length + 1);
579
+ var buffer = Buffer.allocUnsafe(length + 1);
580
580
 
581
581
  buffer.writeUInt8(length, 0);
582
582
 
@@ -608,7 +608,7 @@ module.exports = {
608
608
  encode: function(data) {
609
609
  var channels = data.channels || [];
610
610
  var length = channels.length;
611
- var buffer = new Buffer(length + 1);
611
+ var buffer = Buffer.allocUnsafe(length + 1);
612
612
 
613
613
  buffer.writeUInt8(length, 0);
614
614
 
@@ -631,7 +631,7 @@ module.exports = {
631
631
  },
632
632
 
633
633
  encode: function(data) {
634
- return new Buffer([data.block, data.status ? 1 : 0]);
634
+ return Buffer.from([data.block, data.status ? 1 : 0]);
635
635
  }
636
636
  },
637
637
 
@@ -646,7 +646,7 @@ module.exports = {
646
646
  },
647
647
 
648
648
  encode: function(data) {
649
- return new Buffer([data.block, data.status ? 1 : 0]);
649
+ return Buffer.from([data.block, data.status ? 1 : 0]);
650
650
  }
651
651
  },
652
652
 
@@ -657,7 +657,7 @@ module.exports = {
657
657
  },
658
658
 
659
659
  encode: function(data) {
660
- return new Buffer([data.block]);
660
+ return Buffer.from([data.block]);
661
661
  }
662
662
  },
663
663
 
@@ -673,7 +673,7 @@ module.exports = {
673
673
  },
674
674
 
675
675
  encode: function(data) {
676
- return new Buffer([data.block, data.status ? 1 : 0]);
676
+ return Buffer.from([data.block, data.status ? 1 : 0]);
677
677
  }
678
678
  },
679
679
 
@@ -688,7 +688,7 @@ module.exports = {
688
688
  },
689
689
 
690
690
  encode: function(data) {
691
- return new Buffer([data.block, data.status ? 1 : 0]);
691
+ return Buffer.from([data.block, data.status ? 1 : 0]);
692
692
  }
693
693
  },
694
694
 
@@ -707,7 +707,7 @@ module.exports = {
707
707
  },
708
708
 
709
709
  encode: function(data) {
710
- var buffer = new Buffer(8);
710
+ var buffer = Buffer.allocUnsafe(8);
711
711
 
712
712
  status.encode(buffer, data.success, 0);
713
713
  date.encode(buffer, data.date, 1);
@@ -727,7 +727,7 @@ module.exports = {
727
727
  },
728
728
 
729
729
  encode: function(data) {
730
- var buffer = new Buffer(7);
730
+ var buffer = Buffer.allocUnsafe(7);
731
731
 
732
732
  date.encode(buffer, data.date, 0);
733
733
 
@@ -744,7 +744,7 @@ module.exports = {
744
744
  },
745
745
 
746
746
  encode: function(data) {
747
- var buffer = new Buffer(1);
747
+ var buffer = Buffer.allocUnsafe(1);
748
748
 
749
749
  status.encode(buffer, data.success, 0);
750
750
 
@@ -759,7 +759,7 @@ module.exports = {
759
759
  },
760
760
 
761
761
  encode: function(data) {
762
- var buffer = new Buffer(6);
762
+ var buffer = Buffer.allocUnsafe(6);
763
763
 
764
764
  date.encode(buffer, data.date, 0);
765
765
 
@@ -779,7 +779,7 @@ module.exports = {
779
779
  },
780
780
 
781
781
  encode: function(data) {
782
- var buffer = new Buffer(2);
782
+ var buffer = Buffer.allocUnsafe(2);
783
783
 
784
784
  buffer.writeUInt8(data.switch, 0);
785
785
  buffer.writeUInt8(data.status ? 255 : 0, 1);
@@ -800,7 +800,7 @@ module.exports = {
800
800
  },
801
801
 
802
802
  encode: function(data) {
803
- var buffer = new Buffer(2);
803
+ var buffer = Buffer.allocUnsafe(2);
804
804
 
805
805
  buffer.writeUInt8(data.switch, 0);
806
806
  buffer.writeUInt8(data.status ? 1 : 0, 1);
@@ -816,7 +816,7 @@ module.exports = {
816
816
  },
817
817
 
818
818
  encode: function(data) {
819
- return new Buffer([data.switch]);
819
+ return Buffer.from([data.switch]);
820
820
  },
821
821
 
822
822
  response: 0xE019
@@ -833,7 +833,7 @@ module.exports = {
833
833
  },
834
834
 
835
835
  encode: function(data) {
836
- var buffer = new Buffer(2);
836
+ var buffer = Buffer.allocUnsafe(2);
837
837
 
838
838
  buffer.writeUInt8(data.switch, 0);
839
839
  buffer.writeUInt8(data.status ? 1 : 0, 1);
@@ -860,7 +860,7 @@ module.exports = {
860
860
  encode: function(data) {
861
861
  var switches = data.switches || [];
862
862
  var length = switches.length;
863
- var buffer = new Buffer(length + 1);
863
+ var buffer = Buffer.allocUnsafe(length + 1);
864
864
 
865
865
  buffer.writeUInt8(length, 0);
866
866
 
@@ -883,7 +883,7 @@ module.exports = {
883
883
  },
884
884
 
885
885
  encode: function(data) {
886
- return new Buffer([data.curtain, data.status]);
886
+ return Buffer.from([data.curtain, data.status]);
887
887
  },
888
888
 
889
889
  response: 0xE3E1
@@ -900,7 +900,7 @@ module.exports = {
900
900
  },
901
901
 
902
902
  encode: function(data) {
903
- return new Buffer([data.curtain, data.status]);
903
+ return Buffer.from([data.curtain, data.status]);
904
904
  }
905
905
  },
906
906
 
@@ -911,7 +911,7 @@ module.exports = {
911
911
  },
912
912
 
913
913
  encode: function(data) {
914
- return new Buffer([data.curtain]);
914
+ return Buffer.from([data.curtain]);
915
915
  },
916
916
 
917
917
  response: 0xE3E3
@@ -921,14 +921,29 @@ module.exports = {
921
921
  // FIXME: same as 0xE3E1
922
922
  0xE3E3: {
923
923
  parse: function(buffer) {
924
- return {
924
+ var data = {
925
925
  curtain: buffer.readUInt8(0),
926
926
  status: buffer.readUInt8(1)
927
927
  };
928
+ // Duration field (4 bytes total) - in deciseconds (0.1 second units)
929
+ if (buffer.length >= 4) {
930
+ data.duration = buffer.readUInt16BE(2) / 10;
931
+ }
932
+ return data;
928
933
  },
929
934
 
930
935
  encode: function(data) {
931
- return new Buffer([data.curtain, data.status]);
936
+ // Support both 2-byte (legacy) and 4-byte (with duration) formats
937
+ if (data.duration !== undefined) {
938
+ var buffer = Buffer.allocUnsafe(4);
939
+ buffer.writeUInt8(data.curtain, 0);
940
+ buffer.writeUInt8(data.status, 1);
941
+ var duration = data.duration * 10;
942
+ buffer.writeUInt16BE(duration, 2);
943
+ return buffer;
944
+ } else {
945
+ return Buffer.from([data.curtain, data.status]);
946
+ }
932
947
  }
933
948
  },
934
949
 
@@ -953,7 +968,7 @@ module.exports = {
953
968
  encode: function(data) {
954
969
  var curtains = data.curtains || [];
955
970
  var length = curtains.length;
956
- var buffer = new Buffer(length * 2);
971
+ var buffer = Buffer.allocUnsafe(length * 2);
957
972
 
958
973
  for (var i = 0; i < length; i++) {
959
974
  var curtain = curtains[i];
@@ -966,6 +981,39 @@ module.exports = {
966
981
  }
967
982
  },
968
983
 
984
+ // 7.1.6 Get Curtain Duration Request
985
+ 0xE800: {
986
+ parse: function(buffer) {
987
+ return {
988
+ channel: buffer.readUInt8(0)
989
+ };
990
+ },
991
+
992
+ encode: function(data) {
993
+ return Buffer.from([data.channel]);
994
+ },
995
+
996
+ response: 0xE801
997
+ },
998
+
999
+ // 7.1.7 Get Curtain Duration Response
1000
+ 0xE801: {
1001
+ parse: function(buffer) {
1002
+ return {
1003
+ channel: buffer.readUInt8(0),
1004
+ duration: buffer.readUInt16BE(2)
1005
+ };
1006
+ },
1007
+
1008
+ encode: function(data) {
1009
+ var buffer = Buffer.allocUnsafe(4);
1010
+ buffer.writeUInt8(data.channel, 0);
1011
+ buffer.writeUInt8(0, 1); // Reserved
1012
+ buffer.writeUInt16BE(data.duration || 0, 2);
1013
+ return buffer;
1014
+ }
1015
+ },
1016
+
969
1017
  /* 8. GPRS Control */
970
1018
 
971
1019
  // 8.1.1 GPRS Control
@@ -986,7 +1034,7 @@ module.exports = {
986
1034
  },
987
1035
 
988
1036
  encode: function(data) {
989
- return new Buffer([data.key, data.value]);
1037
+ return Buffer.from([data.key, data.value]);
990
1038
  },
991
1039
 
992
1040
  response: 0xE3D9
@@ -1003,7 +1051,7 @@ module.exports = {
1003
1051
  },
1004
1052
 
1005
1053
  encode: function(data) {
1006
- return new Buffer([data.key, data.value]);
1054
+ return Buffer.from([data.key, data.value]);
1007
1055
  }
1008
1056
  },
1009
1057
 
@@ -1014,7 +1062,7 @@ module.exports = {
1014
1062
  },
1015
1063
 
1016
1064
  encode: function(data) {
1017
- return new Buffer([data.key]);
1065
+ return Buffer.from([data.key]);
1018
1066
  },
1019
1067
 
1020
1068
  response: 0xE3DB
@@ -1031,7 +1079,7 @@ module.exports = {
1031
1079
  },
1032
1080
 
1033
1081
  encode: function(data) {
1034
- return new Buffer([data.key, data.value]);
1082
+ return Buffer.from([data.key, data.value]);
1035
1083
  }
1036
1084
  },
1037
1085
 
@@ -1091,7 +1139,7 @@ module.exports = {
1091
1139
 
1092
1140
  encode: function(data) {
1093
1141
  var timerPresent = (data.timer === undefined) ? 0 : 1;
1094
- var buffer = new Buffer(8 + timerPresent);
1142
+ var buffer = Buffer.allocUnsafe(8 + timerPresent);
1095
1143
  var temperature = data.temperature;
1096
1144
 
1097
1145
  buffer.writeUInt8(temperature.type, 0);
@@ -1128,7 +1176,7 @@ module.exports = {
1128
1176
  },
1129
1177
 
1130
1178
  encode: function(data) {
1131
- var buffer = new Buffer(7);
1179
+ var buffer = Buffer.allocUnsafe(7);
1132
1180
  var temperature = data.temperature;
1133
1181
 
1134
1182
  buffer.writeInt8(temperature.type, 0);
@@ -1164,7 +1212,7 @@ module.exports = {
1164
1212
  },
1165
1213
 
1166
1214
  encode: function(data) {
1167
- var buffer = new Buffer(8);
1215
+ var buffer = Buffer.allocUnsafe(8);
1168
1216
  var temperature = data.temperature;
1169
1217
 
1170
1218
  status.encode(buffer, data.success, 0);
@@ -1189,7 +1237,7 @@ module.exports = {
1189
1237
  },
1190
1238
 
1191
1239
  encode: function(data) {
1192
- return new Buffer([data.channel]);
1240
+ return Buffer.from([data.channel]);
1193
1241
  },
1194
1242
 
1195
1243
  response: 0x1C5F
@@ -1227,7 +1275,7 @@ module.exports = {
1227
1275
  },
1228
1276
 
1229
1277
  encode: function(data) {
1230
- var buffer = new Buffer(13);
1278
+ var buffer = Buffer.allocUnsafe(13);
1231
1279
 
1232
1280
  var work = data.work;
1233
1281
  var watering = data.watering;
@@ -1276,7 +1324,7 @@ module.exports = {
1276
1324
  },
1277
1325
 
1278
1326
  encode: function(data) {
1279
- var buffer = new Buffer(10);
1327
+ var buffer = Buffer.allocUnsafe(10);
1280
1328
 
1281
1329
  var work = data.work;
1282
1330
  var temperature = data.temperature;
@@ -1324,7 +1372,7 @@ module.exports = {
1324
1372
  },
1325
1373
 
1326
1374
  encode: function(data) {
1327
- var buffer = new Buffer(10);
1375
+ var buffer = Buffer.allocUnsafe(10);
1328
1376
 
1329
1377
  var work = data.work;
1330
1378
  var temperature = data.temperature;
@@ -1381,7 +1429,7 @@ module.exports = {
1381
1429
  },
1382
1430
 
1383
1431
  encode: function(data) {
1384
- return new Buffer([data.logic]);
1432
+ return Buffer.from([data.logic]);
1385
1433
  },
1386
1434
 
1387
1435
  response: 0xDB01
@@ -1407,7 +1455,7 @@ module.exports = {
1407
1455
  },
1408
1456
 
1409
1457
  encode: function(data) {
1410
- var buffer = new Buffer(8);
1458
+ var buffer = Buffer.allocUnsafe(8);
1411
1459
  var contacts = data.dryContacts || [];
1412
1460
 
1413
1461
  for (var i = 0; i < 2; i++)
@@ -1459,7 +1507,7 @@ module.exports = {
1459
1507
  var contacts = data.dryContacts || [];
1460
1508
  var hasSonic = data.hasOwnProperty('sonic');
1461
1509
 
1462
- var buffer = new Buffer(hasSonic ? 8 : 7);
1510
+ var buffer = Buffer.allocUnsafe(hasSonic ? 8 : 7);
1463
1511
 
1464
1512
  status.encode(buffer, data.success, 0);
1465
1513
  buffer.writeUInt8(data.temperature + 20, 1);
@@ -1505,7 +1553,7 @@ module.exports = {
1505
1553
  },
1506
1554
 
1507
1555
  encode: function(data) {
1508
- var buffer = new Buffer(7);
1556
+ var buffer = Buffer.allocUnsafe(7);
1509
1557
  var contacts = data.dryContacts || [];
1510
1558
 
1511
1559
  buffer.writeUInt8(data.temperature + 20, 0);
@@ -1554,7 +1602,7 @@ module.exports = {
1554
1602
  },
1555
1603
 
1556
1604
  encode: function(data) {
1557
- var buffer = new Buffer(10);
1605
+ var buffer = Buffer.allocUnsafe(10);
1558
1606
  var contacts = data.dryContacts || [];
1559
1607
 
1560
1608
  status.encode(buffer, data.success, 0);
@@ -1599,7 +1647,7 @@ module.exports = {
1599
1647
  },
1600
1648
 
1601
1649
  encode: function(data) {
1602
- var buffer = new Buffer(9);
1650
+ var buffer = Buffer.allocUnsafe(9);
1603
1651
  var contacts = data.dryContacts || [];
1604
1652
 
1605
1653
  status.encode(buffer, data.success, 0);
@@ -1625,7 +1673,7 @@ module.exports = {
1625
1673
  },
1626
1674
 
1627
1675
  encode: function(data) {
1628
- return new Buffer([data.channel]);
1676
+ return Buffer.from([data.channel]);
1629
1677
  },
1630
1678
 
1631
1679
  response: 0xE3E8
@@ -1649,7 +1697,7 @@ module.exports = {
1649
1697
 
1650
1698
  if (temperature < 0) temperature = -temperature;
1651
1699
 
1652
- return new Buffer([data.channel, temperature | sign]);
1700
+ return Buffer.from([data.channel, temperature | sign]);
1653
1701
  }
1654
1702
  },
1655
1703
 
@@ -1676,7 +1724,7 @@ module.exports = {
1676
1724
 
1677
1725
  if (temperature < 0) temperature = -temperature;
1678
1726
 
1679
- return new Buffer([data.channel, temperature | sign]);
1727
+ return Buffer.from([data.channel, temperature | sign]);
1680
1728
  }
1681
1729
  },
1682
1730
 
@@ -1689,7 +1737,7 @@ module.exports = {
1689
1737
  },
1690
1738
 
1691
1739
  encode: function(data) {
1692
- return new Buffer([data.channel]);
1740
+ return Buffer.from([data.channel]);
1693
1741
  },
1694
1742
 
1695
1743
  response: 0x1949
@@ -1705,7 +1753,7 @@ module.exports = {
1705
1753
  },
1706
1754
 
1707
1755
  encode: function(data) {
1708
- var buffer = new Buffer(5);
1756
+ var buffer = Buffer.allocUnsafe(5);
1709
1757
 
1710
1758
  buffer.writeUInt8(data.channel, 0);
1711
1759
  buffer.writeFloatLE(data.temperature, 1);
@@ -1749,12 +1797,44 @@ module.exports = {
1749
1797
  // 0x021B
1750
1798
 
1751
1799
  /* 16. Dry Contact */
1752
-
1800
+
1753
1801
  // 16.1.1 Auto broadcast Dry Contact Status
1754
- // 0x15D0
1802
+ 0x15D0: {
1803
+ parse: function(buffer) {
1804
+ return {
1805
+ area: buffer.readUInt8(0),
1806
+ channel: buffer.readUInt8(1),
1807
+ status: buffer.readUInt8(2) === 0
1808
+ };
1809
+ },
1810
+
1811
+ encode: function(data) {
1812
+ var buffer = Buffer.allocUnsafe(3);
1813
+ buffer.writeUInt8(data.area, 0);
1814
+ buffer.writeUInt8(data.channel, 1);
1815
+ buffer.writeUInt8(data.status ? 0 : 1, 2);
1816
+ return buffer;
1817
+ }
1818
+ },
1755
1819
 
1756
1820
  // 16.1.2 Response Auto broadcast Dry Contact Status
1757
- // 0x15D1
1821
+ 0x15D1: {
1822
+ parse: function(buffer) {
1823
+ return {
1824
+ area: buffer.readUInt8(0),
1825
+ channel: buffer.readUInt8(1),
1826
+ status: buffer.readUInt8(2) === 0
1827
+ };
1828
+ },
1829
+
1830
+ encode: function(data) {
1831
+ var buffer = Buffer.allocUnsafe(3);
1832
+ buffer.writeUInt8(data.area, 0);
1833
+ buffer.writeUInt8(data.channel, 1);
1834
+ buffer.writeUInt8(data.status ? 0 : 1, 2);
1835
+ return buffer;
1836
+ }
1837
+ },
1758
1838
 
1759
1839
  // 16.1.3 Read Dry Contact Status
1760
1840
  0x15CE: {
@@ -1766,7 +1846,7 @@ module.exports = {
1766
1846
  },
1767
1847
 
1768
1848
  encode: function(data) {
1769
- var buffer = new Buffer(2);
1849
+ var buffer = Buffer.allocUnsafe(2);
1770
1850
 
1771
1851
  buffer.writeUInt8(data.area, 0);
1772
1852
  buffer.writeUInt8(data.switch, 1);
@@ -1789,7 +1869,7 @@ module.exports = {
1789
1869
  },
1790
1870
 
1791
1871
  encode: function(data) {
1792
- var buffer = new Buffer(3);
1872
+ var buffer = Buffer.allocUnsafe(3);
1793
1873
  buffer.writeUInt8(data.area, 0);
1794
1874
  buffer.writeUInt8(data.switch, 1);
1795
1875
  buffer.writeUInt8(data.contact ? 1 : 0, 2);
@@ -1798,6 +1878,54 @@ module.exports = {
1798
1878
  }
1799
1879
  },
1800
1880
 
1881
+ // 16.1.5 Dry Contact Multi-Channel Status
1882
+ 0x6F00: {
1883
+ parse: function(buffer) {
1884
+ var data = {
1885
+ declaredChannels: buffer.readUInt8(1),
1886
+ statusMask: buffer.readUInt16BE(2),
1887
+ channels: []
1888
+ };
1889
+
1890
+ // Include subnet if present
1891
+ if (buffer.length >= 4) {
1892
+ data.subnet = buffer.readUInt8(0);
1893
+ }
1894
+
1895
+ // Parse 16-bit mask for up to 16 channels
1896
+ var mask = data.statusMask;
1897
+ var channels = data.channels;
1898
+
1899
+ for (var i = 0; i < 16; i++) {
1900
+ channels.push({
1901
+ number: i + 1,
1902
+ status: !!(mask & (1 << i))
1903
+ });
1904
+ }
1905
+
1906
+ return data;
1907
+ },
1908
+
1909
+ encode: function(data) {
1910
+ var buffer = Buffer.allocUnsafe(4);
1911
+ buffer.writeUInt8(data.subnet || 0, 0);
1912
+ buffer.writeUInt8(data.declaredChannels || 16, 1);
1913
+
1914
+ var mask = 0;
1915
+ var channels = data.channels || [];
1916
+
1917
+ for (var i = 0; i < channels.length; i++) {
1918
+ if (channels[i].status) {
1919
+ mask |= 1 << (i);
1920
+ }
1921
+ }
1922
+
1923
+ buffer.writeUInt16BE(mask, 2);
1924
+
1925
+ return buffer;
1926
+ }
1927
+ },
1928
+
1801
1929
  /* 17. DLP Music Play Control Command */
1802
1930
 
1803
1931
  // 17.1.1 Read Z-audio Current Status
@@ -1884,7 +2012,7 @@ module.exports = {
1884
2012
  },
1885
2013
 
1886
2014
  encode: function(data) {
1887
- var buffer = new Buffer(3);
2015
+ var buffer = Buffer.allocUnsafe(3);
1888
2016
 
1889
2017
  buffer.writeUInt8(data.backlight, 0);
1890
2018
  buffer.writeUInt8(data.statusLights, 1);
@@ -1903,7 +2031,7 @@ module.exports = {
1903
2031
  },
1904
2032
 
1905
2033
  encode: function(data) {
1906
- var buffer = new Buffer(1);
2034
+ var buffer = Buffer.allocUnsafe(1);
1907
2035
 
1908
2036
  status.encode(buffer, data.success, 0);
1909
2037
 
@@ -1924,7 +2052,7 @@ module.exports = {
1924
2052
  },
1925
2053
 
1926
2054
  encode: function(data) {
1927
- var buffer = new Buffer(7);
2055
+ var buffer = Buffer.allocUnsafe(7);
1928
2056
 
1929
2057
  buffer.writeUInt8(data.button, 0);
1930
2058
  buffer.writeUInt8(data.color.on[0], 1);
@@ -1947,7 +2075,7 @@ module.exports = {
1947
2075
  },
1948
2076
 
1949
2077
  encode: function(data) {
1950
- return new Buffer([data.button]);
2078
+ return Buffer.from([data.button]);
1951
2079
  }
1952
2080
  }
1953
2081
  };