Schemata (erzwungen) laden

Problemstellung

Regelmäßig wird nach der Projektbearbeitung vergessen auch noch die Fertigungsdaten oder Stücklisten neu auszuschreiben, oder es wird als „nerviges Übel“ empfunden und nur ungern gemacht. Manchmal gibt es auch Updates des Exportschemata und das Add-On zur Verteilung von Einstellungen etc. ist noch nicht bekannt oder wird schlicht nicht genutzt.

Problemlösung

Der Import des Schemata wurde schon behandelt, nun geht es an den Export. Über Label lassen sich alle Art von Fertigungsunterlagen und Listen ausschreiben, sofern diese nur vorher mal als Schemata angelegt wurden:

Weiterlesen

Script dynamisch nachladen

Problemstellung

Vielleicht schon bekanntes Problem: Es lassen Klassen bei EPlan nicht auf verschiedene C#-Dateien aufteilen und EPlan lädt dann einfach munter beim ersten Benutzen der Klasse die passende Datei nach. So bin ich es zumindest schon früher in ANSI C, C#, Java und anderen Sprachen gewohnt. Meist muss man eine gewisse Konvention beim Dateinamen berücksichtigen, aber dann kann man sich munter austoben.

Problemlösung

Dafür kann man das hinten herum mit etwas Selbstmanagement auch hin bekommen, mit RegisterScript und Rückwärts auch mit UnregisterScript. Ich habe mir da noch eine Extramethode gegönnt um nur mit der Angabe des Scripts einfach dieses Still zu laden. Dann wird der Nutzer nicht mit der Meldung behelligt, die beim Laden eines Scriptes kommt. Kann es nicht geladen werden, passiert halt nichts, oder schon aufgebaute Menüs bleiben eben ausgegraut.

Weiterlesen

Projektsprachen per Script manipulieren

Problemstellung

Der Export von PDFs wurde schon hier: pdfs-exportieren erklärt, nun soll aber nicht nur die deutschsprachige PDF erzeugt werden, sondern auch die englische oder sonst eine andere? Das Wörterbuch ist korrekt vervollständigt? Und das sollte auch nicht manuell umgestellt werden müssen..

Problemlösung

Man muss dazu zwischen Display-Sprache und Variable-Sprache unterscheiden. Beim ersten sind alle einsprachigen Texte gemeint, beim zweiten ließen sich auch mehrere Sprachen nacheinander definieren. Genutzt wird in jedem Fall die Funktion SetProjectLanguage, die die drei Parameter aufweist.

Weiterlesen

Mal eben nen Backup vom Projekt in zwei klicks

Problemstellung

Während der Projektbearbeitung möchte man grundlegende, strukturelle Änderungen machen, aber das Projekt nicht ggf. riskieren. Oder es geht auf die Baustelle und das komplette Projekt soll mit, damit Änderungen direkt umgesetzt werden können. Beides Beispiele für die Action backup. Das eine als einfache Sicherung, das andere als Backup zur externen Bearbeitung.

Problemlösung

Nehmen wir erst einmal nur den ersten Fall an: Das Projekt soll zur Sicherheit des Standes eben gesichert werden. Man könnte nun das komplette Projekt über den Kopierdialog als vollwertiges Projekt wegspeichern. Oder über fast den gleichen Weg das Projekt sichern. Beides über ein bisschen Navigation durch die Menüs möglich und bei beiden ist die Versuchung groß es einfach zu unterlassen. Deswegen meine Devise: Mach so etwas so schlicht und einfach, dass es entweder im Hintergrund geschieht oder es mit Minimalaufwand umsetzbar ist.

Weiterlesen

Mehr als nur eine DynDNS-Adresse?

Problemstellung

Das Netzwerk soll von außen erreichbar sein, aber aus Gründen, nicht nur über eine Subdomain. Das könnte zB. dann der Fall sein, wenn man privat einige Seiten hosten möchte. Oder wenn nach einer Umstellung nicht gleich alle alten Installationen abgehangen werden dürfen.

Das eigentliche Problem ist dabei meist die beschränkte Einstellmöglichkeit des Routers. Zwar ließe sich theoretisch auch bei der Fritzbox mit einer Manipulation des Configfiles noch etwas mehr raus holen, doch ist das auch Updatesicher? Nicht nur das es ein Update überlebt, sondern sich dann auch noch editieren lässt… Zu viel Unsicherheit für einen Service, der ggf. dann ausfällt, wenn man ihn gerade dringend braucht, oder am wenigstens dran kommt ums zu fixen (meist eher zum Urlaubsbeginn als wenn man eh gerade dran arbeitet).

Problemlösung

Das ganze habe ich bei mir über ein Docker mit dem Image qmcgaw/ddns-updater gelöst:

  • Image auf die SD-Karte (Raspberry Pi Imager, etwas ohne Desktop)
  • Raspberry Pi damit hochfahren (reicht schon ab 2B)
  • Folgendes Script ablegen und ausführen:
Weiterlesen

Surfen mit Spamblock und privater

Mit dem Thema werde ich keine überragende Neuigkeiten vermitteln. Es geht immerhin um das Projekt Pi-Hole, was bei den meisten bekannt sein dürfte. An dieser Stelle hilft eigentlich schon die Installationsanleitung auf der Projektseite weiter und alles ist gut. Ja und nein, denn hier soll es auch etwas um die Hardware gehen.

Ein DNwas?

Kurz zur Klärung: Was macht ein DNS? Ein DNS (Domain Name Server) wandelt eine Adresse im Netzwerk(die wir Menschen uns am besten merken können) in die (aktuell gültige) IP-Adresse (quasi die Telefonnummer des Zielrechners, mit dem ein PC besser arbeiten kann) um. Kleines Beispiel: Die Domain google.de wird im Hintergrund in die IP 142.250.181.195 aufgelöst.

Was macht nun der PiHole so tolles? Zum einen geht nicht jede Anfrage an einen externen Server -> nur über den DNS-Server lässt sich dann schlechter tracken, was sich gerade wer ansieht. Zum anderen kann man PiHole mit sog. Blocklisten füttern, quasi schwarze Listen von Webadressen, die für Spam bekannt sind, mal korrumpiert wurden, oder anderweitig aufgefallen sind. Zudem kann man auch den Zugriff von (einzelnen) Geräten im Netzwerk nach draußen einschränken. Aus persönlicher Erfahrung: Kann hilfreich sein, zB. bei billigen Soundbars etc. die ständig nach China telefonieren wollen.

Weiterlesen

Dateien mit Messdaten zu groß

Problemstellung

Je größer die Datei mit den Daten, desto länger braucht sie auch zum laden. Zerlegt man diese in mehrere, kleinere Fragmente, wächst mitunter die Datenmenge (die referenzierende Größe, meistens ein Timestamp, muss ja in jeder Datei vorhanden sein). Unterm Strich sind die einzelnen Dateien schneller geladen, da nicht immer die kompletten Messdaten geladen werden, sondern nur die, die gerade verarbeitet werden sollen. Doch wie zerlegt man „mal eben“ so eine Tabelle?

Problemlösung

In Excel? Wäre möglich, doch birgt das immer die Gefahr, dass man in Excel beim bearbeiten mit etwas Pech auch die Daten manipuliert (Thema Formatierung). Besser wäre da die Trennung der Daten so RAW wie möglich: Also direkt in txt-Form. Gehen wir mal davon aus, dass diese Daten im CSV-Format wie:

Time;Value1;Value2;Value3;Value4;Value5;...;ValueN
xxxx.xx.xx xx:xx:xx.xxx;0.000;0.000;0.000;0.000;0.000;...;0.000

vorliegen. Am Ende sollen mehrere Dateien entstehen, in denen immer die logischen Gruppen von Messwerten zusammen gefasst werden (zB. alle Spannungen, alle Ströme, alle Temperaturen, oder jeweils die Prüflinge mit allen Kenndaten).

Weiterlesen

Farbnamen aus dem RAL-Code ermitteln

Problemstellung

Wie war denn noch der Name für RAL3000? Oh, auch noch den englischen? Kurz in der Tabelle gesucht, oder auf Seiten wie ral-farben.de geschaut: Feuerrot / Flame red. Ok, aber das für jedes Projekt? Die gebräuchlichsten sind schnell im Kopf oder auf dem Spicker und der englische Farbname lässt sich ja in der Übersetzungsdatenbank ablegen. Aber das muss doch einfacher gehen, oder?

Problemlösung

Ok, die Frage ist hier schon etwas plakativ. Daher einfach kurz zur möglichen Ausgangslage: Im Projekt sind zB. die benutzerdefinierten Felder 90/91 für den RAL-Code und den Farbnamen der Schaltschränke, die Felder 92/93 entsprechend für die Klemmkästen. Erstmal angenommen, alle Felder sind Multilang, es kommt also ein ??_??@.. beim auslesen zurück. Daher kommt einfach die Lösung aus Multilang-Strings einfach auslesen zum Einsatz. Das Auslesen an sich ist recht einfach (Ähnlich zu Erstelldatum in Seiten manipulieren, nur über XEsGetProjectPropertyAction), wie auch das neu einschreiben (XEsSetProjectPropertyAction). Fehlt nur noch eine Liste, gegen die geprüft und aus der dann die Daten gezogen werden. Da bieten sich zwei Typen gut an:

Weiterlesen

Erstelldatum in Seiten manipulieren

Problemstellung

Erstmal: Warum sollte man das machen wollen? Nunja: Im Basisprojekt sind gewisse Seiten schon vorab erstellt worden. Wird das Basisprojekt kopiert, wird auch das Erstellungsdatum der Seiten (egal ob nun vollkommen leer als Vorlage, oder gefüllt als Legende etc.) mit kopiert. Damit ergibt sich zwangsweise ein älteres Datum in den Seiten als im Projekt selbst. Das sieht etwas uncool aus, oder bringt nur sehr viele Fragen mit sich (besonders in gewissen Kundenkreisen). Und dann ist das nicht einfach nur eine Zeichenfolge, sondern ein Zahlenwert..

Problemlösung

Das Schreiben von Seiteneigenschaften mit XEsSetPagePropertyAction hatte ich ja schon beschrieben, nun muss nur noch geklärt werden, was geschrieben werden soll. Der Zahlenwert sind die Sekunden, die seit dem 1.1.1970 vergangen sind, in Unix die Sekunde 0. Es lässt sich auch einfach selbst heraus finden: Nach dem Anpassen eines Formulars einfach mal in das passende Feld für den Timestamp der letzten Änderung schauen!

Weiterlesen

Funktionen im Wandel der Versionen

Problemstellung

Scripte sollen möglichst unabhängig von Versionen laufen (und dennoch gerne alles mitnehmen, was dem Nutzer hilft) um auch nach Upgrades auf die neuere Version nicht erstmal wieder Probleme zu verursachen. Immerhin geht es bei den meisten Funktionen in den Scripten (zumindest da, wo sie regelmäßig zum Einsatz kommen) um mehr als nur seltene Sonderaufgaben etwas komfortabler zu gestalten. Nicht selten hängt indirekt mit daran, ob ein Auftragspensum überhaupt machbar, oder ein gewisser Dokumentenumfang in gegebener Zeit erstellt, oder die immer gleichen Arbeitsabläufe sichergestellt werden können. Und nein, das ist tatsächlich keine Übertreibung. Ist von jetzt auf gleich erstmal die Funktion weg und es müssen damit wieder manuell Dateien abgelegt werden…

Lösungsansatz

Die folgende Tabelle habe ich mir mal als Hilfestellung zusammen geschoben, welche Funktion in welcher Version verfügbar ist/war. Auch wenn ich beruflich eher immer auf der neuesten Produktivversion arbeite (aktuell 2023), ist es dennoch nicht verkehrt auch die ausgelaufenen Funktionen im Blick zu halten. Zum einen kann man gelegentlich auch mal den Ballast abwerfen, zum anderen findet man auch neue Funktionen, die EPlan (teilweise noch in der Beta-Version) eingeführt hat.

Achtung! Die Tabelle enthält nur die allgemein dokumentierten Funktionen. Es gibt noch einiges mehr, was EPlan nicht dokumentiert hat. An der Stelle auch immer der Tipp mal bei suplanus zu schauen. Johann Weiher sitzt einfach näher an der Quelle und hat oftmals die eine oder andere Funktion (oft in meinen Beiträgen verlinkt, sofern genutzt).

Weiterlesen

Externes Bearbeiten (lassen) von Daten

Problemstellung

Nicht immer liegen alle Unterlagen/Daten/Kennzeichnungen/.. direkt vor, nicht selten möchte der Kunde eigene Kennzeichnungen in den Plänen sehen, oder es sind schlicht Daten aus anderen Abteilungen, die das Projekt ergänzen sollen. Eplan hat hierfür das wirklich schöne Funktion „Externe Bearbeitung„. Es lassen sich schöne Vorlagen zaubern und dem Kunden oder anderen Abteilungen zur weiteren Eintragung zur Verfügung stellen.

Nun möchte ich dies aber vielleicht als Austauschformat gebrauchen, was bei jedem (ersten) Start diese Daten einließt, wenn die Datei vorhanden ist. Ebenso sollte beim Schließen des Projekts der aktuelle Stand für andere (wieder) bereit gestellt werden (nach Erweiterungen oder Änderungen). Ansich auch kein Problem, denn es gibt XMActionDCCommonExport fürs ausschreiben und XMActionDCImport für den Import. Nur schaut man sich die Beschreibung zum Import an heißt es dort: DataConfigurationFile : path of data configuration file. Also geht’s doch nicht so einfach?

Weiterlesen

Multilang-Strings einfach auslesen

Problemstellung

Beim Auslesen einer Eigenschaft in EPlan kommt ein String wie ??_??@Inhalt des Feldes; oder bei übersetzten Feldern eher de_DE@Inhalt des Feldes;en_US@Content of the field; was aber gewünscht war, war nur Inhalt des Feldes. Ursache ist in beiden fällen ein als mehrsprachig markiertes Feld, welches einen Multilang-String aufnehmen, verarbeiten und darstellen kann. Vergleiche mit anderen Strings sind so natürlich schon zum scheitern verurteilt, wenn das nicht berücksichtigt wird.

Problemlösung

Nun gibt es zwei verschiedene Ansätze, die mir direkt in den Sinn kommen:

  • Nach ; splitten, den ersten Teil bei @ splitten und schon ist der zweite Teil das Ergebnis. Das ist allerdings auch immer der hoffentlich deutsche oder allgemeine Teil, gesichert ist das nicht. Nun könnte man noch nach dem ersten Splitt alle Elemente durchsuchen und nach de_DE@ oder ??_??@ (oder eben nach der gewünschten Zielsprache) im Anfang prüfen, aber auch das ist weder schön noch performant
  • Suchen mit regulären Ausdrücken direkt nach dem richtigen Ausdruck in der passenden Sprache mit Fallback-Lösung
Weiterlesen

FN-Key-Lock

Eher zufällig passiert: Unter Ubuntu die FN+ESC-Taste gleichzeitig gedrückt, seit dem musste ich die FN-Taste drücken um auf die F1- bis F12-Tasten in ursprünglicher Belegung nutzen zu können.
Der sogenannte FN-Key-Lock kann mit gleichzeitig gedrückter FN- und ESC-Taste aktiviert als auch deaktiviert werden. Wenn aus Gründen die F-Tasten nicht/wenig genutzt werden, dafür aber die Funktionen wie Lautstärke, Helligkeit, …, dann kann die Umschaltung sinnvoll sein.

Das ganze funktioniert im übrigen nicht nur unter Linux, sondern auch wohl unter Windows (ungetestet!).

Visualisierung von Adresslisten @PowerShell

Problemstellung

Basis ist der Artikel Visualisierung von Adresslisten. Die Problemstellung ist die Selbe, nur „aber ich hab doch kein Linux“ kommt nun hinzu. Und weil es schon interessant ist, das selbe Problem auch mal anders zu lösen, nun nochmal in der PowerShell, die unter Windows schon wirklich viel nutzbares mit bringt, was doch eher unter Unix allgemein als Bordmittel bekannt ist. Also gleich ans Eingemachte:

Denken wir Groß – nun in der PowerShell

Als Basis dient wieder die selbe *.csv mit folgendem Inhalt

Gruppe;Name;Beschreibung;Adresse
Macs;Mac1;Nikolaiort;Nikolaiort 1-2 49074 Osnabrück-Innenstadt
Macs;Mac2;Theodor-Heuss-Platz;Theodor-Heuss-Platz 1 49074 Osnabrück-Innenstadt
Macs;Mac3;Pagenstecher;Pagenstecherstr. 72 49090 Osnabrück-Hafen
Macs;Mac4;Hannoversche;Hannoversche Str. 45 49084 Osnabrück-Fledder
Macs;Mac5;Hauptstrasse;Hauptstr. 105 49205 Hasbergen-Gaste
BKing;BKay1;Moserstrasse;Moserserstr. 51 49074 Osnabrück
BKing;BKay2;Pagenstecher;Pagenstecherstr. 50 A 49090 Osnabrück
BKing;BKay2;Hannoversche;Hannoversche Str. 74 49084 Osnabrück

Parse the Line

Auch hier geht es erstmal mit dem Einlesen und dem Parsen los. Hier aber direkt incl. der Sortierung:

Weiterlesen

Visualisierung von Adresslisten

Problemstellung

„Ach, was machst du denn hier?!“ hieß es letztens von einem Kita-Papa meines Kindes, als er mich nahe unseres Zuhauses ebenfalls auf dem Weg zur Kita traf. Bis dahin wusste ich allerdings auch nicht, dass sie bei uns ums Eck wohnt.
Daher die Idee: Alle Adressen zu visualisieren, da wir Bilder eben einfacher begreifen. Wichtig für mich dabei:

  • Es sollte dem Datenschutz genügen -> Als Visualisierung nicht gerade GoogleMaps o.ä. nutzen, die Speicherung der Daten idealerweise offline
  • Für spätere Erweiterungen per Script aus einer Liste erstellbar (*.csv, *.xlsx,..)
  • Gruppen differenzierbar durch unterschiedliche Farben und/oder Icons

Lösungsansatz manuell

Adressen in Geopunkte/Koordianten

Am Anfang steht, nach der Bereinigung der Daten geht’s an die Abfrage der Koordinaten. Man könnte nun jede einzelne bei GoogleMaps suchen und sich aus der Adresszeile die Koordinaten heraus nehmen(wäre blöd wegen des Datenschutzes). Das selbe geht auch mit OpenStreetMap über den Perma-Link. Aber es geht auch noch schöner und sauberer:

Weiterlesen