DLMS-SPODES 0.87.0__tar.gz → 0.87.2__tar.gz
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.
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/PKG-INFO +1 -1
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/pyproject.toml +1 -1
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/config_parser.py +2 -7
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/collection.py +6 -9
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/parameter.py +26 -24
- dlms_spodes-0.87.2/src/DLMS_SPODES/cosem_interface_classes/parameters.py +108 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/hdlc/frame.py +5 -9
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/integers.py +5 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES.egg-info/PKG-INFO +1 -1
- dlms_spodes-0.87.0/src/DLMS_SPODES/cosem_interface_classes/parameters.py +0 -41
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/.gitignore +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/README.md +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/config.toml +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/setup.cfg +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/EN/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/EN/actors.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/EN/relation_to_obis_names.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/RU/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/RU/actors.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/RU/relation_to_obis_names.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/configEN.ini +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/__class_init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/a_parameter.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/activity_calendar.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/arbitrator.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/abstract.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/authentication_mechanism_name.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/mechanism_id.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/method.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver1.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver2.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver3.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_sn/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/association_sn/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/attr_indexes.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/clock.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/cosem_interface_class.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/data.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/demand_register/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/demand_register/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/disconnect_control.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/extended_register.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/gprs_modem_setup.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver1.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver2.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/ver1.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/iec_local_port_setup.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/image_transfer/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/image_transfer/image_transfer_status.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/image_transfer/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/implementations/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/implementations/arbitrator.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/implementations/data.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/implementations/profile_generic.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/ipv4_setup.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/limiter.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/ln_pattern.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/modem_configuration/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/modem_configuration/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/modem_configuration/ver1.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/ntp_setup/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/ntp_setup/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/obis.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/overview.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/profile_generic/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/profile_generic/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/profile_generic/ver1.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/push_setup/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver1.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver2.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/register.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/register_activation/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/register_activation/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/register_monitor.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/reports.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/schedule.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/script_table.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/security_setup/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/security_setup/__pycache__/__init__.cpython-311.pyc +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/security_setup/ver0.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/security_setup/ver1.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/single_action_schedule.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/special_days_table.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/tcp_udp_setup.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_pdu.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/enums.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/exceptions.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/firmwares.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/hdlc/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/hdlc/sub_layer.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/literals.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/obis/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/obis/abstract_objects.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/obis/media_id.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/pardata.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/pdu_enums.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/py.typed +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/relation_to_OBIS.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/settings.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/choices.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/common_data_types.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/cosem_service_types.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/arrays.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/bitstrings.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/double_long_usingneds.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/enums.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/long_unsigneds.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/octet_string.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/structs.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/useful_types.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES.egg-info/SOURCES.txt +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES.egg-info/dependency_links.txt +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES.egg-info/requires.txt +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES.egg-info/top_level.txt +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/__init__.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/collection_init.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/config.toml +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/config.zip +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/init_collection.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test.typ +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test.xml +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_ActivityCalendar.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_AssociationLN.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_COSEMInterfaceClass.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_Data.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_DemandRegister.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_DisconnectControl.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_DisplayReadoutProfile.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_GSMDiagnostic.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_IC.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_ImageTransfer.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_KPZ.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_LNPatterns.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_Limiter.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_NTPSetup.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_Parameter.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_ProfileGeneric.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_Register.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_RegisterActivation.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_RegisterMonitor.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_ScalerUnitType.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_Schedule.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_Structures.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_a_param.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_benchmark_create_obj.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_cdt.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_collection.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_config.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_electric_obj.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_enums.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_hdlc.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_overview.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_pars.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_report.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_save_type.typ +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_settings.py +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_to_xml.xml +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_to_xml2.xml +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_to_xml3.xml +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_to_xml4.xml +0 -0
- {dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/test/test_userfulType.py +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
import os
|
|
3
2
|
import tomllib
|
|
4
3
|
from typing_extensions import deprecated
|
|
@@ -6,9 +5,6 @@ from typing_extensions import deprecated
|
|
|
6
5
|
|
|
7
6
|
print("Path: ", os.getcwd())
|
|
8
7
|
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
logger.level = logging.INFO
|
|
11
|
-
|
|
12
8
|
|
|
13
9
|
@deprecated("use settings.settings")
|
|
14
10
|
def get_values(*args: str) -> dict | None:
|
|
@@ -20,7 +16,7 @@ def get_values(*args: str) -> dict | None:
|
|
|
20
16
|
par = par[key]
|
|
21
17
|
continue
|
|
22
18
|
except KeyError as e:
|
|
23
|
-
|
|
19
|
+
print(f"error: {e.args[0]}")
|
|
24
20
|
return None
|
|
25
21
|
return par
|
|
26
22
|
|
|
@@ -28,10 +24,9 @@ def get_values(*args: str) -> dict | None:
|
|
|
28
24
|
if not os.path.isfile(path := ".//config.toml"):
|
|
29
25
|
path = F"{os.path.dirname(__file__)}{path}"
|
|
30
26
|
elif not os.path.isfile(path):
|
|
31
|
-
|
|
27
|
+
print("NOT FIND CONFIGURATION: <config.toml>")
|
|
32
28
|
with open(path, "rb") as f:
|
|
33
29
|
config = tomllib.load(f)
|
|
34
|
-
logger.info(F"Find configuration <config.toml> with path: {f}")
|
|
35
30
|
print(F"Find configuration <config.toml> with path: {f}")
|
|
36
31
|
|
|
37
32
|
_messages = get_values("DLMS", "messages")
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/collection.py
RENAMED
|
@@ -8,7 +8,6 @@ from dataclasses import dataclass
|
|
|
8
8
|
from itertools import count, chain
|
|
9
9
|
from functools import reduce, cached_property, lru_cache
|
|
10
10
|
from typing import TypeAlias, Iterator, Type, Self, Callable, Literal, Iterable, Optional, Hashable
|
|
11
|
-
import logging
|
|
12
11
|
from semver import Version as SemVer
|
|
13
12
|
from StructResult import result
|
|
14
13
|
from ..types import common_data_types as cdt, cosem_service_types as cst, useful_types as ut
|
|
@@ -275,8 +274,6 @@ _UNDER_OVER_LIMIT_MAGNITUDES = (34, 38)
|
|
|
275
274
|
_NOT_PROCESSING_OF_MEASUREMENT_VALUES = tuple(set(range(256)).difference((0, 93, 94, 96, 97, 98, 99))) # BlueBook DLMS UA 1000-1 Ed.14 7.5.2.1 Table 66
|
|
276
275
|
_RU_CHANGE_LIMIT_LEVEL = 134
|
|
277
276
|
|
|
278
|
-
logger = logging.getLogger(__name__)
|
|
279
|
-
logger.level = logging.INFO
|
|
280
277
|
|
|
281
278
|
|
|
282
279
|
@dataclass(frozen=True)
|
|
@@ -683,7 +680,7 @@ class Collection:
|
|
|
683
680
|
""" all DLMS objects container with obis key """
|
|
684
681
|
|
|
685
682
|
@property
|
|
686
|
-
def id(self) -> ID
|
|
683
|
+
def id(self) -> ID:
|
|
687
684
|
return self.__id
|
|
688
685
|
|
|
689
686
|
def set_id(self, value: ID):
|
|
@@ -740,7 +737,7 @@ class Collection:
|
|
|
740
737
|
value=value.encoding,
|
|
741
738
|
data_type=source.get_attr(i).__class__)
|
|
742
739
|
except exc.EmptyObj as e:
|
|
743
|
-
|
|
740
|
+
print(F"can't copy {target} attr={i}, skipped. {e}")
|
|
744
741
|
|
|
745
742
|
def copy(self) -> result.Simple["Collection"]:
|
|
746
743
|
"""copy collection with value by Association"""
|
|
@@ -898,7 +895,7 @@ class Collection:
|
|
|
898
895
|
func_map=func_maps[self.spec_map])(logical_name)
|
|
899
896
|
new_object.collection = self
|
|
900
897
|
self.__objs[o.OBIS(logical_name.contents)] = new_object
|
|
901
|
-
|
|
898
|
+
print(F'Create {new_object}')
|
|
902
899
|
return new_object
|
|
903
900
|
except ValueError as e:
|
|
904
901
|
raise ValueError(F"error getting DLMS object instance with {class_id=} {version=} {logical_name=}: {e}")
|
|
@@ -1186,7 +1183,7 @@ class Collection:
|
|
|
1186
1183
|
obj=self.get_object(obj_def.logical_name),
|
|
1187
1184
|
par=bytes([int(obj_def.attribute_index)]))
|
|
1188
1185
|
except ic.EmptyAttribute as e:
|
|
1189
|
-
|
|
1186
|
+
print(F"Can't fill Scaler and Unit for {get_name(obj_def.logical_name)}: {e}")
|
|
1190
1187
|
finally:
|
|
1191
1188
|
res.append(s_u)
|
|
1192
1189
|
return res
|
|
@@ -1495,7 +1492,7 @@ class Collection:
|
|
|
1495
1492
|
continue
|
|
1496
1493
|
indexes.append(-i)
|
|
1497
1494
|
except exc.ITEApplication as e:
|
|
1498
|
-
|
|
1495
|
+
print(F"skip {i}... methods for {obj}: {e}")
|
|
1499
1496
|
break
|
|
1500
1497
|
if len(indexes) != 0:
|
|
1501
1498
|
objects[obj] = indexes
|
|
@@ -2090,7 +2087,7 @@ class Template:
|
|
|
2090
2087
|
obj_col = col.get_object(ln)
|
|
2091
2088
|
except exc.NoObject as e:
|
|
2092
2089
|
ret.append(e)
|
|
2093
|
-
|
|
2090
|
+
print(F"<add_collection> skip obj{self}: {e}")
|
|
2094
2091
|
continue
|
|
2095
2092
|
for i in indexes:
|
|
2096
2093
|
if (attr := obj.get_attr(i)) is not None:
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/parameter.py
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from typing_extensions import deprecated
|
|
2
|
-
from dataclasses import dataclass
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
3
|
import numpy as np
|
|
4
4
|
from struct import Struct, pack, unpack_from
|
|
5
|
-
from typing import Optional, cast, Iterator
|
|
5
|
+
from typing import Optional, cast, Iterator, Self
|
|
6
6
|
import re
|
|
7
7
|
from functools import cached_property
|
|
8
8
|
from .. import exceptions as exc
|
|
@@ -44,7 +44,7 @@ class Parameter:
|
|
|
44
44
|
return self._value
|
|
45
45
|
|
|
46
46
|
@classmethod
|
|
47
|
-
def parse(cls, value: str) ->
|
|
47
|
+
def parse(cls, value: str) -> Self:
|
|
48
48
|
"""create from string. Only LN, attr/meth type ddd.ddd.ddd.ddd.ddd.ddd:aaa, ex.: 0.0.1.0.0.255 """
|
|
49
49
|
if (res := _pattern.fullmatch(value)) is None:
|
|
50
50
|
raise ValueError(F"in {cls.__name__}.parse got wrong :{value:}")
|
|
@@ -64,7 +64,7 @@ class Parameter:
|
|
|
64
64
|
def logical_name(self) -> "Parameter":
|
|
65
65
|
return self.get_attr(2)
|
|
66
66
|
|
|
67
|
-
def __eq__(self, other) -> bool:
|
|
67
|
+
def __eq__(self, other: object) -> bool:
|
|
68
68
|
if isinstance(other, Parameter):
|
|
69
69
|
return cast("bool", self._value==other._value)
|
|
70
70
|
return NotImplemented
|
|
@@ -115,12 +115,12 @@ class Parameter:
|
|
|
115
115
|
"""attribute or method index"""
|
|
116
116
|
return self._value[7]
|
|
117
117
|
|
|
118
|
-
def get_attr(self, i: int) ->
|
|
118
|
+
def get_attr(self, i: int) -> Self:
|
|
119
119
|
"""get attribute"""
|
|
120
120
|
val = Index.pack(0, i)
|
|
121
121
|
return self.__class__(self._value[:6] + val)
|
|
122
122
|
|
|
123
|
-
def get_meth(self, i: int) ->
|
|
123
|
+
def get_meth(self, i: int) -> Self:
|
|
124
124
|
"""get method"""
|
|
125
125
|
val = Index.pack(1, i)
|
|
126
126
|
return self.__class__(self._value[:6] + val)
|
|
@@ -130,9 +130,9 @@ class Parameter:
|
|
|
130
130
|
if len(self._value) == 6:
|
|
131
131
|
tmp = self._value + val
|
|
132
132
|
else:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
tmp = bytes(
|
|
133
|
+
tmp_ = bytearray(self._value)
|
|
134
|
+
tmp_[6:8] = val
|
|
135
|
+
tmp = bytes(tmp_)
|
|
136
136
|
return self.__class__(tmp)
|
|
137
137
|
|
|
138
138
|
def append_validate(self) -> None:
|
|
@@ -180,10 +180,12 @@ class Parameter:
|
|
|
180
180
|
def piece(self) -> Optional[int]:
|
|
181
181
|
if self.has_piece():
|
|
182
182
|
return self._value[-1]
|
|
183
|
+
return None
|
|
183
184
|
|
|
184
185
|
def clear_piece(self) -> "Parameter":
|
|
185
186
|
if self.has_piece():
|
|
186
187
|
return self.__class__(self._value[:-1])
|
|
188
|
+
return self
|
|
187
189
|
|
|
188
190
|
def elements(self, start: int = 0) -> Iterator[int]:
|
|
189
191
|
"""return: index elements nested in attribute, started with"""
|
|
@@ -216,12 +218,12 @@ class Parameter:
|
|
|
216
218
|
return max(0, (len(self._value) - 8) // 2)
|
|
217
219
|
|
|
218
220
|
def set(self,
|
|
219
|
-
a: int = None,
|
|
220
|
-
b: int = None,
|
|
221
|
-
c: int = None,
|
|
222
|
-
d: int = None,
|
|
223
|
-
e: int = None,
|
|
224
|
-
f: int = None
|
|
221
|
+
a: Optional[int] = None,
|
|
222
|
+
b: Optional[int] = None,
|
|
223
|
+
c: Optional[int] = None,
|
|
224
|
+
d: Optional[int] = None,
|
|
225
|
+
e: Optional[int] = None,
|
|
226
|
+
f: Optional[int] = None
|
|
225
227
|
) -> "Parameter":
|
|
226
228
|
val = bytearray(self._value)
|
|
227
229
|
if a is not None:
|
|
@@ -238,12 +240,12 @@ class Parameter:
|
|
|
238
240
|
val[5] = f
|
|
239
241
|
return self.__class__(bytes(val))
|
|
240
242
|
|
|
241
|
-
def __contains__(self, item: "Parameter"):
|
|
243
|
+
def __contains__(self, item: "Parameter") -> bool:
|
|
242
244
|
return item._value in self._value
|
|
243
245
|
|
|
244
|
-
def __getitem__(self, item) -> Optional[int]:
|
|
246
|
+
def __getitem__(self, item: int) -> Optional[int]:
|
|
245
247
|
if self.n_elements > 0:
|
|
246
|
-
return unpack_from(">H", self._value, item * 2 + 8)[0]
|
|
248
|
+
return cast(int, unpack_from(">H", self._value, item * 2 + 8)[0])
|
|
247
249
|
else:
|
|
248
250
|
return None
|
|
249
251
|
|
|
@@ -296,12 +298,12 @@ class ParPattern:
|
|
|
296
298
|
positions: tuple[int, ...]
|
|
297
299
|
"7 elements , -1 is SKIP, last element is attribute index if positive and method index else negative"
|
|
298
300
|
|
|
299
|
-
def __post_init__(self):
|
|
301
|
+
def __post_init__(self) -> None:
|
|
300
302
|
if 6 > len(self.positions) > 7:
|
|
301
303
|
raise ValueError(f"positions must have exactly 6 elements, got {len(self.positions)}")
|
|
302
304
|
|
|
303
305
|
@classmethod
|
|
304
|
-
def parse(cls, pattern: str) ->
|
|
306
|
+
def parse(cls, pattern: str) -> "ParPattern":
|
|
305
307
|
"""Парсинг строк вида:
|
|
306
308
|
- "a.0.(1,2,3).(0-64).0.f" (6 элементов)
|
|
307
309
|
- "a.0.1.0.0.f:2" (6 элементов + индекс через :)
|
|
@@ -379,7 +381,7 @@ class ParPattern:
|
|
|
379
381
|
@staticmethod
|
|
380
382
|
def _parse_group(group_str: str) -> set[int]:
|
|
381
383
|
"""Парсинг групп вида '1,2,3' или '10-20'"""
|
|
382
|
-
elements = set()
|
|
384
|
+
elements: set[int] = set()
|
|
383
385
|
for item in group_str.split(','):
|
|
384
386
|
item = item.strip()
|
|
385
387
|
if '-' in item:
|
|
@@ -392,7 +394,7 @@ class ParPattern:
|
|
|
392
394
|
# @functools.cache
|
|
393
395
|
def __hash__(self) -> int:
|
|
394
396
|
print("hash")
|
|
395
|
-
hash_parts = []
|
|
397
|
+
hash_parts: list[Optional[bytes]] = []
|
|
396
398
|
for pos in self.positions:
|
|
397
399
|
if pos == -1:
|
|
398
400
|
hash_parts.append(None)
|
|
@@ -475,9 +477,9 @@ class ParPattern:
|
|
|
475
477
|
class PatternMatcher:
|
|
476
478
|
"""Класс для быстрого сопоставления Parameter с ParPattern"""
|
|
477
479
|
patterns: dict['ParPattern', str]
|
|
478
|
-
_masks: list[tuple[tuple[np.ndarray, ...], str]] =
|
|
480
|
+
_masks: list[tuple[tuple[np.ndarray, ...], str]] = field(init=False)
|
|
479
481
|
|
|
480
|
-
def __post_init__(self):
|
|
482
|
+
def __post_init__(self) -> None:
|
|
481
483
|
# Предварительная обработка шаблонов
|
|
482
484
|
masks = []
|
|
483
485
|
for pattern, value in self.patterns.items():
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from functools import cached_property
|
|
3
|
+
from typing import Self
|
|
4
|
+
from .parameter import Parameter
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass(frozen=True)
|
|
8
|
+
class Data(Parameter):
|
|
9
|
+
@property
|
|
10
|
+
def value(self) -> Parameter:
|
|
11
|
+
return self.get_attr(2)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ActiveFirmwareIdentifier(Data):
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
def from_b(cls, b: int) -> "ActiveFirmwareIdentifier":
|
|
18
|
+
return cls.parse(f"0.{b}.0.2.0.255")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
ACTIVE_FIRMWARE_IDENTIFIER_0 = ActiveFirmwareIdentifier.from_b(0)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass(frozen=True)
|
|
25
|
+
class Register(Data):
|
|
26
|
+
@property
|
|
27
|
+
def scaler_unit(self) -> Parameter:
|
|
28
|
+
return self.get_attr(3)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@dataclass(frozen=True)
|
|
32
|
+
class DisconnectControl(Parameter):
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def from_b(cls, b: int) -> "DisconnectControl":
|
|
36
|
+
return cls.parse(f"0.{b}.96.3.10.255")
|
|
37
|
+
|
|
38
|
+
@property
|
|
39
|
+
def output_state(self) -> "DisconnectControl":
|
|
40
|
+
return self.get_attr(2)
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def control_state(self) -> "DisconnectControl":
|
|
44
|
+
return self.get_attr(3)
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def control_mode(self) -> "DisconnectControl":
|
|
48
|
+
return self.get_attr(4)
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def remote_disconnect(self) -> "DisconnectControl":
|
|
52
|
+
return self.get_meth(1)
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def remote_reconnect(self) -> "DisconnectControl":
|
|
56
|
+
return self.get_meth(2)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
DISCONNECT_CONTROL_0 = DisconnectControl.from_b(0)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@dataclass(frozen=True)
|
|
63
|
+
class ImageTransfer(Parameter):
|
|
64
|
+
@classmethod
|
|
65
|
+
def from_e(cls, e: int = 0) -> "ImageTransfer":
|
|
66
|
+
return cls.parse(f"0.0.44.0.{e}.255")
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def image_block_size(self) -> "ImageTransfer":
|
|
70
|
+
return self.get_attr(2)
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def image_transferred_blocks_status(self) -> "ImageTransfer":
|
|
74
|
+
return self.get_attr(3)
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def image_first_not_transferred_block_number(self) -> "ImageTransfer":
|
|
78
|
+
return self.get_attr(4)
|
|
79
|
+
|
|
80
|
+
@property
|
|
81
|
+
def image_transfer_enabled(self) -> "ImageTransfer":
|
|
82
|
+
return self.get_attr(5)
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def image_transfer_status(self) -> "ImageTransfer":
|
|
86
|
+
return self.get_attr(6)
|
|
87
|
+
|
|
88
|
+
@property
|
|
89
|
+
def image_to_activate_info(self) -> "ImageTransfer":
|
|
90
|
+
return self.get_attr(7)
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def image_transfer_initiate(self) -> "ImageTransfer":
|
|
94
|
+
return self.get_meth(1)
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
def image_block_transfer(self) -> "ImageTransfer":
|
|
98
|
+
return self.get_meth(2)
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def image_verify(self) -> "ImageTransfer":
|
|
102
|
+
return self.get_meth(3)
|
|
103
|
+
|
|
104
|
+
@property
|
|
105
|
+
def image_activate(self) -> "ImageTransfer":
|
|
106
|
+
return self.get_meth(4)
|
|
107
|
+
|
|
108
|
+
|
|
@@ -4,10 +4,6 @@ from struct import unpack, pack
|
|
|
4
4
|
from functools import cached_property
|
|
5
5
|
from typing import Deque
|
|
6
6
|
from enum import IntFlag
|
|
7
|
-
import logging
|
|
8
|
-
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
logger.level = logging.INFO
|
|
11
7
|
|
|
12
8
|
_FLAG: int = 0x7e
|
|
13
9
|
|
|
@@ -750,13 +746,13 @@ class Frame:
|
|
|
750
746
|
try:
|
|
751
747
|
return cls(value)
|
|
752
748
|
except ValueError as e:
|
|
753
|
-
|
|
749
|
+
print(F'Wrong Frame: {e.args[0]}')
|
|
754
750
|
return None
|
|
755
751
|
except NotEnoughDataError as e:
|
|
756
|
-
|
|
752
|
+
print(F'Frame Error: {e.args[0]}')
|
|
757
753
|
return None
|
|
758
754
|
except FormatDataError as e:
|
|
759
|
-
|
|
755
|
+
print(F'Frame Error: {e.args[0]}')
|
|
760
756
|
value.pop(0)
|
|
761
757
|
return None
|
|
762
758
|
|
|
@@ -819,7 +815,7 @@ class Frame:
|
|
|
819
815
|
info: bytearray = bytearray(frame.info)
|
|
820
816
|
break
|
|
821
817
|
else:
|
|
822
|
-
|
|
818
|
+
print(F'Frame {frame} not handled and deleted')
|
|
823
819
|
else:
|
|
824
820
|
raise ValueError('Not found information Frame')
|
|
825
821
|
while frame.is_segmentation:
|
|
@@ -831,7 +827,7 @@ class Frame:
|
|
|
831
827
|
info.extend(next_frame.info)
|
|
832
828
|
frame = next_frame
|
|
833
829
|
else:
|
|
834
|
-
|
|
830
|
+
print(F'Frame {frame} not handled and deleted')
|
|
835
831
|
return info
|
|
836
832
|
|
|
837
833
|
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"""all realisation cdt.Integer subclasses"""
|
|
2
2
|
from ...types import common_data_types as cdt
|
|
3
|
+
from typing_extensions import deprecated
|
|
3
4
|
|
|
4
5
|
|
|
6
|
+
@deprecated("use INTEGER_0")
|
|
5
7
|
class Only0(cdt.Integer, value=0):
|
|
6
8
|
""" Limited Integer only 0 """
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
INTEGER_0 = cdt.Integer(0)
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
from functools import cached_property
|
|
3
|
-
from typing import Self
|
|
4
|
-
from .parameter import Parameter
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@dataclass(frozen=True)
|
|
8
|
-
class Data(Parameter):
|
|
9
|
-
@property
|
|
10
|
-
def value(self) -> Parameter:
|
|
11
|
-
return self.get_attr(2)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@dataclass(frozen=True)
|
|
15
|
-
class Register(Data):
|
|
16
|
-
@property
|
|
17
|
-
def scaler_unit(self) -> Parameter:
|
|
18
|
-
return self.get_attr(3)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@dataclass(frozen=True)
|
|
22
|
-
class DisconnectControl(Parameter):
|
|
23
|
-
|
|
24
|
-
@classmethod
|
|
25
|
-
def from_b(cls, b: int) -> "DisconnectControl":
|
|
26
|
-
return cls.parse(f"0.{b}.96.3.10.255")
|
|
27
|
-
|
|
28
|
-
@property
|
|
29
|
-
def output_state(self) -> "DisconnectControl":
|
|
30
|
-
return self.get_attr(2)
|
|
31
|
-
|
|
32
|
-
@property
|
|
33
|
-
def control_state(self) -> "DisconnectControl":
|
|
34
|
-
return self.get_attr(3)
|
|
35
|
-
|
|
36
|
-
@property
|
|
37
|
-
def control_mode(self) -> "DisconnectControl":
|
|
38
|
-
return self.get_attr(4)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
DISCONNECT_CONTROL_0 = DisconnectControl.from_b(0)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/EN/relation_to_obis_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/Values/RU/relation_to_obis_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/__class_init__.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/__init__.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/a_parameter.py
RENAMED
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/arbitrator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/attr_indexes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/ipv4_setup.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/limiter.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/ln_pattern.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/ntp_setup/ver0.py
RENAMED
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/overview.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver0.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver1.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver2.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/register.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/reports.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/schedule.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/script_table.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/cosem_interface_classes/tcp_udp_setup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/bitstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/long_unsigneds.py
RENAMED
|
File without changes
|
{dlms_spodes-0.87.0 → dlms_spodes-0.87.2}/src/DLMS_SPODES/types/implementations/octet_string.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|