ramses-rf 0.51.9__py3-none-any.whl → 0.52.1__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.
- ramses_cli/client.py +21 -9
- ramses_cli/discovery.py +1 -1
- ramses_rf/database.py +113 -58
- ramses_rf/device/base.py +10 -5
- ramses_rf/device/heat.py +15 -7
- ramses_rf/device/hvac.py +31 -7
- ramses_rf/dispatcher.py +4 -4
- ramses_rf/entity_base.py +483 -123
- ramses_rf/gateway.py +17 -6
- ramses_rf/version.py +1 -1
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.1.dist-info}/METADATA +1 -1
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.1.dist-info}/RECORD +21 -21
- ramses_tx/gateway.py +2 -0
- ramses_tx/message.py +3 -1
- ramses_tx/parsers.py +2 -0
- ramses_tx/ramses.py +11 -3
- ramses_tx/schemas.py +8 -2
- ramses_tx/version.py +1 -1
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.1.dist-info}/WHEEL +0 -0
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.1.dist-info}/entry_points.txt +0 -0
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.1.dist-info}/licenses/LICENSE +0 -0
ramses_rf/gateway.py
CHANGED
|
@@ -129,7 +129,7 @@ class Gateway(Engine):
|
|
|
129
129
|
self.devices: list[Device] = []
|
|
130
130
|
self.device_by_id: dict[DeviceIdT, Device] = {}
|
|
131
131
|
|
|
132
|
-
self.msg_db: MessageIndex | None = None
|
|
132
|
+
self.msg_db: MessageIndex | None = None
|
|
133
133
|
|
|
134
134
|
def __repr__(self) -> str:
|
|
135
135
|
if not self.ser_name:
|
|
@@ -173,6 +173,12 @@ class Gateway(Engine):
|
|
|
173
173
|
**self._packet_log,
|
|
174
174
|
)
|
|
175
175
|
|
|
176
|
+
# initialize SQLite index, set in _tx/Engine
|
|
177
|
+
if self._sqlite_index: # TODO(eb): default to ON in Q4 2025
|
|
178
|
+
_LOGGER.info("Ramses RF starts SQLite MessageIndex")
|
|
179
|
+
self.create_sqlite_message_index() # if activated in ramses_cc > Engine
|
|
180
|
+
|
|
181
|
+
# temporarily turn on discovery, remember original state
|
|
176
182
|
self.config.disable_discovery, disable_discovery = (
|
|
177
183
|
True,
|
|
178
184
|
self.config.disable_discovery,
|
|
@@ -184,6 +190,7 @@ class Gateway(Engine):
|
|
|
184
190
|
if cached_packets:
|
|
185
191
|
await self._restore_cached_packets(cached_packets)
|
|
186
192
|
|
|
193
|
+
# reset discovery to original state
|
|
187
194
|
self.config.disable_discovery = disable_discovery
|
|
188
195
|
|
|
189
196
|
if (
|
|
@@ -193,6 +200,9 @@ class Gateway(Engine):
|
|
|
193
200
|
):
|
|
194
201
|
initiate_discovery(self.devices, self.systems)
|
|
195
202
|
|
|
203
|
+
def create_sqlite_message_index(self) -> None:
|
|
204
|
+
self.msg_db = MessageIndex() # start the index
|
|
205
|
+
|
|
196
206
|
async def stop(self) -> None:
|
|
197
207
|
"""Stop the Gateway and tidy up."""
|
|
198
208
|
|
|
@@ -248,12 +258,13 @@ class Gateway(Engine):
|
|
|
248
258
|
# return True
|
|
249
259
|
return include_expired or not msg._expired
|
|
250
260
|
|
|
251
|
-
msgs = [m for device in self.devices for m in device.
|
|
261
|
+
msgs = [m for device in self.devices for m in device._msg_list]
|
|
252
262
|
|
|
253
263
|
for system in self.systems:
|
|
254
264
|
msgs.extend(list(system._msgs.values()))
|
|
255
265
|
msgs.extend([m for z in system.zones for m in z._msgs.values()])
|
|
256
|
-
# msgs.extend([m for z in system.dhw for m in z._msgs.values()]) # TODO
|
|
266
|
+
# msgs.extend([m for z in system.dhw for m in z._msgs.values()]) # TODO: DHW
|
|
267
|
+
# Related to/Fixes ramses_cc Issue 249 non-existing via-device _HW ?
|
|
257
268
|
|
|
258
269
|
if self.msg_db:
|
|
259
270
|
pkts = {
|
|
@@ -261,8 +272,8 @@ class Gateway(Engine):
|
|
|
261
272
|
for msg in self.msg_db.all(include_expired=True)
|
|
262
273
|
if wanted_msg(msg, include_expired=include_expired)
|
|
263
274
|
}
|
|
264
|
-
|
|
265
|
-
|
|
275
|
+
else: # deprecated, to be removed in Q1 2026
|
|
276
|
+
# _LOGGER.warning("Missing MessageIndex")
|
|
266
277
|
pkts = { # BUG: assumes pkts have unique dtms: may be untrue for contrived logs
|
|
267
278
|
f"{repr(msg._pkt)[:26]}": f"{repr(msg._pkt)[27:]}"
|
|
268
279
|
for msg in msgs
|
|
@@ -359,7 +370,7 @@ class Gateway(Engine):
|
|
|
359
370
|
"""
|
|
360
371
|
|
|
361
372
|
def check_filter_lists(dev_id: DeviceIdT) -> None: # may: LookupError
|
|
362
|
-
"""Raise
|
|
373
|
+
"""Raise a LookupError if a device_id is filtered out by a list."""
|
|
363
374
|
|
|
364
375
|
if dev_id in self._unwanted: # TODO: shouldn't invalidate a msg
|
|
365
376
|
raise LookupError(f"Can't create {dev_id}: it is unwanted or invalid")
|
ramses_rf/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ramses_rf
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.52.1
|
|
4
4
|
Summary: A stateful RAMSES-II protocol decoder & analyser.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ramses-rf/ramses_rf
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/ramses-rf/ramses_rf/issues
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
ramses_cli/__init__.py,sha256=uvGzWqOf4avvgzxJNSLFWEelIWqSZ-AeLAZzg5x58bc,397
|
|
2
|
-
ramses_cli/client.py,sha256=
|
|
2
|
+
ramses_cli/client.py,sha256=NTLhHhTiYmp7nyE3vqIFR9zjwfot1wdIT7QuMUgubD0,20350
|
|
3
3
|
ramses_cli/debug.py,sha256=vgR0lOHoYjWarN948dI617WZZGNuqHbeq6Tc16Da7b4,608
|
|
4
|
-
ramses_cli/discovery.py,sha256=
|
|
4
|
+
ramses_cli/discovery.py,sha256=MWoahBnAAVzfK2S7EDLsY2WYqN_ZK9L-lktrj8_4cb0,12978
|
|
5
5
|
ramses_cli/utils/cat_slow.py,sha256=AhUpM5gnegCitNKU-JGHn-DrRzSi-49ZR1Qw6lxe_t8,607
|
|
6
6
|
ramses_cli/utils/convert.py,sha256=D_YiCyX5na9pgC-_NhBlW9N1dgRKUK-uLtLBfofjzZM,1804
|
|
7
7
|
ramses_rf/__init__.py,sha256=VG3E9GHbtC6lx6E1DMQJeFitHnydMKJyPxQBethdrzg,1193
|
|
8
8
|
ramses_rf/binding_fsm.py,sha256=uZAOl3i19KCXqqlaLJWkEqMMP7NJBhVPW3xTikQD1fY,25996
|
|
9
9
|
ramses_rf/const.py,sha256=L3z31CZ-xqno6oZp_h-67CB_5tDDqTwSWXsqRtsjMcs,5460
|
|
10
|
-
ramses_rf/database.py,sha256=
|
|
11
|
-
ramses_rf/dispatcher.py,sha256=
|
|
12
|
-
ramses_rf/entity_base.py,sha256=
|
|
10
|
+
ramses_rf/database.py,sha256=aQntZW-ARiJ8GFVeT5T4LLWMeshs_lw_tnNet_S146U,20785
|
|
11
|
+
ramses_rf/dispatcher.py,sha256=UqilAoL6T85ZFPkcpvcfuidNbusONngQoCVWHV6vOzk,11277
|
|
12
|
+
ramses_rf/entity_base.py,sha256=T3NCo41l6KDqip6ptLdYn2b7pmGit37NgAHoBvhT42s,56063
|
|
13
13
|
ramses_rf/exceptions.py,sha256=mt_T7irqHSDKir6KLaf6oDglUIdrw0S40JbOrWJk5jc,3657
|
|
14
|
-
ramses_rf/gateway.py,sha256=
|
|
14
|
+
ramses_rf/gateway.py,sha256=AEgVKoW1I3D8zYIkQfMnC6CN3TV1gxamfIaXRQ2IUSk,21216
|
|
15
15
|
ramses_rf/helpers.py,sha256=TNk_QkpIOB3alOp1sqnA9LOzi4fuDCeapNlW3zTzNas,4250
|
|
16
16
|
ramses_rf/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
ramses_rf/schemas.py,sha256=UhvRhV4nZ3kvrLLM3wwIguQUIjIgd_AKvp2wkTSpNEA,13468
|
|
18
|
-
ramses_rf/version.py,sha256=
|
|
18
|
+
ramses_rf/version.py,sha256=X_vGsHP_Eb6ovijJi7zzwEWH5kud2r0V1sImKWLqKv4,125
|
|
19
19
|
ramses_rf/device/__init__.py,sha256=sUbH5dhbYFXSoM_TPFRutpRutBRpup7_cQ9smPtDTy8,4858
|
|
20
|
-
ramses_rf/device/base.py,sha256=
|
|
21
|
-
ramses_rf/device/heat.py,sha256=
|
|
22
|
-
ramses_rf/device/hvac.py,sha256=
|
|
20
|
+
ramses_rf/device/base.py,sha256=Yx0LZwMEb49naY8FolZ8HEBFb6XCPQBTVN_TWyO2nKg,17777
|
|
21
|
+
ramses_rf/device/heat.py,sha256=UmZuA-5czrfoClVEeUAPWgze5obWNQpYI7ZPQpVJB6s,54704
|
|
22
|
+
ramses_rf/device/hvac.py,sha256=0iQt9yFXgapaaiLWimGYF1Mh2c_TR58JyaYvWU1nSdE,45605
|
|
23
23
|
ramses_rf/system/__init__.py,sha256=uZLKio3gLlBzePa2aDQ1nxkcp1YXOGrn6iHTG8LiNIw,711
|
|
24
24
|
ramses_rf/system/faultlog.py,sha256=GdGmVGT3137KsTlV_nhccgIFEmYu6DFsLTn4S-8JSok,12799
|
|
25
25
|
ramses_rf/system/heat.py,sha256=3jaFEChU-HlWCRMY1y7u09s7AH4hT0pC63hnqwdmZOc,39223
|
|
@@ -32,24 +32,24 @@ ramses_tx/const.py,sha256=pnxq5upXvLUizv9Ye_I1llD9rAa3wddHgsSkc91AIUc,30300
|
|
|
32
32
|
ramses_tx/exceptions.py,sha256=FJSU9YkvpKjs3yeTqUJX1o3TPFSe_B01gRGIh9b3PNc,2632
|
|
33
33
|
ramses_tx/fingerprints.py,sha256=nfftA1E62HQnb-eLt2EqjEi_la0DAoT0wt-PtTMie0s,11974
|
|
34
34
|
ramses_tx/frame.py,sha256=GzNsXr15YLeidJYGtk_xPqsZQh4ehDDlUCtT6rTDhT8,22046
|
|
35
|
-
ramses_tx/gateway.py,sha256=
|
|
35
|
+
ramses_tx/gateway.py,sha256=8o9NyEAyIui3B6HA0R8o64u4U8NZFlNl0TQ6rhwMoCk,11369
|
|
36
36
|
ramses_tx/helpers.py,sha256=J4OCRckp3JshGQTvvqEskFjB1hPS7uA_opVsuIqmZds,32915
|
|
37
37
|
ramses_tx/logger.py,sha256=qYbUoNPnPaFWKVsYvLG6uTVuPTdZ8HsMzBbGx0DpBqc,10177
|
|
38
|
-
ramses_tx/message.py,sha256
|
|
38
|
+
ramses_tx/message.py,sha256=-moQ8v3HVlNSl-x3U0DDfDcj8WQ7vLqclMNxsohbmnw,13449
|
|
39
39
|
ramses_tx/opentherm.py,sha256=58PXz9l5x8Ou6Fm3y-R_UnGHCYahoi2RKIDdYStUMzk,42378
|
|
40
40
|
ramses_tx/packet.py,sha256=_qHiPFWpQpKueZOgf1jJ93Y09iZjo3LZWStLglVkXg4,7370
|
|
41
|
-
ramses_tx/parsers.py,sha256=
|
|
41
|
+
ramses_tx/parsers.py,sha256=e6IwVEMLv2EL8gbZaM2s-qA3E2AN8dCwdIgfEbFo730,111029
|
|
42
42
|
ramses_tx/protocol.py,sha256=9R3aCzuiWEyXmugmB5tyR_RhBlgfnpUXj7AsMP9BzzU,28867
|
|
43
43
|
ramses_tx/protocol_fsm.py,sha256=ZKtehCr_4TaDdfdlfidFLJaOVTYtaEq5h4tLqNIhb9s,26827
|
|
44
44
|
ramses_tx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
ramses_tx/ramses.py,sha256=
|
|
46
|
-
ramses_tx/schemas.py,sha256=
|
|
45
|
+
ramses_tx/ramses.py,sha256=NG81GBNZlap-Gi9ac-r6OFE-KaHvXsgPDWy-I2Irr-4,53698
|
|
46
|
+
ramses_tx/schemas.py,sha256=IYCDH0jp3446Gtl_378aBmWyXN90e-uYudfkZkOKR24,13147
|
|
47
47
|
ramses_tx/transport.py,sha256=bGprlfuuwBgQ1bmBRSrcicuk7s-jVqyuKpZCfQ-sSpw,58469
|
|
48
48
|
ramses_tx/typed_dicts.py,sha256=w-0V5t2Q3GiNUOrRAWiW9GtSwbta_7luME6GfIb1zhI,10869
|
|
49
49
|
ramses_tx/typing.py,sha256=eF2SlPWhNhEFQj6WX2AhTXiyRQVXYnFutiepllYl2rI,5042
|
|
50
|
-
ramses_tx/version.py,sha256=
|
|
51
|
-
ramses_rf-0.
|
|
52
|
-
ramses_rf-0.
|
|
53
|
-
ramses_rf-0.
|
|
54
|
-
ramses_rf-0.
|
|
55
|
-
ramses_rf-0.
|
|
50
|
+
ramses_tx/version.py,sha256=Wf50ZhDvYDcZoyYmD6Yu8apfRhpvbfMyTBj_GYjoYbw,123
|
|
51
|
+
ramses_rf-0.52.1.dist-info/METADATA,sha256=7mrN8yPSMpAdK4-lYvWCmhKyRLrJgr2WQE4px21H7t0,4000
|
|
52
|
+
ramses_rf-0.52.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
53
|
+
ramses_rf-0.52.1.dist-info/entry_points.txt,sha256=NnyK29baOCNg8DinPYiZ368h7MTH7bgTW26z2A1NeIE,50
|
|
54
|
+
ramses_rf-0.52.1.dist-info/licenses/LICENSE,sha256=-Kc35W7l1UkdiQ4314_yVWv7vDDrg7IrJfMLUiq6Nfs,1074
|
|
55
|
+
ramses_rf-0.52.1.dist-info/RECORD,,
|
ramses_tx/gateway.py
CHANGED
|
@@ -37,6 +37,7 @@ from .schemas import (
|
|
|
37
37
|
SZ_PACKET_LOG,
|
|
38
38
|
SZ_PORT_CONFIG,
|
|
39
39
|
SZ_PORT_NAME,
|
|
40
|
+
SZ_SQLITE_INDEX,
|
|
40
41
|
PktLogConfigT,
|
|
41
42
|
PortConfigT,
|
|
42
43
|
select_device_filter_mode,
|
|
@@ -112,6 +113,7 @@ class Engine:
|
|
|
112
113
|
self._include,
|
|
113
114
|
self._exclude,
|
|
114
115
|
)
|
|
116
|
+
self._sqlite_index = kwargs.pop(SZ_SQLITE_INDEX, False) # default True?
|
|
115
117
|
self._kwargs: dict[str, Any] = kwargs # HACK
|
|
116
118
|
|
|
117
119
|
self._engine_lock = Lock() # FIXME: threading lock, or asyncio lock?
|
ramses_tx/message.py
CHANGED
|
@@ -96,7 +96,9 @@ class MessageBase:
|
|
|
96
96
|
|
|
97
97
|
if self.src.id == self._addrs[0].id: # type: ignore[unreachable]
|
|
98
98
|
name_0 = self._name(self.src)
|
|
99
|
-
name_1 =
|
|
99
|
+
name_1 = (
|
|
100
|
+
"" if self.dst is self.src else self._name(self.dst)
|
|
101
|
+
) # use 'is', issue_cc 318
|
|
100
102
|
else:
|
|
101
103
|
name_0 = ""
|
|
102
104
|
name_1 = self._name(self.src)
|
ramses_tx/parsers.py
CHANGED
|
@@ -1955,6 +1955,8 @@ def parser_2411(payload: str, msg: Message) -> dict[str, Any]:
|
|
|
1955
1955
|
"max_value": parser(payload[26:34][-length:]), # type: ignore[operator]
|
|
1956
1956
|
"precision": parser(payload[34:42][-length:]), # type: ignore[operator]
|
|
1957
1957
|
"_value_42": payload[42:],
|
|
1958
|
+
# Flexible footer - capture everything after precision
|
|
1959
|
+
# eg. older Orcon models may have a footer of 2 bytes
|
|
1958
1960
|
}
|
|
1959
1961
|
)
|
|
1960
1962
|
except AssertionError as err:
|
ramses_tx/ramses.py
CHANGED
|
@@ -478,10 +478,10 @@ CODES_SCHEMA: dict[Code, dict[str, Any]] = { # rf_unknown
|
|
|
478
478
|
},
|
|
479
479
|
Code._2411: { # fan_params, HVAC
|
|
480
480
|
SZ_NAME: "fan_params",
|
|
481
|
-
I_: r"^(00|01|15|16|17|21)00[0-9A-F]{6}([0-9A-F]{8}){4}[0-9A-F]{
|
|
481
|
+
I_: r"^(00|01|15|16|17|21)00[0-9A-F]{6}([0-9A-F]{8}){4}[0-9A-F]{2,6}$", # Allow 2-6 byte footer
|
|
482
482
|
RQ: r"^(00|01|15|16|17|21)00[0-9A-F]{2}((00){19})?$",
|
|
483
|
-
RP: r"^(00|01|15|16|17|21)00[0-9A-F]{6}[0-9A-F]{8}(
|
|
484
|
-
W_: r"^(00|01|15|16|17|21)00[0-9A-F]{6}[0-9A-F]{8}(
|
|
483
|
+
RP: r"^(00|01|15|16|17|21)00[0-9A-F]{6}[0-9A-F]{8}([0-9A-F]{8}){3}[0-9A-F]{2,6}$", # 4 blocks + footer
|
|
484
|
+
W_: r"^(00|01|15|16|17|21)00[0-9A-F]{6}[0-9A-F]{8}([0-9A-F]{8}){3}[0-9A-F]{2,6}$", # Same as RP
|
|
485
485
|
},
|
|
486
486
|
Code._2420: { # unknown_2420, from OTB
|
|
487
487
|
SZ_NAME: "message_2420",
|
|
@@ -1267,6 +1267,14 @@ _22F1_SCHEMES: dict[str, dict[str, str]] = {
|
|
|
1267
1267
|
|
|
1268
1268
|
# unclear if true for only Orcon/*all* models
|
|
1269
1269
|
_2411_PARAMS_SCHEMA: dict[str, dict[str, Any]] = {
|
|
1270
|
+
"01": { # all?
|
|
1271
|
+
SZ_DESCRIPTION: "Support",
|
|
1272
|
+
SZ_MIN_VALUE: 0xFF, # None?
|
|
1273
|
+
SZ_MAX_VALUE: 0xFF,
|
|
1274
|
+
SZ_PRECISION: 1,
|
|
1275
|
+
SZ_DATA_TYPE: "00",
|
|
1276
|
+
SZ_DATA_UNIT: "",
|
|
1277
|
+
},
|
|
1270
1278
|
"31": { # slot 09 (FANs produced after 2021)
|
|
1271
1279
|
SZ_DESCRIPTION: "Time to change filter (days)",
|
|
1272
1280
|
SZ_MIN_VALUE: 0,
|
ramses_tx/schemas.py
CHANGED
|
@@ -338,7 +338,6 @@ SCH_GLOBAL_TRAITS_DICT, SCH_TRAITS = sch_global_traits_dict_factory()
|
|
|
338
338
|
#
|
|
339
339
|
# Device lists (Engine configuration)
|
|
340
340
|
|
|
341
|
-
|
|
342
341
|
DeviceIdT = NewType("DeviceIdT", str) # TypeVar('DeviceIdT', bound=str) #
|
|
343
342
|
DevIndexT = NewType("DevIndexT", str)
|
|
344
343
|
DeviceListT: TypeAlias = dict[DeviceIdT, DeviceTraitsT]
|
|
@@ -397,10 +396,14 @@ def select_device_filter_mode(
|
|
|
397
396
|
|
|
398
397
|
#
|
|
399
398
|
# 5/5: Gateway (engine) configuration
|
|
399
|
+
|
|
400
400
|
SZ_DISABLE_SENDING: Final = "disable_sending"
|
|
401
401
|
SZ_DISABLE_QOS: Final = "disable_qos"
|
|
402
402
|
SZ_ENFORCE_KNOWN_LIST: Final[str] = f"enforce_{SZ_KNOWN_LIST}"
|
|
403
403
|
SZ_EVOFW_FLAG: Final = "evofw_flag"
|
|
404
|
+
SZ_SQLITE_INDEX: Final = (
|
|
405
|
+
"sqlite_index" # temporary 0.52.x SQLite dev config option in ramses_cc
|
|
406
|
+
)
|
|
404
407
|
SZ_USE_REGEX: Final = "use_regex"
|
|
405
408
|
|
|
406
409
|
SCH_ENGINE_DICT = {
|
|
@@ -408,10 +411,13 @@ SCH_ENGINE_DICT = {
|
|
|
408
411
|
vol.Optional(SZ_DISABLE_QOS, default=None): vol.Any(
|
|
409
412
|
None, # None is selective QoS (e.g. QoS only for bindings, schedule, etc.)
|
|
410
413
|
bool,
|
|
411
|
-
), # in long term, this default to be True (
|
|
414
|
+
), # in the long term, this default to be True (not None)
|
|
412
415
|
vol.Optional(SZ_ENFORCE_KNOWN_LIST, default=False): bool,
|
|
413
416
|
vol.Optional(SZ_EVOFW_FLAG): vol.Any(None, str),
|
|
414
417
|
# vol.Optional(SZ_PORT_CONFIG): SCH_SERIAL_PORT_CONFIG,
|
|
418
|
+
vol.Optional(
|
|
419
|
+
SZ_SQLITE_INDEX, default=False
|
|
420
|
+
): bool, # temporary 0.52.x dev config option
|
|
415
421
|
vol.Optional(SZ_USE_REGEX): dict, # vol.All(ConvertNullToDict(), dict),
|
|
416
422
|
vol.Optional(SZ_COMMS_PARAMS): SCH_COMMS_PARAMS,
|
|
417
423
|
}
|
ramses_tx/version.py
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|