Legrand / Raritan / Server Technology Xerus™ JSON-RPC API
Loading...
Searching...
No Matches
GatewaySensorManager.idl
1/* SPDX-License-Identifier: BSD-3-Clause */
2/*
3 * Copyright 2022 Raritan Inc. All rights reserved.
4 */
5
6#ifndef __PERIPHERAL_GATEWAY_SENSOR_MANAGER_IDL__
7#define __PERIPHERAL_GATEWAY_SENSOR_MANAGER_IDL__
8
9#include <Sensor.idl>
10#include <NumericSensor.idl>
11#include <Event.idl>
12#include <ModbusCfg.idl>
13
14/**
15 * Peripheral Devices
16 */
17module peripheral {
18
19 /** Gateway Sensor Configuration Interface */
21
22 /*
23 To define a gateway sensor the following steps are required:
24
25 1) Create a [Numeric|State|Switch]SensorClass with a unique
26 *classId* and metadata.
27 This specification can be used for one or more gateway sensors.
28
29 2) Create a Remote[ModbusRTU|ModbusTCP|...]Device with a unique
30 *deviceId* and all information required to connect a remote
31 device that provides access to sensors and actuators to be associated
32 to one or more gateway sensors.
33
34 3) Create a ValueEncoding, e.g. ModbusValueEncoding[Bit|8|16|32|64],
35 with a unique *encodingId* and all information needed to correctly
36 interpret a received byte sequence.
37
38 Besides word width, masking and encoding (bool/int/uint/float) there
39 is also the possibility to define rules that interpret error codes and
40 special values.
41
42 A rule consists of a recognition feature (e.g. InterpretationRuleRAW,
43 InterpretationRuleIEEE754INF) and an interpretation (e.g. IGNORE,
44 NUMERIC_INVALID).
45
46 This specification can be used for one or more gateway sensors.
47
48 4) Create a [Modbus|...]Sensor, with references to configurations described
49 above: *classId*, *deviceId* and *encodingId*. The unique *sensorId* will be
50 generated if not set. Additionaly, [Modbus|...]Sensor has information necessary
51 to address the sensor on the referenced RemoteDevice.
52
53 5) Store all created classes using setConfiguration()
54
55
56 Example A) PMMC-1000
57
58 1) Create NumericSensorClass with
59 classId = "Temperature"
60 metaData = {
61 type = { NUMERIC, TEMPERATURE, DEGREE_CELSIUS },
62 decdigits = 1,
63 range = { -55, +85 },
64 accuracy = 0.1,
65 resolution = 0.1,
66 tolerance = 0,
67 noiseThreshold = -55,
68 thresholdCaps = { true, true, true, true }
69 }
70 defaultThresholds = {
71 upperCriticalActive = true,
72 upperCritical = 44.0,
73 upperWarningActive = true,
74 upperWarning = 37.0,
75 lowerWarningActive = true,
76 lowerWarning = 1.0,
77 lowerCriticalActive = true,
78 lowerCritical = -11,
79 assertionTimeout = 3,
80 deassertionHysteresis = 2.0F
81 }
82 preferCommonThresholds = false
83
84 2) Create RemoteModbusRTUDevice with
85 deviceId = "PMMC"
86 busInterface = "REMOTE-HUB-1"
87 busSettings = {38400, NONE, 8, 1}
88 unitId = 247;
89 detectionIdentifiers = [ { VENDOR_NAME, "Raritan" },
90 { PRODUCT_CODE, "iPDU" }
91 { REVISION, "3\\.6.*"}
92 ]
93
94 3) Create ModbusValueEncoding32 with
95 encodingId = "IEEE754_32"
96 endianness = MODBUS_BIG_ENDIAN
97 type = IEEE754
98 interpretationRules = [
99 InterpretationRuleIEEE754NAN {
100 interpretation = INVALID
101 }
102 ]
103
104 4) Create ModbusSensor with
105 classId = "Temperature"
106 deviceId = "PMMC"
107 encodingId = "IEEE754_32"
108 function = HOLDING_REGISTER;
109 regAddr = 0x812
110 defaultName = "Room temperature"
111
112
113 Example B) Current sensor and check product code in INPUT_REGISTER 0
114
115 1) Create NumericSensorClass with
116 classId = "Current"
117 metaData = {
118 type = { NUMERIC, CURRENT, AMPERE },
119 decdigits = 2,
120 range = { 0, 100 },
121 accuracy = 0.01,
122 resolution = 0.01,
123 tolerance = 0,
124 noiseThreshold = 0.01,
125 thresholdCaps = { true, true, true, true }
126 }
127
128 2) Create RemoteModbusRTUDevice with
129 deviceId = "GW"
130 busInterface = "USB-2"
131 busSettings = {9600, NONE, 8, 1}
132 unitId = 1;
133
134 3) Create ModbusValueEncoding32 with
135 encodingId = "IEEE754_32_MIXED_LE"
136 endianness = MODBUS_LITTLE_ENDIAN
137 type = IEEE754
138 interpretationRules = [
139 InterpretationRuleRAW {
140 value = 0x00800000 # FLT_MIN
141 interpretation = IGNORE
142 ignoreTimeout = 60 # unavailable after 60 seconds
143 },
144 InterpretationRuleRAW {
145 value = 0x7f7fffff # FLT_MAX
146 interpretation = UNAVAILABLE
147 }
148 ]
149
150 Create ModbusValueEncoding16 with
151 encodingId = "GW_PRODUCT_UINT_16"
152 type = UINT
153 interpretationRules = [
154 InterpretationRuleRAW {
155 value = 1200 # product code
156 invertCondition = true
157 interpretation = REJECT_DEVICE # device detection failed
158 },
159 ]
160
161 4) Create ModbusSensor with
162 classId = "Current"
163 deviceId = "GW"
164 encodingId = "IEEE754_32_MIXED_LE"
165 function = INPUT_REGISTER;
166 regAddr = 0xD
167 defaultName = "AC Current ch2"
168
169 Create ModbusSensor with
170 classId = "" # used for device detection only
171 deviceId = "GW"
172 encodingId = "GW_PRODUCT_UINT_16"
173 function = INPUT_REGISTER;
174 regAddr = 0
175
176
177 Example C) Energy Meter
178
179 1) Create NumericSensorClass with
180 classId = "Energy"
181 metaData = {
182 type = { NUMERIC, POWER, WATT },
183 decdigits = 1,
184 range = { 0, 9999999 },
185 accuracy = 0.1,
186 resolution = 0.1,
187 tolerance = 0,
188 noiseThreshold = 0,
189 thresholdCaps = { }
190 }
191
192 2) Create RemoteModbusRTUDevice with
193 deviceId = "EX4"
194 busInterface = "REMOTE-HUB-1"
195 busSettings = {9600, NONE, 8, 1}
196 unitId = 4;
197
198 3) Create ModbusValueEncoding32 with
199 encodingId = "UINT_24_MIXED_LE"
200 endianness = MODBUS_LITTLE_ENDIAN
201 mask = 0x00FFFFFF
202 type = UINT
203 scalingFactor = 10.0;
204
205 4) Create ModbusSensor with
206 classId = "Energy"
207 deviceId = "EX4"
208 encodingId = "UINT_24_MIXED_LE"
209 function = HOLDING_REGISTER;
210 regAddr = 0
211 defaultName = "Energy Meter"
212 */
213
214
215 /* ======================= SENSOR CLASSES ========================= */
216
217 /**
218 * @brief Specification of sensor class that stores sensor properties
219 *
220 * Before an instance of Sensor can be created,
221 * an instance of SensorClass must be present.
222 * The Sensor locates the corresponding SensorClass
223 * using the sensor class id `classId`.
224 */
225 valueobject SensorClass {
226 string classId; ///< sensor class id
227 };
228
229 /**
230 * @brief Sensor class that stores numeric sensor properties
231 */
232 valueobject NumericSensorClass extends SensorClass {
233 /**
234 * numeric sensor type, ranges, etc.
235 */
237
238 /**
239 * threshold values may be used initially and as default threshold values,
240 * depending on the value of the preferCommonThresholds field
241 */
243
244 boolean preferCommonThresholds; ///< if true, use common default thresholds if available, otherwise use the value of the defaultThresholds field
245 };
246
247 /**
248 * @brief Sensor class that stores state sensor properties
249 */
250 valueobject StateSensorClass extends SensorClass {
251 sensors.Sensor.TypeSpec type; ///< state sensor type
252 };
253
254 /**
255 * @brief Sensor class that switch properties
256 */
257 valueobject SwitchSensorClass extends StateSensorClass { };
258
259
260 /* ======================= REMOTE DEVICES ========================= */
261
262 /**
263 * @brief Specification of a remote device that provides access to sensors
264 *
265 * It contains all the information required to connect a remote
266 * device that provides access to sensors and actuators to be connected
267 * to one or more gateway sensors.
268 *
269 * Before an instance of Sensor can be created, an instance
270 * of RemoteDevice must be present. The Sensor locates the
271 * corresponding RemoteDevice using the remote device id `deviceId`.
272 */
273 valueobject RemoteDevice {
274 string deviceId; ///< remote device id
275 boolean disabled; ///< prevents usage of all sensor specifications which reference this device
276 string name; ///< human readable remote device name
277 int timeoutMs; ///< communication access timeout, 0 = default
278 int retry; ///< communication retry count, 0 = default
279 };
280
281 constant int MODBUS_VENDOR_NAME = 0;
282 constant int MODBUS_PRODUCT_CODE = 1;
283 constant int MODBUS_REVISION = 2;
284 constant int MODBUS_VENDOR_URL = 3;
285 constant int MODBUS_PRODUCT_NAME = 5;
286 constant int MODBUS_MODEL_NAME = 6;
287 constant int MODBUS_APP_NAME = 7;
288
289 valueobject RemoteModbusDevice extends RemoteDevice {
290 map<int, string> detectionIdentifiers; ///< list of expected device identifiers
291 int unitId; ///< modbus server address
292 };
293
295 /**
296 * @brief rs485 interface used for modbus communication
297 *
298 * Supported values:
299 *
300 * (1) with SRC-080X, only the REMOTE HUB interfaces are support, possible values are:
301 * - "REMOTE-HUB-1" or "sensorhub0-rs485" (deprecated) mean port "REMOTE HUB 1"
302 * - "REMOTE-HUB-2" or "sensorhub1-rs485" (deprecated) mean port "REMOTE HUB 2"
303 *
304 * (2) with Raritan Modbus/RS-485 dongle "USB-MOD-DONGLE", possible values are:
305 * - "USB<topo>": where <topo> contains the USB port number and possibly the topology of USB hubs
306 * - "USB-2" means dongle connected to PDU USB port "USB A 2"
307 * - "USB-1-2-3" means dongle is connected to a first USB hub at port 3,
308 * and the first USB hub is connected to a second USB hub at port 2,
309 * and the second USB is connected to PDU USB port "USB A 1"
310 * - "<serial>": where <serial> is the serial number of USB donge, according to the label
311 */
313 ModbusCfg.SerialSettings busSettings; ///< interface settings
314 int interframeDelayDeciChars; ///< (== 0) -> default, (< 0) -> no delay, (> 0) -> e.g. 35 means 3.5 chars
315 };
316
318 string ipAddress; ///< modbus device ip address
319 int tcpPort; ///< modbus tcp port
320 };
321
322 valueobject RemoteSnmpDevice extends RemoteDevice {
323 string host; ///< host
324 };
325
327 string community; ///< community string for v1/v2c
328 };
329
330 enumeration SnmpSecurityLevel {
331 NO_AUTH_NO_PRIV, ///< no authentication, no privacy
332 AUTH_NO_PRIV, ///< authentication, no privacy
333 AUTH_PRIV ///< authentication, privacy
334 };
335
336 enumeration SnmpAuthProtocol {
337 MD5, ///< MD5
338 SHA1, ///< SHA-1
339 SHA224, ///< SHA-224
340 SHA256, ///< SHA-256
341 SHA384, ///< SHA-384
342 SHA512 ///< SHA-512
343 };
344
345 enumeration SnmpPrivProtocol {
346 DES, ///< DES
347 AES128, ///< AES-128
348 AES192, ///< AES-192
349 AES256, ///< AES-256
350 AES192_3DES, ///< AES-192 with key extension (3DES)
351 AES256_3DES ///< AES-256 with key extension (3DES)
352 };
353
355 string user; ///< security user name
356 SnmpSecurityLevel level; ///< security level (noAuthNoPriv|authNoPriv|authPriv)
357 SnmpAuthProtocol authProtocol; ///< authentication protocol (MD5|SHA|SHA-224|SHA-256|SHA-384|SHA-512)
358 string authPassphrase; ///< authentication protocol passphrase
359 SnmpPrivProtocol privacyProtocol; ///< privacy protocol (DES|AES|AES-192|AES-256)
360 string privacyPassphrase; ///< privacy protocol pass phrase
361 };
362
363 /* ======================= VALUE ENCODING ========================= */
364
365 /**
366 * interpretation of binary values
367 */
368 enumeration EncodingType {
369 BOOL, ///< boolean
370 INT, ///< signed integer of a size specified in ValueEncoding as two's complement
371 UINT, ///< unsigned integer of a size specified in ValueEncoding
372 IEEE754, ///< IEEE 754 floating point of a size specified in ValueEncoding
373 INT_ONES_COMPLEMENT, ///< integer as one's complement
374 INT_SIGN_MAGNITUDE, ///< signed integer with sign in MSB
375 INT_10K, ///< signed integer stored as 'modulo 10000' (int16[0] + 10000 * int16[1] + 10000^2 * int16[2] ...), the int16 parts are stores as two's complement
376 UINT_10K, ///< unsigned integer stored as 'modulo 10000' (uint16[0] + 10000 * uint16[1] + 10000^2 * uint16[2] ...)
377 INT_BCD, ///< signed integer as BCD, 10th complement
378 INT_SIGN_MAGNITUDE_BCD, ///< signed integer as BCD, with sign in MSB
379 UINT_BCD, ///< unsigned integer as BCD
380 INT_PACKED_BCD, ///< signed integer as packed BCD, 10th complement
381 INT_SIGN_MAGNITUDE_PACKED_BCD, ///< signed integer as packed BCD, with sign in MSB
382 UINT_PACKED_BCD ///< unsigned integer as packed BCD
383 };
384
385 /**
386 * @brief Here you define how certain read values are to be interpreted
387 *
388 * The rules leading to *_IGNORE and *_UNAVAILABLE are applied to numeric values and states.
389 *
390 * IGNORE can be time-limited using ignoreTimeout, see InterpretationRule. After the time has expired,
391 * the value is set to unavailable.
392 *
393 * NUMERIC_INVALID only affects NumericSensors. As DEFAULT for numeric sensors (if
394 * no rule is matched, or if DEFAULT is matched) the value is converted to a floating point
395 * number according to type specification.
396 *
397 * STATE_ON and STATE_OFF affect only StateSensors. If no such rule is specified, the state
398 * becomes true if the read value is integral and not 0. If STATE_ON or STATE_OFF are present in
399 * the rules, then the state is set to true or false only if a STATE_* rule matches. Otherwise
400 * (DEFAULT) the state becomes unavailable.
401
402 * REJECT_SENSOR means: do not accept this reading in any way. The sensor is treated as
403 * non-existent.
404 *
405 * REJECT_DEVICE means: do not accept this reading in any way. Instead, this is a clear
406 * indication that the device is defective, or it is a wrong device. All sensors that belong
407 * to this device are treated as non-existent.
408 * REJECT_DEVICE can be used in this way to detect devices. The sensor defined for this purpose
409 * does not have to be imported as gateway sensor (see Sensor.classId = "").
410 *
411 * DEFAULT on failed receives modbus exceptions REJECT_SENSOR. DEFAULT on modbus read errors
412 * (e.g. timeouts) is REJECT_DEVICE.
413 */
414 enumeration Interpretation {
415 DEFAULT, ///< use default decoding
416 REJECT_DEVICE, ///< device is treated as non-existent
417 REJECT_SENSOR, ///< sensor is treated as non-existent
418 IGNORE, ///< ignore (use previous value)
419 UNAVAILABLE, ///< set value to unavailable
420 NUMERIC_INVALID, ///< set numeric value to invalid
421 STATE_ON, ///< set state to ON
422 STATE_OFF ///< set state to OFF
423 };
424
425 /**
426 * InterpretationRule defines a rule that is applied to a reading, resulting in an Interpretation.
427 * A list of InterpretationRule is applied in the given order, and stopped after the first match.
428 * If no rule applies, the interpretation is Interpretation.DEFAULT.
429 **/
430 valueobject InterpretationRule {
431 Interpretation interpretation; ///< how to interpret the applied rule
432 int ignoreTimeout; ///< if > 0, ignoring stops after this timeout (seconds), and state changes to unavailable
433 };
434
436 boolean invertCondition; ///< negate rule condition
437 };
438
439 /** InterpretationRuleModbusException is applied to modbus read exceptions
440 */
442 vector<int> exceptions; ///< list of modbus exception codes
443 };
444
445 /** InterpretationRuleModbusSystemError is applied to standard system errors returned
446 * from libmodbus
447 */
449 vector<int> errnos; ///< list of system error codes
450 };
451
452 /** InterpretationRuleModbusSpecificError is applied to specific errors from libmodbus
453 */
455 vector<ModbusCfg.SpecificModbusErrors> errors; ///< list of specific libmodbus error codes
456 };
457
458 /** InterpretationRuleRAW is applied after swap, but before masking (because it has it's own mask)
459 */
461 long value; ///< compare to value
462 long mask; ///< (0 = not masked, the same as 0xFFFF...)
463 };
464
465 /** InterpretationRuleRangeRAW is applied after swap, but before masking (because it has it's own mask)
466 */
468 long min; ///< minimum accepted value (always compare as unsigned)
469 long max; ///< maximum accepted value (always compare as unsigned)
470 long mask; ///< (0 = not masked, the same as 0xFFFF...)
471 };
472
473 /** InterpretationRuleEnum is applied to a reading and maps the values to the given Interpretation
474 */
476 vector<long> enumValues; ///< values to map
477 };
478
479 /** InterpretationRuleIEEE* are applied after value is wapped, masked and interpreted as float / double
480 */
484
485 /**
486 * @brief Specification of value encoding
487 *
488 * Before an instance of Sensor can be created,
489 * an instance of ValueEncoding must be present.
490 * The Sensor locates the corresponding ValueEncoding
491 * using the sensor class id `encodingId`.
492 */
493 valueobject ValueEncoding {
494 string encodingId; ///< encoding type id
495 EncodingType type; ///< value coding type
496 boolean invertState; ///< invert when interpreting as state
497 vector<InterpretationRule> interpretationRules; ///< error/value interpretation rules
498 int minAccessInterval; ///< minimum time interval between two read accesses in seconds
499 };
500
502 float scalingFactor; ///< multiply with when interpreting as numeric value
503 float offset; ///< add value after applying scalingFactor
504 };
505
506 valueobject ModbusValueEncodingBit extends ValueEncoding {};
507
509 /**
510 * 16-bit modbus words should be transferred in big-endian byte order.
511 * For modbus devices that do not comply with this, byteSwap = true must
512 * be set. Another application is to use byteSwap to address a single byte in
513 * a 16-bit modbus word in case 8-bit values are requested (ModbusValueEncoding8).
514 */
515 boolean byteSwap;
516 /**
517 * mask raw value before interpreting (0 = not masked, the same as 0xFFFF...)
518 */
519 long mask;
520 /**
521 * The least significant bit of the read word used in numerical interpretation.
522 * If `start` is greater than 0, then one or more least significant bits remain unused.
523 * 0 is the default value. For integer values a `start > 0` has mostly the same effect as
524 * using a `mask = ~(2^start-1)` and a `scalingFactor = 1/2^start`.
525 */
526 int start;
527 /**
528 * Word width in bits used in numerical interpretation.
529 * If `width` is smaller than the read word width, then the most significant bits remain unused.
530 * 0 is the default value.
531 * Example: 24 bit signed integer:
532 * `ModbusValueEncoding32` with `start = 0` and `width = 24` and 'type = INT`
533 * (Only for unsigned integer the use of `mask` would be sufficient.)
534 */
535 int width;
536 };
537
539
540 enumeration ModbusEndianness {
541 MODBUS_BIG_ENDIAN, ///< use big endian modbus word order (default is big endian)
542 MODBUS_LITTLE_ENDIAN ///< use little endian modbus word order
543 };
544
546 /**
547 * Modbus 16-bit-words should be transmitted in big endian order. For modbus
548 * devices that do not comply with this, endianness must be set to LITTLE_ENDIAN.
549 */
551 };
552
554
556
557
558 /* ======================= SENSORS ========================= */
559
560 /**
561 * Specification of a Sensor
562 */
563 valueobject Sensor {
564 /**
565 * Unique sensor id, is automatically generated if not set
566 */
567 string sensorId;
568
569 /**
570 * Set disabled = true prevents any usage of the specification
571 */
572 boolean disabled;
573
574 /**
575 * @brief remote device id
576 *
577 * deviceId is used to locate the corresponding RemoteDevice that
578 * provides the physical sensor
579 */
580 string deviceId;
581
582 /**
583 * @brief sensor class id
584 *
585 * classId is used to locate the corresponding SensorClass.
586 * classId = "" prevents the sensor specification from being used
587 * for an imported gateway sensor. The sensor value is read anyway, and a read
588 * error or a interpretation as Interpretation.REJECT_DEVICE
589 * prevents the successful detection of the device
590 */
591 string classId;
592
593 /**
594 * @brief sensor encoding id
595 *
596 * classId is used to locate the corresponding ValueEncoding
597 */
599
600 /**
601 * @brief default sensor name
602 *
603 * defaultName is used as sensor slot name
604 */
606 };
607
608 valueobject ModbusSensor extends Sensor {
609 ModbusCfg.ModbusFunction function; ///< Modbus function to be used
610 int regAddr; ///< Modbus server register address
611 };
612
613 valueobject SnmpSensor extends Sensor {
614 string oid; ///< sensor oid
615 };
616
617 /* ======================= FULL CONFIGURATION ========================= */
618
620 boolean disabled; ///< prevents usage of all sensor specifications defined in this package
621 string name; ///< package name
622 vector<SensorClass> classes;
623 vector<RemoteDevice> devices;
624 vector<ValueEncoding> encodings;
625 vector<Sensor> sensors;
626 };
627
628 /**
629 * @brief Get all defined gateway sensors and required objects from config
630 *
631 * Read all Sensor Classes, Remote Devices, Value Encodings and Sensors
632 * at once to ensure that the overall configuration is consistent
633 *
634 * @return all defined gateway sensor feature configuration objects
635 */
636 map<string, ConfigurationPackage> getConfiguration();
637
638 constant int ERR_CONFIG_INCONSISTENT = 1;
639 constant int ERR_CONFIG_STORAGE_FAILED = 2;
640
641 /**
642 * @brief Replace defined gateway sensor and/or other configuration objects in config
643 *
644 * Write all Sensor Classes, Remote Devices, Value Encodings and Sensors
645 * at once to ensure that the overall configuration is consistent at every
646 * moment.
647 *
648 * The uniqueness of all IDs and the availability of all referenced elements are
649 * checked before the configuration is applied. Otherwise setConfiguration() returns
650 * with an error.
651 *
652 * @param cfg all defined gateway sensor feature configuration objects
653 * @return 0 if OK
654 * @return ERR_CONFIG_INCONSISTENT if consistency check has failed (e.g. non-unique identifiers)
655 * @return ERR_CONFIG_STORAGE_FAILED if configuration cannot be stored
656 */
657 int setConfiguration(in map<string, ConfigurationPackage> cfg);
658
659 /** Event: The gateway sensor feature configuration has changed */
660 valueobject ConfigurationChangedEvent extends idl.Event {
661 map<string, ConfigurationPackage> configuration; ///< the current gateway sensor feature configuration
662 };
663
664
665 /* ======================= FEEDBACK ========================= */
666
667 /**
668 * @brief Feedback from gateway sensor configuration usage
669 *
670 * There is no knowledge of Feedback required to configure gateway sensors.
671 * The following is only needed for special tools that monitor the usage
672 * of the configurations above.
673 */
674 structure FeedbackObject {
675 enumeration FeedbackState {
677 INTENTIONALLY_UNUSED,
678 FAILED_PRECONDITIONS_UNUSED,
679 FAILED,
680 GOOD
681 };
682
683 string key; ///< empty or free defined value name
684 string value; ///< message or value
685 FeedbackState stateTansitionTo; ///< this FeedbackObject changes state, if not UNSPECIFIED
686 };
687
688 valueobject Feedback {
689 FeedbackObject.FeedbackState currentState; ///< Device or sensor state
690 vector<FeedbackObject> infos;
691 };
692
693 valueobject DeviceFeedback extends Feedback {
694 string packageId; ///< the configuration package id
695 string deviceId; ///< the same id as in RemoteDevice
696 };
697
698 valueobject SensorFeedback extends Feedback {
699 string packageId; ///< the configuration package id
700 string deviceId; ///< the same id as in RemoteDevice
701 string sensorId; ///< the same id as in Sensor
702 };
703
704 /**
705 * Get feedback from gateway sensor configuration usage
706 *
707 * @return Result: the full feedback
708 */
709 vector<Feedback> getFeedback();
710
711 /** Event: The configuration usage feedback has changed */
712 valueobject FeedbackChangedEvent extends idl.Event {
713 vector<Feedback> feedback; ///< the latest configuration usage feedback
714 };
715 };
716}
717
718#endif /* __PERIPHERAL_GATEWAY_SENSOR_MANAGER_IDL__ */
Gateway Sensor Configuration Interface.
@ MODBUS_BIG_ENDIAN
use big endian modbus word order (default is big endian)
@ AES192_3DES
AES-192 with key extension (3DES)
map< string, ConfigurationPackage > getConfiguration()
Get all defined gateway sensors and required objects from config.
int setConfiguration(in map< string, ConfigurationPackage > cfg)
Replace defined gateway sensor and/or other configuration objects in config.
EncodingType
interpretation of binary values
@ INT_10K
signed integer stored as 'modulo 10000' (int16[0] + 10000 * int16[1] + 10000^2 * int16[2] ....
@ INT_SIGN_MAGNITUDE_BCD
signed integer as BCD, with sign in MSB
@ IEEE754
IEEE 754 floating point of a size specified in ValueEncoding.
@ UINT_10K
unsigned integer stored as 'modulo 10000' (uint16[0] + 10000 * uint16[1] + 10000^2 * uint16[2] ....
@ INT_SIGN_MAGNITUDE
signed integer with sign in MSB
@ INT_PACKED_BCD
signed integer as packed BCD, 10th complement
@ INT_BCD
signed integer as BCD, 10th complement
@ INT_SIGN_MAGNITUDE_PACKED_BCD
signed integer as packed BCD, with sign in MSB
@ INT_ONES_COMPLEMENT
integer as one's complement
@ INT
signed integer of a size specified in ValueEncoding as two's complement
@ UINT
unsigned integer of a size specified in ValueEncoding
@ AUTH_NO_PRIV
authentication, no privacy
@ NO_AUTH_NO_PRIV
no authentication, no privacy
Interpretation
Here you define how certain read values are to be interpreted.
@ UNAVAILABLE
set value to unavailable
@ IGNORE
ignore (use previous value)
@ REJECT_SENSOR
sensor is treated as non-existent
@ NUMERIC_INVALID
set numeric value to invalid
@ REJECT_DEVICE
device is treated as non-existent
vector< Feedback > getFeedback()
Get feedback from gateway sensor configuration usage.
A sensor with numeric readings.
Sensor interface
Definition: Sensor.idl:15
Basic IDL definitions.
Definition: Event.idl:10
Peripheral Devices.
@ UNSPECIFIED
device type is unknown
Definition: PosElement.idl:22
Sensors Model.
Common base for all events.
Definition: Event.idl:13
Event: The gateway sensor feature configuration has changed.
map< string, ConfigurationPackage > configuration
the current gateway sensor feature configuration
boolean disabled
prevents usage of all sensor specifications defined in this package
Event: The configuration usage feedback has changed.
vector< Feedback > feedback
the latest configuration usage feedback
Feedback from gateway sensor configuration usage.
FeedbackState stateTansitionTo
this FeedbackObject changes state, if not UNSPECIFIED
string key
empty or free defined value name
FeedbackObject::FeedbackState currentState
Device or sensor state.
InterpretationRuleEnum is applied to a reading and maps the values to the given Interpretation.
InterpretationRuleIEEE* are applied after value is wapped, masked and interpreted as float / double.
InterpretationRuleModbusException is applied to modbus read exceptions.
InterpretationRuleModbusSpecificError is applied to specific errors from libmodbus.
vector< ModbusCfg::SpecificModbusErrors > errors
list of specific libmodbus error codes
InterpretationRuleModbusSystemError is applied to standard system errors returned from libmodbus.
InterpretationRuleRAW is applied after swap, but before masking (because it has it's own mask)
long mask
(0 = not masked, the same as 0xFFFF...)
InterpretationRuleRangeRAW is applied after swap, but before masking (because it has it's own mask)
long max
maximum accepted value (always compare as unsigned)
long min
minimum accepted value (always compare as unsigned)
InterpretationRule defines a rule that is applied to a reading, resulting in an Interpretation.
Interpretation interpretation
how to interpret the applied rule
int ignoreTimeout
if > 0, ignoring stops after this timeout (seconds), and state changes to unavailable
ModbusEndianness endianness
Modbus 16-bit-words should be transmitted in big endian order.
long mask
mask raw value before interpreting (0 = not masked, the same as 0xFFFF...)
int width
Word width in bits used in numerical interpretation.
int start
The least significant bit of the read word used in numerical interpretation.
boolean byteSwap
16-bit modbus words should be transferred in big-endian byte order.
Sensor class that stores numeric sensor properties.
sensors::NumericSensor Thresholds defaultThresholds
threshold values may be used initially and as default threshold values, depending on the value of the...
sensors::NumericSensor MetaData metadata
numeric sensor type, ranges, etc.
boolean preferCommonThresholds
if true, use common default thresholds if available, otherwise use the value of the defaultThresholds...
float scalingFactor
multiply with when interpreting as numeric value
float offset
add value after applying scalingFactor
Specification of a remote device that provides access to sensors.
int timeoutMs
communication access timeout, 0 = default
string name
human readable remote device name
int retry
communication retry count, 0 = default
boolean disabled
prevents usage of all sensor specifications which reference this device
map< int, string > detectionIdentifiers
list of expected device identifiers
ModbusCfg::SerialSettings busSettings
interface settings
string busInterface
rs485 interface used for modbus communication
int interframeDelayDeciChars
(== 0) -> default, (< 0) -> no delay, (> 0) -> e.g. 35 means 3.5 chars
SnmpPrivProtocol privacyProtocol
privacy protocol (DES|AES|AES-192|AES-256)
SnmpSecurityLevel level
security level (noAuthNoPriv|authNoPriv|authPriv)
SnmpAuthProtocol authProtocol
authentication protocol (MD5|SHA|SHA-224|SHA-256|SHA-384|SHA-512)
string authPassphrase
authentication protocol passphrase
Specification of sensor class that stores sensor properties.
boolean disabled
Set disabled = true prevents any usage of the specification.
string sensorId
Unique sensor id, is automatically generated if not set.
Sensor class that stores state sensor properties.
sensors::Sensor TypeSpec type
state sensor type
int minAccessInterval
minimum time interval between two read accesses in seconds
boolean invertState
invert when interpreting as state
vector< InterpretationRule > interpretationRules
error/value interpretation rules
Numeric sensor metadata.
Numeric sensor thresholds.
Complete sensor type specification.
Definition: Sensor.idl:177