diff --git a/lib/drawdxf.py b/lib/drawdxf.py index eb5b0a3..801f9f1 100644 --- a/lib/drawdxf.py +++ b/lib/drawdxf.py @@ -20,6 +20,7 @@ class Point: @dataclass class Polyline: id: str + s_artinr: str coords: List[Point] length: float @@ -270,13 +271,12 @@ def parse_sensors_from_json(positions_json): def export_excel(plines, out_path): # Hier für Excel Export print("creating excel file with cable information ..") - sens2cable = map_sensor_to_cable(sensors, plines) - write_excel_from_json(plines, sens2cable, out_path) + write_excel_from_json(plines, out_path) print("done") -def write_excel_from_json(plines:Polylines, sens2cable: dict, outpath:str): +def write_excel_from_json(plines:Polylines, outpath:str): wb = Workbook() - + sens2cable = map_sensor_to_cable(plines) # Dicts für Anzahl bzw kummulierte Länge count_summary = defaultdict(int) 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 ws1 = wb.active 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: length = pl.length /1000 # Umrechnung von mm in m - artnr = sens2cable[pl.id] - ws1.append([pl.id, length, artnr]) + for artnr in sens2cable[pl.id]: + 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: - length_summary[artnr] += math.ceil(length) # Aufrunden von z.b. 10,3 auf 11 m (volle Meter!) - - - # MB als Motor gesetzt! Beachte auch Zuordnung in get_cable_artnr!! - - 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 + if "MA" in pl.id: + 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 ws2 = wb.create_sheet("Cables SIVAS") @@ -444,45 +441,47 @@ def get_cable_artnr(section, length): return None -def map_sensor_to_cable(sensors, plines): - sens2cable = defaultdict() +def map_sensor_to_cable(plines): + sens2cable = defaultdict(list) + for pl in plines.kabel: - # Sensorname von Kabel-ID extraieren sensor_name = pl.id.split('-')[-1] - # Kabellänge aus gleichem Eintrag auslesen + in m umrechnen cable_length = pl.length/1000 - - # Sensor Artikelnummer aus positions.json holen - sensor_artinr = sensors[sensor_name].artinr - - # Verzweigung, um welchen Typ es sich handelt (Special Keys) + sensor_artinr = pl.s_artinr 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" or name_prefix == "MB": - section = "MA" + if name_prefix == "MA": + sections = ["MA"] # Sektion für Motor-Kabel + + elif name_prefix == "MB": + sections = ["WD_Q"] # Sektion für Ventil-Kabel elif name_prefix == "QM": - section = "WD_Q" + sections = ["WD_Q"] # Sektion für Ventil-Kabel - elif sensor_name.startswith("B"): - if sensor_artinr == 829422026: - section = "WD_I-829422026" + elif sensor_name.startswith("B"): # Sensor Name beginnt mit B -> Sensor jeglicher Art + if name_prefix == "BX": # Wenn "BX", dann Scanner + 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: - section = "WD_I-720002003" + sections = ["WD_I-720002003"] else: - section = "WD_I" + sections = ["WD_I"] - if section is None: - cable_artnr = "Kein Kabeltyp zu Sensor-Artikelnummer zugewiesen" - else: + if not sections: + sens2cable[pl.id].append ("Kein Kabeltyp zugewiesen") + continue + + for section in sections: cable_artnr = get_cable_artnr(section, cable_length) if cable_artnr is None: - cable_artnr = "Kabel länger als max. Kabellänge" - - sens2cable[pl.id] = cable_artnr + sens2cable[pl.id].append(f"Kabel länger als max. Kabellänge") + else: + sens2cable[pl.id].append(cable_artnr) return sens2cable @@ -531,7 +530,8 @@ if __name__ == '__main__': # Config für Kabel-Atikelnummern laden cable_cfg = configparser.ConfigParser() 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