AssetHub Dokumentation

Häufig gestellte Fragen

Kann ich AssetHub auf dem günstigsten Hostinger Single-Tarif betreiben?

Ja — AssetHub ist vollständig kompatibel mit Hostinger Single (~$2,99/Monat). Single enthält PHP 8.3, MySQL, native Cron Jobs und kostenloses SSL — alles, was AssetHub benötigt. Kein SSH, kein Composer, keine Kommandozeile. Siehe Abschnitt Hostinger-Einrichtung für die Schritt-für-Schritt-Anleitung.

Brauche ich technische Kenntnisse für die Installation?

Nein. Der Web-Installer erledigt alles: Anforderungsprüfung, Datenbank-Setup, Migrationen und Erstellung des Admin-Kontos. Einfach Dateien hochladen, /install im Browser aufrufen und dem Assistenten folgen.

Wie funktionieren geplante E-Mails (Garantie-/Wartungs-Benachrichtigungen)?

AssetHub nutzt den Laravel-Scheduler. Sie konfigurieren nur einen Cron-Job, der jede Minute läuft, und Laravel verteilt intern jede Aufgabe zur richtigen Zeit (täglich 08:00, monatlich, etc.). Bei Hostinger richten Sie ihn in hPanel → Erweitert → Cron Jobs ein. Wenn Ihr Host keinen Cron hat, nutzen Sie die in-app Cron-URL mit dem kostenlosen Dienst cron-job.org.

Welche Abschreibungsmethoden werden unterstützt?

Drei Methoden: Linear (gleichmäßige jährliche Abschreibung), Degressiv (beschleunigt, häufig für Steuerzwecke) und Leistungsabschreibung (nutzungsbasiert, für Fertigungsausrüstung). Asset-Werte werden automatisch am 1. jedes Monats aktualisiert.

Funktioniert der QR-Scanner auf Handys?

Ja — er nutzt die Browser-Kamera über html5-qrcode und funktioniert auf jedem modernen Browser auf Handy/Tablet/Desktop. Einzige Voraussetzung: HTTPS. Hostinger bietet kostenloses SSL über Let's Encrypt, sodass alles sofort funktioniert.

Kann ich eigene Felder ohne Programmierung hinzufügen?

Ja. Admin → Benutzerdefinierte Felder erlaubt unbegrenzt Attribute (Text, Zahl, Datum, Auswahl, Textbereich, Datei, Checkbox), Eingrenzung auf bestimmte Kategorien, Pflichtmarkierung und Umsortierung per Drag-and-drop — alles über die UI.

Wie viele Sprachen unterstützt AssetHub?

10 Sprachen out of the box: Englisch, Vietnamesisch, Spanisch, Französisch, Deutsch, Chinesisch, Japanisch, Portugiesisch (BR), Russisch und Arabisch (mit voller RTL-Unterstützung). Übersetzungen sind über Admin → Translations bearbeitbar.

Übersicht

AssetHub ist ein vollständiges IT-Asset-Management-System, gebaut mit Laravel 11, Vue 3 und Tailwind CSS. Es hilft Organisationen, den Lebenszyklus von Equipment zu verfolgen, Zuweisungen zu verwalten, Wartungen zu planen, Abschreibung zu berechnen und detaillierte Berichte zu erstellen.

QR-Code-Verfolgung

Automatische QR-Code-Generierung für jedes Asset. Mit jeder Browser-Kamera scannen.

Abschreibung

3 Methoden: linear, degressiv, leistungsbasiert.

Benutzerdefinierte Felder

Unbegrenzte Attribute hinzufügen — Text, Datum, Auswahl, Datei, Checkbox.

Webhooks

15 Event-Typen mit HMAC-Signierung und Auto-Retry.

Audit-Log

Jede Änderung protokolliert mit vollständigem Diff-Viewer.

Berichte

8 Berichte mit Diagrammen, Excel- und PDF-Export.

Server-Anforderungen

  • PHP 8.2 oder höher
  • MySQL 5.7+ oder MariaDB 10.3+
  • Composer 2.x
  • Node.js 18+ und npm 9+
  • Webserver: Apache oder Nginx

Erforderliche PHP-Erweiterungen

  • OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo

Speicherplatz

Mindestens ~ 200 MB. Zusätzlicher Platz für Asset-Fotos und Dokumentanhänge einplanen.

Installation

Option A — Web-Installer (Empfohlen)

  1. Projektdateien auf den Webserver hochladen.
  2. Document Root der Domain auf public/ verweisen.
  3. Berechtigungen setzen: storage/ und bootstrap/cache/ müssen schreibbar sein (chmod 775).
  4. .env.example zu .env kopieren und php artisan key:generate ausführen.
  5. https://yourdomain.com/install im Browser aufrufen.
  6. Dem Assistenten folgen — Requirements → Database → Migrate → Admin Account → Done.

Option B — CLI-Installation

# 1. Abhängigkeiten installieren
composer install --no-dev --optimize-autoloader
npm install
npm run build

# 2. Umgebung konfigurieren
cp .env.example .env
php artisan key:generate

# 3. .env bearbeiten für DB-Zugangsdaten
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

# 4. Datenbanktabellen und Seed-Daten erstellen
php artisan migrate --seed

# 5. Storage-Symlink für Uploads erstellen
php artisan storage:link

# 6. Config für Produktion cachen
php artisan config:cache
php artisan route:cache
php artisan view:cache

# 7. Als installiert markieren
echo "Installed" > storage/installed.lock
Webserver-Konfiguration: Document Root muss auf das Verzeichnis public/ verweisen. Bei Apache handhabt die mitgelieferte .htaccess das URL-Rewriting. Bei Nginx siehe Laravel-Deployment-Anleitung.

Wizard Step 2 — Database Configuration

When the wizard reaches Step 2, you must enter the MySQL connection details for the database you created in your hosting panel. The database must already exist (it can be empty — the next wizard step will create the tables).

FieldDefault / ExampleNotes
Host127.0.0.1Works on 99% of shared hosts (Hostinger, cPanel, Plesk). Keep this default unless your hosting provides a custom MySQL hostname (managed DB services like AWS RDS, DigitalOcean Managed Database).
Port3306Standard MySQL port. Only change if your provider uses a non-standard port (rare).
Database nameuXXXXXX_assethubThe full name shown in your hosting panel. Most shared hosts prefix it with your user ID (e.g. Hostinger: u287094729_assethub).
UsernameuXXXXXX_assethubMySQL user with permissions on the database above. Do not use root — shared hosts don't allow it.
Password(your DB password)The password you set or copied when creating the MySQL user. Most hosts show it once on creation — use "View / Reset" if you didn't save it.

Where to find these credentials by hosting panel

  • Hostinger: hPanel → Databases → Management → click your database. The page shows name, username, and a "Show password" button.
  • cPanel: cPanel → MySQL Databases. The database list shows names; users are listed below. Use "Change Password" if needed.
  • Plesk: Plesk → Databases → click the database name. The detail page shows credentials and offers a password reset.
  • DirectAdmin: DirectAdmin → MySQL Management → click the database. Credentials and password reset are on the database detail page.
  • External / managed DB: AWS RDS, DigitalOcean Managed Database, etc. Use the custom hostname, port (often 3306 but verify), DB name, user, and password from your cloud console. Make sure the server's IP is whitelisted in the DB firewall.

Common errors and how to fix them

Error messageCause and fix
SQLSTATE[HY000] [1045] Access deniedWrong username or password, or the user doesn't have access to this database. Double-check spelling (including the user prefix on shared hosts). Reset the password in the hosting panel if unsure.
SQLSTATE[HY000] [1049] Unknown databaseThe database name is wrong, or you haven't created the database yet in your hosting panel. Create it first, then re-enter the exact name (including any prefix).
SQLSTATE[HY000] [2002] Connection refusedThe MySQL server can't be reached. Verify Host and Port. On shared hosts try localhost instead of 127.0.0.1 or vice versa. For managed DBs, make sure your server IP is whitelisted.
SQLSTATE[42S02] Base table not found: sessionsHappens when SESSION_DRIVER=database or CACHE_STORE=database is set in .env before the tables exist. Edit .env and change both to file, save, then reload the wizard. You can switch back to database after install if you prefer.
could not find driverPHP pdo_mysql extension is missing or disabled. Enable it in your hosting panel (PHP Configuration → Extensions). On Hostinger: hPanel → Advanced → PHP Configuration → PHP Extensions tab.
Tip: The Host and Port fields are pre-filled with the most common values (127.0.0.1 and 3306) — leave them as-is on shared hosting. You only need to type Database name, Username, and Password. Click Test & Save → to verify the connection and move to Step 3.

Localhost (Lokale Entwicklung)

Schnellanleitung, um AssetHub zu Test- oder Entwicklungszwecken auf Ihrem Rechner laufen zu lassen, bevor Sie in die Produktion deployen. Wählen Sie die zu Ihrem Betriebssystem passende Umgebung.

Empfohlen: Laravel Herd ist der schnellste Weg auf macOS und Windows — kein Docker, keine manuelle Apache/MySQL-Konfiguration. XAMPP und Laragon sind gute kostenlose Alternativen, wenn Sie einen traditionellen Stack bevorzugen.

Option 1 — Laravel Herd (Empfohlen, macOS & Windows)

Laravel Herd ist die offizielle lokale Umgebung vom Laravel-Team — kostenlos, nativ, kein Docker. Enthält PHP 8.2/8.3/8.4, Nginx und (in Herd Pro) MySQL/Redis.

  1. Laden Sie Laravel Herd von herd.laravel.com herunter und installieren Sie es.
  2. Legen Sie den AssetHub-Projektordner in ~/Herd/ (macOS) bzw. %USERPROFILE%\Herd\ (Windows). Herd erstellt automatisch eine .test-Domain — z. B. http://assethub.test.
  3. Öffnen Sie Herd → Sites und bestätigen Sie PHP-Version 8.2 oder 8.3. Rechtsklick auf die Site → Secure, um HTTPS zu aktivieren (für QR-Scanner nötig).
  4. Erstellen Sie eine MySQL-Datenbank. Mit Herd Pro nutzen Sie Services → MySQL → Open in TablePlus. Andernfalls installieren Sie MySQL Community oder verwenden SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Kopieren Sie .env.example zu .env, tragen Sie die DB-Zugangsdaten ein und führen Sie php artisan key:generate im Projekt-Root aus.
  6. Öffnen Sie http://assethub.test/install im Browser und folgen Sie dem Installer-Assistenten.

Option 2 — XAMPP (Windows, macOS, Linux)

XAMPP bündelt Apache, MySQL/MariaDB und PHP. Kostenlos und plattformübergreifend. Achten Sie auf eine Version mit PHP 8.2 oder neuer.

  1. XAMPP 8.2+ von apachefriends.org herunterladen und installieren.
  2. Kopieren Sie das AssetHub-Projekt in C:\xampp\htdocs\AssetHub\ (Windows) bzw. /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Öffnen Sie das XAMPP Control Panel und starten Sie Apache und MySQL. Falls Ports belegt sind, verwenden Sie Config → service.conf, um Apache auf 8080 umzustellen.
  4. Gehen Sie zu http://localhost/phpmyadminNeu → erstellen Sie eine Datenbank assethub mit utf8mb4-Kollation.
  5. Im Projektordner: .env.example zu .env kopieren, DB_DATABASE=assethub setzen, DB_USERNAME=root, DB_PASSWORD leer lassen (XAMPP-Standard). Führen Sie php artisan key:generate aus.
  6. Besuchen Sie http://localhost/AssetHub/public/install, um den Installer-Assistenten zu starten.
Schöne URLs ohne /public/: Erstellen Sie einen virtuellen Host in C:\xampp\apache\conf\extra\httpd-vhosts.conf, der DocumentRoot auf den public/-Ordner des Projekts zeigt, und tragen Sie 127.0.0.1 assethub.local in Ihre hosts-Datei ein.

Option 3 — Laragon (Windows)

Laragon ist ein portabler Windows-Stack für Laravel — automatische vhosts, schöne URLs, MySQL/MariaDB und integriertes HeidiSQL.

  1. Laragon Full von laragon.org herunterladen und installieren.
  2. In Laragon: Menü → PHP → Version — auf PHP 8.2 oder 8.3 umschalten.
  3. Kopieren Sie das AssetHub-Projekt in C:\laragon\www\AssetHub\.
  4. Start All klicken. Laragon erstellt automatisch den vhost: http://assethub.test (zeigt auf den public/-Ordner).
  5. HeidiSQL (integriert) öffnen → Datenbank assethub erstellen. Standard-Zugangsdaten: Benutzer root, Passwort leer.
  6. .env mit den DB-Zugangsdaten bearbeiten, php artisan key:generate ausführen und dann http://assethub.test/install besuchen.

Option 4 — Eingebauter PHP-Server (kein Webserver nötig)

Die einfachste Option: Laravel liefert artisan serve mit, das einen Entwicklungs-PHP-Server startet. Kein Apache oder Nginx erforderlich. Ideal für schnelle Tests.

# Abhängigkeiten installieren und konfigurieren
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate

# Migrationen ausführen und Initialdaten seedern
php artisan migrate --seed

# Entwicklungsserver starten
php artisan serve
# Dann besuchen: http://127.0.0.1:8000/install

Häufige Localhost-Stolperfallen

QR-Scanner öffnet die Kamera nicht über http://

Browser-Kamera-APIs erfordern HTTPS, mit einer Ausnahme: http://localhost und http://127.0.0.1 gelten als sichere Kontexte. Wenn Sie AssetHub über Ihre LAN-IP aufrufen (z. B. http://192.168.1.10), verweigert die Kamera. Nutzen Sie localhost für Entwicklung oder aktivieren Sie HTTPS via Herd / mkcert.

Permission denied auf storage (macOS / Linux)

Bei Schreibfehlern wenn die App loggt oder cacht, Berechtigungen korrigieren: chmod -R 775 storage bootstrap/cache. Auf Windows in der Regel nicht nötig.

Port bereits belegt

Wenn Port 8000 von einer anderen App belegt ist, einen anderen Port verwenden:

php artisan serve --port=8001

E-Mails lokal testen

Echtes SMTP ist auf den meisten Localhost-Setups nicht verfügbar. Zwei sichere Optionen: (1) MAIL_MAILER=log in .env setzen — E-Mails werden in storage/logs/laravel.log geschrieben statt versendet; oder (2) Mailtrap / MailHog verwenden, um ausgehende Mails in einer Fake-Inbox abzufangen.

MAIL_MAILER=log
# Alle E-Mails werden in storage/logs/laravel.log geschrieben

Frontend-Assets (Vite / Tailwind)

Das Vue/Tailwind-Frontend von AssetHub ist im Paket vorgebaut. Wenn Sie Vue-Komponenten oder die Tailwind-Konfig bearbeiten, brauchen Sie Node.js 18+:

npm install
npm run dev    # Hot-Reload während der Entwicklung
npm run build  # Production-Build (vor dem Deployment ausführen)

Deployment auf Hostinger Single (Shared Hosting)

Dies ist der empfohlene Weg für Nutzer ohne VPS oder technische Erfahrung. AssetHub ist vollständig kompatibel mit dem günstigsten Hostinger Single Web Hosting-Tarif (~$2,99/Monat). Kein SSH, kein Composer, keine Kommandozeile — Single enthält native Cron Jobs, PHP 8.3 und kostenloses SSL.

Getestet auf: Hostinger Single-, Premium-, Business-Tarife (PHP 8.2+, MySQL 5.7+, native Cron Jobs in allen Tarifen enthalten).

Schritt 1 — Hosting vorbereiten

  1. Bei Hostinger hPanel anmelden.
  2. Zu Hosting → Verwalten für Ihre Domain gehen.
  3. PHP-Version auf 8.2 oder 8.3 setzen über Erweitert → PHP-Konfiguration.
  4. Sicherstellen, dass diese PHP-Erweiterungen aktiviert sind (üblicherweise Standard):
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Schritt 2 — MySQL-Datenbank erstellen

  1. In hPanel zu Datenbanken → MySQL Databases gehen.
  2. Auf Neue Datenbank erstellen klicken.
  3. Diese 3 Werte notieren:
    • Datenbankname — z.B. u123_AssetHub
    • Benutzername — z.B. u123_admin
    • Passwort — automatisch generiert, gut aufbewahren

Schritt 3 — Dateien hochladen

  1. In hPanel zu Dateien → File Manager gehen.
  2. Zu public_html/ navigieren (das ist die Root Ihrer Domain).
  3. Eventuelle Standard-index.html oder default.php in diesem Ordner löschen.
  4. Dateien hochladen klicken und die gesamte source.zip aus dem Paket hochladen.
    Oder bei Bedarf den Inhalt von /source/ direkt per FTP hochladen.
  5. Bei ZIP-Upload Rechtsklick → Entpacken. Nach dem Entpacken müssen alle Dateien im Root von public_html/ liegen.
  6. Sicherstellen, dass public_html/ enthält: app/, public/, vendor/, .htaccess, index.php (in public/), .env, etc.
Wichtig: Sicherstellen, dass die Datei .htaccess im Root von public_html/ existiert. Sie enthält die URL-Rewrite-Regeln. Falls File Manager versteckte Dateien ausblendet, auf Einstellungen → Versteckte Dateien anzeigen klicken.

Schritt 4 — Installer ausführen

  1. Browser öffnen und zu https://yourdomain.com/install navigieren.
  2. Der AssetHub Installer erscheint.
  3. Schritt 1: Requirements — Alle Prüfungen sollten grün sein. Bei Fehlern Hostinger-Support kontaktieren, um fehlende PHP-Erweiterungen zu aktivieren.
  4. Schritt 2: Database — Zugangsdaten aus Schritt 2 oben eingeben:
    • Host: localhost
    • Port: 3306
    • Datenbank: u123_AssetHub
    • Benutzername: u123_admin
    • Passwort: (das von Hostinger generierte)
  5. Schritt 3: Migrate — "Run Migrations & Seed" klicken. Dauert ~10 Sekunden. Nicht refreshen.
  6. Schritt 4: Admin — Admin-Konto erstellen. Starkes Passwort verwenden.
  7. Fertig! — Sie sehen die Cron-URL (speichern!) und einen Login-Button.

Schritt 5 — Automatische E-Mail-Benachrichtigungen via Hostinger Cron einrichten

AssetHub nutzt den Laravel-Scheduler für Hintergrundaufgaben: Garantie-Benachrichtigungen, Wartungs-Erinnerungen, Dokumentablauf, Abschreibungs-Refresh und überfällige Checkouts. Richten Sie einen Cron-Job in hPanel ein, Laravel entscheidet, welche Aufgabe wann läuft.

  1. In hPanel zu Erweitert → Cron Jobs gehen.
  2. Auf Cron-Job erstellen klicken.
  3. Typ wählen: Custom (nicht "PHP" — wir brauchen ein Argument).
  4. Für den Befehl eingeben (uXXXXXX durch Ihren Hostinger-Benutzernamen ersetzen):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Tipp: File Manager öffnen, die Datei artisan (Projekt-Root) suchen, Rechtsklick → Eigenschaften, um den vollständigen Pfad zu kopieren.
  5. Zeitplan auf Jede Minute setzen — alle fünf Felder (Minute, Stunde, Tag, Monat, Wochentag) auf *.
  6. Auf Speichern klicken.

Das war's — AssetHub versendet jetzt automatisch Erinnerungen für überfällige Checkouts, Wartungs-Benachrichtigungen, Dokumentablauf-Alerts, Garantie-Alerts und aktualisiert die Asset-Abschreibungswerte. Laravel plant intern jeden Job in der korrekten Häufigkeit (täglich 08:00, monatlich, etc.).

Document Root auf public_html/public/ gesetzt? Kein Problem — Ihr Laravel-Code liegt weiterhin im Root public_html/, der Cron-Pfad bleibt also /home/uXXXX/public_html/artisan (kein /public/ anhängen).
Fallback für Hosts ohne Cron: Falls Sie nicht bei Hostinger sind oder Ihr Anbieter keine Cron Jobs unterstützt, bietet AssetHub auch eine Webhook-Trigger-URL.
  1. Als Admin anmelden → Einstellungen → Tab System → Cron-URL kopieren.
  2. Kostenlos bei cron-job.org registrieren.
  3. Cronjob erstellen, URL einfügen, auf Alle 15 Minuten setzen, speichern.

Schritt 6 — E-Mail konfigurieren (SMTP)

Hostinger stellt mit jedem Tarif E-Mail-Konten zur Verfügung. Um sie für AssetHub-Benachrichtigungen zu nutzen:

  1. In hPanel zu E-Mails → E-Mail-Konten gehen und eines anlegen (z.B. noreply@yourdomain.com).
  2. .env-Datei in public_html/ über File Manager bearbeiten:
    MAIL_MAILER=smtp
    MAIL_HOST=smtp.hostinger.com
    MAIL_PORT=587
    MAIL_USERNAME=noreply@yourdomain.com
    MAIL_PASSWORD=your_email_password
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=noreply@yourdomain.com
    MAIL_FROM_NAME="Your Company Name"
  3. Datei speichern.
  4. Bei AssetHub anmelden → Einstellungen → Tab Email → Test-E-Mail senden. Wenn Sie sie erhalten, ist alles fertig.
SMTP-Limits auf Single: Hostinger Single erlaubt ~100 ausgehende E-Mails pro Stunde. Für größere Deployments einen dedizierten Anbieter wie SendGrid, Mailgun oder Postmark nutzen (kostenlose Stufen verfügbar).

Häufige Probleme auf Hostinger Single

"500 Internal Server Error" nach Upload

  • Prüfen, ob .htaccess im Root von public_html/ existiert und die Rewrite-Regeln enthält.
  • Prüfen, ob die PHP-Version in hPanel auf 8.2 oder 8.3 gesetzt ist.
  • storage/logs/laravel.log über File Manager prüfen für die echte Fehlermeldung.

"Permission denied" bei Uploads

Hostinger setzt normalerweise korrekte Berechtigungen, falls nicht:

  • Rechtsklick auf storage/ in File Manager → Berechtigungen → rekursiv auf 755 setzen.
  • Dasselbe für bootstrap/cache/.

QR-Scanner öffnet die Kamera nicht

Browser-Kamera-APIs erfordern HTTPS. Hostinger bietet kostenloses SSL via Let's Encrypt — in hPanel unter SSL → Verwalten aktivieren.

Geplante E-Mails werden nicht versendet

  • In hPanel → Cron Jobs → Spalte Last run bei Ihrem Cron-Eintrag prüfen. Wenn leer, läuft der Cron nicht — Artisan-Pfad prüfen.
  • Befehl manuell testen: Terminal in hPanel öffnen (falls verfügbar) und Cron-Befehl ausführen. Bei Fehler zeigt die Meldung das Problem (falsche PHP-Version, falscher Pfad, etc.).
  • Prüfen, ob SMTP korrekt konfiguriert ist (Einstellungen → Email → Test senden).
  • storage/logs/laravel.log auf Scheduler-Fehler prüfen.

Langsame Performance

Hostinger Single hat geteilte CPU/RAM. Bei mehr als 20 Nutzern erwägen:

  • Upgrade auf Premium (~$3,99/Monat) — schnellere Server, mehr Ressourcen, mehrere Datenbanken.
  • Oder Business (~$5,99/Monat) — dedizierte Ressourcen, tägliche Backups, Staging-Umgebung.

Konfiguration

.env-Datei

SchlüsselBeschreibungBeispiel
APP_NAMEApp-Name, der im Titel angezeigt wirdAssetHub
APP_URLÖffentliche URL Ihrer Installationhttps://assets.example.com
APP_DEBUGAuf false setzen in Produktionfalse
DB_*Datenbank-Verbindungsdetailsmysql, 127.0.0.1, 3306, ...
MAIL_MAILERMail-Driversmtp, log, mailgun
MAIL_HOSTSMTP-Server-Hostnamesmtp.gmail.com
MAIL_PORTSMTP-Port587
MAIL_USERNAMESMTP-Benutzernameyour@email.com
MAIL_PASSWORDSMTP-Passwort oder App-Token**********
MAIL_FROM_ADDRESSStandard-From-Adressenoreply@example.com

In-App-Einstellungen

Die meisten nicht sensiblen Optionen sind konfigurierbar über Admin → Einstellungen:

  • Allgemein: Firmenname/-E-Mail/-Telefon, Asset-Tag-Präfix
  • Email: Test-E-Mail senden, um SMTP zu prüfen
  • Benachrichtigungen: Garantie-Schwellen, Wartungs-Erinnerungsfenster
  • Lokalisierung: Zeitzone, Datumsformat, Währung

Mehrsprachen-Unterstützung

AssetHub wird mit 10 sofort einsatzbereiten Sprachen ausgeliefert, einschließlich RTL-Arabisch. Benutzer wechseln die Sprache über das Flaggen-Dropdown oben rechts.

Mitgelieferte Sprachen

CodeSpracheRichtung
enEnglish (default)LTR
viTiếng ViệtLTR
esEspañolLTR
frFrançaisLTR
deDeutschLTR
zh简体中文LTR
ja日本語LTR
pt-BRPortuguês (Brasil)LTR
ruРусскийLTR
arالعربيةRTL

Sprache wechseln

  1. Klicken Sie auf das Flaggen-Symbol oben rechts, um das Dropdown zu öffnen.
  2. Wählen Sie Ihre Sprache aus der Liste.
  3. Die Seite wird neu geladen; alle UI-Beschriftungen, Daten und Währungsformate wechseln.
  4. Ihre Wahl wird sowohl in Ihrem Benutzerkonto als auch in einem Cookie (1 Jahr) gespeichert.
Öffnen Sie die .html-Dateien der App nicht direkt. AssetHub ist eine serverseitige Laravel + Vue App — der Sprachwechsel sendet einen POST an /locale/{code}, was nur funktioniert, wenn ein PHP-Server läuft. Greifen Sie immer über Ihre echte Domain (Produktion) oder http://localhost:8000 (Dev mit php artisan serve) zu. Dokumentationsdateien wie diese sind dagegen vollständig eigenständig und können direkt geöffnet werden.

Benutzerdefinierte Sprache hinzufügen (Admin)

Admin → Einstellungen → Übersetzungen:

  • Klicken Sie auf "Locale hinzufügen" — geben Sie Code (z.B. th für Thai), Anzeigename, nativen Namen, Flagge, Richtung und eine Basis-Locale zum Kopieren der Übersetzungen an.
  • Bearbeiten Sie Übersetzungen inline im Übersetzungs-Editor oder per CSV-Import/Export.
  • In der DB gespeicherte Übersetzungen überschreiben automatisch die Datei-Übersetzungen.

Standard-Locale pro Benutzer

Jeder Benutzer hat eine locale-Spalte. E-Mail-Benachrichtigungen werden automatisch in der bevorzugten Sprache des Empfängers gesendet dank Laravels HasLocalePreference-Contract.

Funktionsliste

Asset-Management

  • Automatisch generierte Asset-Tags
  • Mehrere Bilder pro Asset
  • QR-Code-Generierung
  • Status- und Zustandsverfolgung
  • Massenimport/-export
  • Asset klonen

Arbeitsabläufe

  • Zuweisen / Rückgabe / Transfer
  • Genehmigungsbasierte Anfragen
  • Check-in / Check-out-Buchung
  • Konflikterkennung

Wartung

  • Präventiv/korrektiv planen
  • Kalenderansicht
  • Nächste automatisch planen
  • Kostenverfolgung
  • E-Mail-Erinnerungen

Dokumente

  • Rechnungen, Handbücher anhängen
  • Inline-Vorschau
  • Ablauf-Benachrichtigungen
  • Mehrere Dokumenttypen

Abschreibung

  • 3 Berechnungsmethoden
  • Wert automatisch aktualisieren
  • Zeitplan-Diagramm
  • Jahresübersicht

Berichte

  • 8 Berichtstypen
  • Excel- + PDF-Export
  • Diagramme und Dashboards
  • Datumsfilter

Benutzer & Rollen

AssetHub wird mit 5 vorkonfigurierten Rollen ausgeliefert:

RolleBerechtigungen
AdminVoller Systemzugriff — Benutzer, Abteilungen, Einstellungen, Audit-Log, Webhooks, Übersetzungen
IT-ManagerAssets, Kategorien, Wartung, Anfragen verwalten; Transfers genehmigen; Berichte und Abschreibung ansehen
BuchhalterAssets und Abschreibung verwalten, Inventuren durchführen, Transfers genehmigen, voller Berichtszugriff (finanzieller Fokus)
SupervisorAbteilungsanfragen genehmigen, Checkouts verwalten, an Inventuren teilnehmen, Berichte ansehen
MitarbeiterZugewiesene Assets ansehen, Anfragen erstellen, eigene Checkouts verwalten

Berechtigungen werden als Spatie-Rollen gespeichert — Administratoren können pro Berechtigung über die Datenbank feinabstimmen.

Asset-Management

Assets erstellen

  1. Zu Assets → Neues Asset navigieren.
  2. Name, Kategorie, Marke, Modell, Seriennummer eintragen.
  3. Kaufdatum und Preis hinzufügen (erforderlich für Abschreibung).
  4. Bilder hochladen (mehrere Dateien möglich, max. 5 MB pro Datei).
  5. Speichern — Asset-Tag und QR-Code werden automatisch generiert.

Asset-Tag-Format

Standard: {PREFIX}-{YEAR}-{NNNN}, z.B. AS-2026-0001. Konfigurierbar über Einstellungen → Allgemein → Asset-Tag-Präfix.

Massenimport

  1. Auf Importieren auf der Assets-Seite klicken.
  2. Excel-Vorlage herunterladen.
  3. Daten eintragen — Pflichtspalten: name, category_name.
  4. Datei hochladen.

QR-Codes

Jedes Asset erhält bei der Erstellung automatisch einen QR-Code. Der QR kodiert die URL des Assets, das Scannen führt direkt zur Detailseite.

Etiketten drucken

  • Einzeletikett: Auf das Drucker-Symbol in einer Asset-Zeile klicken.
  • PDF-Format: A4, 2 Etiketten pro Reihe, enthält Asset-Tag, Name, Marke, Seriennummer.

Scannen

Auf QR scannen auf der Assets-Seite klicken. Kameraberechtigung erlauben. Der Scanner nutzt html5-qrcode und funktioniert auf jedem modernen Browser. Hinweis: Kamerazugriff erfordert HTTPS oder localhost.

Arbeitsabläufe

Asset-Zuweisung

  1. Asset-Detailseite öffnen.
  2. Auf Zuweisen klicken (sichtbar, wenn Asset verfügbar).
  3. Benutzer wählen, optionales Rückgabedatum, Notizen.
  4. Senden — Transaktion wird erstellt und E-Mail-Benachrichtigung versendet.

Asset-Anfragen

Mitarbeiter können Anfragen für benötigte Assets einreichen. Anfragen haben 4 Status: pending → approved → fulfilled, oder rejected. Genehmigungs-E-Mails werden automatisch versendet.

Check-in / Check-out

Für geteilte Assets (Kameras, Beamer, Fahrzeuge). Buchungen haben Datumsbereiche; das System verhindert überlappende Checkouts. Die Kalenderansicht zeigt alle Buchungen auf einen Blick.

Abschreibung

AssetHub berechnet die Asset-Abschreibung mit einer von drei Methoden:

MethodeFormelAnwendungsfall
Linear(Cost - Salvage) / Useful LifeAm häufigsten; gleiche jährliche Abschreibung
Degressiv2 / Useful Life × Book ValueBeschleunigt; für Steuerzwecke
LeistungsabschreibungNutzungsbasiertFertigungsausrüstung

Standardwerte werden von der Asset-Kategorie geerbt. Zeitplan-Einträge werden monatlich generiert. Der current_value des Assets wird automatisch am 1. jedes Monats aktualisiert.

Benutzerdefinierte Felder

Admin → Benutzerdefinierte Felder erlaubt unbegrenzte benutzerdefinierte Attribute für Assets:

  • Typen: Text, Zahl, Datum, Auswahl (Dropdown), Textbereich, Datei, Checkbox
  • Geltungsbereich: für alle Kategorien oder eine bestimmte Kategorie
  • Umsortieren: per Drag-and-drop am Griff
  • Pflichtfelder werden beim Speichern validiert

Berichte

Acht integrierte Berichte, zugänglich über das Berichte-Menü:

  1. Asset-Übersicht — Summen nach Status, Zustand, Kategorie, Abteilung
  2. Abschreibung — Wertverlust pro Kategorie, am stärksten abgeschriebene Assets
  3. Transaktionen — Zuweisung, Rückgabe, Transfer-Aktivität im Zeitverlauf
  4. Wartungskosten — Ausgaben nach Monat, Kategorie, Typ
  5. Garantieablauf — Assets, die in 30/60/180 Tagen Aufmerksamkeit benötigen
  6. Abteilungs-Assets — Asset-Verteilung und Budgetnutzung nach Abteilung
  7. Assets nach Quelle — Verteilung auf Beschaffung, Projekt, Spende, Transfer
  8. Inventurzusammenfassung — Abweichungen in periodischen Inventurzyklen

Alle Berichte unterstützen Excel- und PDF-Export über Buttons im Seitenkopf.

Webhooks

AssetHub kann externe Dienste bei wichtigen Ereignissen benachrichtigen.

Verfügbare Ereignisse

  • asset.created, asset.updated, asset.deleted
  • asset.assigned, asset.returned, asset.transferred
  • request.created, request.approved, request.rejected, request.fulfilled
  • maintenance.scheduled, maintenance.started, maintenance.completed
  • checkout.created, checkout.returned

Payload-Format

{
  "event": "asset.assigned",
  "timestamp": "2026-05-05T08:00:00+00:00",
  "data": {
    "asset_id": 1,
    "asset_tag": "AS-2026-0001",
    "asset_name": "HP EliteDesk 800",
    "to_user_id": 4,
    "transaction_id": 12
  }
}

Signaturverifizierung

Wenn ein Secret konfiguriert ist, enthalten Requests den Header X-AssetHub-Signature mit HMAC-SHA256 des Body. Auf Ihrer Seite verifizieren:

$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
  // gültig
}

Retry-Richtlinie

Fehlgeschlagene Lieferungen werden 3-mal mit 200 ms Verzögerung wiederholt. Nach 10 aufeinanderfolgenden Fehlschlägen wird der Webhook automatisch deaktiviert.

Geplante Aufgaben

AssetHub nutzt den Laravel-Scheduler für Hintergrund-Jobs. Sie brauchen nur einen Cron-Eintrag — Laravel verteilt intern jeden Job zur richtigen Zeit.

Hostinger / Shared Hosting (hPanel Cron Jobs UI)

Siehe Abschnitt Hostinger-Einrichtung → Schritt 5 für screenshot-ähnliche Anweisungen. Kurz: Erweitert → Cron Jobs → Custom, Befehl:

/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run

Zeitplan: jede Minute (* in allen fünf Feldern).

VPS / Dedicated Server (crontab)

crontab -e als Web-Benutzer (oft www-data) ausführen und hinzufügen:

* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1

Fallback: Externer URL-Pinger

Falls Ihr Host gar keinen Cron hat, nutzen Sie die in-app Cron-URL (Einstellungen → Tab System) mit cron-job.org (kostenlos, alle 15 Min).

Jobs, die automatisch laufen

ZeitBefehlZweck
Täglich 08:00send-overdue-checkout-alertsE-Mail-Erinnerungen für überfällige Checkouts
Täglich 08:30send-maintenance-remindersErinnerungen für anstehende Wartungen
Täglich 09:00send-document-expiry-alertsDokumente, die in 30/14/7/1 Tagen ablaufen
Täglich 09:30send-warranty-alertsGarantie- und Versicherungs-Ablaufbenachrichtigungen
Täglich 10:00assethub:send-depreciation-end-alertsBenachrichtigungen, wenn Assets das Ende der Nutzungsdauer erreichen
Täglich 10:30send-inventory-audit-remindersErinnerungen für aktive Inventuren
Monatlich am 1., 02:00update-asset-valuescurrent_value des Assets aus der Abschreibung aktualisieren

Fehlerbehebung

"Permission denied" auf storage

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

QR-Scanner öffnet die Kamera nicht

Browser-Kamera-APIs erfordern HTTPS. Entweder ein SSL-Zertifikat installieren oder localhost zum Testen verwenden.

E-Mails kommen nicht an

storage/logs/laravel.log auf Fehler prüfen. Einstellungen → Email → Test-E-Mail senden verwenden, um SMTP-Zugangsdaten zu prüfen. Sicherstellen, dass der SMTP-Server die sendende IP erlaubt.

Installation zurücksetzen

storage/installed.lock löschen und /install erneut aufrufen. Bestehende Daten werden gelöscht, wenn Migrations erneut laufen.

Performance — langsame Asset-Liste

php artisan optimize ausführen, um Config, Routes, Views zu cachen. Sicherstellen, dass MySQL Indizes auf assets.asset_tag, assets.serial_number, assets.status hat (werden automatisch durch Migrations erstellt).

Changelog

v1.0.0 — Initiale Veröffentlichung (2026-05)

  • Asset-CRUD mit automatischer QR-Code-Generierung
  • 5 Benutzerrollen (Admin, IT-Manager, Buchhalter, Supervisor, Mitarbeiter) mit granularen Berechtigungen
  • Asset-Quellen-Tracking (zentrale Beschaffung, dezentrale Beschaffung, Investitionsprojekt, Spende, interner Transfer)
  • Zuweisungs- und Rückgabe-Workflows mit E-Mail-Benachrichtigungen
  • Transfer-Genehmigungs-Workflow (pending → approved/rejected) mit Berechtigungs-Gating
  • Asset-Anfrage-Genehmigungs-Flow
  • Check-in/Check-out mit Kalenderansicht
  • Wartungsplanung mit automatischer Erneuerung
  • Dokumentanhänge mit Ablauf-Benachrichtigungen
  • Abschreibung mit 3 Berechnungsmethoden + End-of-Life-Benachrichtigungen
  • Inventur-Modul — periodische Bestandsaufnahme mit Abweichungsverfolgung
  • Benutzerdefinierte Felder mit 7 Eingabetypen und Drag-and-drop-Sortierung
  • 8 Berichte mit Diagrammen, Excel- und PDF-Export (inkl. Assets nach Quelle, Inventur-Zusammenfassung)
  • Audit-Log via Spatie Activitylog mit Diff-Viewer
  • Webhooks mit HMAC-Signierung und Auto-Retry
  • Mehrsprachige UI: 10 Sprachen (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar mit RTL)
  • Einstellungs-UI für Firma, E-Mail, Benachrichtigungen, Lokalisierung, Übersetzungen
  • Web-basierter Installations-Assistent
  • Dark Mode mit Emerald-Teal-Palette

Credits

Verwendete Open-Source-Bibliotheken