@robdobsn/raftjs 1.7.2 → 1.7.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 (188) hide show
  1. package/dist/web/RaftAttributeHandler.js +5 -5
  2. package/dist/web/RaftAttributeHandler.js.map +1 -1
  3. package/package.json +5 -2
  4. package/.editorconfig +0 -14
  5. package/.gitattributes +0 -11
  6. package/.nvmrc +0 -1
  7. package/TODO.md +0 -1
  8. package/dist/react-native/RaftAttributeHandler.d.ts +0 -12
  9. package/dist/react-native/RaftAttributeHandler.js +0 -249
  10. package/dist/react-native/RaftAttributeHandler.js.map +0 -1
  11. package/dist/react-native/RaftChannel.d.ts +0 -20
  12. package/dist/react-native/RaftChannel.js +0 -12
  13. package/dist/react-native/RaftChannel.js.map +0 -1
  14. package/dist/react-native/RaftChannelBLE.native.d.ts +0 -95
  15. package/dist/react-native/RaftChannelBLE.native.js +0 -482
  16. package/dist/react-native/RaftChannelBLE.native.js.map +0 -1
  17. package/dist/react-native/RaftChannelBLE.web.d.ts +0 -40
  18. package/dist/react-native/RaftChannelBLE.web.js +0 -300
  19. package/dist/react-native/RaftChannelBLE.web.js.map +0 -1
  20. package/dist/react-native/RaftChannelBLEFactory.d.ts +0 -10
  21. package/dist/react-native/RaftChannelBLEFactory.js +0 -17
  22. package/dist/react-native/RaftChannelBLEFactory.js.map +0 -1
  23. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +0 -18
  24. package/dist/react-native/RaftChannelBLEScanner.native.js +0 -138
  25. package/dist/react-native/RaftChannelBLEScanner.native.js.map +0 -1
  26. package/dist/react-native/RaftChannelSimulated.d.ts +0 -32
  27. package/dist/react-native/RaftChannelSimulated.js +0 -418
  28. package/dist/react-native/RaftChannelSimulated.js.map +0 -1
  29. package/dist/react-native/RaftChannelWebSerial.d.ts +0 -39
  30. package/dist/react-native/RaftChannelWebSerial.js +0 -329
  31. package/dist/react-native/RaftChannelWebSerial.js.map +0 -1
  32. package/dist/react-native/RaftChannelWebSocket.d.ts +0 -30
  33. package/dist/react-native/RaftChannelWebSocket.js +0 -207
  34. package/dist/react-native/RaftChannelWebSocket.js.map +0 -1
  35. package/dist/react-native/RaftCommsStats.d.ts +0 -39
  36. package/dist/react-native/RaftCommsStats.js +0 -128
  37. package/dist/react-native/RaftCommsStats.js.map +0 -1
  38. package/dist/react-native/RaftConnEvents.d.ts +0 -39
  39. package/dist/react-native/RaftConnEvents.js +0 -54
  40. package/dist/react-native/RaftConnEvents.js.map +0 -1
  41. package/dist/react-native/RaftConnector.d.ts +0 -245
  42. package/dist/react-native/RaftConnector.js +0 -621
  43. package/dist/react-native/RaftConnector.js.map +0 -1
  44. package/dist/react-native/RaftCustomAttrHandler.d.ts +0 -4
  45. package/dist/react-native/RaftCustomAttrHandler.js +0 -50
  46. package/dist/react-native/RaftCustomAttrHandler.js.map +0 -1
  47. package/dist/react-native/RaftDeviceInfo.d.ts +0 -63
  48. package/dist/react-native/RaftDeviceInfo.js +0 -36
  49. package/dist/react-native/RaftDeviceInfo.js.map +0 -1
  50. package/dist/react-native/RaftDeviceManager.d.ts +0 -40
  51. package/dist/react-native/RaftDeviceManager.js +0 -499
  52. package/dist/react-native/RaftDeviceManager.js.map +0 -1
  53. package/dist/react-native/RaftDeviceMgrIF.d.ts +0 -15
  54. package/dist/react-native/RaftDeviceMgrIF.js +0 -11
  55. package/dist/react-native/RaftDeviceMgrIF.js.map +0 -1
  56. package/dist/react-native/RaftDeviceMsg.d.ts +0 -9
  57. package/dist/react-native/RaftDeviceMsg.js +0 -11
  58. package/dist/react-native/RaftDeviceMsg.js.map +0 -1
  59. package/dist/react-native/RaftDeviceStates.d.ts +0 -37
  60. package/dist/react-native/RaftDeviceStates.js +0 -60
  61. package/dist/react-native/RaftDeviceStates.js.map +0 -1
  62. package/dist/react-native/RaftFileHandler.d.ts +0 -52
  63. package/dist/react-native/RaftFileHandler.js +0 -502
  64. package/dist/react-native/RaftFileHandler.js.map +0 -1
  65. package/dist/react-native/RaftLog.d.ts +0 -22
  66. package/dist/react-native/RaftLog.js +0 -63
  67. package/dist/react-native/RaftLog.js.map +0 -1
  68. package/dist/react-native/RaftMiniHDLC.d.ts +0 -18
  69. package/dist/react-native/RaftMiniHDLC.js +0 -383
  70. package/dist/react-native/RaftMiniHDLC.js.map +0 -1
  71. package/dist/react-native/RaftMsgHandler.d.ts +0 -62
  72. package/dist/react-native/RaftMsgHandler.js +0 -511
  73. package/dist/react-native/RaftMsgHandler.js.map +0 -1
  74. package/dist/react-native/RaftMsgTrackInfo.d.ts +0 -17
  75. package/dist/react-native/RaftMsgTrackInfo.js +0 -42
  76. package/dist/react-native/RaftMsgTrackInfo.js.map +0 -1
  77. package/dist/react-native/RaftProtocolDefs.d.ts +0 -30
  78. package/dist/react-native/RaftProtocolDefs.js +0 -48
  79. package/dist/react-native/RaftProtocolDefs.js.map +0 -1
  80. package/dist/react-native/RaftStreamHandler.d.ts +0 -38
  81. package/dist/react-native/RaftStreamHandler.js +0 -257
  82. package/dist/react-native/RaftStreamHandler.js.map +0 -1
  83. package/dist/react-native/RaftStruct.d.ts +0 -3
  84. package/dist/react-native/RaftStruct.js +0 -208
  85. package/dist/react-native/RaftStruct.js.map +0 -1
  86. package/dist/react-native/RaftSysTypeManager.d.ts +0 -14
  87. package/dist/react-native/RaftSysTypeManager.js +0 -53
  88. package/dist/react-native/RaftSysTypeManager.js.map +0 -1
  89. package/dist/react-native/RaftSystemType.d.ts +0 -28
  90. package/dist/react-native/RaftSystemType.js +0 -3
  91. package/dist/react-native/RaftSystemType.js.map +0 -1
  92. package/dist/react-native/RaftSystemUtils.d.ts +0 -136
  93. package/dist/react-native/RaftSystemUtils.js +0 -410
  94. package/dist/react-native/RaftSystemUtils.js.map +0 -1
  95. package/dist/react-native/RaftTypes.d.ts +0 -194
  96. package/dist/react-native/RaftTypes.js +0 -153
  97. package/dist/react-native/RaftTypes.js.map +0 -1
  98. package/dist/react-native/RaftUpdateEvents.d.ts +0 -33
  99. package/dist/react-native/RaftUpdateEvents.js +0 -46
  100. package/dist/react-native/RaftUpdateEvents.js.map +0 -1
  101. package/dist/react-native/RaftUpdateManager.d.ts +0 -61
  102. package/dist/react-native/RaftUpdateManager.js +0 -621
  103. package/dist/react-native/RaftUpdateManager.js.map +0 -1
  104. package/dist/react-native/RaftUtils.d.ts +0 -126
  105. package/dist/react-native/RaftUtils.js +0 -467
  106. package/dist/react-native/RaftUtils.js.map +0 -1
  107. package/dist/react-native/RaftWifiTypes.d.ts +0 -23
  108. package/dist/react-native/RaftWifiTypes.js +0 -43
  109. package/dist/react-native/RaftWifiTypes.js.map +0 -1
  110. package/dist/react-native/main.d.ts +0 -25
  111. package/dist/react-native/main.js +0 -51
  112. package/dist/react-native/main.js.map +0 -1
  113. package/eslint.config.mjs +0 -33
  114. package/examples/dashboard/package.json +0 -36
  115. package/examples/dashboard/src/CommandPanel.tsx +0 -147
  116. package/examples/dashboard/src/ConnManager.ts +0 -164
  117. package/examples/dashboard/src/DeviceActionsForm.tsx +0 -133
  118. package/examples/dashboard/src/DeviceAttrsForm.tsx +0 -49
  119. package/examples/dashboard/src/DeviceLineChart.tsx +0 -163
  120. package/examples/dashboard/src/DevicePanel.tsx +0 -166
  121. package/examples/dashboard/src/DevicesPanel.tsx +0 -58
  122. package/examples/dashboard/src/DispLedGrid.tsx +0 -110
  123. package/examples/dashboard/src/DispOneLed.tsx +0 -20
  124. package/examples/dashboard/src/LatencyTest.ts +0 -130
  125. package/examples/dashboard/src/LatencyTestPanel.tsx +0 -92
  126. package/examples/dashboard/src/Main.tsx +0 -234
  127. package/examples/dashboard/src/SettingsManager.ts +0 -67
  128. package/examples/dashboard/src/SettingsScreen.tsx +0 -174
  129. package/examples/dashboard/src/StatusPanel.tsx +0 -71
  130. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +0 -163
  131. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +0 -91
  132. package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +0 -30
  133. package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +0 -91
  134. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +0 -70
  135. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +0 -33
  136. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +0 -342
  137. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +0 -170
  138. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +0 -123
  139. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +0 -207
  140. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +0 -464
  141. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +0 -146
  142. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +0 -97
  143. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +0 -371
  144. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +0 -20
  145. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +0 -119
  146. package/examples/dashboard/src/index.html +0 -15
  147. package/examples/dashboard/src/index.tsx +0 -13
  148. package/examples/dashboard/src/styles.css +0 -408
  149. package/examples/dashboard/tsconfig.json +0 -18
  150. package/jest.config.js +0 -11
  151. package/src/RaftAttributeHandler.ts +0 -298
  152. package/src/RaftChannel.ts +0 -32
  153. package/src/RaftChannelBLE.native.ts +0 -616
  154. package/src/RaftChannelBLE.web.ts +0 -372
  155. package/src/RaftChannelBLEFactory.ts +0 -13
  156. package/src/RaftChannelBLEScanner.native.ts +0 -184
  157. package/src/RaftChannelSimulated.ts +0 -482
  158. package/src/RaftChannelWebSerial.ts +0 -420
  159. package/src/RaftChannelWebSocket.ts +0 -258
  160. package/src/RaftCommsStats.ts +0 -142
  161. package/src/RaftConnEvents.ts +0 -58
  162. package/src/RaftConnector.ts +0 -743
  163. package/src/RaftCustomAttrHandler.ts +0 -54
  164. package/src/RaftDeviceInfo.ts +0 -102
  165. package/src/RaftDeviceManager.ts +0 -607
  166. package/src/RaftDeviceMgrIF.ts +0 -33
  167. package/src/RaftDeviceMsg.ts +0 -20
  168. package/src/RaftDeviceStates.ts +0 -92
  169. package/src/RaftFileHandler.ts +0 -668
  170. package/src/RaftLog.ts +0 -70
  171. package/src/RaftMiniHDLC.ts +0 -396
  172. package/src/RaftMsgHandler.ts +0 -813
  173. package/src/RaftMsgTrackInfo.ts +0 -51
  174. package/src/RaftProtocolDefs.ts +0 -46
  175. package/src/RaftStreamHandler.ts +0 -328
  176. package/src/RaftStruct.ts +0 -209
  177. package/src/RaftSysTypeManager.ts +0 -60
  178. package/src/RaftSystemType.ts +0 -32
  179. package/src/RaftSystemUtils.ts +0 -487
  180. package/src/RaftTypes.ts +0 -278
  181. package/src/RaftUpdateEvents.ts +0 -48
  182. package/src/RaftUpdateManager.ts +0 -781
  183. package/src/RaftUtils.ts +0 -494
  184. package/src/RaftWifiTypes.ts +0 -36
  185. package/src/main.ts +0 -38
  186. package/testdata/TestDeviceTypeRecs.json +0 -492
  187. package/tsconfig.json +0 -30
  188. package/tsconfig.react-native.json +0 -29
@@ -1,499 +0,0 @@
1
- "use strict";
2
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
- //
4
- // RaftDeviceManager
5
- // Device manager for Raft devices
6
- //
7
- // Rob Dobson (C) 2024
8
- //
9
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.DeviceManager = void 0;
12
- const tslib_1 = require("tslib");
13
- const RaftDeviceStates_1 = require("./RaftDeviceStates");
14
- const RaftAttributeHandler_1 = tslib_1.__importDefault(require("./RaftAttributeHandler"));
15
- const RaftStruct_1 = require("./RaftStruct");
16
- class DeviceManager {
17
- getDevicesState() {
18
- return this._devicesState;
19
- }
20
- getDeviceState(deviceKey) {
21
- return this._devicesState[deviceKey];
22
- }
23
- // Constructor
24
- constructor() {
25
- // Singleton
26
- // private static _instance: DeviceManager;
27
- // Max data points to store
28
- this._maxDatapointsToStore = 1000;
29
- // Min time between attempts to retrieve device type info
30
- this._minTimeBetweenDeviceTypeInfoRetrievalMs = 60000;
31
- // Attribute handler
32
- this._attributeHandler = new RaftAttributeHandler_1.default();
33
- // Devices state
34
- this._devicesState = new RaftDeviceStates_1.DevicesState();
35
- // Last time each device was updated - used to detect devices that are no longer present
36
- this._deviceLastUpdateTime = {};
37
- // Flag indicating that removed devices should be removed from the state
38
- this._removeDevicesFlag = true;
39
- this._removeDevicesTimeMs = 60000;
40
- // System utils
41
- this._systemUtils = null;
42
- // Device callbacks
43
- this._newDeviceCallbacks = [];
44
- this._newDeviceAttributeCallbacks = [];
45
- this._newAttributeDataCallbacks = [];
46
- // Cached device type data
47
- this._cachedDeviceTypeRecs = {};
48
- // Cached device type previous attempt times
49
- this._cachedDeviceTypePreviousAttemptTimes = {};
50
- }
51
- ////////////////////////////////////////////////////////////////////////////
52
- // Settings
53
- ////////////////////////////////////////////////////////////////////////////
54
- setMaxDataPointsToStore(maxDatapointsToStore) {
55
- this._maxDatapointsToStore = maxDatapointsToStore;
56
- // console.log(`DeviceManager setMaxDataPointsToStore ${maxDatapointsToStore}`);
57
- }
58
- ////////////////////////////////////////////////////////////////////////////
59
- // Send REST commands
60
- ////////////////////////////////////////////////////////////////////////////
61
- async sendCommand(cmd) {
62
- var _a;
63
- try {
64
- // Get the msg handler
65
- const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
66
- if (msgHandler) {
67
- const msgRslt = await msgHandler.sendRICRESTURL(cmd);
68
- return msgRslt.rslt === "ok";
69
- }
70
- return false;
71
- }
72
- catch (error) {
73
- console.warn(`DeviceManager sendCommand error ${error}`);
74
- return false;
75
- }
76
- }
77
- ////////////////////////////////////////////////////////////////////////////
78
- // Setup
79
- ////////////////////////////////////////////////////////////////////////////
80
- async setup(systemUtils) {
81
- // Save the system utils
82
- this._systemUtils = systemUtils;
83
- return true;
84
- }
85
- ////////////////////////////////////////////////////////////////////////////
86
- // Register callbacks
87
- ////////////////////////////////////////////////////////////////////////////
88
- addNewDeviceCallback(callback) {
89
- if (!this._newDeviceCallbacks.includes(callback)) {
90
- this._newDeviceCallbacks.push(callback);
91
- }
92
- }
93
- removeNewDeviceCallback(callback) {
94
- this._newDeviceCallbacks = this._newDeviceCallbacks.filter((cb) => cb !== callback);
95
- }
96
- addNewAttributeCallback(callback) {
97
- if (!this._newDeviceAttributeCallbacks.includes(callback)) {
98
- this._newDeviceAttributeCallbacks.push(callback);
99
- }
100
- }
101
- removeNewAttributeCallback(callback) {
102
- this._newDeviceAttributeCallbacks = this._newDeviceAttributeCallbacks.filter((cb) => cb !== callback);
103
- }
104
- addAttributeDataCallback(callback) {
105
- if (!this._newAttributeDataCallbacks.includes(callback)) {
106
- this._newAttributeDataCallbacks.push(callback);
107
- }
108
- }
109
- removeAttributeDataCallback(callback) {
110
- this._newAttributeDataCallbacks = this._newAttributeDataCallbacks.filter((cb) => cb !== callback);
111
- }
112
- ////////////////////////////////////////////////////////////////////////////
113
- // Set the friendly name for the device
114
- ////////////////////////////////////////////////////////////////////////////
115
- async setFriendlyName(friendlyName) {
116
- var _a;
117
- // Set using utils
118
- await ((_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.setRaftName(friendlyName));
119
- }
120
- ////////////////////////////////////////////////////////////////////////////
121
- // Handle device message binary
122
- ////////////////////////////////////////////////////////////////////////////
123
- async handleClientMsgBinary(rxMsg) {
124
- // console.log(`DeviceManager client1 msg ${RaftUtils.bufferToHex(rxMsg)}`);
125
- // Example messages
126
- // 0080 0015 81 0000006a 0004 53b7 feff00000100081857079314 0011 80 00000000 0011 53b2 075106e400d60054 0010 80 00000000 0012 5231 000d0000010e01
127
- // 0080 0011 80 00000000 0011 53f1 075806e900d70052 0010 80 00000000 0012 5231 000d0000010e01
128
- // First two bytes of each message are the message type (0080)
129
- // There are then a series of sections each of which is the data for a device
130
- // First two bytes of each section is the section length (big endian) not including the length bytes
131
- // Next byte is the connection mode (0 for direct connect, 1+ for bus number) and the MSB of this byte is 1 if the device is online
132
- // Next is the device address (4 bytes big endian)
133
- // Next is the device type index (2 bytes big endian)
134
- // Finally the device data which can be one or more groups of attributes defined by the schema
135
- // Iterate through sections
136
- let msgPos = 2;
137
- while (msgPos < rxMsg.length) {
138
- // Check length
139
- if (rxMsg.length < msgPos + 11) {
140
- console.warn(`DeviceManager handleClientMsgBinary invalid length ${rxMsg.length}`);
141
- return;
142
- }
143
- // Get the length of the section
144
- const sectionLen = (rxMsg[msgPos] << 8) + rxMsg[msgPos + 1];
145
- if (sectionLen > rxMsg.length) {
146
- console.warn(`DeviceManager handleClientMsgBinary invalid msgPos ${msgPos} msgLen ${sectionLen} rxMsgLen ${rxMsg.length}`);
147
- return;
148
- }
149
- // Extract message elements
150
- const busNum = rxMsg[msgPos + 2] & 0x7f;
151
- const isOnline = (rxMsg[msgPos + 2] & 0x80) !== 0;
152
- const devAddr = (rxMsg[msgPos + 3] << 24) + (rxMsg[msgPos + 4] << 16) + (rxMsg[msgPos + 5] << 8) + rxMsg[msgPos + 6];
153
- const devTypeIdx = (rxMsg[msgPos + 7] << 8) + rxMsg[msgPos + 8];
154
- let attrGroupPos = msgPos + 9;
155
- // Debug
156
- // console.log(`DeviceManager overallLen ${rxMsg.length} sectionPos ${msgPos} sectionLen ${sectionLen} ${RaftUtils.bufferToHex(rxMsg.slice(msgPos, msgPos + sectionLen))}`);
157
- // console.log(`DeviceManager connMode ${busNum} isOnline ${isOnline} devAddr ${devAddr} devTypeIdx ${devTypeIdx} attrGroupDataLen ${sectionLen - 9}`);
158
- // Device key
159
- const deviceKey = (0, RaftDeviceStates_1.getDeviceKey)(busNum.toString(), devAddr.toString(), devTypeIdx.toString());
160
- // Update the last update time
161
- this._deviceLastUpdateTime[deviceKey] = Date.now();
162
- // Check if a device state already exists
163
- if (!(deviceKey in this._devicesState) || (this._devicesState[deviceKey].deviceTypeInfo === undefined)) {
164
- // Get the device type info
165
- const deviceTypeInfo = await this.getDeviceTypeInfo(busNum.toString(), devAddr.toString(), devTypeIdx.toString());
166
- // console.log(`DeviceManager deviceTypeInfo ${JSON.stringify(deviceTypeInfo)}`);
167
- // Check if device record exists
168
- if (deviceKey in this._devicesState) {
169
- if (deviceTypeInfo !== undefined) {
170
- this._devicesState[deviceKey].deviceTypeInfo = deviceTypeInfo;
171
- this._devicesState[deviceKey].deviceType = deviceTypeInfo.name || "";
172
- this._devicesState[deviceKey].busName = busNum.toString();
173
- this._devicesState[deviceKey].deviceAddress = devAddr.toString();
174
- }
175
- }
176
- else {
177
- // Create device record - device type info may be undefined
178
- this._devicesState[deviceKey] = {
179
- deviceTypeInfo: deviceTypeInfo,
180
- deviceTimeline: {
181
- timestampsUs: [],
182
- lastReportTimestampUs: 0,
183
- reportTimestampOffsetUs: 0
184
- },
185
- deviceAttributes: {},
186
- deviceIsNew: true,
187
- stateChanged: false,
188
- isOnline: true,
189
- deviceAddress: devAddr.toString(),
190
- deviceType: (deviceTypeInfo === null || deviceTypeInfo === void 0 ? void 0 : deviceTypeInfo.name) || "",
191
- busName: busNum.toString()
192
- };
193
- }
194
- }
195
- // Get device state
196
- const deviceState = this._devicesState[deviceKey];
197
- deviceState.isOnline = isOnline;
198
- // Check if device type info is available
199
- if (deviceState.deviceTypeInfo && deviceState.deviceTypeInfo.resp) {
200
- // Iterate over attributes in the group
201
- const pollRespMetadata = deviceState.deviceTypeInfo.resp;
202
- // Iterate over attribute groups
203
- while (attrGroupPos < msgPos + sectionLen + 2) {
204
- const curTimelineLen = deviceState.deviceTimeline.timestampsUs.length;
205
- const newMsgBufIdx = this._attributeHandler.processMsgAttrGroup(rxMsg, attrGroupPos, deviceState.deviceTimeline, pollRespMetadata, deviceState.deviceAttributes, this._maxDatapointsToStore);
206
- if (newMsgBufIdx < 0)
207
- break;
208
- attrGroupPos = newMsgBufIdx;
209
- if (deviceState.deviceTimeline.timestampsUs.length !== curTimelineLen) {
210
- deviceState.stateChanged = true;
211
- }
212
- }
213
- }
214
- // Move to next message
215
- msgPos += sectionLen + 2;
216
- }
217
- // Check for devices that have not been updated for a while
218
- if (this._removeDevicesFlag) {
219
- const nowTime = Date.now();
220
- Object.entries(this._deviceLastUpdateTime).forEach(([deviceKey, lastUpdateTime]) => {
221
- if ((nowTime - lastUpdateTime) > this._removeDevicesTimeMs) {
222
- delete this._devicesState[deviceKey];
223
- }
224
- });
225
- }
226
- // Process the callback
227
- this.processStateCallback();
228
- }
229
- ////////////////////////////////////////////////////////////////////////////
230
- // Handle device message JSON
231
- ////////////////////////////////////////////////////////////////////////////
232
- async handleClientMsgJson(jsonMsg) {
233
- const data = JSON.parse(jsonMsg);
234
- // console.log(`DeviceManager client msg ${JSON.stringify(data)}`);
235
- // Iterate over the buses
236
- Object.entries(data).forEach(([busName, devices]) => {
237
- // Check for bus status info
238
- if (devices && typeof devices === "object" && "_s" in devices) {
239
- // console.log(`DeviceManager bus status ${JSON.stringify(devices._s)}`);
240
- return;
241
- }
242
- // Iterate over the devices
243
- Object.entries(devices).forEach(async ([devAddr, attrGroups]) => {
244
- // Check for non-device info (starts with _)
245
- if (devAddr.startsWith("_")) {
246
- return;
247
- }
248
- // Device type name
249
- let deviceTypeName = "";
250
- if (attrGroups && typeof attrGroups === 'object' && "_t" in attrGroups && typeof attrGroups._t === "string") {
251
- deviceTypeName = attrGroups._t || "";
252
- }
253
- else {
254
- console.warn(`DeviceManager missing device type attrGroups ${JSON.stringify(attrGroups)}`);
255
- return;
256
- }
257
- // Device key
258
- const deviceKey = (0, RaftDeviceStates_1.getDeviceKey)(busName, devAddr, deviceTypeName);
259
- // Update the last update time
260
- this._deviceLastUpdateTime[deviceKey] = Date.now();
261
- // Check if a device state already exists
262
- if (!(deviceKey in this._devicesState) || (this._devicesState[deviceKey].deviceTypeInfo === undefined)) {
263
- // Get the device type info
264
- const deviceTypeInfo = await this.getDeviceTypeInfo(busName, devAddr, deviceTypeName);
265
- // Check if device record exists
266
- if (deviceKey in this._devicesState) {
267
- if (deviceTypeInfo !== undefined) {
268
- this._devicesState[deviceKey].deviceTypeInfo = deviceTypeInfo;
269
- this._devicesState[deviceKey].deviceType = deviceTypeName;
270
- this._devicesState[deviceKey].deviceAddress = devAddr;
271
- this._devicesState[deviceKey].busName = busName;
272
- }
273
- }
274
- else {
275
- // Create device record - device type info may be undefined
276
- this._devicesState[deviceKey] = {
277
- deviceTypeInfo: deviceTypeInfo,
278
- deviceTimeline: {
279
- timestampsUs: [],
280
- lastReportTimestampUs: 0,
281
- reportTimestampOffsetUs: 0
282
- },
283
- deviceAttributes: {},
284
- deviceIsNew: true,
285
- stateChanged: false,
286
- isOnline: true,
287
- deviceAddress: devAddr,
288
- deviceType: deviceTypeName,
289
- busName: busName
290
- };
291
- }
292
- }
293
- // Get device state
294
- const deviceState = this._devicesState[deviceKey];
295
- // Check for online/offline state information
296
- if (attrGroups && typeof attrGroups === "object" && "_o" in attrGroups) {
297
- deviceState.isOnline = ((attrGroups._o === true) || (attrGroups._o === "1") || (attrGroups._o === 1));
298
- }
299
- // Check if device type info is available
300
- if (!deviceState.deviceTypeInfo) {
301
- return;
302
- }
303
- // Iterate attribute groups
304
- Object.entries(attrGroups).forEach(([attrGroupName, msgHexStr]) => {
305
- // Check valid
306
- if (attrGroupName.startsWith("_") || (typeof msgHexStr != 'string')) {
307
- return;
308
- }
309
- // Check the device type info
310
- if (!deviceState.deviceTypeInfo.resp) {
311
- return;
312
- }
313
- // Convert the hex string to an arraybuffer by converting each pair of hex chars to a byte
314
- const msgBytes = this.hexToBytes(msgHexStr);
315
- // Work through the message which may contain multiple data instances
316
- let msgBufIdx = 0;
317
- // Iterate over attributes in the group
318
- const pollRespMetadata = deviceState.deviceTypeInfo.resp;
319
- // Loop
320
- while (msgBufIdx < msgBytes.length) {
321
- const curTimelineLen = deviceState.deviceTimeline.timestampsUs.length;
322
- const newMsgBufIdx = this._attributeHandler.processMsgAttrGroup(msgBytes, msgBufIdx, deviceState.deviceTimeline, pollRespMetadata, deviceState.deviceAttributes, this._maxDatapointsToStore);
323
- if (newMsgBufIdx < 0)
324
- break;
325
- msgBufIdx = newMsgBufIdx;
326
- if (deviceState.deviceTimeline.timestampsUs.length !== curTimelineLen) {
327
- deviceState.stateChanged = true;
328
- }
329
- }
330
- });
331
- });
332
- });
333
- // Check for devices that have not been updated for a while
334
- if (this._removeDevicesFlag) {
335
- const nowTime = Date.now();
336
- Object.entries(this._deviceLastUpdateTime).forEach(([deviceKey, lastUpdateTime]) => {
337
- if ((nowTime - lastUpdateTime) > this._removeDevicesTimeMs) {
338
- delete this._devicesState[deviceKey];
339
- }
340
- });
341
- }
342
- // Process the callback
343
- this.processStateCallback();
344
- }
345
- ////////////////////////////////////////////////////////////////////////////
346
- // Process state change callback
347
- ////////////////////////////////////////////////////////////////////////////
348
- processStateCallback() {
349
- // Iterate over the devices
350
- Object.entries(this._devicesState).forEach(([deviceKey, deviceState]) => {
351
- // Check if device record is new
352
- if (deviceState.deviceIsNew) {
353
- this._newDeviceCallbacks.forEach((cb) => cb(deviceKey, deviceState));
354
- deviceState.deviceIsNew = false;
355
- }
356
- // Iterate over the attributes
357
- Object.entries(deviceState.deviceAttributes).forEach(([, attrState]) => {
358
- if (attrState.newAttribute) {
359
- this._newDeviceAttributeCallbacks.forEach((cb) => cb(deviceKey, attrState));
360
- attrState.newAttribute = false;
361
- }
362
- if (attrState.newData) {
363
- this._newAttributeDataCallbacks.forEach((cb) => cb(deviceKey, attrState));
364
- attrState.newData = false;
365
- }
366
- });
367
- });
368
- }
369
- ////////////////////////////////////////////////////////////////////////////
370
- // Get device type info
371
- ////////////////////////////////////////////////////////////////////////////
372
- async getDeviceTypeInfo(busName, _devAddr, deviceType) {
373
- var _a;
374
- // Check if already in the cache
375
- if (deviceType in this._cachedDeviceTypeRecs) {
376
- return this._cachedDeviceTypeRecs[deviceType];
377
- }
378
- // Check if we have tried to get device info previously (and failed presumably since it isn't in the cache)
379
- if (deviceType in this._cachedDeviceTypePreviousAttemptTimes) {
380
- // Check if we should retry
381
- if ((Date.now() - this._cachedDeviceTypePreviousAttemptTimes[deviceType]) < this._minTimeBetweenDeviceTypeInfoRetrievalMs) {
382
- return undefined;
383
- }
384
- }
385
- this._cachedDeviceTypePreviousAttemptTimes[deviceType] = Date.now();
386
- // Get the device type info from the server
387
- try {
388
- // Form the request
389
- const cmd = "devman/typeinfo?bus=" + busName + "&type=" + deviceType;
390
- // Get the msg handler
391
- const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
392
- if (msgHandler) {
393
- const msgRslt = await msgHandler.sendRICRESTURL(cmd);
394
- if (msgRslt && msgRslt.rslt && msgRslt.rslt === "ok") {
395
- this._cachedDeviceTypeRecs[deviceType] = msgRslt.devinfo;
396
- return msgRslt.devinfo;
397
- }
398
- }
399
- return undefined;
400
- }
401
- catch (error) {
402
- console.error(`DeviceManager getDeviceTypeInfo error ${error}`);
403
- return undefined;
404
- }
405
- }
406
- ////////////////////////////////////////////////////////////////////////////
407
- // Send action to device
408
- ////////////////////////////////////////////////////////////////////////////
409
- toHex(data) {
410
- return Array.from(data)
411
- .map(byte => byte.toString(16).padStart(2, "0"))
412
- .join("");
413
- }
414
- async sendAction(deviceKey, action, data) {
415
- // console.log(`DeviceManager sendAction ${deviceKey} action name ${action.n} value ${value} prefix ${action.w}`);
416
- var _a;
417
- let writeBytes;
418
- // Check for one data item
419
- if (data.length === 1) {
420
- let value = data[0];
421
- // Check for conversion
422
- if (action.sub !== undefined) {
423
- value = value - action.sub;
424
- }
425
- if (action.mul !== undefined) {
426
- value = value * action.mul;
427
- }
428
- // Form the write bytes
429
- writeBytes = action.t ? (0, RaftStruct_1.structPack)(action.t, [value]) : new Uint8Array(0);
430
- }
431
- else {
432
- // Form the write bytes which may have multiple data items
433
- writeBytes = action.t ? (0, RaftStruct_1.structPack)(action.t, data) : new Uint8Array(0);
434
- }
435
- // Convert to hex string
436
- let writeHexStr = this.toHex(writeBytes);
437
- // Add prefix and postfix
438
- writeHexStr = (action.w ? action.w : "") + writeHexStr + (action.wz ? action.wz : "");
439
- // Separate the bus and address in the deviceKey (_ char)
440
- const devBus = deviceKey.split("_")[0];
441
- const devAddr = deviceKey.split("_")[1];
442
- // Send the action to the server
443
- const cmd = "devman/cmdraw?bus=" + devBus + "&addr=" + devAddr + "&hexWr=" + writeHexStr;
444
- console.log(`DeviceManager deviceKey ${deviceKey} action name ${action.n} value ${data} prefix ${action.w} sendAction ${cmd}`);
445
- // Send the command
446
- try {
447
- // Get the msg handler
448
- const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
449
- if (msgHandler) {
450
- const msgRslt = await msgHandler.sendRICRESTURL(cmd);
451
- return msgRslt.rslt === "ok";
452
- }
453
- return false;
454
- }
455
- catch (error) {
456
- console.warn(`DeviceManager sendAction error ${error}`);
457
- return false;
458
- }
459
- }
460
- ////////////////////////////////////////////////////////////////////////////
461
- // Send a compound action to the device
462
- ////////////////////////////////////////////////////////////////////////////
463
- async sendCompoundAction(deviceKey, action, data) {
464
- // console.log(`DeviceManager sendAction ${deviceKey} action name ${action.n} value ${value} prefix ${action.w}`);
465
- // Check if all data to be sent at once
466
- if (action.concat) {
467
- // Form a single list by flattening data
468
- let dataToWrite = [];
469
- for (let dataIdx = 0; dataIdx < data.length; dataIdx++) {
470
- dataToWrite = dataToWrite.concat(data[dataIdx]);
471
- }
472
- // Use sendAction to send this
473
- return await this.sendAction(deviceKey, action, dataToWrite);
474
- }
475
- else {
476
- // Iterate over the data
477
- let allOk = true;
478
- for (let dataIdx = 0; dataIdx < data.length; dataIdx++) {
479
- // Create the data to write by prepending the index to the data for this index
480
- const dataToWrite = [dataIdx].concat(data[dataIdx]);
481
- // Use sendAction to send this
482
- allOk = allOk && await this.sendAction(deviceKey, action, dataToWrite);
483
- }
484
- }
485
- return false;
486
- }
487
- ////////////////////////////////////////////////////////////////////////////
488
- // Convert hex to bytes
489
- ////////////////////////////////////////////////////////////////////////////
490
- hexToBytes(hex) {
491
- const bytes = new Uint8Array(hex.length / 2);
492
- for (let i = 0; i < bytes.length; i++) {
493
- bytes[i] = parseInt(hex.substr(i * 2, 2), 16);
494
- }
495
- return bytes;
496
- }
497
- }
498
- exports.DeviceManager = DeviceManager;
499
- //# sourceMappingURL=RaftDeviceManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RaftDeviceManager.js","sourceRoot":"","sources":["../../src/RaftDeviceManager.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { DeviceTypeAction } from "./RaftDeviceInfo";
2
- import { DeviceAttributeState, DevicesState, DeviceState } from "./RaftDeviceStates";
3
- export default interface RaftDeviceMgrIF {
4
- getDevicesState(): DevicesState;
5
- getDeviceState(deviceKey: string): DeviceState;
6
- setMaxDataPointsToStore(maxDataPointsToStore: number): void;
7
- addNewDeviceCallback(callback: (deviceKey: string, state: DeviceState) => void): void;
8
- removeNewDeviceCallback(callback: (deviceKey: string, state: DeviceState) => void): void;
9
- addNewAttributeCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
10
- removeNewAttributeCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
11
- addAttributeDataCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
12
- removeAttributeDataCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
13
- sendAction(deviceKey: string, action: DeviceTypeAction, data: number[]): void;
14
- sendCompoundAction(deviceKey: string, action: DeviceTypeAction, data: number[][]): void;
15
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
- //
4
- // RaftDeviceMgrIF.ts
5
- // Interface to devices state
6
- //
7
- // Rob Dobson (C) 2024
8
- //
9
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- //# sourceMappingURL=RaftDeviceMgrIF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RaftDeviceMgrIF.js","sourceRoot":"","sources":["../../src/RaftDeviceMgrIF.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,qBAAqB;AACrB,6BAA6B;AAC7B,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH"}
@@ -1,9 +0,0 @@
1
- export interface DeviceMsgJsonElem {
2
- [attrGroupName: string]: string | number | boolean;
3
- }
4
- export interface DeviceMsgJsonBus {
5
- [devAddr: string]: DeviceMsgJsonElem;
6
- }
7
- export interface DeviceMsgJson {
8
- [busName: string]: DeviceMsgJsonBus;
9
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
- //
4
- // RaftDeviceMsg
5
- // Device message for Raft devices
6
- //
7
- // Rob Dobson (C) 2024
8
- //
9
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- //# sourceMappingURL=RaftDeviceMsg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RaftDeviceMsg.js","sourceRoot":"","sources":["../../src/RaftDeviceMsg.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,gBAAgB;AAChB,kCAAkC;AAClC,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH"}
@@ -1,37 +0,0 @@
1
- import { DeviceTypeInfo } from "./RaftDeviceInfo";
2
- export declare function deviceAttrGetLatestFormatted(attrState: DeviceAttributeState): string;
3
- export interface DeviceAttributeState {
4
- name: string;
5
- newAttribute: boolean;
6
- newData: boolean;
7
- numNewValues: number;
8
- values: number[];
9
- units: string;
10
- range: number[];
11
- format: string;
12
- visibleSeries: boolean;
13
- visibleForm: boolean;
14
- }
15
- export interface DeviceAttributesState {
16
- [attributeName: string]: DeviceAttributeState;
17
- }
18
- export interface DeviceTimeline {
19
- timestampsUs: number[];
20
- lastReportTimestampUs: number;
21
- reportTimestampOffsetUs: number;
22
- }
23
- export interface DeviceState {
24
- deviceTypeInfo: DeviceTypeInfo | undefined;
25
- deviceTimeline: DeviceTimeline;
26
- deviceAttributes: DeviceAttributesState;
27
- deviceIsNew: boolean;
28
- stateChanged: boolean;
29
- isOnline: boolean;
30
- deviceAddress: string;
31
- deviceType: string;
32
- busName: string;
33
- }
34
- export declare class DevicesState {
35
- [deviceKey: string]: DeviceState;
36
- }
37
- export declare function getDeviceKey(busName: string, devAddr: string, devType: string): string;