Dolibarr-Modul NetDiag — Netzwerk-Diagnose-Protokolle, JSON-API für die NetDiag-App
Find a file
Eduard Wisch bb6681ac37
All checks were successful
Deploy netdiag / deploy (push) Successful in 13s
Reiter am Kunden nur bei vorhandenen Protokollen (1.3.1) [deploy]
Der Reiter stand auf jeder Kundenkarte; die Leiste dort traegt ueber 20
Eintraege, auf Prod gibt es 20 Protokolle bei 6 von 111 Kunden. Er
erscheint jetzt nur bei Bestand, mit Anzahl. Am AUFTRAG bleibt er fest.

Als Hook (class/actions_netdiag.class.php, completeTabsHead) statt
festem Tab, Muster wie bei Mahnung und ElektroPlanung. Uebernimmt einen
bereits vorhandenen Eintrag desselben Schluessels statt einen zweiten
anzuhaengen — kein doppelter Reiter auch vor der Reaktivierung.

Lokal verifiziert: Kunde mit 13 Protokollen zeigt 'Netzwerk-Diagnose 13'
einmalig, Kunde ohne Protokoll zeigt den Reiter gar nicht.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-07 21:27:51 +02:00
.forgejo/workflows Initiales Commit — Dolibarr-Modul NetDiag [deploy] 2026-05-19 12:12:11 +02:00
admin Anmeldung nur noch ueber AWL-Auth - eigener JWT-Pfad entfernt 2026-08-17 17:55:53 +02:00
api 1.3.0: PDF-Zweig SIP-Erreichbarkeit, Token in der URL nur noch fuer den APK-Download [deploy] 2026-08-19 21:40:26 +02:00
class Reiter am Kunden nur bei vorhandenen Protokollen (1.3.1) [deploy] 2026-09-07 21:27:51 +02:00
core/modules Reiter am Kunden nur bei vorhandenen Protokollen (1.3.1) [deploy] 2026-09-07 21:27:51 +02:00
doc/datenkorrekturen Datenkorrektur ausgefuehrt: drei dhcpcheck-Altmessungen auf "nicht messbar" 2026-08-17 16:45:15 +02:00
langs Anmeldung nur noch ueber AWL-Auth - eigener JWT-Pfad entfernt 2026-08-17 17:55:53 +02:00
lib 1.3.0: PDF-Zweig SIP-Erreichbarkeit, Token in der URL nur noch fuer den APK-Download [deploy] 2026-08-19 21:40:26 +02:00
sql Phase 5: Kundendokument lesbar, Gerätemerkmale kommen endlich an 2026-08-15 18:54:01 +02:00
ChangeLog.md Reiter am Kunden nur bei vorhandenen Protokollen (1.3.1) [deploy] 2026-09-07 21:27:51 +02:00
netdiag_object_tab.php Initiales Commit — Dolibarr-Modul NetDiag [deploy] 2026-05-19 12:12:11 +02:00
netdiagindex.php Phase 5 abgeschlossen: Klarnamen, Parameter, Listen-Ampel, N+1, Standort 2026-08-16 11:09:28 +02:00
netdiagprotocol_card.php Drei Falschaussagen im Kundendokument, alle aus Altdaten 2026-08-16 23:11:07 +02:00
README.md README: Anmeldung nur noch ueber awlauth, PDF-Renderer und netdiagPdfText ergaenzt 2026-08-17 18:05:26 +02:00

NetDiag — Netzwerk-Diagnose für Dolibarr

Dolibarr-Modul für die Ablage von Netzwerk-Diagnose-Protokollen. Erfasst per mobiler App (siehe Projekt NetzwerkDiagnose/app) gefundene Geräte, Ports und Messungen und hängt die Protokolle dauerhaft an Kunde und Auftrag.

Funktionen

  • Datenmodell: Protokoll → Geräte → Messungen (llx_netdiag_*)
  • Tab Netzwerk-Diagnose an Kunde (thirdparty) und Auftrag (commande)
  • JSON-API unter /custom/netdiag/api/ für die mobile App. Anmeldung ausschließlich über das zentrale Auth-Modul awlauth (Brute-Force-Bremse, gemeinsame Sitzungsliste, „Gerät abmelden"). Der modul-eigene JWT-Pfad ist mit v1.2.0 entfallen: er stellte Tokens aus, die an der awlauth-Sitzungsliste vorbeiliefen — „Gerät abmelden" hatte darauf keine Wirkung. Ohne aktives awlauth antwortet die Anmeldung mit 503 statt auf einen zweiten Weg auszuweichen. Die Gültigkeit bestimmt allein AWLAUTH_TTL im awlauth-Setup (Standard 7 Tage)
  • PDF-Protokoll, wird im Dokumentenarchiv (ECM) abgelegt
  • Zwei Sichten auf dieselben Messdaten: die Technikeransicht zeigt alles, das Kunden-PDF nur eine Whitelist (siehe „Neue Messart" unten)
  • Rechtesystem: netdiag → protocol → read/write/delete
  • Mehrsprachig (de_DE, en_US)
  • QR-Code zum App-Download in der Modul-Einrichtung

Installation

  1. Verzeichnis netdiag/ nach htdocs/custom/ auf den Dolibarr-Server kopieren. Auf dem Produktivsystem übernimmt das die Forgejo-Pipeline (.forgejo/workflows/deploy.yml) — Commit mit [deploy] in der Message synct das Modul automatisch auf den Server.
  2. In Dolibarr: Einrichtung → Module → NetDiag aktivieren.
  3. Beim Aktivieren werden die Tabellen llx_netdiag_protocol, llx_netdiag_device, llx_netdiag_measurement angelegt. Voraussetzung: das Modul AWL-Auth muss aktiv sein — ohne es gibt es keine Anmeldung an der API (seit v1.2.0, siehe oben).
  4. Benutzern das Recht NetDiag → Protokolle lesen/schreiben geben.

API-Endpunkte

Alle unter https://<dolibarr>/custom/netdiag/api/:

Endpunkt Methode Zweck
auth.php POST {login,password} Anmeldung → {token,expiresIn,user}
customers.php GET ?q= / ?id= Kundensuche / Kundendetail
orders.php GET ?open=1&q= / ?id= Auftragsliste / Auftragsdetail
protocols.php GET ?id= Protokoll mit Geräten + Messungen
protocols.php POST {action:"sync",protocol:{…}} Protokoll anlegen/aktualisieren (idempotent über clientUuid)
pdf.php GET ?id=&jwt= Protokoll-PDF streamen

Authentifizierung per Authorization: Bearer <token> oder ?jwt=<token>. Jeder Endpunkt prüft ein Recht — protocols.php im GET-Zweig protocol read oder write: die Rechte sind in Dolibarr einzeln vergebbar, und ein Techniker mit Schreib- ohne ausdrückliches Leserecht darf nicht ausgesperrt werden (das fiele erst beim Kunden auf).

?jwt= in der URL ist nur für den PDF-Download da (der Browser kann dort keinen Header setzen). Langzeit-Token in URLs landen in Zugriffs- und Proxy-Logs — Ablösung steht in ROADMAP_UMSETZUNG.md, Phase L5.

Neue Messart aus der App aufnehmen

Die App schickt Messergebnisse als freies JSON. Damit ein Feld beim Kunden ankommt, sind drei Stellen in lib/netdiag.lib.php zu pflegen:

Funktion Zweck Wenn vergessen
netdiagKundenfelder() Whitelist + Beschriftung + Einheit Feld verschwindet im Kunden-PDF spurlos, übrig bleibt die Ampel
netdiagToolName() Klarname des Werkzeugs beim Kunden steht „[netzwerk] meintool"
eigener PDF-Zweig Werkzeuge mit Listenergebnis alle Zeilen landen als |-Kette in EINER Tabellenzelle
netdiagPdfText() Unicode aus der App Pfeile/Häkchen werden wortlos zu „?" (Core-Font, KB #1092)
netdiagKundentext() Rohwerte übersetzen/entschärfen englische API-Werte im deutschen Abnahmedokument

Spiegelbildlich dazu app/src/lib/messfelder.ts in der App.

Feldnamen immer aus dem erzeugenden Code der App ablesen (types.ts, die run()-Rümpfe der Werkzeuge), nie aus dem Kopf und nie aus selbst geschriebenen Testdaten — das ist hier schon zweimal schiefgegangen (KB #1084). Braucht die Messart eine eigene Tabellendarstellung im PDF, einen Zweig in lib/netdiag_pdf.lib.php ergänzen (Vorbilder: netdiagPdfStressTest, netdiagPdfWifiKanal) — sonst wird das Ergebnis zu einer |-getrennten Zeile zusammengeschoben.

Einrichtung

Einrichtung → Module → NetDiag → Einstellungen:

  • Token-Gültigkeit (Sekunden)
  • App-Download-URL (APK) — wird als QR-Code angezeigt

Lizenz

GPLv3