@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.
- package/dist/web/RaftAttributeHandler.js +5 -5
- package/dist/web/RaftAttributeHandler.js.map +1 -1
- package/package.json +5 -2
- package/.editorconfig +0 -14
- package/.gitattributes +0 -11
- package/.nvmrc +0 -1
- package/TODO.md +0 -1
- package/dist/react-native/RaftAttributeHandler.d.ts +0 -12
- package/dist/react-native/RaftAttributeHandler.js +0 -249
- package/dist/react-native/RaftAttributeHandler.js.map +0 -1
- package/dist/react-native/RaftChannel.d.ts +0 -20
- package/dist/react-native/RaftChannel.js +0 -12
- package/dist/react-native/RaftChannel.js.map +0 -1
- package/dist/react-native/RaftChannelBLE.native.d.ts +0 -95
- package/dist/react-native/RaftChannelBLE.native.js +0 -482
- package/dist/react-native/RaftChannelBLE.native.js.map +0 -1
- package/dist/react-native/RaftChannelBLE.web.d.ts +0 -40
- package/dist/react-native/RaftChannelBLE.web.js +0 -300
- package/dist/react-native/RaftChannelBLE.web.js.map +0 -1
- package/dist/react-native/RaftChannelBLEFactory.d.ts +0 -10
- package/dist/react-native/RaftChannelBLEFactory.js +0 -17
- package/dist/react-native/RaftChannelBLEFactory.js.map +0 -1
- package/dist/react-native/RaftChannelBLEScanner.native.d.ts +0 -18
- package/dist/react-native/RaftChannelBLEScanner.native.js +0 -138
- package/dist/react-native/RaftChannelBLEScanner.native.js.map +0 -1
- package/dist/react-native/RaftChannelSimulated.d.ts +0 -32
- package/dist/react-native/RaftChannelSimulated.js +0 -418
- package/dist/react-native/RaftChannelSimulated.js.map +0 -1
- package/dist/react-native/RaftChannelWebSerial.d.ts +0 -39
- package/dist/react-native/RaftChannelWebSerial.js +0 -329
- package/dist/react-native/RaftChannelWebSerial.js.map +0 -1
- package/dist/react-native/RaftChannelWebSocket.d.ts +0 -30
- package/dist/react-native/RaftChannelWebSocket.js +0 -207
- package/dist/react-native/RaftChannelWebSocket.js.map +0 -1
- package/dist/react-native/RaftCommsStats.d.ts +0 -39
- package/dist/react-native/RaftCommsStats.js +0 -128
- package/dist/react-native/RaftCommsStats.js.map +0 -1
- package/dist/react-native/RaftConnEvents.d.ts +0 -39
- package/dist/react-native/RaftConnEvents.js +0 -54
- package/dist/react-native/RaftConnEvents.js.map +0 -1
- package/dist/react-native/RaftConnector.d.ts +0 -245
- package/dist/react-native/RaftConnector.js +0 -621
- package/dist/react-native/RaftConnector.js.map +0 -1
- package/dist/react-native/RaftCustomAttrHandler.d.ts +0 -4
- package/dist/react-native/RaftCustomAttrHandler.js +0 -50
- package/dist/react-native/RaftCustomAttrHandler.js.map +0 -1
- package/dist/react-native/RaftDeviceInfo.d.ts +0 -63
- package/dist/react-native/RaftDeviceInfo.js +0 -36
- package/dist/react-native/RaftDeviceInfo.js.map +0 -1
- package/dist/react-native/RaftDeviceManager.d.ts +0 -40
- package/dist/react-native/RaftDeviceManager.js +0 -499
- package/dist/react-native/RaftDeviceManager.js.map +0 -1
- package/dist/react-native/RaftDeviceMgrIF.d.ts +0 -15
- package/dist/react-native/RaftDeviceMgrIF.js +0 -11
- package/dist/react-native/RaftDeviceMgrIF.js.map +0 -1
- package/dist/react-native/RaftDeviceMsg.d.ts +0 -9
- package/dist/react-native/RaftDeviceMsg.js +0 -11
- package/dist/react-native/RaftDeviceMsg.js.map +0 -1
- package/dist/react-native/RaftDeviceStates.d.ts +0 -37
- package/dist/react-native/RaftDeviceStates.js +0 -60
- package/dist/react-native/RaftDeviceStates.js.map +0 -1
- package/dist/react-native/RaftFileHandler.d.ts +0 -52
- package/dist/react-native/RaftFileHandler.js +0 -502
- package/dist/react-native/RaftFileHandler.js.map +0 -1
- package/dist/react-native/RaftLog.d.ts +0 -22
- package/dist/react-native/RaftLog.js +0 -63
- package/dist/react-native/RaftLog.js.map +0 -1
- package/dist/react-native/RaftMiniHDLC.d.ts +0 -18
- package/dist/react-native/RaftMiniHDLC.js +0 -383
- package/dist/react-native/RaftMiniHDLC.js.map +0 -1
- package/dist/react-native/RaftMsgHandler.d.ts +0 -62
- package/dist/react-native/RaftMsgHandler.js +0 -511
- package/dist/react-native/RaftMsgHandler.js.map +0 -1
- package/dist/react-native/RaftMsgTrackInfo.d.ts +0 -17
- package/dist/react-native/RaftMsgTrackInfo.js +0 -42
- package/dist/react-native/RaftMsgTrackInfo.js.map +0 -1
- package/dist/react-native/RaftProtocolDefs.d.ts +0 -30
- package/dist/react-native/RaftProtocolDefs.js +0 -48
- package/dist/react-native/RaftProtocolDefs.js.map +0 -1
- package/dist/react-native/RaftStreamHandler.d.ts +0 -38
- package/dist/react-native/RaftStreamHandler.js +0 -257
- package/dist/react-native/RaftStreamHandler.js.map +0 -1
- package/dist/react-native/RaftStruct.d.ts +0 -3
- package/dist/react-native/RaftStruct.js +0 -208
- package/dist/react-native/RaftStruct.js.map +0 -1
- package/dist/react-native/RaftSysTypeManager.d.ts +0 -14
- package/dist/react-native/RaftSysTypeManager.js +0 -53
- package/dist/react-native/RaftSysTypeManager.js.map +0 -1
- package/dist/react-native/RaftSystemType.d.ts +0 -28
- package/dist/react-native/RaftSystemType.js +0 -3
- package/dist/react-native/RaftSystemType.js.map +0 -1
- package/dist/react-native/RaftSystemUtils.d.ts +0 -136
- package/dist/react-native/RaftSystemUtils.js +0 -410
- package/dist/react-native/RaftSystemUtils.js.map +0 -1
- package/dist/react-native/RaftTypes.d.ts +0 -194
- package/dist/react-native/RaftTypes.js +0 -153
- package/dist/react-native/RaftTypes.js.map +0 -1
- package/dist/react-native/RaftUpdateEvents.d.ts +0 -33
- package/dist/react-native/RaftUpdateEvents.js +0 -46
- package/dist/react-native/RaftUpdateEvents.js.map +0 -1
- package/dist/react-native/RaftUpdateManager.d.ts +0 -61
- package/dist/react-native/RaftUpdateManager.js +0 -621
- package/dist/react-native/RaftUpdateManager.js.map +0 -1
- package/dist/react-native/RaftUtils.d.ts +0 -126
- package/dist/react-native/RaftUtils.js +0 -467
- package/dist/react-native/RaftUtils.js.map +0 -1
- package/dist/react-native/RaftWifiTypes.d.ts +0 -23
- package/dist/react-native/RaftWifiTypes.js +0 -43
- package/dist/react-native/RaftWifiTypes.js.map +0 -1
- package/dist/react-native/main.d.ts +0 -25
- package/dist/react-native/main.js +0 -51
- package/dist/react-native/main.js.map +0 -1
- package/eslint.config.mjs +0 -33
- package/examples/dashboard/package.json +0 -36
- package/examples/dashboard/src/CommandPanel.tsx +0 -147
- package/examples/dashboard/src/ConnManager.ts +0 -164
- package/examples/dashboard/src/DeviceActionsForm.tsx +0 -133
- package/examples/dashboard/src/DeviceAttrsForm.tsx +0 -49
- package/examples/dashboard/src/DeviceLineChart.tsx +0 -163
- package/examples/dashboard/src/DevicePanel.tsx +0 -166
- package/examples/dashboard/src/DevicesPanel.tsx +0 -58
- package/examples/dashboard/src/DispLedGrid.tsx +0 -110
- package/examples/dashboard/src/DispOneLed.tsx +0 -20
- package/examples/dashboard/src/LatencyTest.ts +0 -130
- package/examples/dashboard/src/LatencyTestPanel.tsx +0 -92
- package/examples/dashboard/src/Main.tsx +0 -234
- package/examples/dashboard/src/SettingsManager.ts +0 -67
- package/examples/dashboard/src/SettingsScreen.tsx +0 -174
- package/examples/dashboard/src/StatusPanel.tsx +0 -71
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +0 -163
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +0 -91
- package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +0 -30
- package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +0 -91
- package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +0 -70
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +0 -33
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +0 -342
- package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +0 -170
- package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +0 -123
- package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +0 -207
- package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +0 -464
- package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +0 -146
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +0 -97
- package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +0 -371
- package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +0 -20
- package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +0 -119
- package/examples/dashboard/src/index.html +0 -15
- package/examples/dashboard/src/index.tsx +0 -13
- package/examples/dashboard/src/styles.css +0 -408
- package/examples/dashboard/tsconfig.json +0 -18
- package/jest.config.js +0 -11
- package/src/RaftAttributeHandler.ts +0 -298
- package/src/RaftChannel.ts +0 -32
- package/src/RaftChannelBLE.native.ts +0 -616
- package/src/RaftChannelBLE.web.ts +0 -372
- package/src/RaftChannelBLEFactory.ts +0 -13
- package/src/RaftChannelBLEScanner.native.ts +0 -184
- package/src/RaftChannelSimulated.ts +0 -482
- package/src/RaftChannelWebSerial.ts +0 -420
- package/src/RaftChannelWebSocket.ts +0 -258
- package/src/RaftCommsStats.ts +0 -142
- package/src/RaftConnEvents.ts +0 -58
- package/src/RaftConnector.ts +0 -743
- package/src/RaftCustomAttrHandler.ts +0 -54
- package/src/RaftDeviceInfo.ts +0 -102
- package/src/RaftDeviceManager.ts +0 -607
- package/src/RaftDeviceMgrIF.ts +0 -33
- package/src/RaftDeviceMsg.ts +0 -20
- package/src/RaftDeviceStates.ts +0 -92
- package/src/RaftFileHandler.ts +0 -668
- package/src/RaftLog.ts +0 -70
- package/src/RaftMiniHDLC.ts +0 -396
- package/src/RaftMsgHandler.ts +0 -813
- package/src/RaftMsgTrackInfo.ts +0 -51
- package/src/RaftProtocolDefs.ts +0 -46
- package/src/RaftStreamHandler.ts +0 -328
- package/src/RaftStruct.ts +0 -209
- package/src/RaftSysTypeManager.ts +0 -60
- package/src/RaftSystemType.ts +0 -32
- package/src/RaftSystemUtils.ts +0 -487
- package/src/RaftTypes.ts +0 -278
- package/src/RaftUpdateEvents.ts +0 -48
- package/src/RaftUpdateManager.ts +0 -781
- package/src/RaftUtils.ts +0 -494
- package/src/RaftWifiTypes.ts +0 -36
- package/src/main.ts +0 -38
- package/testdata/TestDeviceTypeRecs.json +0 -492
- package/tsconfig.json +0 -30
- 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,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;
|