Skip to main content

part2kicad

Aus einer LCSC-Nummer ein fertiges KiCad-Bauteil mit nachvollziehbarer Herkunft — Symbol, Footprint und 3D-Modell — direkt im eigenen Projekt.

Der Unterschied zu bestehenden Werkzeugen ist nicht die Bequemlichkeit, sondern die Nachvollziehbarkeit. Heute heißt das: jedes erzeugte Bauteil trägt seine Herkunft als Felder am Symbol — Quelle, Abrufdatum und Bauteilnummer, bei über die Suche geholten Teilen zusätzlich Preis und Lagerbestand mit dem Datum ihres Abrufs. Den Bericht, der Feld für Feld ausweist, woher ein Wert stammt und welche KLC-Regeln er erfüllt, gibt es heute noch nicht — er ist das Ziel und kommt mit Phase 3.

Stand

Frühe Entwicklung, aber der Weg von der Nummer zum eingebundenen Bauteil steht: part2kicad search und part2kicad add erzeugen im KiCad-Projekt Symbol, Footprint und 3D-Modell und tragen beide Bibliothekstabellen ein. Was noch fehlt — Multi-Unit-Bauteile, Normalisierung der Feldnamen, Qualitätsbericht, lokaler Zwischenspeicher — steht vollständig unter Bekannte Grenzen.

Voraussetzungen

  • Python 3.11 oder neuer

  • KiCad 10.0 oder neuer. Das Werkzeug ruft kicad-cli als eigenen Prozess auf. Liegt kicad-cli nicht im Suchpfad — unter Windows ist das der Normalfall —, wird es an den üblichen Installationsorten gesucht. Notfalls den Pfad ausdrücklich setzen:

    set PART2KICAD_KICAD_CLI=C:\Program Files\KiCad\10.0\bin\kicad-cli.exe
    

Installation

Heute aus dem selbst gebauten Wheel:

uv build
uv pip install dist/part2kicad-*.whl

Das Paket ist ein reines py3-none-any-Wheel; auf dem Zielrechner wird kein Compiler gebraucht.

Die Veröffentlichung auf PyPI steht noch aus und ist ein eigener Schritt, nicht ein vergessener. Sie wirkt nach außen und lässt sich nicht zurücknehmen: sie belegt den Namen dauerhaft und macht den Befehlszuschnitt (search, add) zur veröffentlichten Schnittstelle, an der sich jedes Skript und jede Anleitung festmacht. Deshalb kommt sie ans Ende und nicht in die Mitte der Entwicklung. Bis dahin gilt der Weg über uv build oben; uv pip install part2kicad funktioniert noch nicht.

Benutzung

part2kicad search rp2040          # suchen, auswählen, im selben Aufruf übernehmen
part2kicad add C2040              # wenn die Bauteilnummer schon bekannt ist
part2kicad add C2040 --force      # ein bereits vorhandenes Bauteil ersetzen

Das Zielprojekt wird wie bei git gesucht: vom Arbeitsverzeichnis aufwärts nach einer .kicad_pro-Datei. --project <pfad> gibt es ausdrücklich an. Wird keines gefunden, bricht das Werkzeug ab, statt irgendwohin zu schreiben.

--json gibt maschinenlesbar aus und fragt nichts, --verbose schreibt zu jedem Abruf eine Zeile mit Adresse und Statuscode auf die Fehlerausgabe.

Zweiter Import desselben Bauteils

Liegt das Bauteil schon in der Projektbibliothek, meldet part2kicad das samt dem Datum des ersten Abrufs und schreibt nichts. Wer am Bauteil von Hand nachgebessert hat, verliert das nicht durch einen unbedachten zweiten Aufruf. --force ersetzt es; ein bereits im Schaltplan platziertes Symbol muss dort über „Symbole aus Bibliothek aktualisieren" nachgezogen werden.

Was am erzeugten Bauteil steht

Gruppe Felder
Herkunft und Nachverfolgung Supplier Part, Manufacturer, Manufacturer Part, Datasheet, Quelle, Abrufdatum
Handelsdaten Preis und Lagerbestand, jeweils mit Preis Stand bzw. Lagerbestand Stand — dem Datum des Abrufs
Technische Parameter was die Quelle liefert, unter ihren unveränderten Feldnamen
Bestückung JLCPCB Part Class (Basic/Extended) — sie entscheidet über die Bestückungskosten

Preis und Lagerbestand stehen nur in der Suchantwort. Wer sie am Bauteil braucht, holt es über part2kicad search; der Abruf über die Bauteilnummer liefert sie nicht mit, und part2kicad erfindet keinen Preis. Alle Felder außer Reference und Value werden versteckt angelegt, damit der Schaltplan lesbar bleibt.

Umgang mit den Datenquellen

part2kicad fragt fremde Server ab, die dafür keinen Vertrag mit uns haben. Was es dabei tut, steht hier vollständig.

Benutzte Endpunkte

Alle Adressen stehen in src/part2kicad/rezept.toml und nicht im Programmcode. Ändert die Gegenseite sich, ist die Reparatur eine Änderung dort — kein Programmupdate.

Zweck Adresse Wann
Suche https://pro.easyeda.com/api/eda/product/search einmal je search-Aufruf
Geometrie (Symbol und Footprint) https://easyeda.com/api/products/{lcsc}/components einmal je übernommenem Bauteil
3D-Modell (STEP) https://modules.easyeda.com/…/{uuid} einmal je übernommenem Bauteil, sofern eines hinterlegt ist

Symbol und Footprint kommen aus einem Abruf; es gibt keinen zweiten für den Footprint. Liegt ein Bauteil bereits in der Bibliothek, findet ohne --force gar kein Abruf statt.

Kennung

part2kicad meldet sich mit

part2kicad/<version> (+https://pypi.org/project/part2kicad/)

Eine ehrliche, das Produkt benennende Kennung. Ausdrücklich nicht: ein gefälschter Browser-User-Agent oder ein Umbiegen der Namensauflösung, um Sperren zu umgehen. Das ist keine Zierde — gemessen kommt der ehrliche Weg durch, und der unehrliche wäre auch dann nicht in Ordnung, wenn er nötig wäre.

Ändern lässt sich die Kennung ohne Programmänderung: eine eigene Datei rezept.toml im plattformüblichen Konfigurationsordner (Windows %LOCALAPPDATA%\part2kicad\, Linux ~/.config/part2kicad/) überschreibt punktuell einzelne Werte:

[kennung]
user_agent = "meine-kennung/1.0 (+https://beispiel.example)"

Mindestabstände und Verhalten bei einer Sperre

Jeder Endpunkt hat sein eigenes Zeitbudget — die gemessene Sperre ist pfadgebunden, ein gemeinsames Budget würde die Suche ausbremsen, sobald ein Geometrieabruf ansteht.

Endpunkt Mindestabstand Höchstversuche
Suche 2,5 s 3
Geometrie 3,0 s 3
3D-Modell 1,0 s 3

Die Gegenseite sperrt nach etwa 45 Abrufen innerhalb weniger Minuten — kumulativ, nicht nach Spitzenrate. Sie antwortet dann mit einem nackten HTTP 403, ohne Retry-After und ohne HTTP 429; vorhersehen lässt sich die Sperre also nicht, nur erkennen. Die Sperre löst sich nach etwa zwei Minuten von selbst.

part2kicad wartet in diesem Fall, beginnend bei 120 Sekunden und je Versuch verdoppelnd, höchstens drei Versuche — zusammen also 120 + 240 = sechs Minuten. Mehr wäre außer Verhältnis: die Sperre löst sich gemessen nach rund zwei Minuten, und steht sie nach der dreifachen Zeit noch, ist es nicht die gewöhnliche Ratenbremse; weiteres Warten ist dann keine bessere Wette als ein Hinweis an den Nutzer. Die Wartezeit wird als Statuszeile angezeigt — eine zweiminütige stille Pause wäre von einem Absturz nicht zu unterscheiden, und Strg-C beendet sie jederzeit mit einer Meldung statt mit einem Stapelauszug. Lässt die Gegenseite auch danach nicht locker, bricht der Aufruf mit einer Meldung ab, die sagt, dass es nicht am eigenen Rechner liegt. Geschrieben wird dabei nichts: solange nicht alle Bestandteile beisammen sind, bleibt die Bibliothek unberührt.

Die Zahlen stehen alle in rezept.toml und lassen sich in der eigenen Nutzerdatei ändern — ein Deckel im Programmcode würde diese Möglichkeit nehmen.

Die Ausschlussliste der Gegenseite

easyeda.com/robots.txt sperrt //api/-Pfade — und damit den Geometrie-Endpunkt. Das wird hier offen benannt statt übergangen:

  • Der Weg wird bewusst benutzt, weil es keinen anderen gibt, über den die CAD-Daten eines Bauteils zu bekommen wären.
  • Er wird minimiert: ein Abruf je Bauteil, nie ein Vollkatalog, und bei einem bereits vorhandenen Bauteil gar keiner.
  • Ein Ergebnisspeicher, der auch den wiederholten Abruf desselben Bauteils erspart, gibt es heute noch nicht — er kommt mit Phase 5. Ein zweites part2kicad add C2040 --force holt die Geometrie also ein zweites Mal. Das steht hier, weil eine Offenlegung, die eine noch nicht ergriffene Maßnahme aufzählt, keine ist.
  • Der Suchverkehr — also das Volumen — läuft über pro.easyeda.com, das in seiner eigenen Ausschlussliste nur /login und benannte SEO-Bots führt, nicht /api/.

Wer das anders bewertet, kann part2kicad add ganz lassen und das Werkzeug nur zum Suchen benutzen.

Bekannte Grenzen

Ehrlich statt vollständig klingend:

  • Zwei gleichzeitige Aufrufe auf dieselbe Bibliothek können ein Symbol verlieren. Der Tausch der fertigen Datei ist atomar, das Lesen-Ändern-Schreiben davor nicht. Für ein interaktives Einzelplatzwerkzeug ist eine Dateisperre bewusst nicht eingebaut worden.
  • macOS ist ungetestet, und auf Linux ist noch niemand gelaufen. Entwickelt und geprüft wird unter Windows. Für Linux sind die Plattformannahmen statisch abgesichert — kein fest verdrahteter Pfad, kein Shell-Aufruf, kein Dateizugriff ohne angegebenen Zeichensatz, Konfigurationsordner aus platformdirs —, ein Lauf steht aus. Für macOS ist zusätzlich der Suchpfad zu kicad-cli hinterlegt, aber auch dort hat niemand es laufen lassen.
  • Bauteile aus mehreren Einheiten werden erkannt und ausdrücklich abgelehnt, statt ein Symbol mit null Pins abzulegen. Das Zusammenführen kommt später.
  • Die Feldnamen der technischen Parameter bleiben, wie die Quelle sie liefert — also uneinheitlich. Das Vereinheitlichen ist ein eigener Schritt und noch nicht gemacht.
  • Den Qualitätsbericht gibt es noch nicht. Herkunft und Abrufdatum stehen als Felder am Bauteil; ein Bericht, der Feld für Feld die Herkunft ausweist und die geprüften KLC-Regeln samt Ergebnis auflistet, kommt mit Phase 3. Bis dahin ist „geprüft" die Zusicherung, dass jeder Wert von der Quelle stammt — nicht, dass eine Regelprüfung gelaufen wäre.
  • Einen lokalen Zwischenspeicher gibt es noch nicht. Jeder Abruf geht an die Gegenseite; ein zweites add … --force holt dieselbe Geometrie erneut. Der Zwischenspeicher kommt mit Phase 5, siehe auch oben unter der Ausschlussliste.
  • Preis und Lagerbestand gibt es nur über part2kicad search, siehe oben.

Tests

Lauf Befehl
Schnelllauf, ohne KiCad pytest -m "not kicad and not live"
Voller Lauf (Vorgabe) pytest -m "not live"
Live-Tests gegen die echte Gegenseite pytest -m live --live

Live-Tests laufen nie versehentlich mit: sie brauchen sowohl die Markierung als auch den Schalter --live. Tests, die ein installiertes KiCad brauchen, überspringen sich mit sichtbarer Begründung, wenn keines gefunden wird.

Lizenz

GPL-3.0-or-later, siehe LICENSE.

Metadata

Release files for part2kicad 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for part2kicad 0.1.0
File Size Uploaded
part2kicad-0.1.0.tar.gz 211.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for part2kicad 0.1.0
File Interpreter ABI Platform
part2kicad-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 295.7 kB

Release files / part2kicad-0.1.0.tar.gz

Download URL part2kicad-0.1.0.tar.gz
Size 211.2 kB
Tags Source
SHA-256 checksum
How to use checksums
14da38e439027a4ea3e1a2742242755d8f304350bfe53985921744a594014905
BLAKE2b-256 checksum
How to use checksums
de141209eae95b6ed6cd9631765cb9b6fc9646b0797c6213b86ead45cc20b74c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / part2kicad-0.1.0-py3-none-any.whl

Download URL part2kicad-0.1.0-py3-none-any.whl
Size 84.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
41521a891d227a4e150d5c0e9f330fe0dcf3e3e71422b6a9b9d8a6a73a4dbe4c
BLAKE2b-256 checksum
How to use checksums
5dd623c09e3f0fbe9fa85819b842002a230bc654e3169e5b3d244fb11a26852f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page