@homebridge-plugins/homebridge-tuya 2.0.2-beta.3

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.
Files changed (191) hide show
  1. package/.idea/copilot.data.migration.agent.xml +6 -0
  2. package/.idea/copilot.data.migration.ask.xml +6 -0
  3. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  4. package/.idea/copilot.data.migration.edit.xml +6 -0
  5. package/.idea/dictionaries/benpotter.xml +3 -0
  6. package/.idea/homebridge-tuya.iml +8 -0
  7. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  8. package/.idea/modules.xml +8 -0
  9. package/.idea/vcs.xml +6 -0
  10. package/.idea/workspace.xml +64 -0
  11. package/ADVANCED_OPTIONS.md +267 -0
  12. package/CHANGELOG.md +127 -0
  13. package/LICENSE +20 -0
  14. package/README.md +206 -0
  15. package/SUPPORTED_DEVICES.md +206 -0
  16. package/config.schema.json +550 -0
  17. package/dist/accessory/AccessoryFactory.js +274 -0
  18. package/dist/accessory/AccessoryFactory.js.map +1 -0
  19. package/dist/accessory/AirConditionerAccessory.js +307 -0
  20. package/dist/accessory/AirConditionerAccessory.js.map +1 -0
  21. package/dist/accessory/AirPurifierAccessory.js +90 -0
  22. package/dist/accessory/AirPurifierAccessory.js.map +1 -0
  23. package/dist/accessory/AirQualitySensorAccessory.js +30 -0
  24. package/dist/accessory/AirQualitySensorAccessory.js.map +1 -0
  25. package/dist/accessory/BaseAccessory.js +295 -0
  26. package/dist/accessory/BaseAccessory.js.map +1 -0
  27. package/dist/accessory/CameraAccessory.js +117 -0
  28. package/dist/accessory/CameraAccessory.js.map +1 -0
  29. package/dist/accessory/CarbonDioxideSensorAccessory.js +52 -0
  30. package/dist/accessory/CarbonDioxideSensorAccessory.js.map +1 -0
  31. package/dist/accessory/CarbonMonoxideSensorAccessory.js +52 -0
  32. package/dist/accessory/CarbonMonoxideSensorAccessory.js.map +1 -0
  33. package/dist/accessory/ContactSensorAccessory.js +30 -0
  34. package/dist/accessory/ContactSensorAccessory.js.map +1 -0
  35. package/dist/accessory/DehumidifierAccessory.js +68 -0
  36. package/dist/accessory/DehumidifierAccessory.js.map +1 -0
  37. package/dist/accessory/DiffuserAccessory.js +55 -0
  38. package/dist/accessory/DiffuserAccessory.js.map +1 -0
  39. package/dist/accessory/DimmerAccessory.js +94 -0
  40. package/dist/accessory/DimmerAccessory.js.map +1 -0
  41. package/dist/accessory/DoorbellAccessory.js +89 -0
  42. package/dist/accessory/DoorbellAccessory.js.map +1 -0
  43. package/dist/accessory/ExtractionHoodAccessory.js +118 -0
  44. package/dist/accessory/ExtractionHoodAccessory.js.map +1 -0
  45. package/dist/accessory/FanAccessory.js +123 -0
  46. package/dist/accessory/FanAccessory.js.map +1 -0
  47. package/dist/accessory/GarageDoorAccessory.js +69 -0
  48. package/dist/accessory/GarageDoorAccessory.js.map +1 -0
  49. package/dist/accessory/HeaterAccessory.js +96 -0
  50. package/dist/accessory/HeaterAccessory.js.map +1 -0
  51. package/dist/accessory/HumanPresenceSensorAccessory.js +20 -0
  52. package/dist/accessory/HumanPresenceSensorAccessory.js.map +1 -0
  53. package/dist/accessory/HumidifierAccessory.js +135 -0
  54. package/dist/accessory/HumidifierAccessory.js.map +1 -0
  55. package/dist/accessory/IRAirConditionerAccessory.js +285 -0
  56. package/dist/accessory/IRAirConditionerAccessory.js.map +1 -0
  57. package/dist/accessory/IRControlHubAccessory.js +49 -0
  58. package/dist/accessory/IRControlHubAccessory.js.map +1 -0
  59. package/dist/accessory/IRControlHubSubAccessory.js +53 -0
  60. package/dist/accessory/IRControlHubSubAccessory.js.map +1 -0
  61. package/dist/accessory/IRGenericAccessory.js +50 -0
  62. package/dist/accessory/IRGenericAccessory.js.map +1 -0
  63. package/dist/accessory/LeakSensorAccessory.js +36 -0
  64. package/dist/accessory/LeakSensorAccessory.js.map +1 -0
  65. package/dist/accessory/LightAccessory.js +36 -0
  66. package/dist/accessory/LightAccessory.js.map +1 -0
  67. package/dist/accessory/LightSensorAccessory.js +32 -0
  68. package/dist/accessory/LightSensorAccessory.js.map +1 -0
  69. package/dist/accessory/LocationWeatherAccessory.js +72 -0
  70. package/dist/accessory/LocationWeatherAccessory.js.map +1 -0
  71. package/dist/accessory/LockAccessory.js +56 -0
  72. package/dist/accessory/LockAccessory.js.map +1 -0
  73. package/dist/accessory/MotionSensorAccessory.js +20 -0
  74. package/dist/accessory/MotionSensorAccessory.js.map +1 -0
  75. package/dist/accessory/OutletAccessory.js +23 -0
  76. package/dist/accessory/OutletAccessory.js.map +1 -0
  77. package/dist/accessory/PetFeederAccessory.js +139 -0
  78. package/dist/accessory/PetFeederAccessory.js.map +1 -0
  79. package/dist/accessory/SceneAccessory.js +32 -0
  80. package/dist/accessory/SceneAccessory.js.map +1 -0
  81. package/dist/accessory/SceneSwitchAccessory.js +44 -0
  82. package/dist/accessory/SceneSwitchAccessory.js.map +1 -0
  83. package/dist/accessory/SecuritySystemAccessory.js +30 -0
  84. package/dist/accessory/SecuritySystemAccessory.js.map +1 -0
  85. package/dist/accessory/SmokeSensorAccessory.js +35 -0
  86. package/dist/accessory/SmokeSensorAccessory.js.map +1 -0
  87. package/dist/accessory/SwitchAccessory.js +86 -0
  88. package/dist/accessory/SwitchAccessory.js.map +1 -0
  89. package/dist/accessory/TemperatureHumiditySensorAccessory.js +24 -0
  90. package/dist/accessory/TemperatureHumiditySensorAccessory.js.map +1 -0
  91. package/dist/accessory/ThermostatAccessory.js +190 -0
  92. package/dist/accessory/ThermostatAccessory.js.map +1 -0
  93. package/dist/accessory/ValveAccessory.js +45 -0
  94. package/dist/accessory/ValveAccessory.js.map +1 -0
  95. package/dist/accessory/VibrationSensorAccessory.js +42 -0
  96. package/dist/accessory/VibrationSensorAccessory.js.map +1 -0
  97. package/dist/accessory/WeatherStationAccessory.js +59 -0
  98. package/dist/accessory/WeatherStationAccessory.js.map +1 -0
  99. package/dist/accessory/WetBulbGlobeTemperatureAccessory.js +23 -0
  100. package/dist/accessory/WetBulbGlobeTemperatureAccessory.js.map +1 -0
  101. package/dist/accessory/WhiteNoiseLightAccessory.js +59 -0
  102. package/dist/accessory/WhiteNoiseLightAccessory.js.map +1 -0
  103. package/dist/accessory/WindowAccessory.js +14 -0
  104. package/dist/accessory/WindowAccessory.js.map +1 -0
  105. package/dist/accessory/WindowCoveringAccessory.js +156 -0
  106. package/dist/accessory/WindowCoveringAccessory.js.map +1 -0
  107. package/dist/accessory/WirelessSwitchAccessory.js +42 -0
  108. package/dist/accessory/WirelessSwitchAccessory.js.map +1 -0
  109. package/dist/accessory/characteristic/Active.js +23 -0
  110. package/dist/accessory/characteristic/Active.js.map +1 -0
  111. package/dist/accessory/characteristic/AirQuality.js +75 -0
  112. package/dist/accessory/characteristic/AirQuality.js.map +1 -0
  113. package/dist/accessory/characteristic/CurrentRelativeHumidity.js +24 -0
  114. package/dist/accessory/characteristic/CurrentRelativeHumidity.js.map +1 -0
  115. package/dist/accessory/characteristic/CurrentTemperature.js +24 -0
  116. package/dist/accessory/characteristic/CurrentTemperature.js.map +1 -0
  117. package/dist/accessory/characteristic/CurrentWeather.js +51 -0
  118. package/dist/accessory/characteristic/CurrentWeather.js.map +1 -0
  119. package/dist/accessory/characteristic/CurrentWeatherByOpenMeteo.js +81 -0
  120. package/dist/accessory/characteristic/CurrentWeatherByOpenMeteo.js.map +1 -0
  121. package/dist/accessory/characteristic/CurrentWetBulbGlobeTemperature.js +50 -0
  122. package/dist/accessory/characteristic/CurrentWetBulbGlobeTemperature.js.map +1 -0
  123. package/dist/accessory/characteristic/EnergyUsage.js +103 -0
  124. package/dist/accessory/characteristic/EnergyUsage.js.map +1 -0
  125. package/dist/accessory/characteristic/Light.js +269 -0
  126. package/dist/accessory/characteristic/Light.js.map +1 -0
  127. package/dist/accessory/characteristic/LightSensor.js +24 -0
  128. package/dist/accessory/characteristic/LightSensor.js.map +1 -0
  129. package/dist/accessory/characteristic/LockPhysicalControls.js +22 -0
  130. package/dist/accessory/characteristic/LockPhysicalControls.js.map +1 -0
  131. package/dist/accessory/characteristic/MotionDetected.js +23 -0
  132. package/dist/accessory/characteristic/MotionDetected.js.map +1 -0
  133. package/dist/accessory/characteristic/Name.js +12 -0
  134. package/dist/accessory/characteristic/Name.js.map +1 -0
  135. package/dist/accessory/characteristic/OccupancyDetected.js +20 -0
  136. package/dist/accessory/characteristic/OccupancyDetected.js.map +1 -0
  137. package/dist/accessory/characteristic/On.js +26 -0
  138. package/dist/accessory/characteristic/On.js.map +1 -0
  139. package/dist/accessory/characteristic/OutletInUse.js +15 -0
  140. package/dist/accessory/characteristic/OutletInUse.js.map +1 -0
  141. package/dist/accessory/characteristic/ProgrammableSwitchEvent.js +90 -0
  142. package/dist/accessory/characteristic/ProgrammableSwitchEvent.js.map +1 -0
  143. package/dist/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js +29 -0
  144. package/dist/accessory/characteristic/RelativeHumidityDehumidifierThreshold.js.map +1 -0
  145. package/dist/accessory/characteristic/RotationSpeed.js +79 -0
  146. package/dist/accessory/characteristic/RotationSpeed.js.map +1 -0
  147. package/dist/accessory/characteristic/SecuritySystemState.js +76 -0
  148. package/dist/accessory/characteristic/SecuritySystemState.js.map +1 -0
  149. package/dist/accessory/characteristic/SwingMode.js +22 -0
  150. package/dist/accessory/characteristic/SwingMode.js.map +1 -0
  151. package/dist/accessory/characteristic/TemperatureDisplayUnits.js +26 -0
  152. package/dist/accessory/characteristic/TemperatureDisplayUnits.js.map +1 -0
  153. package/dist/config.js +29 -0
  154. package/dist/config.js.map +1 -0
  155. package/dist/core/TuyaOpenAPI.js +314 -0
  156. package/dist/core/TuyaOpenAPI.js.map +1 -0
  157. package/dist/core/TuyaOpenMQ.js +182 -0
  158. package/dist/core/TuyaOpenMQ.js.map +1 -0
  159. package/dist/device/TuyaCustomDeviceManager.js +65 -0
  160. package/dist/device/TuyaCustomDeviceManager.js.map +1 -0
  161. package/dist/device/TuyaDevice.js +37 -0
  162. package/dist/device/TuyaDevice.js.map +1 -0
  163. package/dist/device/TuyaDeviceManager.js +447 -0
  164. package/dist/device/TuyaDeviceManager.js.map +1 -0
  165. package/dist/device/TuyaHomeDeviceManager.js +64 -0
  166. package/dist/device/TuyaHomeDeviceManager.js.map +1 -0
  167. package/dist/index.js +7 -0
  168. package/dist/index.js.map +1 -0
  169. package/dist/platform.js +466 -0
  170. package/dist/platform.js.map +1 -0
  171. package/dist/settings.js +18 -0
  172. package/dist/settings.js.map +1 -0
  173. package/dist/util/FfmpegStreamingProcess.js +126 -0
  174. package/dist/util/FfmpegStreamingProcess.js.map +1 -0
  175. package/dist/util/InfraredTool.js +396 -0
  176. package/dist/util/InfraredTool.js.map +1 -0
  177. package/dist/util/Logger.js +42 -0
  178. package/dist/util/Logger.js.map +1 -0
  179. package/dist/util/TuyaRecordingDelegate.js +22 -0
  180. package/dist/util/TuyaRecordingDelegate.js.map +1 -0
  181. package/dist/util/TuyaStreamDelegate.js +330 -0
  182. package/dist/util/TuyaStreamDelegate.js.map +1 -0
  183. package/dist/util/color.js +24 -0
  184. package/dist/util/color.js.map +1 -0
  185. package/dist/util/util.js +48 -0
  186. package/dist/util/util.js.map +1 -0
  187. package/jest.config.js +5 -0
  188. package/package.json +74 -0
  189. package/test/custom.test.ts +101 -0
  190. package/test/home.test.ts +81 -0
  191. package/test/util.ts +39 -0
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ // ===== Types =====
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.decodeInternalCode = exports.internalCodeToPulsesMicros = exports.base64ToInternalCode = exports.internalCodeToBase64 = void 0;
5
+ // ===== Utilities =====
6
+ function cleanHex(hex) {
7
+ return hex.replace(/[\s:,|_-]/g, '').toLowerCase();
8
+ }
9
+ function hexToBytes(hex) {
10
+ const h = cleanHex(hex);
11
+ if (!h) {
12
+ throw new Error('empty hex string');
13
+ }
14
+ if (h.length % 2 !== 0) {
15
+ throw new Error('hex string length must be even');
16
+ }
17
+ const out = new Array(h.length / 2);
18
+ for (let i = 0; i < h.length; i += 2) {
19
+ const b = parseInt(h.slice(i, i + 2), 16);
20
+ if (Number.isNaN(b)) {
21
+ throw new Error(`invalid hex at ${i}: ${h.slice(i, i + 2)}`);
22
+ }
23
+ out[i / 2] = b;
24
+ }
25
+ return out;
26
+ }
27
+ function bytesToHex(bytes) {
28
+ return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
29
+ }
30
+ function trimPaddingFF(bytes, ffRunLength) {
31
+ if (ffRunLength <= 0) {
32
+ return bytes.slice();
33
+ }
34
+ let run = 0;
35
+ for (let i = 0; i < bytes.length; i++) {
36
+ if (bytes[i] === 0xff) {
37
+ run++;
38
+ if (run >= ffRunLength) {
39
+ return bytes.slice(0, i - run + 1);
40
+ }
41
+ }
42
+ else {
43
+ run = 0;
44
+ }
45
+ }
46
+ return bytes.slice();
47
+ }
48
+ function bytesToBase64(bytes) {
49
+ if (typeof Buffer !== 'undefined' && typeof Buffer.from === 'function') {
50
+ return Buffer.from(bytes).toString('base64');
51
+ }
52
+ // Browser
53
+ let bin = '';
54
+ for (let i = 0; i < bytes.length; i++) {
55
+ bin += String.fromCharCode(bytes[i]);
56
+ }
57
+ // eslint-disable-next-line no-undef
58
+ return btoa(bin);
59
+ }
60
+ function base64ToBytes(b64) {
61
+ if (typeof Buffer !== 'undefined' && typeof Buffer.from === 'function') {
62
+ return Array.from(Buffer.from(b64, 'base64'));
63
+ }
64
+ // eslint-disable-next-line no-undef
65
+ const bin = atob(b64);
66
+ const out = new Array(bin.length);
67
+ for (let i = 0; i < bin.length; i++) {
68
+ out[i] = bin.charCodeAt(i);
69
+ }
70
+ return out;
71
+ }
72
+ function u16FromBytes(bytes, endian) {
73
+ if (bytes.length % 2 !== 0) {
74
+ bytes = bytes.slice(0, bytes.length - 1);
75
+ }
76
+ const out = [];
77
+ for (let i = 0; i < bytes.length; i += 2) {
78
+ const val = endian === 'LE'
79
+ ? (bytes[i] | (bytes[i + 1] << 8))
80
+ : ((bytes[i] << 8) | bytes[i + 1]);
81
+ out.push(val);
82
+ }
83
+ return out;
84
+ }
85
+ function toPulsesMicrosFromU16(ticks, tickMicros) {
86
+ return ticks.map(t => t * tickMicros);
87
+ }
88
+ function near(x, target, tolPct) {
89
+ const lo = target * (1 - tolPct);
90
+ const hi = target * (1 + tolPct);
91
+ return x >= lo && x <= hi;
92
+ }
93
+ function median(arr) {
94
+ const a = arr.slice().sort((x, y) => x - y);
95
+ const m = Math.floor(a.length / 2);
96
+ return a.length % 2 ? a[m] : (a[m - 1] + a[m]) / 2;
97
+ }
98
+ function packBitsLSB(bits) {
99
+ const out = [];
100
+ let cur = 0, count = 0;
101
+ for (const bit of bits) {
102
+ cur |= (bit & 1) << count;
103
+ count++;
104
+ if (count === 8) {
105
+ out.push(cur);
106
+ cur = 0;
107
+ count = 0;
108
+ }
109
+ }
110
+ if (count > 0) {
111
+ out.push(cur);
112
+ }
113
+ return out;
114
+ }
115
+ function packBitsMSB(bits) {
116
+ const out = [];
117
+ let cur = 0, count = 0;
118
+ for (const bit of bits) {
119
+ cur = (cur << 1) | (bit & 1);
120
+ count++;
121
+ if (count === 8) {
122
+ out.push(cur);
123
+ cur = 0;
124
+ count = 0;
125
+ }
126
+ }
127
+ if (count > 0) {
128
+ out.push(cur);
129
+ }
130
+ return out;
131
+ }
132
+ // ===== Core conversions =====
133
+ function internalCodeToBase64(hex, opts = {}) {
134
+ const { trimPadding = true, ffRunLength = 8, } = opts;
135
+ const bytes = hexToBytes(hex);
136
+ const body = trimPadding ? trimPaddingFF(bytes, ffRunLength) : bytes;
137
+ return bytesToBase64(body);
138
+ }
139
+ exports.internalCodeToBase64 = internalCodeToBase64;
140
+ function base64ToInternalCode(b64) {
141
+ const bytes = base64ToBytes(b64);
142
+ return bytesToHex(bytes);
143
+ }
144
+ exports.base64ToInternalCode = base64ToInternalCode;
145
+ function internalCodeToPulsesMicros(hex, opts = {}) {
146
+ const { tickMicros = 25, endian = 'LE', trimPadding = true, ffRunLength = 8, } = opts;
147
+ const bytes = hexToBytes(hex);
148
+ const body = trimPadding ? trimPaddingFF(bytes, ffRunLength) : bytes;
149
+ const ticks = u16FromBytes(body, endian);
150
+ return toPulsesMicrosFromU16(ticks, tickMicros);
151
+ }
152
+ exports.internalCodeToPulsesMicros = internalCodeToPulsesMicros;
153
+ function decodeNEC(pulses) {
154
+ var _a, _b;
155
+ const notes = [];
156
+ // Find leader (mark ~9000, space ~4500)
157
+ let i = 0;
158
+ const m0 = (_a = pulses[0]) !== null && _a !== void 0 ? _a : 0;
159
+ const s0 = (_b = pulses[1]) !== null && _b !== void 0 ? _b : 0;
160
+ if (!(m0 > 6000 && s0 > 2000)) {
161
+ // sometimes extra gap precedes; try to skip small first element
162
+ if (pulses.length > 3 && pulses[1] > 6000 && pulses[2] > 2000) {
163
+ i = 1;
164
+ notes.push('shifted by 1 to align leader');
165
+ }
166
+ else {
167
+ return { ok: false, score: 0 };
168
+ }
169
+ }
170
+ const leader = { mark: pulses[i], space: pulses[i + 1] };
171
+ i += 2;
172
+ // Estimate unit T from marks following leader (expect ~560µs)
173
+ const markSamples = [];
174
+ for (let k = i; k < Math.min(i + 100, pulses.length); k += 2) {
175
+ const mk = pulses[k];
176
+ if (mk > 200 && mk < 1200) {
177
+ markSamples.push(mk);
178
+ }
179
+ }
180
+ if (markSamples.length < 4) {
181
+ return { ok: false, score: 0 };
182
+ }
183
+ const T = median(markSamples);
184
+ const bits = [];
185
+ while (i + 1 < pulses.length) {
186
+ const mark = pulses[i];
187
+ const space = pulses[i + 1];
188
+ i += 2;
189
+ if (mark < T * 0.5 || mark > T * 1.8) {
190
+ break;
191
+ } // mark drifted → end
192
+ // classify by space length (0 ~T, 1 ~3T)
193
+ const bit = (space > T * 2) ? 1 : 0;
194
+ bits.push(bit);
195
+ if (bits.length > 64) {
196
+ break;
197
+ } // NEC32(最大で拡張48)
198
+ }
199
+ // Expect 32 bits (allow 28..40)
200
+ if (bits.length < 28) {
201
+ return { ok: false, score: 0.2 };
202
+ }
203
+ const bytesLSB = packBitsLSB(bits);
204
+ const res = {
205
+ protocol: 'NEC',
206
+ confidence: 0.6,
207
+ leader,
208
+ unitMicros: T,
209
+ pulsesMicros: pulses,
210
+ bits: {
211
+ bits,
212
+ bitCount: bits.length,
213
+ bytesLSB,
214
+ bytesMSB: packBitsMSB(bits),
215
+ },
216
+ notes,
217
+ };
218
+ // Validate inverted bytes if 32 bits available
219
+ if (bytesLSB.length >= 4) {
220
+ const addr = bytesLSB[0] & 0xff;
221
+ const addrInv = bytesLSB[1] & 0xff;
222
+ const cmd = bytesLSB[2] & 0xff;
223
+ const cmdInv = bytesLSB[3] & 0xff;
224
+ const addrOk = ((addr ^ addrInv) & 0xff) === 0xff;
225
+ const cmdOk = ((cmd ^ cmdInv) & 0xff) === 0xff;
226
+ res.address = addr;
227
+ res.command = cmd;
228
+ res.addressInvertedOk = addrOk;
229
+ res.commandInvertedOk = cmdOk;
230
+ res.confidence = 0.75 + (addrOk && cmdOk ? 0.2 : 0);
231
+ }
232
+ // Score leader closeness
233
+ const leaderScore = (near(leader.mark, 9000, 0.35) ? 0.1 : 0) +
234
+ (near(leader.space, 4500, 0.35) ? 0.1 : 0);
235
+ res.confidence = Math.min(1, res.confidence + leaderScore);
236
+ return { ok: true, score: res.confidence, result: res };
237
+ }
238
+ function decodeAEHA(pulses) {
239
+ var _a, _b;
240
+ const notes = [];
241
+ // Leader ~3400/1700
242
+ let i = 0;
243
+ const m0 = (_a = pulses[0]) !== null && _a !== void 0 ? _a : 0;
244
+ const s0 = (_b = pulses[1]) !== null && _b !== void 0 ? _b : 0;
245
+ if (!(m0 > 2200 && m0 < 5200 && s0 > 900 && s0 < 3000)) {
246
+ return { ok: false, score: 0 };
247
+ }
248
+ const leader = { mark: m0, space: s0 };
249
+ i += 2;
250
+ // Unit ~425
251
+ const markSamples = [];
252
+ for (let k = i; k < Math.min(i + 200, pulses.length); k += 2) {
253
+ const mk = pulses[k];
254
+ if (mk > 200 && mk < 900) {
255
+ markSamples.push(mk);
256
+ }
257
+ }
258
+ if (markSamples.length < 6) {
259
+ return { ok: false, score: 0 };
260
+ }
261
+ const T = median(markSamples);
262
+ const bits = [];
263
+ while (i + 1 < pulses.length) {
264
+ const mark = pulses[i];
265
+ const space = pulses[i + 1];
266
+ i += 2;
267
+ if (mark < T * 0.5 || mark > T * 1.8) {
268
+ break;
269
+ }
270
+ const bit = (space > T * 2.0) ? 1 : 0; // 0: ~T, 1: ~3T
271
+ bits.push(bit);
272
+ if (bits.length > 256) {
273
+ break;
274
+ } // AEHA長尺上限
275
+ }
276
+ if (bits.length < 32) {
277
+ return { ok: false, score: 0.2 };
278
+ }
279
+ const bytesLSB = packBitsLSB(bits);
280
+ const res = {
281
+ protocol: 'AEHA',
282
+ confidence: 0.6,
283
+ leader,
284
+ unitMicros: T,
285
+ pulsesMicros: pulses,
286
+ bits: {
287
+ bits, bitCount: bits.length, bytesLSB, bytesMSB: packBitsMSB(bits),
288
+ },
289
+ notes,
290
+ };
291
+ // Heuristic score: leader closeness + reasonable length
292
+ let score = 0.6;
293
+ score += (near(leader.mark, 3400, 0.35) ? 0.15 : 0);
294
+ score += (near(leader.space, 1700, 0.35) ? 0.15 : 0);
295
+ score += Math.min(0.1, bits.length / 2560); // longer frames slightly up
296
+ res.confidence = Math.min(1, score);
297
+ return { ok: true, score: res.confidence, result: res };
298
+ }
299
+ function decodeSIRC(pulses) {
300
+ var _a, _b;
301
+ const notes = [];
302
+ // Start: mark ~2400, space ~600
303
+ let i = 0;
304
+ const m0 = (_a = pulses[0]) !== null && _a !== void 0 ? _a : 0;
305
+ const s0 = (_b = pulses[1]) !== null && _b !== void 0 ? _b : 0;
306
+ if (!(near(m0, 2400, 0.35) && near(s0, 600, 0.35))) {
307
+ return { ok: false, score: 0 };
308
+ }
309
+ i += 2;
310
+ // Bits: mark 600(0) or 1200(1), space ~600
311
+ const bits = [];
312
+ const T = 600;
313
+ while (i + 1 < pulses.length) {
314
+ const mark = pulses[i];
315
+ const space = pulses[i + 1];
316
+ i += 2;
317
+ if (!near(space, 600, 0.4)) {
318
+ break;
319
+ }
320
+ const bit = near(mark, 1200, 0.35) ? 1 : (near(mark, 600, 0.35) ? 0 : -1);
321
+ if (bit < 0) {
322
+ break;
323
+ }
324
+ bits.push(bit);
325
+ if (bits.length > 24) {
326
+ break;
327
+ }
328
+ }
329
+ // Valid lengths: 12/15/20 bits
330
+ const validLens = [12, 15, 20];
331
+ const len = bits.length;
332
+ if (!validLens.includes(len)) {
333
+ return { ok: false, score: 0.2 };
334
+ }
335
+ const bytesLSB = packBitsLSB(bits);
336
+ const res = {
337
+ protocol: 'SIRC',
338
+ confidence: 0.7,
339
+ unitMicros: T,
340
+ pulsesMicros: pulses,
341
+ bits: {
342
+ bits, bitCount: bits.length, bytesLSB, bytesMSB: packBitsMSB(bits),
343
+ },
344
+ sircBits: len,
345
+ notes,
346
+ };
347
+ return { ok: true, score: res.confidence, result: res };
348
+ }
349
+ // ===== Auto detect & decode =====
350
+ function decodeInternalCode(hex, opts = {}) {
351
+ const { tickMicros = 25, endian = 'LE', trimPadding = true, ffRunLength = 8, } = opts;
352
+ // 1) 内部コード → µsパルス
353
+ const bytes = hexToBytes(hex);
354
+ const body = trimPadding ? trimPaddingFF(bytes, ffRunLength) : bytes.slice();
355
+ const ticks = u16FromBytes(body, endian);
356
+ const pulses = toPulsesMicrosFromU16(ticks, tickMicros);
357
+ // 2) 先頭がスペースだった場合の簡易補正
358
+ let pulsesUse = pulses.slice();
359
+ if (pulsesUse.length >= 2 && pulsesUse[0] < 200) {
360
+ pulsesUse = pulsesUse.slice(1); // 先頭の極小値を捨てる
361
+ }
362
+ // 3) 各方式で試す
363
+ const tries = [
364
+ decodeNEC(pulsesUse),
365
+ decodeAEHA(pulsesUse),
366
+ decodeSIRC(pulsesUse),
367
+ ].filter(t => t.ok);
368
+ if (tries.length === 0) {
369
+ return {
370
+ protocol: 'UNKNOWN',
371
+ confidence: 0,
372
+ pulsesMicros: pulsesUse,
373
+ notes: ['Failed to match NEC/AEHA/SIRC'],
374
+ };
375
+ }
376
+ // 4) スコア最大の方式を採用
377
+ tries.sort((a, b) => b.score - a.score);
378
+ const best = tries[0].result;
379
+ return best;
380
+ }
381
+ exports.decodeInternalCode = decodeInternalCode;
382
+ /*
383
+ // 1) 内部コード → Base64
384
+ const b64 = internalCodeToBase64(internalHex, { trimPadding: true, endian: 'LE' });
385
+
386
+ // 2) Base64 → 内部コード
387
+ const hex = base64ToInternalCode(b64);
388
+
389
+ // 3) パルス配列(µs)
390
+ const pulses = internalCodeToPulsesMicros(internalHex, { tickMicros: 25, endian: 'LE' });
391
+
392
+ // 4) 自動デコード(NEC/AEHA/SIRC) TODO:上手くいかないことがある
393
+ const decoded = decodeInternalCode(internalHex, { tickMicros: 25, endian: 'LE' });
394
+ console.log(decoded.protocol, decoded.address, decoded.command, decoded.bits?.bytesLSB);
395
+ */
396
+ //# sourceMappingURL=InfraredTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InfraredTool.js","sourceRoot":"","sources":["../../src/util/InfraredTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PrefixLogger = void 0;
5
+ function isExLogger(obj) {
6
+ return typeof obj.success === 'function';
7
+ }
8
+ class PrefixLogger {
9
+ constructor(log, prefix, debugMode = false) {
10
+ this.log = log;
11
+ this.prefix = prefix;
12
+ this.debugMode = debugMode;
13
+ this.debugMode = this.debugMode || process.argv.includes('-D') || process.argv.includes('--debug');
14
+ }
15
+ debug(message, ...args) {
16
+ if (this.debugMode) {
17
+ this.log.info((this.prefix ? `[${this.prefix}] ` : '') + message, ...args);
18
+ }
19
+ else {
20
+ this.log.debug((this.prefix ? `[${this.prefix}] ` : '') + message, ...args);
21
+ }
22
+ }
23
+ info(message, ...args) {
24
+ this.log.info((this.prefix ? `[${this.prefix}] ` : '') + message, ...args);
25
+ }
26
+ warn(message, ...args) {
27
+ this.log.warn((this.prefix ? `[${this.prefix}] ` : '') + message, ...args);
28
+ }
29
+ error(message, ...args) {
30
+ this.log.error((this.prefix ? `[${this.prefix}] ` : '') + message, ...args);
31
+ }
32
+ success(message, ...args) {
33
+ if (isExLogger(this.log)) {
34
+ this.log.success((this.prefix ? `[${this.prefix}] ` : '') + message, ...args);
35
+ }
36
+ else {
37
+ this.log.info((this.prefix ? `[${this.prefix}] ` : '') + message, ...args);
38
+ }
39
+ }
40
+ }
41
+ exports.PrefixLogger = PrefixLogger;
42
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/util/Logger.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAYvD,SAAS,UAAU,CAAC,GAAQ;IAC1B,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC;AAC3C,CAAC;AAED,MAAa,YAAY;IACvB,YACS,GAAW,EACX,MAAc,EACd,YAAY,KAAK;QAFjB,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAQ;QAExB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,OAAa,EAAE,GAAG,IAAW;QACjC,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC5E;aAAM;YACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7E;IACH,CAAC;IAED,IAAI,CAAC,OAAa,EAAE,GAAG,IAAW;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,OAAa,EAAE,GAAG,IAAW;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,OAAa,EAAE,GAAG,IAAW;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,CAAC,OAAa,EAAE,GAAG,IAAW;QACnC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC/E;aAAM;YACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC5E;IACH,CAAC;CAEF;AArCD,oCAqCC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TuyaRecordingDelegate = void 0;
4
+ class TuyaRecordingDelegate {
5
+ updateRecordingActive(active) {
6
+ throw new Error('Method not implemented.');
7
+ }
8
+ updateRecordingConfiguration(configuration) {
9
+ throw new Error('Method not implemented.');
10
+ }
11
+ handleRecordingStreamRequest(streamId) {
12
+ throw new Error('Method not implemented.');
13
+ }
14
+ acknowledgeStream(streamId) {
15
+ throw new Error('Method not implemented.');
16
+ }
17
+ closeRecordingStream(streamId, reason) {
18
+ throw new Error('Method not implemented.');
19
+ }
20
+ }
21
+ exports.TuyaRecordingDelegate = TuyaRecordingDelegate;
22
+ //# sourceMappingURL=TuyaRecordingDelegate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TuyaRecordingDelegate.js","sourceRoot":"","sources":["../../src/util/TuyaRecordingDelegate.ts"],"names":[],"mappings":";;;AAQA,MAAa,qBAAqB;IAChC,qBAAqB,CAAC,MAAe;QACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,4BAA4B,CAAC,aAAuD;QAClF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,4BAA4B,CAAC,QAAgB;QAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,iBAAiB,CAAE,QAAgB;QACjC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,oBAAoB,CAAC,QAAgB,EAAE,MAAkD;QACvF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF;AApBD,sDAoBC"}