zwave-js-server-python 0.35.0__py3-none-any.whl → 0.40.0__py3-none-any.whl

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 (37) hide show
  1. zwave_js_server/client.py +11 -5
  2. zwave_js_server/const/__init__.py +31 -2
  3. zwave_js_server/const/command_class/meter.py +9 -7
  4. zwave_js_server/const/command_class/multilevel_sensor.py +61 -115
  5. zwave_js_server/const/command_class/multilevel_switch.py +8 -0
  6. zwave_js_server/const/command_class/thermostat.py +3 -3
  7. zwave_js_server/event.py +1 -1
  8. zwave_js_server/exceptions.py +23 -14
  9. zwave_js_server/firmware.py +10 -1
  10. zwave_js_server/model/association.py +1 -1
  11. zwave_js_server/model/controller/__init__.py +191 -79
  12. zwave_js_server/model/controller/data_model.py +2 -2
  13. zwave_js_server/model/controller/event_model.py +15 -0
  14. zwave_js_server/model/controller/inclusion_and_provisioning.py +37 -4
  15. zwave_js_server/model/controller/statistics.py +40 -1
  16. zwave_js_server/model/device_config.py +2 -2
  17. zwave_js_server/model/driver.py +5 -0
  18. zwave_js_server/model/endpoint.py +24 -2
  19. zwave_js_server/model/firmware.py +115 -2
  20. zwave_js_server/model/log_message.py +2 -2
  21. zwave_js_server/model/node/__init__.py +79 -14
  22. zwave_js_server/model/node/data_model.py +2 -2
  23. zwave_js_server/model/node/statistics.py +56 -4
  24. zwave_js_server/model/notification.py +65 -0
  25. zwave_js_server/model/statistics.py +106 -0
  26. zwave_js_server/model/value.py +1 -1
  27. zwave_js_server/py.typed +0 -0
  28. zwave_js_server/util/multicast.py +7 -1
  29. {zwave_js_server_python-0.35.0.dist-info → zwave_js_server_python-0.40.0.dist-info}/METADATA +1 -1
  30. {zwave_js_server_python-0.35.0.dist-info → zwave_js_server_python-0.40.0.dist-info}/RECORD +34 -35
  31. {zwave_js_server_python-0.35.0.dist-info → zwave_js_server_python-0.40.0.dist-info}/top_level.txt +0 -1
  32. scripts/__init__.py +0 -1
  33. scripts/generate_multilevel_sensor_constants.py +0 -245
  34. scripts/run_mock_server.py +0 -385
  35. {zwave_js_server_python-0.35.0.dist-info → zwave_js_server_python-0.40.0.dist-info}/LICENSE +0 -0
  36. {zwave_js_server_python-0.35.0.dist-info → zwave_js_server_python-0.40.0.dist-info}/WHEEL +0 -0
  37. {zwave_js_server_python-0.35.0.dist-info → zwave_js_server_python-0.40.0.dist-info}/entry_points.txt +0 -0
zwave_js_server/client.py CHANGED
@@ -139,7 +139,7 @@ class Client:
139
139
  cast(VersionInfoDataType, await self._receive_json_or_raise())
140
140
  )
141
141
 
142
- # basic check for server schema version compatability
142
+ # basic check for server schema version compatibility
143
143
  if (
144
144
  self.version.min_schema_version > MIN_SERVER_SCHEMA_VERSION
145
145
  or self.version.max_schema_version < MIN_SERVER_SCHEMA_VERSION
@@ -238,10 +238,7 @@ class Client:
238
238
  "Z-Wave JS initialized. %s nodes", len(self.driver.controller.nodes)
239
239
  )
240
240
 
241
- while not self._client.closed:
242
- data = await self._receive_json_or_raise()
243
-
244
- self._handle_incoming_message(data)
241
+ await self.receive_until_closed()
245
242
  except ConnectionClosed:
246
243
  pass
247
244
 
@@ -302,6 +299,15 @@ class Client:
302
299
 
303
300
  return list(data)
304
301
 
302
+ async def receive_until_closed(self) -> None:
303
+ """Receive messages until client is closed."""
304
+ assert self._client
305
+
306
+ while not self._client.closed:
307
+ data = await self._receive_json_or_raise()
308
+
309
+ self._handle_incoming_message(data)
310
+
305
311
  async def _receive_json_or_raise(self) -> dict:
306
312
  """Receive json or raise."""
307
313
  assert self._client
@@ -3,14 +3,15 @@ import sys
3
3
  from enum import Enum, IntEnum
4
4
 
5
5
  # minimal server schema version we can handle
6
- MIN_SERVER_SCHEMA_VERSION = 15
6
+ MIN_SERVER_SCHEMA_VERSION = 21
7
7
  # max server schema version we can handle (and our code is compatible with)
8
- MAX_SERVER_SCHEMA_VERSION = 15
8
+ MAX_SERVER_SCHEMA_VERSION = 21
9
9
 
10
10
  TYPING_EXTENSION_FOR_TYPEDDICT_REQUIRED = sys.version_info < (3, 9, 2)
11
11
 
12
12
  VALUE_UNKNOWN = "unknown"
13
13
 
14
+ NOT_INTERVIEWED = "None"
14
15
  INTERVIEW_FAILED = "Failed"
15
16
 
16
17
  CURRENT_STATE_PROPERTY = "currentState"
@@ -297,3 +298,31 @@ class RFRegion(IntEnum):
297
298
  KOREA = 33
298
299
  UNKNOWN = 254
299
300
  DEFAULT_EU = 255
301
+
302
+
303
+ class ProtocolDataRate(IntEnum):
304
+ """Enum for all known protocol data rates."""
305
+
306
+ # https://github.com/zwave-js/node-zwave-js/blob/master/packages/core/src/capabilities/Protocols.ts#L6
307
+
308
+ ZWAVE_9K6 = 1
309
+ ZWAVE_40K = 2
310
+ ZWAVE_100K = 3
311
+ LONG_RANGE_100K = 4
312
+
313
+
314
+ class RssiError(IntEnum):
315
+ """Enum for all known RSSI errors."""
316
+
317
+ # https://github.com/zwave-js/node-zwave-js/blob/master/packages/zwave-js/src/lib/controller/SendDataShared.ts#L79
318
+ NOT_AVAILABLE = 127
319
+ RECEIVER_SATURATED = 126
320
+ NO_SIGNAL_DETECTED = 125
321
+
322
+
323
+ class ProvisioningEntryStatus(IntEnum):
324
+ """Enum for all known provisioning entry statuses."""
325
+
326
+ # https://github.com/zwave-js/node-zwave-js/blob/master/packages/zwave-js/src/lib/controller/Inclusion.ts#L136
327
+ ACTIVE = 0
328
+ INACTIVE = 1
@@ -1,6 +1,6 @@
1
1
  """Constants for Meter CC."""
2
2
  from enum import IntEnum
3
- from typing import Dict, Set, Type, Union
3
+ from typing import Dict, Set, Type
4
4
 
5
5
  VALUE_PROPERTY = "value"
6
6
 
@@ -27,7 +27,11 @@ class MeterType(IntEnum):
27
27
  COOLING = 5
28
28
 
29
29
 
30
- class ElectricScale(IntEnum):
30
+ class MeterScaleType(IntEnum):
31
+ """Common base class for meter scale enums."""
32
+
33
+
34
+ class ElectricScale(MeterScaleType):
31
35
  """Enum with all known electric meter scale values."""
32
36
 
33
37
  KILOWATT_HOUR = 0
@@ -41,7 +45,7 @@ class ElectricScale(IntEnum):
41
45
  KILOVOLT_AMPERE_REACTIVE_HOUR = 8
42
46
 
43
47
 
44
- class GasScale(IntEnum):
48
+ class GasScale(MeterScaleType):
45
49
  """Enum with all known gas meter scale values."""
46
50
 
47
51
  CUBIC_METER = 0
@@ -49,7 +53,7 @@ class GasScale(IntEnum):
49
53
  PULSE_COUNT = 3
50
54
 
51
55
 
52
- class WaterScale(IntEnum):
56
+ class WaterScale(MeterScaleType):
53
57
  """Enum with all known water meter scale values."""
54
58
 
55
59
  CUBIC_METER = 0
@@ -58,7 +62,7 @@ class WaterScale(IntEnum):
58
62
  PULSE_COUNT = 3
59
63
 
60
64
 
61
- class HeatingScale(IntEnum):
65
+ class HeatingScale(MeterScaleType):
62
66
  """Enum with all known heating meter scale values."""
63
67
 
64
68
  KILOWATT_HOUR = 0
@@ -66,8 +70,6 @@ class HeatingScale(IntEnum):
66
70
 
67
71
  CoolingScale = HeatingScale
68
72
 
69
- MeterScaleType = Union[CoolingScale, ElectricScale, GasScale, HeatingScale, WaterScale]
70
-
71
73
  METER_TYPE_TO_SCALE_ENUM_MAP: Dict[MeterType, Type[MeterScaleType]] = {
72
74
  MeterType.ELECTRIC: ElectricScale,
73
75
  MeterType.GAS: GasScale,
@@ -6,7 +6,7 @@
6
6
  # ----------------------------------------------------------------------------------- #
7
7
 
8
8
  from enum import IntEnum
9
- from typing import Dict, Set, Type, Union
9
+ from typing import Dict, Set, Type
10
10
 
11
11
  CC_SPECIFIC_SCALE = "scale"
12
12
  CC_SPECIFIC_SENSOR_TYPE = "sensorType"
@@ -106,7 +106,11 @@ class MultilevelSensorType(IntEnum):
106
106
  WEIGHT = 14
107
107
 
108
108
 
109
- class AirFlowScale(IntEnum):
109
+ class MultilevelSensorScaleType(IntEnum):
110
+ """Common base class for multilevel sensor scale enums."""
111
+
112
+
113
+ class AirFlowScale(MultilevelSensorScaleType):
110
114
  """Enum for known scales for AIR_FLOW multilevel sensor types."""
111
115
 
112
116
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -114,7 +118,7 @@ class AirFlowScale(IntEnum):
114
118
  CUBIC_METER_PER_HOUR = 0
115
119
 
116
120
 
117
- class AnglePositionScale(IntEnum):
121
+ class AnglePositionScale(MultilevelSensorScaleType):
118
122
  """Enum for known scales for ANGLE_POSITION multilevel sensor types."""
119
123
 
120
124
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -123,28 +127,28 @@ class AnglePositionScale(IntEnum):
123
127
  PERCENTAGE_VALUE = 0
124
128
 
125
129
 
126
- class AppliedForceOnTheSensorScale(IntEnum):
130
+ class AppliedForceOnTheSensorScale(MultilevelSensorScaleType):
127
131
  """Enum for known scales for APPLIED_FORCE_ON_THE_SENSOR multilevel sensor types."""
128
132
 
129
133
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
130
134
  NEWTON = 0
131
135
 
132
136
 
133
- class AccelerationScale(IntEnum):
137
+ class AccelerationScale(MultilevelSensorScaleType):
134
138
  """Enum for known scales for Acceleration multilevel sensor types."""
135
139
 
136
140
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
137
141
  METER_PER_SQUARE_SECOND = 0
138
142
 
139
143
 
140
- class AcidityScale(IntEnum):
144
+ class AcidityScale(MultilevelSensorScaleType):
141
145
  """Enum for known scales for Acidity multilevel sensor types."""
142
146
 
143
147
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
144
148
  ACIDITY = 0
145
149
 
146
150
 
147
- class AirPressureScale(IntEnum):
151
+ class AirPressureScale(MultilevelSensorScaleType):
148
152
  """Enum for known scales for Air Pressure multilevel sensor types."""
149
153
 
150
154
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -152,14 +156,14 @@ class AirPressureScale(IntEnum):
152
156
  KILOPASCAL = 0
153
157
 
154
158
 
155
- class BasisMetabolicRateScale(IntEnum):
159
+ class BasisMetabolicRateScale(MultilevelSensorScaleType):
156
160
  """Enum for known scales for BASIS_METABOLIC_RATE multilevel sensor types."""
157
161
 
158
162
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
159
163
  JOULE = 0
160
164
 
161
165
 
162
- class BloodPressureScale(IntEnum):
166
+ class BloodPressureScale(MultilevelSensorScaleType):
163
167
  """Enum for known scales for BLOOD_PRESSURE multilevel sensor types."""
164
168
 
165
169
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -167,21 +171,21 @@ class BloodPressureScale(IntEnum):
167
171
  SYSTOLIC = 0
168
172
 
169
173
 
170
- class BodyMassIndexScale(IntEnum):
174
+ class BodyMassIndexScale(MultilevelSensorScaleType):
171
175
  """Enum for known scales for BODY_MASS_INDEX multilevel sensor types."""
172
176
 
173
177
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
174
178
  BODY_MASS_INDEX = 0
175
179
 
176
180
 
177
- class CarbonDioxideLevelScale(IntEnum):
181
+ class CarbonDioxideLevelScale(MultilevelSensorScaleType):
178
182
  """Enum for known scales for CARBON_DIOXIDE_LEVEL multilevel sensor types."""
179
183
 
180
184
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
181
185
  PARTS_MILLION = 0
182
186
 
183
187
 
184
- class CarbonMonoxideLevelScale(IntEnum):
188
+ class CarbonMonoxideLevelScale(MultilevelSensorScaleType):
185
189
  """Enum for known scales for CARBON_MONOXIDE_LEVEL multilevel sensor types."""
186
190
 
187
191
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -189,7 +193,7 @@ class CarbonMonoxideLevelScale(IntEnum):
189
193
  PARTS_MILLION = 1
190
194
 
191
195
 
192
- class CurrentScale(IntEnum):
196
+ class CurrentScale(MultilevelSensorScaleType):
193
197
  """Enum for known scales for CURRENT multilevel sensor types."""
194
198
 
195
199
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -197,7 +201,7 @@ class CurrentScale(IntEnum):
197
201
  MILLIAMPERE = 1
198
202
 
199
203
 
200
- class DistanceScale(IntEnum):
204
+ class DistanceScale(MultilevelSensorScaleType):
201
205
  """Enum for known scales for DISTANCE multilevel sensor types."""
202
206
 
203
207
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -206,42 +210,42 @@ class DistanceScale(IntEnum):
206
210
  METER = 0
207
211
 
208
212
 
209
- class DensityScale(IntEnum):
213
+ class DensityScale(MultilevelSensorScaleType):
210
214
  """Enum for known scales for Density multilevel sensor types."""
211
215
 
212
216
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
213
217
  DENSITY = 0
214
218
 
215
219
 
216
- class DirectionScale(IntEnum):
220
+ class DirectionScale(MultilevelSensorScaleType):
217
221
  """Enum for known scales for Direction multilevel sensor types."""
218
222
 
219
223
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
220
224
  DEGREES = 0
221
225
 
222
226
 
223
- class ElectricalConductivityScale(IntEnum):
227
+ class ElectricalConductivityScale(MultilevelSensorScaleType):
224
228
  """Enum for known scales for ELECTRICAL_CONDUCTIVITY multilevel sensor types."""
225
229
 
226
230
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
227
231
  SIEMENS_PER_METER = 0
228
232
 
229
233
 
230
- class ElectricalResistivityScale(IntEnum):
234
+ class ElectricalResistivityScale(MultilevelSensorScaleType):
231
235
  """Enum for known scales for ELECTRICAL_RESISTIVITY multilevel sensor types."""
232
236
 
233
237
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
234
238
  OHM_METER = 0
235
239
 
236
240
 
237
- class FormaldehydeLevelScale(IntEnum):
241
+ class FormaldehydeLevelScale(MultilevelSensorScaleType):
238
242
  """Enum for known scales for FORMALDEHYDE_LEVEL multilevel sensor types."""
239
243
 
240
244
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
241
245
  MOLE_PER_CUBIC_METER = 0
242
246
 
243
247
 
244
- class FrequencyScale(IntEnum):
248
+ class FrequencyScale(MultilevelSensorScaleType):
245
249
  """Enum for known scales for FREQUENCY multilevel sensor types."""
246
250
 
247
251
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -249,7 +253,7 @@ class FrequencyScale(IntEnum):
249
253
  KILOHERTZ = 1
250
254
 
251
255
 
252
- class GeneralPurposeScale(IntEnum):
256
+ class GeneralPurposeScale(MultilevelSensorScaleType):
253
257
  """Enum for known scales for GENERAL_PURPOSE multilevel sensor types."""
254
258
 
255
259
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -257,22 +261,22 @@ class GeneralPurposeScale(IntEnum):
257
261
  PERCENTAGE_VALUE = 0
258
262
 
259
263
 
260
- class HeartRateScale(IntEnum):
264
+ class HeartRateScale(MultilevelSensorScaleType):
261
265
  """Enum for known scales for HEART_RATE multilevel sensor types."""
262
266
 
263
267
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
264
268
  BEATS_PER_MINUTE = 0
265
269
 
266
270
 
267
- class HumidityScale(IntEnum):
268
- """Enum for known scales for HUMIDITY multilevel sensor types."""
271
+ class HumidityScale(MultilevelSensorScaleType):
272
+ """Enum for known scales for Humidity multilevel sensor types."""
269
273
 
270
274
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
271
275
  ABSOLUTE_HUMIDITY = 1
272
276
  PERCENTAGE_VALUE = 0
273
277
 
274
278
 
275
- class IlluminanceScale(IntEnum):
279
+ class IlluminanceScale(MultilevelSensorScaleType):
276
280
  """Enum for known scales for ILLUMINANCE multilevel sensor types."""
277
281
 
278
282
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -280,7 +284,7 @@ class IlluminanceScale(IntEnum):
280
284
  PERCENTAGE_VALUE = 0
281
285
 
282
286
 
283
- class LoudnessScale(IntEnum):
287
+ class LoudnessScale(MultilevelSensorScaleType):
284
288
  """Enum for known scales for LOUDNESS multilevel sensor types."""
285
289
 
286
290
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -288,14 +292,14 @@ class LoudnessScale(IntEnum):
288
292
  DECIBEL = 0
289
293
 
290
294
 
291
- class MethaneDensityScale(IntEnum):
295
+ class MethaneDensityScale(MultilevelSensorScaleType):
292
296
  """Enum for known scales for METHANE_DENSITY multilevel sensor types."""
293
297
 
294
298
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
295
299
  MOLE_PER_CUBIC_METER = 0
296
300
 
297
301
 
298
- class MoistureScale(IntEnum):
302
+ class MoistureScale(MultilevelSensorScaleType):
299
303
  """Enum for known scales for MOISTURE multilevel sensor types."""
300
304
 
301
305
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -305,14 +309,14 @@ class MoistureScale(IntEnum):
305
309
  WATER_ACTIVITY = 3
306
310
 
307
311
 
308
- class MassScale(IntEnum):
312
+ class MassScale(MultilevelSensorScaleType):
309
313
  """Enum for known scales for Mass multilevel sensor types."""
310
314
 
311
315
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
312
316
  KILOGRAM = 0
313
317
 
314
318
 
315
- class ParticulateMatter10Scale(IntEnum):
319
+ class ParticulateMatter10Scale(MultilevelSensorScaleType):
316
320
  """Enum for known scales for PARTICULATE_MATTER_10 multilevel sensor types."""
317
321
 
318
322
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -320,7 +324,7 @@ class ParticulateMatter10Scale(IntEnum):
320
324
  MOLE_PER_CUBIC_METER = 0
321
325
 
322
326
 
323
- class ParticulateMatter25Scale(IntEnum):
327
+ class ParticulateMatter25Scale(MultilevelSensorScaleType):
324
328
  """Enum for known scales for PARTICULATE_MATTER_2_5 multilevel sensor types."""
325
329
 
326
330
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -328,7 +332,7 @@ class ParticulateMatter25Scale(IntEnum):
328
332
  MOLE_PER_CUBIC_METER = 0
329
333
 
330
334
 
331
- class PowerScale(IntEnum):
335
+ class PowerScale(MultilevelSensorScaleType):
332
336
  """Enum for known scales for POWER multilevel sensor types."""
333
337
 
334
338
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -336,14 +340,14 @@ class PowerScale(IntEnum):
336
340
  WATT = 0
337
341
 
338
342
 
339
- class PercentageScale(IntEnum):
343
+ class PercentageScale(MultilevelSensorScaleType):
340
344
  """Enum for known scales for Percentage multilevel sensor types."""
341
345
 
342
346
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
343
347
  PERCENTAGE_VALUE = 0
344
348
 
345
349
 
346
- class PressureScale(IntEnum):
350
+ class PressureScale(MultilevelSensorScaleType):
347
351
  """Enum for known scales for Pressure multilevel sensor types."""
348
352
 
349
353
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -351,7 +355,7 @@ class PressureScale(IntEnum):
351
355
  POUND_PER_SQUARE_INCH = 1
352
356
 
353
357
 
354
- class RadonConcentrationScale(IntEnum):
358
+ class RadonConcentrationScale(MultilevelSensorScaleType):
355
359
  """Enum for known scales for RADON_CONCENTRATION multilevel sensor types."""
356
360
 
357
361
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -359,7 +363,7 @@ class RadonConcentrationScale(IntEnum):
359
363
  PICOCURIES_PER_LITER = 1
360
364
 
361
365
 
362
- class RainRateScale(IntEnum):
366
+ class RainRateScale(MultilevelSensorScaleType):
363
367
  """Enum for known scales for RAIN_RATE multilevel sensor types."""
364
368
 
365
369
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -367,14 +371,14 @@ class RainRateScale(IntEnum):
367
371
  MILLIMETER_HOUR = 0
368
372
 
369
373
 
370
- class RespiratoryRateScale(IntEnum):
374
+ class RespiratoryRateScale(MultilevelSensorScaleType):
371
375
  """Enum for known scales for RESPIRATORY_RATE multilevel sensor types."""
372
376
 
373
377
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
374
378
  BREATHS_PER_MINUTE = 0
375
379
 
376
380
 
377
- class RfSignalStrengthScale(IntEnum):
381
+ class RfSignalStrengthScale(MultilevelSensorScaleType):
378
382
  """Enum for known scales for RF_SIGNAL_STRENGTH multilevel sensor types."""
379
383
 
380
384
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -382,7 +386,7 @@ class RfSignalStrengthScale(IntEnum):
382
386
  RSSI = 0
383
387
 
384
388
 
385
- class RotationScale(IntEnum):
389
+ class RotationScale(MultilevelSensorScaleType):
386
390
  """Enum for known scales for ROTATION multilevel sensor types."""
387
391
 
388
392
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -390,7 +394,7 @@ class RotationScale(IntEnum):
390
394
  REVOLUTIONS_PER_MINUTE = 0
391
395
 
392
396
 
393
- class SeismicIntensityScale(IntEnum):
397
+ class SeismicIntensityScale(MultilevelSensorScaleType):
394
398
  """Enum for known scales for SEISMIC_INTENSITY multilevel sensor types."""
395
399
 
396
400
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -400,7 +404,7 @@ class SeismicIntensityScale(IntEnum):
400
404
  SHINDO = 3
401
405
 
402
406
 
403
- class SeismicMagnitudeScale(IntEnum):
407
+ class SeismicMagnitudeScale(MultilevelSensorScaleType):
404
408
  """Enum for known scales for SEISMIC_MAGNITUDE multilevel sensor types."""
405
409
 
406
410
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -410,21 +414,21 @@ class SeismicMagnitudeScale(IntEnum):
410
414
  SURFACE_WAVE = 2
411
415
 
412
416
 
413
- class SoilSalinityScale(IntEnum):
417
+ class SoilSalinityScale(MultilevelSensorScaleType):
414
418
  """Enum for known scales for SOIL_SALINITY multilevel sensor types."""
415
419
 
416
420
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
417
421
  MOLE_PER_CUBIC_METER = 0
418
422
 
419
423
 
420
- class SolarRadiationScale(IntEnum):
424
+ class SolarRadiationScale(MultilevelSensorScaleType):
421
425
  """Enum for known scales for SOLAR_RADIATION multilevel sensor types."""
422
426
 
423
427
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
424
428
  WATT_PER_SQUARE_METER = 0
425
429
 
426
430
 
427
- class TankCapacityScale(IntEnum):
431
+ class TankCapacityScale(MultilevelSensorScaleType):
428
432
  """Enum for known scales for TANK_CAPACITY multilevel sensor types."""
429
433
 
430
434
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -433,7 +437,7 @@ class TankCapacityScale(IntEnum):
433
437
  LITER = 0
434
438
 
435
439
 
436
- class TideLevelScale(IntEnum):
440
+ class TideLevelScale(MultilevelSensorScaleType):
437
441
  """Enum for known scales for TIDE_LEVEL multilevel sensor types."""
438
442
 
439
443
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -441,14 +445,14 @@ class TideLevelScale(IntEnum):
441
445
  METER = 0
442
446
 
443
447
 
444
- class TimeScale(IntEnum):
448
+ class TimeScale(MultilevelSensorScaleType):
445
449
  """Enum for known scales for TIME multilevel sensor types."""
446
450
 
447
451
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
448
452
  SECOND = 0
449
453
 
450
454
 
451
- class TemperatureScale(IntEnum):
455
+ class TemperatureScale(MultilevelSensorScaleType):
452
456
  """Enum for known scales for Temperature multilevel sensor types."""
453
457
 
454
458
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -456,21 +460,21 @@ class TemperatureScale(IntEnum):
456
460
  FAHRENHEIT = 1
457
461
 
458
462
 
459
- class UltravioletScale(IntEnum):
463
+ class UltravioletScale(MultilevelSensorScaleType):
460
464
  """Enum for known scales for ULTRAVIOLET multilevel sensor types."""
461
465
 
462
466
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
463
467
  UV_INDEX = 0
464
468
 
465
469
 
466
- class UnitlessScale(IntEnum):
470
+ class UnitlessScale(MultilevelSensorScaleType):
467
471
  """Enum for known scales for Unitless multilevel sensor types."""
468
472
 
469
473
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
470
474
  UNITLESS = 0
471
475
 
472
476
 
473
- class VelocityScale(IntEnum):
477
+ class VelocityScale(MultilevelSensorScaleType):
474
478
  """Enum for known scales for VELOCITY multilevel sensor types."""
475
479
 
476
480
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -478,7 +482,7 @@ class VelocityScale(IntEnum):
478
482
  M_S = 0
479
483
 
480
484
 
481
- class VolatileOrganicCompoundLevelScale(IntEnum):
485
+ class VolatileOrganicCompoundLevelScale(MultilevelSensorScaleType):
482
486
  """Enum for known scales for VOLATILE_ORGANIC_COMPOUND_LEVEL multilevel sensor types."""
483
487
 
484
488
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -486,7 +490,7 @@ class VolatileOrganicCompoundLevelScale(IntEnum):
486
490
  PARTS_MILLION = 1
487
491
 
488
492
 
489
- class VoltageScale(IntEnum):
493
+ class VoltageScale(MultilevelSensorScaleType):
490
494
  """Enum for known scales for VOLTAGE multilevel sensor types."""
491
495
 
492
496
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -494,35 +498,35 @@ class VoltageScale(IntEnum):
494
498
  VOLT = 0
495
499
 
496
500
 
497
- class WaterChlorineLevelScale(IntEnum):
501
+ class WaterChlorineLevelScale(MultilevelSensorScaleType):
498
502
  """Enum for known scales for WATER_CHLORINE_LEVEL multilevel sensor types."""
499
503
 
500
504
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
501
505
  MILLIGRAM_PER_LITER = 0
502
506
 
503
507
 
504
- class WaterFlowScale(IntEnum):
508
+ class WaterFlowScale(MultilevelSensorScaleType):
505
509
  """Enum for known scales for WATER_FLOW multilevel sensor types."""
506
510
 
507
511
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
508
512
  LITER_PER_HOUR = 0
509
513
 
510
514
 
511
- class WaterOxidationReductionPotentialScale(IntEnum):
515
+ class WaterOxidationReductionPotentialScale(MultilevelSensorScaleType):
512
516
  """Enum for known scales for WATER_OXIDATION_REDUCTION_POTENTIAL multilevel sensor types."""
513
517
 
514
518
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
515
519
  MILLIVOLT = 0
516
520
 
517
521
 
518
- class WaterPressureScale(IntEnum):
522
+ class WaterPressureScale(MultilevelSensorScaleType):
519
523
  """Enum for known scales for WATER_PRESSURE multilevel sensor types."""
520
524
 
521
525
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
522
526
  KILOPASCAL = 0
523
527
 
524
528
 
525
- class WeightScale(IntEnum):
529
+ class WeightScale(MultilevelSensorScaleType):
526
530
  """Enum for known scales for WEIGHT multilevel sensor types."""
527
531
 
528
532
  # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/sensorTypes.json
@@ -530,64 +534,6 @@ class WeightScale(IntEnum):
530
534
  POUNDS = 1
531
535
 
532
536
 
533
- MultilevelSensorScaleType = Union[
534
- AccelerationScale,
535
- AcidityScale,
536
- AirFlowScale,
537
- AirPressureScale,
538
- AnglePositionScale,
539
- AppliedForceOnTheSensorScale,
540
- BasisMetabolicRateScale,
541
- BloodPressureScale,
542
- BodyMassIndexScale,
543
- CarbonDioxideLevelScale,
544
- CarbonMonoxideLevelScale,
545
- CurrentScale,
546
- DensityScale,
547
- DirectionScale,
548
- DistanceScale,
549
- ElectricalConductivityScale,
550
- ElectricalResistivityScale,
551
- FormaldehydeLevelScale,
552
- FrequencyScale,
553
- GeneralPurposeScale,
554
- HeartRateScale,
555
- HumidityScale,
556
- IlluminanceScale,
557
- LoudnessScale,
558
- MassScale,
559
- MethaneDensityScale,
560
- MoistureScale,
561
- ParticulateMatter10Scale,
562
- ParticulateMatter25Scale,
563
- PercentageScale,
564
- PowerScale,
565
- PressureScale,
566
- RadonConcentrationScale,
567
- RainRateScale,
568
- RespiratoryRateScale,
569
- RfSignalStrengthScale,
570
- RotationScale,
571
- SeismicIntensityScale,
572
- SeismicMagnitudeScale,
573
- SoilSalinityScale,
574
- SolarRadiationScale,
575
- TankCapacityScale,
576
- TemperatureScale,
577
- TideLevelScale,
578
- TimeScale,
579
- UltravioletScale,
580
- UnitlessScale,
581
- VelocityScale,
582
- VolatileOrganicCompoundLevelScale,
583
- VoltageScale,
584
- WaterChlorineLevelScale,
585
- WaterFlowScale,
586
- WaterOxidationReductionPotentialScale,
587
- WaterPressureScale,
588
- WeightScale,
589
- ]
590
-
591
537
  MULTILEVEL_SENSOR_TYPE_TO_SCALE_MAP: Dict[
592
538
  MultilevelSensorType, Type[MultilevelSensorScaleType]
593
539
  ] = {