@robdobsn/raftjs 1.7.2 → 1.7.5

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 (198) hide show
  1. package/dist/web/RaftAttributeHandler.d.ts +2 -0
  2. package/dist/web/RaftAttributeHandler.js +107 -5
  3. package/dist/web/RaftAttributeHandler.js.map +1 -1
  4. package/dist/web/RaftConnector.d.ts +2 -1
  5. package/dist/web/RaftConnector.js +14 -0
  6. package/dist/web/RaftConnector.js.map +1 -1
  7. package/dist/web/RaftDeviceInfo.d.ts +6 -0
  8. package/dist/web/RaftMsgHandler.d.ts +1 -1
  9. package/dist/web/RaftMsgHandler.js +1 -1
  10. package/dist/web/RaftMsgHandler.js.map +1 -1
  11. package/dist/web/RaftTypes.d.ts +2 -1
  12. package/dist/web/RaftTypes.js.map +1 -1
  13. package/package.json +5 -2
  14. package/.editorconfig +0 -14
  15. package/.gitattributes +0 -11
  16. package/.nvmrc +0 -1
  17. package/TODO.md +0 -1
  18. package/dist/react-native/RaftAttributeHandler.d.ts +0 -12
  19. package/dist/react-native/RaftAttributeHandler.js +0 -249
  20. package/dist/react-native/RaftAttributeHandler.js.map +0 -1
  21. package/dist/react-native/RaftChannel.d.ts +0 -20
  22. package/dist/react-native/RaftChannel.js +0 -12
  23. package/dist/react-native/RaftChannel.js.map +0 -1
  24. package/dist/react-native/RaftChannelBLE.native.d.ts +0 -95
  25. package/dist/react-native/RaftChannelBLE.native.js +0 -482
  26. package/dist/react-native/RaftChannelBLE.native.js.map +0 -1
  27. package/dist/react-native/RaftChannelBLE.web.d.ts +0 -40
  28. package/dist/react-native/RaftChannelBLE.web.js +0 -300
  29. package/dist/react-native/RaftChannelBLE.web.js.map +0 -1
  30. package/dist/react-native/RaftChannelBLEFactory.d.ts +0 -10
  31. package/dist/react-native/RaftChannelBLEFactory.js +0 -17
  32. package/dist/react-native/RaftChannelBLEFactory.js.map +0 -1
  33. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +0 -18
  34. package/dist/react-native/RaftChannelBLEScanner.native.js +0 -138
  35. package/dist/react-native/RaftChannelBLEScanner.native.js.map +0 -1
  36. package/dist/react-native/RaftChannelSimulated.d.ts +0 -32
  37. package/dist/react-native/RaftChannelSimulated.js +0 -418
  38. package/dist/react-native/RaftChannelSimulated.js.map +0 -1
  39. package/dist/react-native/RaftChannelWebSerial.d.ts +0 -39
  40. package/dist/react-native/RaftChannelWebSerial.js +0 -329
  41. package/dist/react-native/RaftChannelWebSerial.js.map +0 -1
  42. package/dist/react-native/RaftChannelWebSocket.d.ts +0 -30
  43. package/dist/react-native/RaftChannelWebSocket.js +0 -207
  44. package/dist/react-native/RaftChannelWebSocket.js.map +0 -1
  45. package/dist/react-native/RaftCommsStats.d.ts +0 -39
  46. package/dist/react-native/RaftCommsStats.js +0 -128
  47. package/dist/react-native/RaftCommsStats.js.map +0 -1
  48. package/dist/react-native/RaftConnEvents.d.ts +0 -39
  49. package/dist/react-native/RaftConnEvents.js +0 -54
  50. package/dist/react-native/RaftConnEvents.js.map +0 -1
  51. package/dist/react-native/RaftConnector.d.ts +0 -245
  52. package/dist/react-native/RaftConnector.js +0 -621
  53. package/dist/react-native/RaftConnector.js.map +0 -1
  54. package/dist/react-native/RaftCustomAttrHandler.d.ts +0 -4
  55. package/dist/react-native/RaftCustomAttrHandler.js +0 -50
  56. package/dist/react-native/RaftCustomAttrHandler.js.map +0 -1
  57. package/dist/react-native/RaftDeviceInfo.d.ts +0 -63
  58. package/dist/react-native/RaftDeviceInfo.js +0 -36
  59. package/dist/react-native/RaftDeviceInfo.js.map +0 -1
  60. package/dist/react-native/RaftDeviceManager.d.ts +0 -40
  61. package/dist/react-native/RaftDeviceManager.js +0 -499
  62. package/dist/react-native/RaftDeviceManager.js.map +0 -1
  63. package/dist/react-native/RaftDeviceMgrIF.d.ts +0 -15
  64. package/dist/react-native/RaftDeviceMgrIF.js +0 -11
  65. package/dist/react-native/RaftDeviceMgrIF.js.map +0 -1
  66. package/dist/react-native/RaftDeviceMsg.d.ts +0 -9
  67. package/dist/react-native/RaftDeviceMsg.js +0 -11
  68. package/dist/react-native/RaftDeviceMsg.js.map +0 -1
  69. package/dist/react-native/RaftDeviceStates.d.ts +0 -37
  70. package/dist/react-native/RaftDeviceStates.js +0 -60
  71. package/dist/react-native/RaftDeviceStates.js.map +0 -1
  72. package/dist/react-native/RaftFileHandler.d.ts +0 -52
  73. package/dist/react-native/RaftFileHandler.js +0 -502
  74. package/dist/react-native/RaftFileHandler.js.map +0 -1
  75. package/dist/react-native/RaftLog.d.ts +0 -22
  76. package/dist/react-native/RaftLog.js +0 -63
  77. package/dist/react-native/RaftLog.js.map +0 -1
  78. package/dist/react-native/RaftMiniHDLC.d.ts +0 -18
  79. package/dist/react-native/RaftMiniHDLC.js +0 -383
  80. package/dist/react-native/RaftMiniHDLC.js.map +0 -1
  81. package/dist/react-native/RaftMsgHandler.d.ts +0 -62
  82. package/dist/react-native/RaftMsgHandler.js +0 -511
  83. package/dist/react-native/RaftMsgHandler.js.map +0 -1
  84. package/dist/react-native/RaftMsgTrackInfo.d.ts +0 -17
  85. package/dist/react-native/RaftMsgTrackInfo.js +0 -42
  86. package/dist/react-native/RaftMsgTrackInfo.js.map +0 -1
  87. package/dist/react-native/RaftProtocolDefs.d.ts +0 -30
  88. package/dist/react-native/RaftProtocolDefs.js +0 -48
  89. package/dist/react-native/RaftProtocolDefs.js.map +0 -1
  90. package/dist/react-native/RaftStreamHandler.d.ts +0 -38
  91. package/dist/react-native/RaftStreamHandler.js +0 -257
  92. package/dist/react-native/RaftStreamHandler.js.map +0 -1
  93. package/dist/react-native/RaftStruct.d.ts +0 -3
  94. package/dist/react-native/RaftStruct.js +0 -208
  95. package/dist/react-native/RaftStruct.js.map +0 -1
  96. package/dist/react-native/RaftSysTypeManager.d.ts +0 -14
  97. package/dist/react-native/RaftSysTypeManager.js +0 -53
  98. package/dist/react-native/RaftSysTypeManager.js.map +0 -1
  99. package/dist/react-native/RaftSystemType.d.ts +0 -28
  100. package/dist/react-native/RaftSystemType.js +0 -3
  101. package/dist/react-native/RaftSystemType.js.map +0 -1
  102. package/dist/react-native/RaftSystemUtils.d.ts +0 -136
  103. package/dist/react-native/RaftSystemUtils.js +0 -410
  104. package/dist/react-native/RaftSystemUtils.js.map +0 -1
  105. package/dist/react-native/RaftTypes.d.ts +0 -194
  106. package/dist/react-native/RaftTypes.js +0 -153
  107. package/dist/react-native/RaftTypes.js.map +0 -1
  108. package/dist/react-native/RaftUpdateEvents.d.ts +0 -33
  109. package/dist/react-native/RaftUpdateEvents.js +0 -46
  110. package/dist/react-native/RaftUpdateEvents.js.map +0 -1
  111. package/dist/react-native/RaftUpdateManager.d.ts +0 -61
  112. package/dist/react-native/RaftUpdateManager.js +0 -621
  113. package/dist/react-native/RaftUpdateManager.js.map +0 -1
  114. package/dist/react-native/RaftUtils.d.ts +0 -126
  115. package/dist/react-native/RaftUtils.js +0 -467
  116. package/dist/react-native/RaftUtils.js.map +0 -1
  117. package/dist/react-native/RaftWifiTypes.d.ts +0 -23
  118. package/dist/react-native/RaftWifiTypes.js +0 -43
  119. package/dist/react-native/RaftWifiTypes.js.map +0 -1
  120. package/dist/react-native/main.d.ts +0 -25
  121. package/dist/react-native/main.js +0 -51
  122. package/dist/react-native/main.js.map +0 -1
  123. package/eslint.config.mjs +0 -33
  124. package/examples/dashboard/package.json +0 -36
  125. package/examples/dashboard/src/CommandPanel.tsx +0 -147
  126. package/examples/dashboard/src/ConnManager.ts +0 -164
  127. package/examples/dashboard/src/DeviceActionsForm.tsx +0 -133
  128. package/examples/dashboard/src/DeviceAttrsForm.tsx +0 -49
  129. package/examples/dashboard/src/DeviceLineChart.tsx +0 -163
  130. package/examples/dashboard/src/DevicePanel.tsx +0 -166
  131. package/examples/dashboard/src/DevicesPanel.tsx +0 -58
  132. package/examples/dashboard/src/DispLedGrid.tsx +0 -110
  133. package/examples/dashboard/src/DispOneLed.tsx +0 -20
  134. package/examples/dashboard/src/LatencyTest.ts +0 -130
  135. package/examples/dashboard/src/LatencyTestPanel.tsx +0 -92
  136. package/examples/dashboard/src/Main.tsx +0 -234
  137. package/examples/dashboard/src/SettingsManager.ts +0 -67
  138. package/examples/dashboard/src/SettingsScreen.tsx +0 -174
  139. package/examples/dashboard/src/StatusPanel.tsx +0 -71
  140. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +0 -163
  141. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +0 -91
  142. package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +0 -30
  143. package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +0 -91
  144. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +0 -70
  145. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +0 -33
  146. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +0 -342
  147. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +0 -170
  148. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +0 -123
  149. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +0 -207
  150. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +0 -464
  151. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +0 -146
  152. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +0 -97
  153. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +0 -371
  154. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +0 -20
  155. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +0 -119
  156. package/examples/dashboard/src/index.html +0 -15
  157. package/examples/dashboard/src/index.tsx +0 -13
  158. package/examples/dashboard/src/styles.css +0 -408
  159. package/examples/dashboard/tsconfig.json +0 -18
  160. package/jest.config.js +0 -11
  161. package/src/RaftAttributeHandler.ts +0 -298
  162. package/src/RaftChannel.ts +0 -32
  163. package/src/RaftChannelBLE.native.ts +0 -616
  164. package/src/RaftChannelBLE.web.ts +0 -372
  165. package/src/RaftChannelBLEFactory.ts +0 -13
  166. package/src/RaftChannelBLEScanner.native.ts +0 -184
  167. package/src/RaftChannelSimulated.ts +0 -482
  168. package/src/RaftChannelWebSerial.ts +0 -420
  169. package/src/RaftChannelWebSocket.ts +0 -258
  170. package/src/RaftCommsStats.ts +0 -142
  171. package/src/RaftConnEvents.ts +0 -58
  172. package/src/RaftConnector.ts +0 -743
  173. package/src/RaftCustomAttrHandler.ts +0 -54
  174. package/src/RaftDeviceInfo.ts +0 -102
  175. package/src/RaftDeviceManager.ts +0 -607
  176. package/src/RaftDeviceMgrIF.ts +0 -33
  177. package/src/RaftDeviceMsg.ts +0 -20
  178. package/src/RaftDeviceStates.ts +0 -92
  179. package/src/RaftFileHandler.ts +0 -668
  180. package/src/RaftLog.ts +0 -70
  181. package/src/RaftMiniHDLC.ts +0 -396
  182. package/src/RaftMsgHandler.ts +0 -813
  183. package/src/RaftMsgTrackInfo.ts +0 -51
  184. package/src/RaftProtocolDefs.ts +0 -46
  185. package/src/RaftStreamHandler.ts +0 -328
  186. package/src/RaftStruct.ts +0 -209
  187. package/src/RaftSysTypeManager.ts +0 -60
  188. package/src/RaftSystemType.ts +0 -32
  189. package/src/RaftSystemUtils.ts +0 -487
  190. package/src/RaftTypes.ts +0 -278
  191. package/src/RaftUpdateEvents.ts +0 -48
  192. package/src/RaftUpdateManager.ts +0 -781
  193. package/src/RaftUtils.ts +0 -494
  194. package/src/RaftWifiTypes.ts +0 -36
  195. package/src/main.ts +0 -38
  196. package/testdata/TestDeviceTypeRecs.json +0 -492
  197. package/tsconfig.json +0 -30
  198. 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;