s_artinr in dataclass plines übernommen. map_sensor_to_cable() angepasst, sodass neu übergebene Artinr verwendet wird statt Einlesen von positions.json. Einlesen der Kabel-Config in UTF-8, sodass 90° korekt dargestellt wird. map_sensor_to_cable weiter angepasst, sodass korrekte keys in Kabel-Config gefunden werden + doppelte Ausgabe für Scanner-Kabel (Data + Spannung) in Excel Ausgabe
This commit is contained in:
+44
-44
@@ -20,6 +20,7 @@ class Point:
|
|||||||
@dataclass
|
@dataclass
|
||||||
class Polyline:
|
class Polyline:
|
||||||
id: str
|
id: str
|
||||||
|
s_artinr: str
|
||||||
coords: List[Point]
|
coords: List[Point]
|
||||||
length: float
|
length: float
|
||||||
|
|
||||||
@@ -270,13 +271,12 @@ def parse_sensors_from_json(positions_json):
|
|||||||
def export_excel(plines, out_path):
|
def export_excel(plines, out_path):
|
||||||
# Hier für Excel Export
|
# Hier für Excel Export
|
||||||
print("creating excel file with cable information ..")
|
print("creating excel file with cable information ..")
|
||||||
sens2cable = map_sensor_to_cable(sensors, plines)
|
write_excel_from_json(plines, out_path)
|
||||||
write_excel_from_json(plines, sens2cable, out_path)
|
|
||||||
print("done")
|
print("done")
|
||||||
|
|
||||||
def write_excel_from_json(plines:Polylines, sens2cable: dict, outpath:str):
|
def write_excel_from_json(plines:Polylines, outpath:str):
|
||||||
wb = Workbook()
|
wb = Workbook()
|
||||||
|
sens2cable = map_sensor_to_cable(plines)
|
||||||
# Dicts für Anzahl bzw kummulierte Länge
|
# Dicts für Anzahl bzw kummulierte Länge
|
||||||
count_summary = defaultdict(int)
|
count_summary = defaultdict(int)
|
||||||
length_summary = defaultdict(float)
|
length_summary = defaultdict(float)
|
||||||
@@ -284,24 +284,21 @@ def write_excel_from_json(plines:Polylines, sens2cable: dict, outpath:str):
|
|||||||
#Worksheet 1 - Kabellängen nach Kabel-ID
|
#Worksheet 1 - Kabellängen nach Kabel-ID
|
||||||
ws1 = wb.active
|
ws1 = wb.active
|
||||||
ws1.title = "Length by ID"
|
ws1.title = "Length by ID"
|
||||||
ws1.append(["Cable-ID", "True Length (m)", "Cable-ArtNr"])
|
ws1.append(["Cable-ID", "True Length (m)", "Cable-ArtNr", "Cable-Name (short)"])
|
||||||
|
|
||||||
for pl in plines.kabel:
|
for pl in plines.kabel:
|
||||||
length = pl.length /1000 # Umrechnung von mm in m
|
length = pl.length /1000 # Umrechnung von mm in m
|
||||||
artnr = sens2cable[pl.id]
|
for artnr in sens2cable[pl.id]:
|
||||||
ws1.append([pl.id, length, artnr])
|
cable_name = ""
|
||||||
|
if artnr != "Kabel länger als max. Kabellänge":
|
||||||
|
cable_name = cable_cfg["Sivasnummern"][artnr]
|
||||||
|
ws1.append([pl.id, length, artnr, cable_name])
|
||||||
|
|
||||||
if "MA" in pl.id:
|
if "MA" in pl.id:
|
||||||
length_summary[artnr] += math.ceil(length) # Aufrunden von z.b. 10,3 auf 11 m (volle Meter!)
|
length_summary[artnr] += math.ceil(length) # Aufrunden von z.b. 10,3 auf 11 m (volle Meter!)
|
||||||
|
|
||||||
|
else:
|
||||||
# MB als Motor gesetzt! Beachte auch Zuordnung in get_cable_artnr!!
|
count_summary[artnr] += 1
|
||||||
|
|
||||||
elif "MB" in pl.id: # MB statt MA zur Motor-Kennzeichnung
|
|
||||||
length_summary[artnr] += math.ceil(length) # Aufrunden von z.b. 10,3 auf 11 m (volle Meter!)
|
|
||||||
|
|
||||||
else:
|
|
||||||
count_summary[artnr] += 1
|
|
||||||
|
|
||||||
# Worksheet 2 - Kabelnummern und Stückzahlen
|
# Worksheet 2 - Kabelnummern und Stückzahlen
|
||||||
ws2 = wb.create_sheet("Cables SIVAS")
|
ws2 = wb.create_sheet("Cables SIVAS")
|
||||||
@@ -444,45 +441,47 @@ def get_cable_artnr(section, length):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def map_sensor_to_cable(sensors, plines):
|
def map_sensor_to_cable(plines):
|
||||||
sens2cable = defaultdict()
|
sens2cable = defaultdict(list)
|
||||||
|
|
||||||
for pl in plines.kabel:
|
for pl in plines.kabel:
|
||||||
# Sensorname von Kabel-ID extraieren
|
|
||||||
sensor_name = pl.id.split('-')[-1]
|
sensor_name = pl.id.split('-')[-1]
|
||||||
# Kabellänge aus gleichem Eintrag auslesen + in m umrechnen
|
|
||||||
cable_length = pl.length/1000
|
cable_length = pl.length/1000
|
||||||
|
sensor_artinr = pl.s_artinr
|
||||||
# Sensor Artikelnummer aus positions.json holen
|
|
||||||
sensor_artinr = sensors[sensor_name].artinr
|
|
||||||
|
|
||||||
# Verzweigung, um welchen Typ es sich handelt (Special Keys)
|
|
||||||
name_prefix = sensor_name[0:2]
|
name_prefix = sensor_name[0:2]
|
||||||
|
|
||||||
section = None #Default
|
sections = [] #Default
|
||||||
|
|
||||||
# Hier MB ebenfalls als Motor gezählt. Motoren in Fortna-Layout nicht angebunden!
|
if name_prefix == "MA":
|
||||||
if name_prefix == "MA" or name_prefix == "MB":
|
sections = ["MA"] # Sektion für Motor-Kabel
|
||||||
section = "MA"
|
|
||||||
|
elif name_prefix == "MB":
|
||||||
|
sections = ["WD_Q"] # Sektion für Ventil-Kabel
|
||||||
|
|
||||||
elif name_prefix == "QM":
|
elif name_prefix == "QM":
|
||||||
section = "WD_Q"
|
sections = ["WD_Q"] # Sektion für Ventil-Kabel
|
||||||
|
|
||||||
elif sensor_name.startswith("B"):
|
elif sensor_name.startswith("B"): # Sensor Name beginnt mit B -> Sensor jeglicher Art
|
||||||
if sensor_artinr == 829422026:
|
if name_prefix == "BX": # Wenn "BX", dann Scanner
|
||||||
section = "WD_I-829422026"
|
sections = ["WF_B", "WD_I"] # Sektion für Scanner Patch-Kabel und Sektion für Standard-Sensorkabel zur Spannungsversorgung
|
||||||
|
cable_length = max(0.0, cable_length -4.0) # 4 Meter abziehen, da bereits 5m Kabelschwanz an Scanner dran
|
||||||
|
elif sensor_artinr == 829422026:
|
||||||
|
sections = ["WD_I-829422026"]
|
||||||
elif sensor_artinr == 720002003:
|
elif sensor_artinr == 720002003:
|
||||||
section = "WD_I-720002003"
|
sections = ["WD_I-720002003"]
|
||||||
else:
|
else:
|
||||||
section = "WD_I"
|
sections = ["WD_I"]
|
||||||
|
|
||||||
if section is None:
|
if not sections:
|
||||||
cable_artnr = "Kein Kabeltyp zu Sensor-Artikelnummer zugewiesen"
|
sens2cable[pl.id].append ("Kein Kabeltyp zugewiesen")
|
||||||
else:
|
continue
|
||||||
|
|
||||||
|
for section in sections:
|
||||||
cable_artnr = get_cable_artnr(section, cable_length)
|
cable_artnr = get_cable_artnr(section, cable_length)
|
||||||
if cable_artnr is None:
|
if cable_artnr is None:
|
||||||
cable_artnr = "Kabel länger als max. Kabellänge"
|
sens2cable[pl.id].append(f"Kabel länger als max. Kabellänge")
|
||||||
|
else:
|
||||||
sens2cable[pl.id] = cable_artnr
|
sens2cable[pl.id].append(cable_artnr)
|
||||||
|
|
||||||
return sens2cable
|
return sens2cable
|
||||||
|
|
||||||
@@ -531,7 +530,8 @@ if __name__ == '__main__':
|
|||||||
# Config für Kabel-Atikelnummern laden
|
# Config für Kabel-Atikelnummern laden
|
||||||
cable_cfg = configparser.ConfigParser()
|
cable_cfg = configparser.ConfigParser()
|
||||||
cable_cfg.optionxform = str #Keys case-sensitive
|
cable_cfg.optionxform = str #Keys case-sensitive
|
||||||
cable_cfg.read(os.path.join(config_dir, "kabel.cfg"))
|
with open(os.path.join(config_dir, "kabel.cfg"), encoding="utf-8") as f:
|
||||||
|
cable_cfg.read_file(f)
|
||||||
|
|
||||||
dxf_file = args.dxf
|
dxf_file = args.dxf
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user