Standort-Verwaltung
Rupper ist multi-standortfähig — jeder Kunde/Ort bekommt einen eigenen, komplett getrennten Datenbestand (Geräte, Scan-Cache, Subnetze, Whitelist/Blacklist, Notizen, Sessions, Monitoring-Historie).
- Umbenennen — ändert nur den Anzeigenamen des aktuellen Standorts.
- Subnetze für <Standort>… — Sheet zum Hinterlegen zusätzlicher Netz-Präfixe (z. B.
192.168.10.), die bei jedem Scan automatisch mitgesweept werden, auch wenn sie nicht zur eigenen Netzwerkkarte gehören. Praktisch für VPN-/ZeroTier-/WireGuard-erreichbare Kundennetze. - Neuer Standort… — legt einen komplett neuen, leeren Standort an.
knownFingerprints pro Standort (gedacht als Grundlage für einen künftigen Vorschlag „das könnte Standort X sein, wechseln?") — es wird aber im gesamten Code aktuell nirgends beschrieben oder ausgelesen. Bewusst so angelegt, damit sich überlappende private IP-Bereiche zwischen zwei Kunden niemals zu einem stillen, falschen Auto-Wechsel führen. Der einzige Weg, den aktiven Standort zu ändern, ist der Klick im Menü oben.
Übersicht — Kennzahlen-Leiste
Die vier Kacheln oben auf der Übersichtsseite, jede exakt ¼ der Breite (bewusst erzwungen, damit die textlastige „Netzwerke"-Kachel nicht den Nachbarn Platz wegnimmt).
| Kachel | Bedeutung |
|---|---|
| Aktive Hosts | Anzahl aller Geräte im letzten Scan. Zusatzzeile „±N seit letztem Scan" (grün/rot) und eine kleine Sparkline über die letzten 12 Scans — nur diese Kachel bekommt einen Trendverlauf, weil nur hier echte Zeitreihen-Historie vorliegt (erfordert erweitertes Datenmodell). |
| Netzwerke | Anzahl unterschiedlicher erkannter Netz-Präfixe. Zusatzzeile listet alle aktuellen Netznamen statt einer Zahl. |
| Hersteller erkannt | Anzahl unterschiedlicher, echter Hersteller-Treffer (Platzhalter „unbekannt"/„randomisiert/virtuell" zählen nicht mit). |
| Ø Ping (lokal) | Durchschnitt nur über lokal erreichbare Geräte — VPN/VM/Tailscale-Pfade werden bewusst rausgerechnet, weil Tunnel-Latenz nicht mit LAN-Latenz vergleichbar ist. Zusatzzeile zeigt den Median derselben Menge. |
Übersicht — Toolbar im Detail
- Sidebar-Einklapp-Pfeil — blendet die Netzwerk-Sidebar links ein/aus, Zustand bleibt über Neustarts erhalten.
- Präfix-Feld — leer = automatisch erkannte eigene Netze; ein Präfix wie
172.26.sweept gezielt nur dieses Netz. Enter startet den Scan direkt aus dem Feld. Das Pfeil-Menü daneben listet alle vonrup -listnetsbekannten Netze zur schnellen Auswahl. - Gateway-Netze — bezieht zusätzlich Netze mit ein, die nur über eine Routing-Tabellen-Route erreichbar sind (VPN-gepushte Subnetze). Erkennt seit dem letzten Fix auch „klassische" Class-C-Routen wie
192.168.x, dienetstatohne/24-Suffix anzeigt. - Profil — Scan-Tiefe für den pscan-Button pro Zeile (nicht für den Haupt-Scan!): Inventarisierung (kuratierte Portliste aus den Einstellungen, kein Web-Check), Dienstscan (+ HTTP/TLS-Probe), Tiefenscan (alle 65535 Ports + Web-Check).
- Export — CSV/JSON, exportiert die aktuell gefilterte Tabelle (bei aktiver Suche nur die Treffer, sonst alles).
- Listen — Whitelist/Blacklist, siehe eigener Abschnitt unten.
- „+"-Button — Gerät manuell hinzufügen (IP Pflicht, MAC/Name optional, mit Validierung). Legt sofort eine Platzhalter-Zeile an, die auch Re-Scans übersteht, bis das Gerät live gefunden wird.
- Scan — startet einen vollen Netzwerk-Sweep. ⌘R. Während ein Scan läuft, ist der Button deaktiviert (verhindert konkurrierende Scans, die sich gegenseitig ausbremsen).
Das „…"-Overflow-Menü — jedes Feld einzeln
Bewusst ein Popover statt eines Menüs, weil Menüs mit eingebetteten Live-Textfeldern in AppKit/SwiftUI unzuverlässig sind.
- SSH-Benutzer-Feld — Standard-Login für den SSH-Terminal-Button und den Kontextmenü-Eintrag jeder Zeile (Voreinstellung: aktueller macOS-Benutzername). Wird hier z. B. „pi" eingetragen, verbindet der Terminal-Button künftig als
ssh pi@<ip>. - Quick-Ping-Feld — beliebige IP/Hostname eintippen und Enter drücken, um sie einmalig anzupingen, unabhängig vom Tabelleninhalt — nützlich, um schnell etwas zu testen, das gar nicht im Scan-Ergebnis auftaucht.
- „rup.txt"-Button — öffnet
~/rup.txtim Standardprogramm — eine reine Textdatei-Kopie der aktuellen Tabelle, die nach jedem Scan/jeder Sortierung/Umbenennung automatisch neu geschrieben wird (siehe „Cache & rup.txt" unten). - „Hilfe"-Button — zeigt die rohe Ausgabe von
rup -helpin einem Sheet. - „Write to hosts"-Button (nur sichtbar, wenn in den Einstellungen aktiviert) — schreibt nach Bestätigungsdialog (Admin-Passwort nötig) die vergebenen Computernamen in
/etc/hosts, damit z. B.ssh meinserverstatt der IP funktioniert. Betrifft nur die aktuell sichtbaren (gefilterten) Zeilen — bei aktivem Suchfilter werden andere Hosts in/etc/hostsnicht angefasst. Legt automatisch ein Backup an und ersetzt nur den eigenen rup-Block in der Datei.
Übersicht — Tabellenspalten
Zehn Spalten gleichzeitig sichtbar (technische Obergrenze der macOS-Tabellenkomponente). Reihenfolge/Auswahl ist in den Einstellungen unter „Spaltenreihenfolge" änderbar — nicht direkt auf dieser Seite.
| Spalte | Bedeutung |
|---|---|
| SSH / Scan / WoL | Drei permanent sichtbare Aktions-Buttons pro Zeile — Terminal öffnen, Portscan starten, Wake-on-LAN senden (Details siehe „Zeilen-Aktionen"). |
| IP | Status-Punkt, ggf. Blacklist-Verbotssymbol, klickbare IP (öffnet http://ip im Browser), Rechtsklick-Kontextmenü, ggf. Verkettungssymbol für „selber Rechner", ggf. Flags wie <own>/<gateway>. |
| IPv6 | Erkannte IPv6-Adresse, sonst „-". |
| Ping | Laufzeit in ms (Nachkommastellen einstellbar). Kein Farbcode nach Geschwindigkeit — wurde bewusst wieder entfernt, weil es zu viele Zeilen dauerhaft grün einfärbte. |
| Name | Editierbarer Anzeigename mit Kategorie-Icon davor. Leer + eigener Rechner → fett hervorgehobener Platzhalter „Dieser Computer", verschwindet sobald man tippt. |
| Netzname | Editierbarer Name für das ganze Netzwerk (identisch zur Sidebar-Umbenennung). |
| MAC | MAC-Adresse oder Platzhaltertext („nicht verfügbar (VPN)"/„nicht ermittelt"). Uhr-Symbol + kursiv, wenn der Wert aus einem früheren Scan übernommen wurde, weil ARP diesmal nichts lieferte. |
| Erreicht über | Zeigt diesen Verbindungsweg (Interface/Gateway/Typ), nicht die Geräteart — z. B. „en0 / 192.168.1.1 (Wi-Fi)". |
| Hersteller/Host | Editierbare Hersteller-/Identifikationsangabe. |
| Offene Ports | Portscan-Ergebnis, plus Warndreieck bei riskanten Ports (FTP 21, Telnet 23, SMB 139/445, RDP 3389, VNC 5900, Redis 6379, Elasticsearch 9200, Memcached 11211, MongoDB 27017) — reiner Hinweis, kein Beweis für ein echtes Problem. |
Übersicht — Status-Punkt vor der IP
Vier Zustände, nach Priorität (höchste zuerst):
- Ring, nicht gefüllt (unbestätigt) — Zeile stammt aus dem Cache eines früheren Scans oder wurde manuell hinzugefügt, aber noch nicht live bestätigt.
- Rot, gefüllt (Offline) — kein auswertbarer Ping beim letzten Scan.
- Gelb/Orange, gefüllt (Auffällig) — riskanter offener Port erkannt, nur wenn Sicherheitswarnungen aktiviert sind.
- Grün, gefüllt (Online) — Normalfall.
Bewusst sowohl über Farbe als auch Form (gefüllt/Ring) unterschieden — funktioniert damit auch bei Farbenblindheit. Tooltip beim Hovern zeigt den Status zusätzlich als Text.
Vendor-Icons in der Name-Spalte
- Router-Symbol (blau) — Infrastruktur (Router, Switches, Access Points).
- Computer-Symbol (grün) — Rechner (Mac, Windows, Linux).
- Sensor-Symbol (orange) — IoT/Smart-Home-Geräte.
- Fragezeichen (lila-grau) — unbekannt / nicht eindeutig zuordenbar.
Übersicht — „Selber Rechner"-Verknüpfung
Ein blaues Kettenglied-Symbol in der IP-Spalte zeigt an: diese Zeile und mindestens eine andere gehören vermutlich zum selben physischen Gerät (z. B. per WLAN und per Tailscale/ZeroTier gleichzeitig sichtbar).
- Erkennung über: gleiche MAC-Adresse, oder beide als „eigener Rechner" markiert, oder gleicher aufgelöster Hostname, oder beide tauchen in der Schnittstellen-Liste desselben per SSH abgefragten Hosts auf (deckt Overlay-Adressen ohne gemeinsame MAC ab).
- Rein eine Anzeige-Gruppierung in der Tabelle — verändert nie das gespeicherte Gerätemodell.
- Klick auf das Symbol wählt die Zeile aus und öffnet im Inspector den Abschnitt „Selber Rechner, weitere Adressen".
Übersicht — Suche & Sortierung
Suchsyntax
- Freitext, Leerzeichen-getrennte Begriffe, Groß-/Kleinschreibung egal, alle Begriffe müssen passen (UND-Verknüpfung).
- Ein
$vor einem Begriff schließt ihn aus — z. B.$192.168blendet alles mit dieser Zeichenfolge aus. - Mehrwortbegriffe in Anführungszeichen:
"mein Drucker"oder$"mein Drucker". - Durchsucht: IP, Name, Netzname, MAC, Interface, Gateway, Typ, Hersteller, Flags, offene Ports.
- Kombiniert sich mit dem Sidebar-Netzwerkfilter und dem Whitelist-Filter (alle drei zusammen per UND).
Sortierung
Klick auf einen Spaltenkopf sortiert danach (IP, Ping, Name, Netzname, Hersteller, IPv6, MAC, Interface, offene Ports). Bei Sortierung nach Hersteller rutschen „unbekannt"/„randomisiert" immer ans Ende, unabhängig von der Richtung.
Übersicht — Zeilen-Aktionen
- Terminal-Symbol — öffnet Terminal.app und verbindet per SSH mit dem in den Einstellungen hinterlegten Benutzernamen. Reiner Terminal-Aufruf, siehe Abgrenzung im SSH-Abschnitt unten.
- „pscan"-Button — Portscan nur für diese eine Zeile, mit der Tiefe aus dem aktuellen „Profil"-Dropdown. Ergebnis landet in der Ports-Spalte und im Inspector, wird sofort im Cache und in
rup.txtgesichert. - Power-Symbol (WoL) — sendet ein Wake-on-LAN-Magic-Packet an die MAC dieser Zeile.
- Rechtsklick-Kontextmenü — Im Browser öffnen, IP kopieren, MAC kopieren, SSH öffnen, Portscan starten, Details anzeigen, Zur/Von Whitelist, Zur/Von Blacklist.
Übersicht — Inspector-Panel
- Kopfbereich — Geräte-Icon nach Verbindungsart, Titel, Status-Chips (inkl. „N Risiken" bei riskanten Ports).
- Identifikation — Name/Netzname/Hersteller-Host direkt editierbar (Enter übernimmt), MAC-Adresse read-only.
- Notizen — freier Mehrzeilen-Text, direkt an das Gerät gebunden, speichert bei jedem Tastendruck. Nur aktiv mit erweitertem Datenmodell und mindestens einem erkannten Scan für dieses Gerät.
- Netzwerk — Ping, Interface, Gateway, Typ, Flags (read-only).
- Portscan — offene Ports, Freigaben.
- Web/TLS — nur sichtbar, wenn ein Dienst-/Tiefenscan Web-Infos gefunden hat.
- Sicherheits-Hinweise — nur sichtbar bei riskanten Ports, mit Begründung je Port.
- Routen über dieses Gateway — nur bei Gateway-Zeilen: alle Routen, die über diese IP laufen, live aus der Routing-Tabelle.
- Selber Rechner, weitere Adressen — siehe oben.
- Bei Mehrfachauswahl zeigt das Panel nur „N Zeilen ausgewählt" + Hinweis auf ⌘C, keine Einzelheiten.
Übersicht — Benachrichtigungen
Beim ersten Öffnen der App wird einmalig die macOS-Berechtigung für Mitteilungen angefragt. Neue/verschwundene Geräte lösen nur bei automatischem Rescan eine System-Benachrichtigung aus (nie bei manuellem Scan-Klick, nie beim allerersten Scan einer Sitzung) — getrennt „Neue Geräte im Netzwerk" und „Geräte nicht mehr erreichbar", je bis zu 5 Einträge.
Übersicht — Auto-Rescan & Tracking-Takt
Zwei komplett unabhängige Timer:
- Auto-Rescan (Einstellungen, Standard aus) — voller Netzwerk-Sweep im eingestellten Intervall, übersprungen, wenn bereits ein Scan läuft.
- Tracking-Takt (Standard alle 2 Minuten, unabhängig vom Auto-Rescan-Intervall) — prüft nur Geräte mit aktiviertem „Erf."-Häkchen per schnellem ARP-Check (nicht per vollem Sweep), damit Kommen/Gehen-Zeiten für die Zeiterfassung nicht an einen selten laufenden vollen Scan gekoppelt sind.
Übersicht — Cache & rup.txt
Zwei getrennte Mechanismen, die leicht verwechselt werden können:
- JSON-Cache (
rup_cache.json, pro Standort) — zeigt beim App-Start sofort das letzte Ergebnis (als „unbestätigt" markiert), noch bevor ein neuer Scan durchgelaufen ist. Schlüssel ist ein „Umgebungs-Fingerabdruck" (erkannte eigene Netze + Einstellungen), damit beim Netzwerk-/Standortwechsel keine falschen alten Daten angezeigt werden. ~/rup.txt— eine für Menschen lesbare Textdatei-Kopie der Tabelle, nach jedem Scan/jeder Sortierung/Umbenennung neu geschrieben, mit automatischer nummerierter Backup-Rotation. Über den „rup.txt"-Button im Overflow-Menü direkt zu öffnen.
Übersicht — Tastenkürzel
| Kürzel | Wirkung |
|---|---|
⌘R | Scan starten (identisch zum Scan-Button) |
⌘C | Alle ausgewählten Zeilen als Tab-getrennter Text kopieren, in der aktuell sichtbaren Spaltenreihenfolge |
⌘F | Springt in das Suchfeld (natives SwiftUI-Verhalten) |
Whitelist / Blacklist Neu
Über das „Listen"-Menü in der Toolbar erreichbar, unabhängig vom erweiterten Datenmodell nutzbar.
| Bedeutung | Wirkung | |
|---|---|---|
| Whitelist | „Bekannte/erwartete Geräte." | Ist der Whitelist-Filter aktiv, zeigt die Übersicht nur diese Geräte — Rauschunterdrückung, um sich auf das Erwartete zu konzentrieren. |
| Blacklist | „Unerwünschte oder verdächtige Geräte." | Blendet nichts aus, sondern markiert die Zeile dauerhaft mit einem roten Verbotssymbol — reine Kennzeichnung, kein Filter. |
- Ein Gerät kann gleichzeitig auf beiden Listen stehen (z. B. „grundsätzlich erwartet, aber im Auge behalten").
- Verwaltung per Sheet: Liste ansehen, einzelne Einträge löschen, manuell per MAC oder IP hinzufügen (auch für Geräte, die gerade nicht im Scan auftauchen).
- Bulk-Aktionen „Alle aktuellen Geräte zur/aus …" wirken nur auf die gerade sichtbaren Zeilen, nicht auf die komplette gespeicherte Liste.
- Rechtsklick auf eine einzelne Zeile fügt sie direkt hinzu/entfernt sie.
- Identität wird wie überall in der App primär über die MAC-Adresse geführt (IP nur als Rückfalloption) — wird eine MAC später bekannt, wird ein alter, nur-IP-basierter Eintrag nicht automatisch migriert.
Geräte
Zeigt alle jemals gesehenen Geräte (nicht nur die des letzten Scans), gruppiert nach Kategorie. Erfordert das erweiterte Datenmodell in den Einstellungen.
- Filter „Nur getrackte Geräte" blendet auf die Zeiterfassungs-Geräte ein.
- Klick auf ein Gerät öffnet die Detailansicht — bei aktivierter Zeiterfassung inklusive Sessions-Liste, siehe nächster Abschnitt.
Zeiterfassung Übersehen in v1
Kein eigener Sidebar-Punkt — steckt in der Geräte-Detailansicht, sobald für ein Gerät das „Erf."-Häkchen (Spalte „Track" in der Übersicht, per Einstellungen einblendbar) aktiviert ist.
Wie es funktioniert
- Aktiviertes Tracking erzeugt bei jeder erkannten An-/Abwesenheit eine Session (Login-Zeitpunkt, Logout-Zeitpunkt oder „noch offen").
- Erkennung läuft nicht über den vollen Netzwerk-Scan, sondern über einen eigenen, deutlich schnelleren Prüf-Takt (Standard alle 2 Minuten) per ARP-Check — Anwesenheitszeiten sollen nicht an einen selten laufenden vollen Sweep gekoppelt sein.
- Ein zusätzlicher „Rettungs"-Mechanismus prüft getrackte Geräte gezielt kurz vor jedem vollen Scan nochmal per ARP, damit ein einzelner verpasster Sweep (z. B. WLAN-Energiesparmodus) nicht fälschlich als Logout gewertet wird.
Wo man es sieht
In der Geräte-Ansicht, Detailbereich des jeweiligen Geräts: eine Liste aller Sessions (grüner Punkt = noch offen, grauer Punkt = abgeschlossen) mit Login- → Logout-Zeit oder „laufend".
Export
Zwei Buttons direkt in der Geräte-Detailansicht: Woche exportieren und Monat exportieren — schreiben eine CSV-Datei (Login, Logout, Dauer in Minuten) für die letzten 7 bzw. 30 Tage. Kein Sammel-Export über alle Geräte hinweg, nur pro Gerät einzeln.
Dienste
Liste aller erkannten offenen Ports/Dienste über alle Geräte hinweg, mit Warnhinweis bei riskanten Ports.
Änderungen
Chronologisches Protokoll: neue Geräte, verschwundene Geräte, neu erkannte Dienste — gruppiert nach Netz und Scan-Zeitpunkt.
$wort-Ausschluss-Suchsyntax wie in der Übersicht. Rot = nicht mehr erreichbar, Grün = neu aufgetaucht.Achtung
Sammelt aktive Probleme: SSH-Monitoring-Alarme (siehe SSH-Abschnitt) und riskante offene Ports an einem Ort. Leer, wenn alles unauffällig ist.
Topologie (BETA)
Visueller Netzwerkplan. Zwei Modi: „Baum (Netzwerke)" (logische Gruppierung) und eine physische Topologie-Ansicht (SNMP-Switch-Port-Daten, echtes Pan/Zoom/Drag).
Routing
Rohansicht der Routing-Tabelle des Mac — nützlich zur Fehlersuche, warum ein Gerät über ein unerwartetes Interface erreicht wird.
SSH Übersehen in v1
Das sind zwei komplett getrennte Dinge, die beide „SSH" heißen — deshalb in v1 leicht übersehen: ein simpler Terminal-Verbindungs-Button in der Übersichtstabelle, und ein vollständiges Discovery-/Monitoring-Subsystem im eigenen Sidebar-Bereich.
1) Der SSH-Button in der Übersichtstabelle
Öffnet Terminal.app und führt ssh <benutzer>@<ip> aus. Das war's — keine Speicherung, keine Host-Key-Verwaltung, keine Verbindung zum unten beschriebenen Discovery-System. Reiner Komfort-Klick statt selbst SSH zu tippen.
2) SSH-Bereich in der Sidebar — Discovery, Inventar & Monitoring
Pro hinterlegtem Ziel konfigurierbar
- Host, Benutzer, Port (Standard 22), optionale eigene Identity-Datei, optionaler Alias aus
~/.ssh/config. - Eigene Host-Key-Verwaltung: Rupper führt eine eigene
known_hosts-Datei pro Standort (nicht die von macOS/Terminal) — beim ersten Kontakt oder bei geändertem Schlüssel muss der Fingerabdruck explizit bestätigt oder abgelehnt werden. - Zwei getrennt zu aktivierende Schalter, beide standardmäßig aus: „Inventar" (einmaliger Abruf auf Wunsch) und „Monitoring" (periodische Hintergrund-Erfassung). Bewusst getrennt — nur weil ein SSH-Zugang funktioniert, soll er nicht automatisch dauerhaft benutzt werden.
- Monitoring-Intervall wählbar: 1/5/15/30/60 Minuten.
- Eigene Alarm-Schwellenwerte pro Host für Festplatte/RAM/Systemlast (überschreibt die globalen Standardwerte).
Inventar (einmaliger Abruf)
Betriebssystem, CPU-Modell + Kernanzahl, RAM gesamt, Festplatte gesamt, alle Netzwerk-Interfaces (Name/MAC/MTU/Status/IPv4/IPv6), Routing-Tabelle, unter Linux zusätzlich ARP-Nachbarschaftstabelle. Funktioniert plattformspezifisch für macOS/BSD und Linux getrennt. Veraltete Daten (älter als 24 Std.) werden automatisch neu abgefragt, sobald man den Host auswählt. Erkennt außerdem automatisch, wenn zwei hinterlegte SSH-Ziele dieselbe physische Maschine sind (z. B. direkt und per VPN erreichbar) und verlinkt sie.
Monitoring (periodische Hintergrund-Erfassung)
Läuft unabhängig davon, welcher Sidebar-Bereich gerade geöffnet ist — ein einziger Hintergrund-Scheduler für die ganze App-Laufzeit. Pro Messung erfasst: Systemlast, RAM-%, Festplatten-%, Uptime, CPU-Temperatur (nur Linux), Top-5-Prozesse nach CPU-Last, Netzwerk-Durchsatz pro Interface, ausgehende TCP-Verbindungen, Prozessanzahl, aktive Logins, Festplatten-I/O.
- Historie: Rohdaten der letzten 7 Tage, danach automatisch zu Stunden-Durchschnitten verdichtet — dauerhaft in einer eigenen Datenbank pro Standort gespeichert.
- Neustart-Erkennung: ein Uptime-Wert kleiner als beim letzten Mal wird als Neustart-Ereignis protokolliert.
- Anomalie-Erkennung: vergleicht den aktuellen Wert mit dem historischen Durchschnitt zur selben Tageszeit der letzten 7 Tage.
- Alarme: feste Standard-Schwellen (Festplatte 90 %, RAM 90 %, Systemlast abhängig von der Kernanzahl), erst nach 3 aufeinanderfolgenden auffälligen Messungen ausgelöst (kein Fehlalarm bei einem kurzen Ausschlag). Beim Auslösen: macOS-Systembenachrichtigung, und der Alarm erscheint zusätzlich im Bereich „Achtung".
- Diagramme: pro Host direkt in der Detailansicht — Systemlast, RAM, Festplatte, Netzwerk, CPU-Temperatur, Festplatten-I/O, Prozessanzahl. Zeitraum wählbar (1 Std. bis 1 Jahr), Neustarts als Markierung in der Zeitachse, Klick auf einen Zeitpunkt zeigt die Top-Prozesse zu diesem Moment.
- Vergleichsansicht: zwei überwachte Hosts direkt übereinandergelegt in einem Diagramm (Systemlast oder RAM), separater Button in der Toolbar dieses Bereichs.
SNMP
Einstellungen
Vier Bereiche: Konto & Lizenz, Erscheinungsbild, Scan-Verhalten, Daten & Tabelle.