zepben.ewb 1.0.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.
- zepben/ewb/__init__.py +601 -0
- zepben/ewb/auth/__init__.py +10 -0
- zepben/ewb/auth/client/__init__.py +5 -0
- zepben/ewb/auth/client/zepben_token_fetcher.py +273 -0
- zepben/ewb/auth/common/__init__.py +5 -0
- zepben/ewb/auth/common/auth_exception.py +16 -0
- zepben/ewb/auth/common/auth_method.py +28 -0
- zepben/ewb/auth/common/auth_provider_config.py +96 -0
- zepben/ewb/database/__init__.py +4 -0
- zepben/ewb/database/paths/__init__.py +4 -0
- zepben/ewb/database/paths/database_type.py +34 -0
- zepben/ewb/database/paths/ewb_data_file_paths.py +237 -0
- zepben/ewb/database/sql/__init__.py +4 -0
- zepben/ewb/database/sql/column.py +37 -0
- zepben/ewb/database/sql/sql_table.py +142 -0
- zepben/ewb/database/sqlite/__init__.py +4 -0
- zepben/ewb/database/sqlite/common/__init__.py +4 -0
- zepben/ewb/database/sqlite/common/base_cim_reader.py +212 -0
- zepben/ewb/database/sqlite/common/base_cim_writer.py +159 -0
- zepben/ewb/database/sqlite/common/base_collection_reader.py +96 -0
- zepben/ewb/database/sqlite/common/base_collection_writer.py +73 -0
- zepben/ewb/database/sqlite/common/base_database_reader.py +127 -0
- zepben/ewb/database/sqlite/common/base_database_tables.py +137 -0
- zepben/ewb/database/sqlite/common/base_database_writer.py +195 -0
- zepben/ewb/database/sqlite/common/base_entry_writer.py +34 -0
- zepben/ewb/database/sqlite/common/base_service_reader.py +50 -0
- zepben/ewb/database/sqlite/common/base_service_writer.py +104 -0
- zepben/ewb/database/sqlite/common/metadata_collection_reader.py +39 -0
- zepben/ewb/database/sqlite/common/metadata_collection_writer.py +38 -0
- zepben/ewb/database/sqlite/common/metadata_entry_reader.py +45 -0
- zepben/ewb/database/sqlite/common/metadata_entry_writer.py +41 -0
- zepben/ewb/database/sqlite/common/reader_exceptions.py +30 -0
- zepben/ewb/database/sqlite/customer/__init__.py +4 -0
- zepben/ewb/database/sqlite/customer/customer_cim_reader.py +169 -0
- zepben/ewb/database/sqlite/customer/customer_cim_writer.py +137 -0
- zepben/ewb/database/sqlite/customer/customer_database_reader.py +44 -0
- zepben/ewb/database/sqlite/customer/customer_database_tables.py +37 -0
- zepben/ewb/database/sqlite/customer/customer_database_writer.py +45 -0
- zepben/ewb/database/sqlite/customer/customer_service_reader.py +57 -0
- zepben/ewb/database/sqlite/customer/customer_service_writer.py +47 -0
- zepben/ewb/database/sqlite/diagram/__init__.py +4 -0
- zepben/ewb/database/sqlite/diagram/diagram_cim_reader.py +105 -0
- zepben/ewb/database/sqlite/diagram/diagram_cim_writer.py +81 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_reader.py +45 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_tables.py +29 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_writer.py +44 -0
- zepben/ewb/database/sqlite/diagram/diagram_service_reader.py +49 -0
- zepben/ewb/database/sqlite/diagram/diagram_service_writer.py +41 -0
- zepben/ewb/database/sqlite/extensions/__init__.py +4 -0
- zepben/ewb/database/sqlite/extensions/prepared_statement.py +112 -0
- zepben/ewb/database/sqlite/extensions/result_set.py +153 -0
- zepben/ewb/database/sqlite/network/__init__.py +4 -0
- zepben/ewb/database/sqlite/network/network_cim_reader.py +3167 -0
- zepben/ewb/database/sqlite/network/network_cim_writer.py +2561 -0
- zepben/ewb/database/sqlite/network/network_database_reader.py +175 -0
- zepben/ewb/database/sqlite/network/network_database_tables.py +242 -0
- zepben/ewb/database/sqlite/network/network_database_writer.py +43 -0
- zepben/ewb/database/sqlite/network/network_service_reader.py +265 -0
- zepben/ewb/database/sqlite/network/network_service_writer.py +209 -0
- zepben/ewb/database/sqlite/tables/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/associations/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/associations/loop_substation_relationship.py +17 -0
- zepben/ewb/database/sqlite/tables/associations/table_asset_organisation_roles_assets.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_assets_power_system_resources.py +41 -0
- zepben/ewb/database/sqlite/tables/associations/table_battery_units_battery_controls.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_circuits_substations.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_circuits_terminals.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_customer_agreements_pricing_structures.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_end_devices_end_device_functions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_equipment_containers.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_operational_restrictions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_usage_points.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_loops_substations.py +43 -0
- zepben/ewb/database/sqlite/tables/associations/table_pricing_structures_tariffs.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_protected_switches.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_sensors.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_schemes_protection_relay_functions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_synchronous_machines_reactive_capability_curves.py +39 -0
- zepben/ewb/database/sqlite/tables/associations/table_usage_points_end_devices.py +40 -0
- zepben/ewb/database/sqlite/tables/exceptions.py +10 -0
- zepben/ewb/database/sqlite/tables/extensions/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_reclose_delays.py +38 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_relay_info.py +21 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/table_pan_demand_response_functions.py +21 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/table_sites.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_loops.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_lv_feeders.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/table_ev_charging_units.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_distance_relays.py +28 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_thresholds.py +36 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_time_limits.py +34 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_functions.py +24 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_schemes.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_systems.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_voltage_relays.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_battery_controls.py +23 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_power_transformer_end_ratings.py +34 -0
- zepben/ewb/database/sqlite/tables/iec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_cable_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_no_load_tests.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_open_circuit_tests.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_overhead_wire_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_power_transformer_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_short_circuit_tests.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_shunt_compensator_info.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_switch_info.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_end_info.py +46 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_tank_info.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_test.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_wire_info.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_functions.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_info.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_organisation_roles.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_owners.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_assets.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_streetlights.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_structures.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_agreements.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_documents.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_address_field.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_addresses.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_locations.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_organisation_roles.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_organisations.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_position_points.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_street_addresses.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_town_details.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_customer_agreements.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_customers.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_pricing_structures.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_tariffs.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_current_transformer_info.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_potential_transformer_info.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/table_poles.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_device_functions.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_devices.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_meters.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_usage_points.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/operations/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/operations/table_operational_restrictions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_auxiliary_equipment.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_current_transformers.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_fault_indicators.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_potential_transformers.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_sensors.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_ac_dc_terminals.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_base_voltages.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_conducting_equipment.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_node_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_nodes.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curve_data.py +46 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curves.py +17 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_feeders.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_geographical_regions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_identified_objects.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_name_types.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_names.py +36 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_power_system_resources.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_sub_geographical_regions.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_substations.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_terminals.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_object_points.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_objects.py +31 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagrams.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_branches.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_equipment.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_battery_units.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_photo_voltaic_units.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_units.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_wind_units.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_accumulators.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_analogs.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_controls.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_discretes.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_io_points.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_measurements.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/protection/table_current_relays.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_controls.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_points.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_sources.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ac_line_segments.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_breakers.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_busbar_sections.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_clamps.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_conductors.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_connectors.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_cuts.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_disconnectors.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_earth_fault_compensators.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_connections.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumer_phases.py +37 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumers.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_source_phases.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_sources.py +44 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_fuses.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ground_disconnectors.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounding_impedances.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounds.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_jumpers.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_junctions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_linear_shunt_compensators.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_lines.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_load_break_switches.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_impedances.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_line_parameters.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_phase_impedances.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_sequence_impedances.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_petersen_coils.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_phase_impedance_data.py +52 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connection_phases.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connections.py +50 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformer_ends.py +43 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformers.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_protected_switches.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ratio_tap_changers.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reactive_capability_curves.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reclosers.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_cond_eq.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_controls.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_rotating_machines.py +36 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_series_compensators.py +25 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_shunt_compensators.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_static_var_compensator.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_switches.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_synchronous_machines.py +95 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changer_controls.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changers.py +25 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_ends.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_star_impedances.py +32 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/table_circuits.py +27 -0
- zepben/ewb/database/sqlite/tables/sqlite_table.py +45 -0
- zepben/ewb/database/sqlite/tables/table_metadata_data_sources.py +21 -0
- zepben/ewb/database/sqlite/tables/table_version.py +39 -0
- zepben/ewb/dataclassy/__init__.py +15 -0
- zepben/ewb/dataclassy/dataclass.py +192 -0
- zepben/ewb/dataclassy/decorator.py +35 -0
- zepben/ewb/dataclassy/functions.py +80 -0
- zepben/ewb/examples/__init__.py +6 -0
- zepben/ewb/examples/simple_test_network.py +158 -0
- zepben/ewb/exceptions.py +52 -0
- zepben/ewb/model/__init__.py +4 -0
- zepben/ewb/model/busbranch/__init__.py +4 -0
- zepben/ewb/model/busbranch/bus_branch.py +1051 -0
- zepben/ewb/model/cim/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/assetinfo/relay_info.py +128 -0
- zepben/ewb/model/cim/extensions/iec61968/metering/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/metering/pan_demand_reponse_function.py +112 -0
- zepben/ewb/model/cim/extensions/iec61970/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/core/site.py +37 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/loop.py +207 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/lv_feeder.py +258 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/production/ev_charging_unit.py +18 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/distance_relay.py +69 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/power_direction_kind.py +36 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_kind.py +112 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_function.py +448 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_scheme.py +97 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_system.py +97 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/relay_setting.py +35 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/voltage_relay.py +20 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control.py +36 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control_mode.py +83 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_cooling_type.py +57 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_end_rated_s.py +26 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/vector_group.py +293 -0
- zepben/ewb/model/cim/extensions/zbex.py +17 -0
- zepben/ewb/model/cim/iec61968/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assetinfo/cable_info.py +15 -0
- zepben/ewb/model/cim/iec61968/assetinfo/no_load_test.py +42 -0
- zepben/ewb/model/cim/iec61968/assetinfo/open_circuit_test.py +42 -0
- zepben/ewb/model/cim/iec61968/assetinfo/overhead_wire_info.py +15 -0
- zepben/ewb/model/cim/iec61968/assetinfo/power_transformer_info.py +103 -0
- zepben/ewb/model/cim/iec61968/assetinfo/short_circuit_test.py +67 -0
- zepben/ewb/model/cim/iec61968/assetinfo/shunt_compensator_info.py +26 -0
- zepben/ewb/model/cim/iec61968/assetinfo/switch_info.py +17 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_end_info.py +137 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_tank_info.py +108 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_test.py +26 -0
- zepben/ewb/model/cim/iec61968/assetinfo/wire_info.py +24 -0
- zepben/ewb/model/cim/iec61968/assetinfo/wire_material_kind.py +57 -0
- zepben/ewb/model/cim/iec61968/assets/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assets/asset.py +154 -0
- zepben/ewb/model/cim/iec61968/assets/asset_container.py +16 -0
- zepben/ewb/model/cim/iec61968/assets/asset_function.py +15 -0
- zepben/ewb/model/cim/iec61968/assets/asset_info.py +19 -0
- zepben/ewb/model/cim/iec61968/assets/asset_organisation_role.py +13 -0
- zepben/ewb/model/cim/iec61968/assets/asset_owner.py +13 -0
- zepben/ewb/model/cim/iec61968/assets/streetlight.py +29 -0
- zepben/ewb/model/cim/iec61968/assets/structure.py +16 -0
- zepben/ewb/model/cim/iec61968/common/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/common/agreement.py +16 -0
- zepben/ewb/model/cim/iec61968/common/document.py +36 -0
- zepben/ewb/model/cim/iec61968/common/location.py +129 -0
- zepben/ewb/model/cim/iec61968/common/organisation.py +15 -0
- zepben/ewb/model/cim/iec61968/common/organisation_role.py +22 -0
- zepben/ewb/model/cim/iec61968/common/position_point.py +44 -0
- zepben/ewb/model/cim/iec61968/common/street_address.py +28 -0
- zepben/ewb/model/cim/iec61968/common/street_detail.py +46 -0
- zepben/ewb/model/cim/iec61968/common/town_detail.py +25 -0
- zepben/ewb/model/cim/iec61968/customers/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/customers/customer.py +93 -0
- zepben/ewb/model/cim/iec61968/customers/customer_agreement.py +107 -0
- zepben/ewb/model/cim/iec61968/customers/customer_kind.py +69 -0
- zepben/ewb/model/cim/iec61968/customers/pricing_structure.py +88 -0
- zepben/ewb/model/cim/iec61968/customers/tariff.py +18 -0
- zepben/ewb/model/cim/iec61968/infiec61968/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/current_transformer_info.py +51 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/potential_transformer_info.py +33 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_construction_kind.py +69 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_function_kind.py +45 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/pole.py +87 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/streetlight_lamp_kind.py +27 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infcommon/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infcommon/ratio.py +34 -0
- zepben/ewb/model/cim/iec61968/metering/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/metering/controlled_appliance.py +152 -0
- zepben/ewb/model/cim/iec61968/metering/end_device.py +165 -0
- zepben/ewb/model/cim/iec61968/metering/end_device_function.py +17 -0
- zepben/ewb/model/cim/iec61968/metering/end_device_function_kind.py +48 -0
- zepben/ewb/model/cim/iec61968/metering/meter.py +28 -0
- zepben/ewb/model/cim/iec61968/metering/usage_point.py +186 -0
- zepben/ewb/model/cim/iec61968/operations/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/operations/operational_restriction.py +92 -0
- zepben/ewb/model/cim/iec61970/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/auxiliary_equipment.py +24 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/current_transformer.py +37 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/fault_indicator.py +18 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer.py +38 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer_kind.py +30 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/sensor.py +92 -0
- zepben/ewb/model/cim/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/core/ac_dc_terminal.py +16 -0
- zepben/ewb/model/cim/iec61970/base/core/base_voltage.py +17 -0
- zepben/ewb/model/cim/iec61970/base/core/conducting_equipment.py +198 -0
- zepben/ewb/model/cim/iec61970/base/core/connectivity_node.py +105 -0
- zepben/ewb/model/cim/iec61970/base/core/connectivity_node_container.py +15 -0
- zepben/ewb/model/cim/iec61970/base/core/curve.py +125 -0
- zepben/ewb/model/cim/iec61970/base/core/curve_data.py +29 -0
- zepben/ewb/model/cim/iec61970/base/core/equipment.py +366 -0
- zepben/ewb/model/cim/iec61970/base/core/equipment_container.py +199 -0
- zepben/ewb/model/cim/iec61970/base/core/feeder.py +260 -0
- zepben/ewb/model/cim/iec61970/base/core/geographical_region.py +82 -0
- zepben/ewb/model/cim/iec61970/base/core/identified_object.py +239 -0
- zepben/ewb/model/cim/iec61970/base/core/name.py +36 -0
- zepben/ewb/model/cim/iec61970/base/core/name_type.py +203 -0
- zepben/ewb/model/cim/iec61970/base/core/phase_code.py +202 -0
- zepben/ewb/model/cim/iec61970/base/core/power_system_resource.py +106 -0
- zepben/ewb/model/cim/iec61970/base/core/sub_geographical_region.py +93 -0
- zepben/ewb/model/cim/iec61970/base/core/substation.py +277 -0
- zepben/ewb/model/cim/iec61970/base/core/terminal.py +171 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram.py +109 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object.py +160 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object_point.py +25 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_style.py +28 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/orientation_kind.py +29 -0
- zepben/ewb/model/cim/iec61970/base/domain/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/domain/unit_symbol.py +494 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_branch.py +113 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_equipment.py +15 -0
- zepben/ewb/model/cim/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/battery_state_kind.py +39 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/battery_unit.py +108 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/photo_voltaic_unit.py +13 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_unit.py +28 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_wind_unit.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/meas/accumulator.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/accumulator_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/analog.py +18 -0
- zepben/ewb/model/cim/iec61970/base/meas/analog_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/control.py +26 -0
- zepben/ewb/model/cim/iec61970/base/meas/discrete.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/discrete_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/iopoint.py +16 -0
- zepben/ewb/model/cim/iec61970/base/meas/measurement.py +60 -0
- zepben/ewb/model/cim/iec61970/base/meas/measurement_value.py +21 -0
- zepben/ewb/model/cim/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/protection/current_relay.py +23 -0
- zepben/ewb/model/cim/iec61970/base/scada/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_control.py +22 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_point.py +16 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_source.py +22 -0
- zepben/ewb/model/cim/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/wires/ac_line_segment.py +214 -0
- zepben/ewb/model/cim/iec61970/base/wires/breaker.py +32 -0
- zepben/ewb/model/cim/iec61970/base/wires/busbar_section.py +19 -0
- zepben/ewb/model/cim/iec61970/base/wires/clamp.py +32 -0
- zepben/ewb/model/cim/iec61970/base/wires/conductor.py +49 -0
- zepben/ewb/model/cim/iec61970/base/wires/connector.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/cut.py +36 -0
- zepben/ewb/model/cim/iec61970/base/wires/disconnector.py +17 -0
- zepben/ewb/model/cim/iec61970/base/wires/earth_fault_compensator.py +21 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_connection.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_consumer.py +107 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_consumer_phase.py +56 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_source.py +172 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_source_phase.py +45 -0
- zepben/ewb/model/cim/iec61970/base/wires/fuse.py +23 -0
- zepben/ewb/model/cim/iec61970/base/wires/ground.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/ground_disconnector.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/grounding_impedance.py +19 -0
- zepben/ewb/model/cim/iec61970/base/wires/jumper.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/junction.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/line.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/linear_shunt_compensator.py +26 -0
- zepben/ewb/model/cim/iec61970/base/wires/load_break_switch.py +14 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_impedance.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_line_parameter.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_phase_impedance.py +99 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_sequence_impedance.py +43 -0
- zepben/ewb/model/cim/iec61970/base/wires/petersen_coil.py +22 -0
- zepben/ewb/model/cim/iec61970/base/wires/phase_impedance_data.py +37 -0
- zepben/ewb/model/cim/iec61970/base/wires/phase_shunt_connection_kind.py +40 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection.py +524 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection_phase.py +34 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_transformer.py +217 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_transformer_end.py +208 -0
- zepben/ewb/model/cim/iec61970/base/wires/protected_switch.py +96 -0
- zepben/ewb/model/cim/iec61970/base/wires/ratio_tap_changer.py +30 -0
- zepben/ewb/model/cim/iec61970/base/wires/reactive_capability_curve.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/recloser.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_cond_eq.py +45 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_control.py +173 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_control_mode_kind.py +48 -0
- zepben/ewb/model/cim/iec61970/base/wires/rotating_machine.py +36 -0
- zepben/ewb/model/cim/iec61970/base/wires/series_compensator.py +42 -0
- zepben/ewb/model/cim/iec61970/base/wires/shunt_compensator.py +59 -0
- zepben/ewb/model/cim/iec61970/base/wires/single_phase_kind.py +107 -0
- zepben/ewb/model/cim/iec61970/base/wires/static_var_compensator.py +40 -0
- zepben/ewb/model/cim/iec61970/base/wires/svc_control_mode.py +30 -0
- zepben/ewb/model/cim/iec61970/base/wires/switch.py +119 -0
- zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine.py +168 -0
- zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine_kind.py +46 -0
- zepben/ewb/model/cim/iec61970/base/wires/tap_changer.py +150 -0
- zepben/ewb/model/cim/iec61970/base/wires/tap_changer_control.py +49 -0
- zepben/ewb/model/cim/iec61970/base/wires/transformer_end.py +73 -0
- zepben/ewb/model/cim/iec61970/base/wires/transformer_star_impedance.py +48 -0
- zepben/ewb/model/cim/iec61970/base/wires/winding_connection.py +45 -0
- zepben/ewb/model/cim/iec61970/infiec61970/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/infiec61970/feeder/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/infiec61970/feeder/circuit.py +144 -0
- zepben/ewb/model/phases.py +168 -0
- zepben/ewb/model/resistance_reactance.py +40 -0
- zepben/ewb/services/__init__.py +4 -0
- zepben/ewb/services/common/__init__.py +16 -0
- zepben/ewb/services/common/base_service.py +383 -0
- zepben/ewb/services/common/base_service_comparator.py +394 -0
- zepben/ewb/services/common/difference.py +47 -0
- zepben/ewb/services/common/enum_mapper.py +55 -0
- zepben/ewb/services/common/meta/__init__.py +4 -0
- zepben/ewb/services/common/meta/data_source.py +16 -0
- zepben/ewb/services/common/meta/metadata_collection.py +28 -0
- zepben/ewb/services/common/meta/metadata_translations.py +47 -0
- zepben/ewb/services/common/meta/service_info.py +22 -0
- zepben/ewb/services/common/reference_resolvers.py +374 -0
- zepben/ewb/services/common/resolver.py +597 -0
- zepben/ewb/services/common/translator/__init__.py +4 -0
- zepben/ewb/services/common/translator/base_cim2proto.py +115 -0
- zepben/ewb/services/common/translator/base_proto2cim.py +146 -0
- zepben/ewb/services/common/translator/service_differences.py +81 -0
- zepben/ewb/services/common/translator/util.py +75 -0
- zepben/ewb/services/customer/__init__.py +4 -0
- zepben/ewb/services/customer/customer_service_comparator.py +52 -0
- zepben/ewb/services/customer/customers.py +23 -0
- zepben/ewb/services/customer/translator/__init__.py +21 -0
- zepben/ewb/services/customer/translator/customer_cim2proto.py +71 -0
- zepben/ewb/services/customer/translator/customer_enum_mappers.py +18 -0
- zepben/ewb/services/customer/translator/customer_proto2cim.py +87 -0
- zepben/ewb/services/diagram/__init__.py +4 -0
- zepben/ewb/services/diagram/diagram_service_comparator.py +39 -0
- zepben/ewb/services/diagram/diagrams.py +107 -0
- zepben/ewb/services/diagram/translator/__init__.py +11 -0
- zepben/ewb/services/diagram/translator/diagram_cim2proto.py +51 -0
- zepben/ewb/services/diagram/translator/diagram_enum_mappers.py +21 -0
- zepben/ewb/services/diagram/translator/diagram_proto2cim.py +61 -0
- zepben/ewb/services/measurement/__init__.py +4 -0
- zepben/ewb/services/measurement/measurements.py +35 -0
- zepben/ewb/services/measurement/translator/__init__.py +6 -0
- zepben/ewb/services/measurement/translator/measurement_cim2proto.py +42 -0
- zepben/ewb/services/measurement/translator/measurement_proto2cim.py +52 -0
- zepben/ewb/services/network/__init__.py +4 -0
- zepben/ewb/services/network/network_extensions.py +119 -0
- zepben/ewb/services/network/network_service.py +302 -0
- zepben/ewb/services/network/network_service_comparator.py +1322 -0
- zepben/ewb/services/network/network_state.py +36 -0
- zepben/ewb/services/network/tracing/__init__.py +4 -0
- zepben/ewb/services/network/tracing/busbranch_trace.py +36 -0
- zepben/ewb/services/network/tracing/connectivity/__init__.py +4 -0
- zepben/ewb/services/network/tracing/connectivity/connectivity_result.py +105 -0
- zepben/ewb/services/network/tracing/connectivity/nominal_phase_path.py +23 -0
- zepben/ewb/services/network/tracing/connectivity/phase_paths.py +70 -0
- zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_connected.py +226 -0
- zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_internal.py +64 -0
- zepben/ewb/services/network/tracing/connectivity/transformer_phase_paths.py +202 -0
- zepben/ewb/services/network/tracing/connectivity/xy_candidate_phase_paths.py +235 -0
- zepben/ewb/services/network/tracing/connectivity/xy_phase_step.py +24 -0
- zepben/ewb/services/network/tracing/feeder/__init__.py +4 -0
- zepben/ewb/services/network/tracing/feeder/assign_to_feeders.py +202 -0
- zepben/ewb/services/network/tracing/feeder/assign_to_lv_feeders.py +202 -0
- zepben/ewb/services/network/tracing/feeder/clear_direction.py +80 -0
- zepben/ewb/services/network/tracing/feeder/direction_status.py +133 -0
- zepben/ewb/services/network/tracing/feeder/feeder_direction.py +107 -0
- zepben/ewb/services/network/tracing/feeder/set_direction.py +143 -0
- zepben/ewb/services/network/tracing/find_swer_equipment.py +175 -0
- zepben/ewb/services/network/tracing/networktrace/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/actions/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/actions/equipment_tree_builder.py +104 -0
- zepben/ewb/services/network/tracing/networktrace/actions/tree_node.py +35 -0
- zepben/ewb/services/network/tracing/networktrace/compute_data.py +60 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/conditions.py +73 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/direction_condition.py +63 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/equipment_step_limit_condition.py +26 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/equipment_type_step_limit_condition.py +44 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_queue_condition.py +67 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_stop_condition.py +65 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/open_condition.py +39 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace.py +433 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_action_type.py +42 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_queue_next.py +84 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_step.py +128 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_step_path_provider.py +351 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_tracker.py +39 -0
- zepben/ewb/services/network/tracing/networktrace/operators/__init__.py +14 -0
- zepben/ewb/services/network/tracing/networktrace/operators/equipment_container_state_operators.py +264 -0
- zepben/ewb/services/network/tracing/networktrace/operators/feeder_direction_state_operations.py +181 -0
- zepben/ewb/services/network/tracing/networktrace/operators/in_service_state_operators.py +76 -0
- zepben/ewb/services/network/tracing/networktrace/operators/network_state_operators.py +120 -0
- zepben/ewb/services/network/tracing/networktrace/operators/open_state_operators.py +104 -0
- zepben/ewb/services/network/tracing/networktrace/operators/phase_state_operators.py +56 -0
- zepben/ewb/services/network/tracing/networktrace/tracing.py +132 -0
- zepben/ewb/services/network/tracing/phases/__init__.py +4 -0
- zepben/ewb/services/network/tracing/phases/phase_inferrer.py +205 -0
- zepben/ewb/services/network/tracing/phases/phase_status.py +101 -0
- zepben/ewb/services/network/tracing/phases/remove_phases.py +143 -0
- zepben/ewb/services/network/tracing/phases/set_phases.py +490 -0
- zepben/ewb/services/network/tracing/traversal/__init__.py +4 -0
- zepben/ewb/services/network/tracing/traversal/context_value_computer.py +63 -0
- zepben/ewb/services/network/tracing/traversal/debug_logging.py +124 -0
- zepben/ewb/services/network/tracing/traversal/queue.py +112 -0
- zepben/ewb/services/network/tracing/traversal/queue_condition.py +75 -0
- zepben/ewb/services/network/tracing/traversal/step_action.py +83 -0
- zepben/ewb/services/network/tracing/traversal/step_context.py +59 -0
- zepben/ewb/services/network/tracing/traversal/stop_condition.py +57 -0
- zepben/ewb/services/network/tracing/traversal/traversal.py +634 -0
- zepben/ewb/services/network/tracing/traversal/traversal_condition.py +22 -0
- zepben/ewb/services/network/tracing/traversal/weighted_priority_queue.py +85 -0
- zepben/ewb/services/network/tracing/util.py +93 -0
- zepben/ewb/services/network/translator/__init__.py +392 -0
- zepben/ewb/services/network/translator/network_cim2proto.py +1867 -0
- zepben/ewb/services/network/translator/network_enum_mappers.py +78 -0
- zepben/ewb/services/network/translator/network_proto2cim.py +2201 -0
- zepben/ewb/services/services.py +48 -0
- zepben/ewb/streaming/__init__.py +4 -0
- zepben/ewb/streaming/data/__init__.py +4 -0
- zepben/ewb/streaming/data/current_state_event.py +314 -0
- zepben/ewb/streaming/data/current_state_event_batch.py +25 -0
- zepben/ewb/streaming/data/set_current_states_status.py +286 -0
- zepben/ewb/streaming/exceptions.py +14 -0
- zepben/ewb/streaming/get/__init__.py +4 -0
- zepben/ewb/streaming/get/consumer.py +209 -0
- zepben/ewb/streaming/get/customer_consumer.py +111 -0
- zepben/ewb/streaming/get/diagram_consumer.py +107 -0
- zepben/ewb/streaming/get/hierarchy/__init__.py +4 -0
- zepben/ewb/streaming/get/hierarchy/data.py +27 -0
- zepben/ewb/streaming/get/included_energized_containers.py +36 -0
- zepben/ewb/streaming/get/included_energizing_containers.py +36 -0
- zepben/ewb/streaming/get/network_consumer.py +870 -0
- zepben/ewb/streaming/get/query_network_state_client.py +64 -0
- zepben/ewb/streaming/get/query_network_state_service.py +94 -0
- zepben/ewb/streaming/grpc/__init__.py +4 -0
- zepben/ewb/streaming/grpc/auth_token_plugin.py +24 -0
- zepben/ewb/streaming/grpc/connect.py +209 -0
- zepben/ewb/streaming/grpc/grpc.py +107 -0
- zepben/ewb/streaming/grpc/grpc_channel_builder.py +190 -0
- zepben/ewb/streaming/mutations/__init__.py +4 -0
- zepben/ewb/streaming/mutations/update_network_state_client.py +80 -0
- zepben/ewb/streaming/mutations/update_network_state_service.py +61 -0
- zepben/ewb/testing/__init__.py +4 -0
- zepben/ewb/testing/test_network_builder.py +816 -0
- zepben/ewb/types.py +17 -0
- zepben/ewb/util.py +200 -0
- zepben_ewb-1.0.0.dist-info/METADATA +90 -0
- zepben_ewb-1.0.0.dist-info/RECORD +641 -0
- zepben_ewb-1.0.0.dist-info/WHEEL +5 -0
- zepben_ewb-1.0.0.dist-info/licenses/LICENSE +374 -0
- zepben_ewb-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["SynchronousMachine"]
|
|
7
|
+
|
|
8
|
+
from typing import Optional, List, Generator, TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.model.cim.iec61970.base.wires.rotating_machine import RotatingMachine
|
|
11
|
+
from zepben.ewb.model.cim.iec61970.base.wires.synchronous_machine_kind import SynchronousMachineKind
|
|
12
|
+
from zepben.ewb.util import ngen, nlen, get_by_mrid, safe_remove
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from zepben.ewb.model.cim.iec61970.base.wires.reactive_capability_curve import ReactiveCapabilityCurve
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SynchronousMachine(RotatingMachine):
|
|
19
|
+
"""
|
|
20
|
+
An electromechanical device that operates with shaft rotating synchronously with the network. It is a single machine operating either as a generator or
|
|
21
|
+
synchronous condenser or pump.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
_reactive_capability_curves: Optional[List['ReactiveCapabilityCurve']] = None
|
|
25
|
+
|
|
26
|
+
base_q: Optional[float] = None
|
|
27
|
+
"""Default base reactive power value in VAr. This value represents the initial reactive power that can be used by any application function."""
|
|
28
|
+
|
|
29
|
+
condenser_p: Optional[int] = None
|
|
30
|
+
"""Active power consumed (watts) when in condenser mode operation."""
|
|
31
|
+
|
|
32
|
+
earthing: Optional[bool] = None
|
|
33
|
+
"""Indicates whether the generator is earthed. Used for short circuit data exchange according to IEC 60909."""
|
|
34
|
+
|
|
35
|
+
earthing_star_point_r: Optional[float] = None
|
|
36
|
+
"""Generator star point earthing resistance in Ohms (Re). Used for short circuit data exchange according to IEC 60909."""
|
|
37
|
+
|
|
38
|
+
earthing_star_point_x: Optional[float] = None
|
|
39
|
+
"""Generator star point earthing reactance in Ohms (Xe). Used for short circuit data exchange according to IEC 60909."""
|
|
40
|
+
|
|
41
|
+
ikk: Optional[float] = None
|
|
42
|
+
"""
|
|
43
|
+
Steady-state short-circuit current (in A for the profile) of generator with compound excitation during 3-phase short circuit.
|
|
44
|
+
- Ikk=0: Generator with no compound excitation.
|
|
45
|
+
- Ikk<>0: Generator with compound excitation.
|
|
46
|
+
Ikk is used to calculate the minimum steady-state short-circuit current for generators with compound excitation. (4.6.1.2 in IEC 60909-0:2001).
|
|
47
|
+
Used only for single fed short circuit on a generator. (4.3.4.2. in IEC 60909-0:2001).
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
max_q: Optional[float] = None
|
|
51
|
+
"""Maximum reactive power limit in VAr. This is the maximum (nameplate) limit for the unit."""
|
|
52
|
+
|
|
53
|
+
max_u: Optional[int] = None
|
|
54
|
+
"""Maximum voltage limit for the unit in volts."""
|
|
55
|
+
|
|
56
|
+
min_q: Optional[float] = None
|
|
57
|
+
"""Minimum reactive power limit for the unit in VAr."""
|
|
58
|
+
|
|
59
|
+
min_u: Optional[int] = None
|
|
60
|
+
"""Minimum voltage limit for the unit in volts."""
|
|
61
|
+
|
|
62
|
+
mu: Optional[float] = None
|
|
63
|
+
"""
|
|
64
|
+
Factor to calculate the breaking current (Section 4.5.2.1 in IEC 60909-0).
|
|
65
|
+
Used only for single fed short circuit on a generator (Section 4.3.4.2. in IEC 60909-0).
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
r: Optional[float] = None
|
|
69
|
+
"""
|
|
70
|
+
Equivalent resistance (RG) of generator as a percentage. RG is considered for the calculation of all currents,
|
|
71
|
+
except for the calculation of the peak current ip. Used for short circuit data exchange according to IEC 60909.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
r0: Optional[float] = None
|
|
75
|
+
"""Zero sequence resistance of the synchronous machine as a percentage."""
|
|
76
|
+
|
|
77
|
+
r2: Optional[float] = None
|
|
78
|
+
"""Negative sequence resistance as a percentage."""
|
|
79
|
+
|
|
80
|
+
sat_direct_subtrans_x: Optional[float] = None
|
|
81
|
+
"""Direct-axis subtransient reactance saturated as a percentage, also known as Xd"sat."""
|
|
82
|
+
|
|
83
|
+
sat_direct_sync_x: Optional[float] = None
|
|
84
|
+
"""
|
|
85
|
+
Direct-axes saturated synchronous reactance (xdsat); reciprocal of short-circuit ration, as a percentage.
|
|
86
|
+
Used for short circuit data exchange, only for single fed short circuit on a generator. (4.3.4.2. in IEC 60909-0:2001).
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
sat_direct_trans_x: Optional[float] = None
|
|
90
|
+
"""
|
|
91
|
+
Saturated Direct-axis transient reactance as a percentage.
|
|
92
|
+
The attribute is primarily used for short circuit calculations according to ANSI.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
x0: Optional[float] = None
|
|
96
|
+
"""Zero sequence reactance of the synchronous machine as a percentage."""
|
|
97
|
+
|
|
98
|
+
x2: Optional[float] = None
|
|
99
|
+
"""Negative sequence reactance as a percentage."""
|
|
100
|
+
|
|
101
|
+
type: SynchronousMachineKind = SynchronousMachineKind.UNKNOWN
|
|
102
|
+
"""Modes that this synchronous machine can operate in."""
|
|
103
|
+
|
|
104
|
+
operating_mode: SynchronousMachineKind = SynchronousMachineKind.UNKNOWN
|
|
105
|
+
"""Current mode of operation."""
|
|
106
|
+
|
|
107
|
+
def __init__(self, curves: List['ReactiveCapabilityCurve'] = None, **kwargs):
|
|
108
|
+
"""
|
|
109
|
+
`reactive_capability_curves` A list of `ReactiveCapabilityCurve`s to associate with this `SynchronousMachine`.
|
|
110
|
+
"""
|
|
111
|
+
super(SynchronousMachine, self).__init__(**kwargs)
|
|
112
|
+
if curves:
|
|
113
|
+
for rcc in curves:
|
|
114
|
+
self.add_curve(rcc)
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def curves(self) -> Generator['ReactiveCapabilityCurve', None, None]:
|
|
118
|
+
"""
|
|
119
|
+
The available reactive capability curves for this synchronous machine. The first shall be the default for this :class:`SynchronousMachine`.
|
|
120
|
+
"""
|
|
121
|
+
return ngen(self._reactive_capability_curves)
|
|
122
|
+
|
|
123
|
+
def num_curves(self):
|
|
124
|
+
"""Return the number of :class:`ReactiveCapabilityCurve`s associated with this :class:`SynchronousMachine`."""
|
|
125
|
+
return nlen(self._reactive_capability_curves)
|
|
126
|
+
|
|
127
|
+
def get_curve(self, mrid: str) -> 'ReactiveCapabilityCurve':
|
|
128
|
+
"""
|
|
129
|
+
Get the :class:`ReactiveCapabilityCurve` for this :class:`SynchronousMachine` identified by `mrid`
|
|
130
|
+
|
|
131
|
+
:param mrid: The mRID of the required :class:`ReactiveCapabilityCurve`.
|
|
132
|
+
:returns: The :class:`ReactiveCapabilityCurve` with the specified `mrid` if it exists.
|
|
133
|
+
:raises KeyError: If `mrid` wasn't present.
|
|
134
|
+
"""
|
|
135
|
+
return get_by_mrid(self._reactive_capability_curves, mrid)
|
|
136
|
+
|
|
137
|
+
def add_curve(self, curve: 'ReactiveCapabilityCurve') -> 'SynchronousMachine':
|
|
138
|
+
"""
|
|
139
|
+
Associate a :class:`ReactiveCapabilityCurve` with this :class:`SynchronousMachine`.
|
|
140
|
+
|
|
141
|
+
:param curve: The :class:`ReactiveCapabilityCurve` to associate with this :class:`SynchronousMachine`.
|
|
142
|
+
:returns: A reference to this :class:`SynchronousMachine` to allow fluent use.
|
|
143
|
+
:raises ValueError: If another :class:`ReactiveCapabilityCurve` with the same `mrid` already exists for this :class:`SynchronousMachine`.
|
|
144
|
+
"""
|
|
145
|
+
if self._validate_reference(curve, self.get_curve, "A ReactiveCapabilityCurve"):
|
|
146
|
+
return self
|
|
147
|
+
self._reactive_capability_curves = self._reactive_capability_curves or []
|
|
148
|
+
self._reactive_capability_curves.append(curve)
|
|
149
|
+
return self
|
|
150
|
+
|
|
151
|
+
def remove_curve(self, curve: 'ReactiveCapabilityCurve') -> 'SynchronousMachine':
|
|
152
|
+
"""
|
|
153
|
+
Disassociate a :class:`ReactiveCapabilityCurve` from this :class:`SynchronousMachine`.
|
|
154
|
+
|
|
155
|
+
:param curve: The :class:`ReactiveCapabilityCurve` to disassociate from this :class:`SynchronousMachine`.
|
|
156
|
+
:returns: A reference to this :class:`SynchronousMachine` to allow fluent use.
|
|
157
|
+
:raises ValueError: If `curve` was not associated with this :class:`SynchronousMachine`.
|
|
158
|
+
"""
|
|
159
|
+
self._reactive_capability_curves = safe_remove(self._reactive_capability_curves, curve)
|
|
160
|
+
return self
|
|
161
|
+
|
|
162
|
+
def clear_curves(self) -> 'SynchronousMachine':
|
|
163
|
+
"""
|
|
164
|
+
Clear all :class:`ReactiveCapabilityCurve` associated with this :class:`SynchronousMachine`.
|
|
165
|
+
:returns: A reference to this :class:`SynchronousMachine` to allow fluent use.
|
|
166
|
+
"""
|
|
167
|
+
self._reactive_capability_curves = None
|
|
168
|
+
return self
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["SynchronousMachineKind"]
|
|
7
|
+
|
|
8
|
+
from enum import Enum
|
|
9
|
+
|
|
10
|
+
from zepben.ewb import unique
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@unique
|
|
14
|
+
class SynchronousMachineKind(Enum):
|
|
15
|
+
"""
|
|
16
|
+
Synchronous machine type.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
UNKNOWN = 0
|
|
20
|
+
"""UNKNOWN"""
|
|
21
|
+
|
|
22
|
+
generator = 1
|
|
23
|
+
"""Indicates the synchronous machine can operate as a generator."""
|
|
24
|
+
|
|
25
|
+
condenser = 2
|
|
26
|
+
"""Indicates the synchronous machine can operate as a condenser."""
|
|
27
|
+
|
|
28
|
+
generatorOrCondenser = 3
|
|
29
|
+
"""Indicates the synchronous machine can operate as a generator or as a condenser."""
|
|
30
|
+
|
|
31
|
+
motor = 4
|
|
32
|
+
"""Indicates the synchronous machine can operate as a motor."""
|
|
33
|
+
|
|
34
|
+
generatorOrMotor = 5
|
|
35
|
+
"""Indicates the synchronous machine can operate as a generator or as a motor."""
|
|
36
|
+
|
|
37
|
+
motorOrCondenser = 6
|
|
38
|
+
"""Indicates the synchronous machine can operate as a motor or as a condenser."""
|
|
39
|
+
|
|
40
|
+
generatorOrCondenserOrMotor = 7
|
|
41
|
+
"""Indicates the synchronous machine can operate as a generator or as a condenser or as a motor."""
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def short_name(self) -> str:
|
|
45
|
+
"""Get the name of this `SynchronousMachineKind` without the class qualifier"""
|
|
46
|
+
return str(self)[23:]
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Copyright 2025 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["TapChanger"]
|
|
7
|
+
|
|
8
|
+
from typing import Optional, TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.model.cim.iec61970.base.core.power_system_resource import PowerSystemResource
|
|
11
|
+
from zepben.ewb.util import require
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from zepben.ewb.model.cim.iec61970.base.wires.tap_changer_control import TapChangerControl
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TapChanger(PowerSystemResource):
|
|
18
|
+
"""
|
|
19
|
+
Mechanism for changing transformer winding tap positions.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
control_enabled: Optional[bool] = None
|
|
23
|
+
"""Specifies the regulation status of the equipment. True is regulating, false is not regulating."""
|
|
24
|
+
|
|
25
|
+
neutral_u: Optional[int] = None
|
|
26
|
+
"""Voltage at which the winding operates at the neutral tap setting."""
|
|
27
|
+
|
|
28
|
+
tap_changer_control: Optional['TapChangerControl'] = None
|
|
29
|
+
"""The regulating control scheme in which this tap changer participates."""
|
|
30
|
+
|
|
31
|
+
_high_step: Optional[int] = None
|
|
32
|
+
_low_step: Optional[int] = None
|
|
33
|
+
_neutral_step: Optional[int] = None
|
|
34
|
+
_normal_step: Optional[int] = None
|
|
35
|
+
_step: Optional[float] = None
|
|
36
|
+
|
|
37
|
+
def __init__(self, high_step: int = None, low_step: int = None, neutral_step: int = None, normal_step: int = None, step: float = None, **kwargs):
|
|
38
|
+
super(TapChanger, self).__init__(**kwargs)
|
|
39
|
+
if high_step is not None:
|
|
40
|
+
self._high_step = high_step
|
|
41
|
+
if low_step is not None:
|
|
42
|
+
self._low_step = low_step
|
|
43
|
+
if neutral_step is not None:
|
|
44
|
+
self._neutral_step = neutral_step
|
|
45
|
+
if normal_step is not None:
|
|
46
|
+
self._normal_step = normal_step
|
|
47
|
+
if step is not None:
|
|
48
|
+
self._step = step
|
|
49
|
+
self._validate_steps()
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def high_step(self):
|
|
53
|
+
"""
|
|
54
|
+
Highest possible tap step position, advance from neutral. The attribute shall be greater than lowStep. This tap position results in the
|
|
55
|
+
maximum voltage boost on secondary winding(s).
|
|
56
|
+
"""
|
|
57
|
+
return self._high_step
|
|
58
|
+
|
|
59
|
+
@high_step.setter
|
|
60
|
+
def high_step(self, val):
|
|
61
|
+
require((val is None) or (self._low_step is None) or (val > self._low_step),
|
|
62
|
+
lambda: f"High step [{val}] must be greater than low step [{self._low_step}]")
|
|
63
|
+
self._check_steps(self.low_step, val)
|
|
64
|
+
self._high_step = val
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def low_step(self):
|
|
68
|
+
"""Lowest possible tap step position, retard from neutral. This tap position results in the maximum voltage buck on secondary winding(s)."""
|
|
69
|
+
return self._low_step
|
|
70
|
+
|
|
71
|
+
@low_step.setter
|
|
72
|
+
def low_step(self, val):
|
|
73
|
+
require((val is None) or (self._high_step is None) or (val < self._high_step),
|
|
74
|
+
lambda: f"Low step [{val}] must be less than high step [{self._high_step}]")
|
|
75
|
+
self._check_steps(val, self.high_step)
|
|
76
|
+
self._low_step = val
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def neutral_step(self):
|
|
80
|
+
"""The neutral tap step position for this winding. The attribute shall be equal or greater than lowStep and equal or less than highStep."""
|
|
81
|
+
return self._neutral_step
|
|
82
|
+
|
|
83
|
+
@neutral_step.setter
|
|
84
|
+
def neutral_step(self, val):
|
|
85
|
+
require(self._is_in_range(val), lambda: f"Neutral step [{val}] must be between high step [{self._high_step}] and low step [{self._low_step}]")
|
|
86
|
+
self._neutral_step = val
|
|
87
|
+
|
|
88
|
+
@property
|
|
89
|
+
def normal_step(self):
|
|
90
|
+
"""
|
|
91
|
+
The tap step position used in "normal" network operation for this winding. For a "Fixed" tap changer indicates the current physical tap setting.
|
|
92
|
+
The attribute shall be equal or greater than lowStep and equal or less than highStep.
|
|
93
|
+
"""
|
|
94
|
+
return self._normal_step
|
|
95
|
+
|
|
96
|
+
@normal_step.setter
|
|
97
|
+
def normal_step(self, val):
|
|
98
|
+
require(self._is_in_range(val), lambda: f"Normal step [{val}] must be between high step [{self._high_step}] and low step [{self._low_step}]")
|
|
99
|
+
self._normal_step = val
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def step(self):
|
|
103
|
+
"""
|
|
104
|
+
Tap changer position. Starting step for a steady state solution. Non integer values are allowed to support continuous tap variables.
|
|
105
|
+
The reasons for continuous value are to support study cases where no discrete tap changers has yet been designed, a solutions where a narrow voltage
|
|
106
|
+
band force the tap step to oscillate or accommodate for a continuous solution as input.
|
|
107
|
+
The attribute shall be equal or greater than lowStep and equal or less than highStep.
|
|
108
|
+
"""
|
|
109
|
+
return self._step
|
|
110
|
+
|
|
111
|
+
@step.setter
|
|
112
|
+
def step(self, val):
|
|
113
|
+
require(self._is_in_range(val), lambda: f"Step [{val}] must be between high step [{self._high_step}] and low step [{self._low_step}]")
|
|
114
|
+
self._step = val
|
|
115
|
+
|
|
116
|
+
def _check_steps(self, low, high):
|
|
117
|
+
if low is not None:
|
|
118
|
+
require((self.step is None) or (low <= self.step), lambda: f"New value would invalidate current step of [{self.step}]")
|
|
119
|
+
require((self.normal_step is None) or (low <= self.normal_step), lambda: f"New value would invalidate current normal_step of [{self.normal_step}]")
|
|
120
|
+
require((self.neutral_step is None) or (low <= self.neutral_step),
|
|
121
|
+
lambda: f"New value would invalidate current neutral_step of [{self.neutral_step}]")
|
|
122
|
+
|
|
123
|
+
if high is not None:
|
|
124
|
+
require((self.step is None) or (self.step <= high), lambda: f"New value would invalidate current step of [{self.step}]")
|
|
125
|
+
require((self.normal_step is None) or (self.normal_step <= high), lambda: f"New value would invalidate current normal_step of [{self.normal_step}]")
|
|
126
|
+
require((self.neutral_step is None) or (self.neutral_step <= high),
|
|
127
|
+
lambda: f"New value would invalidate current neutral_step of [{self.neutral_step}]")
|
|
128
|
+
|
|
129
|
+
def _validate_steps(self):
|
|
130
|
+
require((self._high_step is None) or (self._low_step is None) or (self._high_step > self._low_step),
|
|
131
|
+
lambda: f"High step [{self._high_step}] must be greater than low step [{self._low_step}]")
|
|
132
|
+
require(self._is_in_range(self._neutral_step),
|
|
133
|
+
lambda: f"Neutral step [{self.neutral_step}] must be between high step [{self._high_step}] and low step [{self._low_step}]")
|
|
134
|
+
require(self._is_in_range(self._normal_step),
|
|
135
|
+
lambda: f"Normal step [{self.normal_step}] must be between high step [{self._high_step}] and low step [{self._low_step}]")
|
|
136
|
+
require(self._is_in_range(self._step), lambda: f"Step [{self._step}] must be between high step [{self._high_step}] and low step [{self._low_step}]")
|
|
137
|
+
|
|
138
|
+
def _is_in_range(self, val) -> bool:
|
|
139
|
+
if val is None:
|
|
140
|
+
return True
|
|
141
|
+
|
|
142
|
+
if self._low_step is not None:
|
|
143
|
+
if val < self._low_step:
|
|
144
|
+
return False
|
|
145
|
+
|
|
146
|
+
if self._high_step is not None:
|
|
147
|
+
if val > self._high_step:
|
|
148
|
+
return False
|
|
149
|
+
|
|
150
|
+
return True
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["TapChangerControl"]
|
|
7
|
+
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.model.cim.iec61970.base.wires.regulating_control import RegulatingControl
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TapChangerControl(RegulatingControl):
|
|
14
|
+
"""
|
|
15
|
+
Describes behaviour specific to tap changers, e.g. how the voltage at the end of a line varies with the load level and compensation of the voltage drop by
|
|
16
|
+
tap adjustment.
|
|
17
|
+
"""
|
|
18
|
+
limit_voltage: Optional[int] = None
|
|
19
|
+
"""Maximum allowed regulated voltage on the PT secondary, regardless of line drop compensation. Sometimes referred to as first-house protection."""
|
|
20
|
+
|
|
21
|
+
line_drop_compensation: Optional[bool] = None
|
|
22
|
+
"""If true, then line drop compensation is to be applied. """
|
|
23
|
+
|
|
24
|
+
line_drop_r: Optional[float] = None
|
|
25
|
+
"""Line drop compensator resistance setting for normal (forward) power flow in Ohms."""
|
|
26
|
+
|
|
27
|
+
line_drop_x: Optional[float] = None
|
|
28
|
+
"""Line drop compensator reactance setting for normal (forward) power flow in Ohms."""
|
|
29
|
+
|
|
30
|
+
reverse_line_drop_r: Optional[float] = None
|
|
31
|
+
"""Line drop compensator resistance setting for reverse power flow in Ohms."""
|
|
32
|
+
|
|
33
|
+
reverse_line_drop_x: Optional[float] = None
|
|
34
|
+
"""Line drop compensator reactance setting for reverse power flow in Ohms."""
|
|
35
|
+
|
|
36
|
+
forward_ldc_blocking: Optional[bool] = None
|
|
37
|
+
"""
|
|
38
|
+
True implies this tap changer turns off/ignores reverse current flows for line drop compensation when power flow is reversed and no reverse line drop
|
|
39
|
+
is set.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
time_delay: Optional[float] = None
|
|
43
|
+
"""The time delay for the tap changer in seconds."""
|
|
44
|
+
|
|
45
|
+
co_generation_enabled: Optional[bool] = None
|
|
46
|
+
"""
|
|
47
|
+
True implies cogeneration mode is enabled and that the control will regulate to the new source bushing (downline bushing), keeping locations downline
|
|
48
|
+
from experiencing overvoltage situations.
|
|
49
|
+
"""
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Copyright 2025 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["TransformerEnd"]
|
|
7
|
+
|
|
8
|
+
from typing import Optional, TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.model.cim.iec61970.base.core.identified_object import IdentifiedObject
|
|
11
|
+
from zepben.ewb.util import require
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from zepben.ewb.model.cim.iec61970.base.core.base_voltage import BaseVoltage
|
|
15
|
+
from zepben.ewb.model.cim.iec61970.base.core.terminal import Terminal
|
|
16
|
+
from zepben.ewb.model.cim.iec61970.base.wires.power_transformer import PowerTransformer
|
|
17
|
+
from zepben.ewb.model.cim.iec61970.base.wires.ratio_tap_changer import RatioTapChanger
|
|
18
|
+
from zepben.ewb.model.cim.iec61970.base.wires.transformer_star_impedance import TransformerStarImpedance
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TransformerEnd(IdentifiedObject):
|
|
22
|
+
"""
|
|
23
|
+
A conducting connection point of a power transformer. It corresponds to a physical transformer winding terminal.
|
|
24
|
+
In earlier CIM versions, the TransformerWinding class served a similar purpose, but this class is more flexible
|
|
25
|
+
because it associates to terminal but is not a specialization of ConductingEquipment.
|
|
26
|
+
"""
|
|
27
|
+
grounded: Optional[bool] = None
|
|
28
|
+
"""(for Yn and Zn connections) True if the neutral is solidly grounded."""
|
|
29
|
+
|
|
30
|
+
r_ground: Optional[float] = None
|
|
31
|
+
"""(for Yn and Zn connections) Resistance part of neutral impedance where 'grounded' is true"""
|
|
32
|
+
|
|
33
|
+
x_ground: Optional[float] = None
|
|
34
|
+
"""(for Yn and Zn connections) Reactive part of neutral impedance where 'grounded' is true"""
|
|
35
|
+
|
|
36
|
+
ratio_tap_changer: Optional['RatioTapChanger'] = None
|
|
37
|
+
"""Ratio tap changer associated with this transformer end."""
|
|
38
|
+
|
|
39
|
+
_terminal: Optional['Terminal'] = None
|
|
40
|
+
"""The terminal of the transformer that this end is associated with"""
|
|
41
|
+
|
|
42
|
+
base_voltage: Optional['BaseVoltage'] = None
|
|
43
|
+
"""Base voltage of the transformer end. This is essential for PU calculation."""
|
|
44
|
+
|
|
45
|
+
end_number: int = 0
|
|
46
|
+
"""Number for this transformer end, corresponding to the end’s order in the power transformer vector group or phase angle clock number.
|
|
47
|
+
Highest voltage winding should be 1. Each end within a power transformer should have a unique subsequent end number.
|
|
48
|
+
Note the transformer end number need not match the terminal sequence number."""
|
|
49
|
+
|
|
50
|
+
star_impedance: Optional['TransformerStarImpedance'] = None
|
|
51
|
+
"""(accurate for 2- or 3-winding transformers only) Pi-model impedances of this transformer end. By convention, for a two winding transformer, the full
|
|
52
|
+
values of the transformer should be entered on the high voltage end (endNumber=1)."""
|
|
53
|
+
|
|
54
|
+
def __init__(self, terminal: Optional['Terminal'] = None, **kwargs):
|
|
55
|
+
super(TransformerEnd, self).__init__(**kwargs)
|
|
56
|
+
if terminal is not None:
|
|
57
|
+
self.terminal = terminal
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def terminal(self) -> Optional['Terminal']:
|
|
61
|
+
"""
|
|
62
|
+
The terminal of the transformer that this end is associated with
|
|
63
|
+
"""
|
|
64
|
+
return self._terminal
|
|
65
|
+
|
|
66
|
+
@terminal.setter
|
|
67
|
+
def terminal(self, value: Optional['Terminal']):
|
|
68
|
+
if value is not None:
|
|
69
|
+
from zepben.ewb.model.cim.iec61970.base.wires.power_transformer import PowerTransformer
|
|
70
|
+
require(value.conducting_equipment is None or isinstance(value.conducting_equipment, PowerTransformer),
|
|
71
|
+
lambda: f"Cannot assign {self.__class__.__name__}[{self.mrid}] to {value.__class__.__name__}[{value.mrid}], which is connected to a " +
|
|
72
|
+
f"{value.conducting_equipment.__class__.__name__}[{value.conducting_equipment.mrid}] rather than a PowerTransformer.")
|
|
73
|
+
self._terminal = value
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["TransformerStarImpedance"]
|
|
7
|
+
|
|
8
|
+
from typing import Optional, TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.model.cim.iec61970.base.core.identified_object import IdentifiedObject
|
|
11
|
+
from zepben.ewb.model.resistance_reactance import ResistanceReactance
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.transformer_end_info import TransformerEndInfo
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TransformerStarImpedance(IdentifiedObject):
|
|
18
|
+
"""
|
|
19
|
+
Transformer star impedance (Pi-model) that accurately reflects impedance for transformers with 2 or 3 windings. For transformers with 4 or more windings,
|
|
20
|
+
TransformerMeshImpedance class shall be used.
|
|
21
|
+
For transmission networks use PowerTransformerEnd impedances (r, r0, x, x0, b, b0, g and g0).
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
r: Optional[float] = None
|
|
25
|
+
""" r : Resistance of the transformer end. Unit: Ohms """
|
|
26
|
+
|
|
27
|
+
r0: Optional[float] = None
|
|
28
|
+
""" r0 : Zero sequence series resistance of the transformer end. Unit: Ohms"""
|
|
29
|
+
|
|
30
|
+
x: Optional[float] = None
|
|
31
|
+
""" x : Positive sequence series reactance of the transformer end. Unit: Ohms"""
|
|
32
|
+
|
|
33
|
+
x0: Optional[float] = None
|
|
34
|
+
""" x0 : Zero sequence series reactance of the transformer end. Unit: Ohms"""
|
|
35
|
+
|
|
36
|
+
transformer_end_info: Optional['TransformerEndInfo'] = None
|
|
37
|
+
"""Transformer end datasheet used to calculate this transformer star impedance."""
|
|
38
|
+
|
|
39
|
+
def resistance_reactance(self) -> ResistanceReactance:
|
|
40
|
+
"""
|
|
41
|
+
Get the `ResistanceReactance` for this `TransformerStarImpedance`. If any values are missing
|
|
42
|
+
attempt to calculate them from the `TransformerEndInfo` tests.
|
|
43
|
+
Returns the `ResistanceReactance` for this `TransformerStarImpedance`
|
|
44
|
+
"""
|
|
45
|
+
# noinspection PyArgumentList
|
|
46
|
+
return ResistanceReactance(self.r, self.x, self.r0, self.x0).merge_if_incomplete(
|
|
47
|
+
lambda: self.transformer_end_info.calculate_resistance_reactance_from_tests() if self.transformer_end_info is not None else None
|
|
48
|
+
)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["WindingConnection"]
|
|
7
|
+
|
|
8
|
+
from enum import Enum
|
|
9
|
+
|
|
10
|
+
from zepben.ewb import unique
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@unique
|
|
14
|
+
class WindingConnection(Enum):
|
|
15
|
+
"""
|
|
16
|
+
Winding connection type.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
UNKNOWN = 0
|
|
20
|
+
"""Default"""
|
|
21
|
+
|
|
22
|
+
D = 1
|
|
23
|
+
"""Delta"""
|
|
24
|
+
|
|
25
|
+
Y = 2
|
|
26
|
+
"""Wye"""
|
|
27
|
+
|
|
28
|
+
Z = 3
|
|
29
|
+
"""ZigZag"""
|
|
30
|
+
|
|
31
|
+
Yn = 4
|
|
32
|
+
"""Wye, with neutral brought out for grounding"""
|
|
33
|
+
|
|
34
|
+
Zn = 5
|
|
35
|
+
"""ZigZag, with neutral brought out for grounding"""
|
|
36
|
+
|
|
37
|
+
A = 6
|
|
38
|
+
"""Autotransformer common winding"""
|
|
39
|
+
|
|
40
|
+
I = 7
|
|
41
|
+
"""Independent winding, for single-phase connections"""
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def short_name(self):
|
|
45
|
+
return str(self)[18:]
|