ramses-rf 0.51.9__py3-none-any.whl → 0.52.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.
- ramses_cli/client.py +21 -9
- ramses_cli/discovery.py +1 -1
- ramses_rf/database.py +109 -54
- 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 +477 -116
- ramses_rf/gateway.py +16 -6
- ramses_rf/version.py +1 -1
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.0.dist-info}/METADATA +1 -1
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.0.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.0.dist-info}/WHEEL +0 -0
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.0.dist-info}/entry_points.txt +0 -0
- {ramses_rf-0.51.9.dist-info → ramses_rf-0.52.0.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,11 @@ 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
|
+
self.create_sqlite_message_index() # if activated in ramses_cc > Engine
|
|
179
|
+
|
|
180
|
+
# temporarily turn on discovery, remember original state
|
|
176
181
|
self.config.disable_discovery, disable_discovery = (
|
|
177
182
|
True,
|
|
178
183
|
self.config.disable_discovery,
|
|
@@ -184,6 +189,7 @@ class Gateway(Engine):
|
|
|
184
189
|
if cached_packets:
|
|
185
190
|
await self._restore_cached_packets(cached_packets)
|
|
186
191
|
|
|
192
|
+
# reset discovery to original state
|
|
187
193
|
self.config.disable_discovery = disable_discovery
|
|
188
194
|
|
|
189
195
|
if (
|
|
@@ -193,6 +199,9 @@ class Gateway(Engine):
|
|
|
193
199
|
):
|
|
194
200
|
initiate_discovery(self.devices, self.systems)
|
|
195
201
|
|
|
202
|
+
def create_sqlite_message_index(self) -> None:
|
|
203
|
+
self.msg_db = MessageIndex() # start the index
|
|
204
|
+
|
|
196
205
|
async def stop(self) -> None:
|
|
197
206
|
"""Stop the Gateway and tidy up."""
|
|
198
207
|
|
|
@@ -248,12 +257,13 @@ class Gateway(Engine):
|
|
|
248
257
|
# return True
|
|
249
258
|
return include_expired or not msg._expired
|
|
250
259
|
|
|
251
|
-
msgs = [m for device in self.devices for m in device.
|
|
260
|
+
msgs = [m for device in self.devices for m in device._msg_list]
|
|
252
261
|
|
|
253
262
|
for system in self.systems:
|
|
254
263
|
msgs.extend(list(system._msgs.values()))
|
|
255
264
|
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
|
|
265
|
+
# msgs.extend([m for z in system.dhw for m in z._msgs.values()]) # TODO: DHW
|
|
266
|
+
# Related to/Fixes ramses_cc Issue 249 non-existing via-device _HW ?
|
|
257
267
|
|
|
258
268
|
if self.msg_db:
|
|
259
269
|
pkts = {
|
|
@@ -261,8 +271,8 @@ class Gateway(Engine):
|
|
|
261
271
|
for msg in self.msg_db.all(include_expired=True)
|
|
262
272
|
if wanted_msg(msg, include_expired=include_expired)
|
|
263
273
|
}
|
|
264
|
-
|
|
265
|
-
|
|
274
|
+
else: # deprecated, to be removed in Q1 2026
|
|
275
|
+
# _LOGGER.warning("Missing MessageIndex")
|
|
266
276
|
pkts = { # BUG: assumes pkts have unique dtms: may be untrue for contrived logs
|
|
267
277
|
f"{repr(msg._pkt)[:26]}": f"{repr(msg._pkt)[27:]}"
|
|
268
278
|
for msg in msgs
|
|
@@ -359,7 +369,7 @@ class Gateway(Engine):
|
|
|
359
369
|
"""
|
|
360
370
|
|
|
361
371
|
def check_filter_lists(dev_id: DeviceIdT) -> None: # may: LookupError
|
|
362
|
-
"""Raise
|
|
372
|
+
"""Raise a LookupError if a device_id is filtered out by a list."""
|
|
363
373
|
|
|
364
374
|
if dev_id in self._unwanted: # TODO: shouldn't invalidate a msg
|
|
365
375
|
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.0
|
|
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=21M1XV7qTQaydqInctf7vX-PAVdrM4xmJoaXX8oB87s,20748
|
|
11
|
+
ramses_rf/dispatcher.py,sha256=UqilAoL6T85ZFPkcpvcfuidNbusONngQoCVWHV6vOzk,11277
|
|
12
|
+
ramses_rf/entity_base.py,sha256=eLGhJTv8FDHjXmsywUhn1imEhdo0bFgAHP_KLNl_HiE,56004
|
|
13
13
|
ramses_rf/exceptions.py,sha256=mt_T7irqHSDKir6KLaf6oDglUIdrw0S40JbOrWJk5jc,3657
|
|
14
|
-
ramses_rf/gateway.py,sha256=
|
|
14
|
+
ramses_rf/gateway.py,sha256=1MRmqpDlhE1SFm25dSvnSTX_dUoi9Pz--qycJIJyFAU,21151
|
|
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=ggzTkhC_7XHqI8ONDXEhJk9tXE1LLvMfYJyCrJzF8KI,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=of8wWHhJOX0KcvVqqlyJLArKrv1ST7rlbL7kLV9v_0Q,45603
|
|
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=ztPg3fMgn-fM15dLxrw5PG34SCxD7eR3pdz1xwvz7Ag,11345
|
|
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=8xCh-Ia7WXZkWWEs7lVuk13x3NbC3HoNuHvR_G1KCB4,123
|
|
51
|
+
ramses_rf-0.52.0.dist-info/METADATA,sha256=ADZlDrTcgK0-xOW4D1A-2CRfakYnaGOOClGRshQYBwg,4000
|
|
52
|
+
ramses_rf-0.52.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
53
|
+
ramses_rf-0.52.0.dist-info/entry_points.txt,sha256=NnyK29baOCNg8DinPYiZ368h7MTH7bgTW26z2A1NeIE,50
|
|
54
|
+
ramses_rf-0.52.0.dist-info/licenses/LICENSE,sha256=-Kc35W7l1UkdiQ4314_yVWv7vDDrg7IrJfMLUiq6Nfs,1074
|
|
55
|
+
ramses_rf-0.52.0.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)
|
|
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
|