Alles, was die Oberfläche kann, auch im Terminal.
Nodes bauen, Werte schreiben und abfragen, live verfolgen, Kommandos auslösen, Datenquellen verwalten: scriptbar, kopierbar, CI-tauglich. Jeder Befehl in diesem Tutorial wurde wirklich ausgeführt, die Ausgaben sind unverändert übernommen.
Weiter mit → · Übersicht O · Teil 1: Die Weboberfläche ↗
„Keine PowerPoint-Show: Einfach mal ausprobieren.“
app.loot.apps.rheinwert.de ↗Alpha-Status: LooT ist noch nicht freigegeben. Funktionen und Daten können sich noch ändern.
$ in die Zwischenablage.Ein Programm loot, Befehlsfamilien nach Aufgabe. Jede Familie hat --help.
| Befehl | Aufgabe |
|---|---|
login · logout | Anmelden per Device Grant, Tokens verwalten |
tenant | Tenants anzeigen, anlegen, umbenennen, löschen |
node | Hierarchie: list, create, show, clone, delete, migrate-template |
template | Node-Templates mit Versionen |
write · import | Werte schreiben: einzeln oder per CSV |
query · live | Werte lesen: Zeitraum oder Live-Strom |
upload · download | Dateien als Werte (Custom-Nodes) |
stream | Audio-/Video-Sitzungen ansehen, laden, starten |
command · device | Kommandos definieren/auslösen; Gerätesimulator |
source · source-template | Datenquellen, Zuordnung, Puffer, Vorlagen |
producer | Producer-Katalog, Konverter-Plugins hochladen |
copy · deletion | Klone und Löschungen im Hintergrund beobachten |
loot --version
0.1.1.1+6ccf80e1a3919c6e4fd15199258555a6f91bf8faloot -i startet eine Sitzung, in der Sie Befehle zeilenweise eingeben.
no → node, node cr → node create).Hallifax/Werk Süd.Lager.Tür offen tippen Sie nur noch an.-i.loot login --server loot.example.org. Die Namen auth., api., ingest., query. leitet die CLI vor dem Servernamen ab.loot login, die Adressen sind gespeichert.loot login --server loot.example.org
Zum Anmelden diese Adresse im Browser öffnen und den Code bestätigen:
Adresse: https://auth.loot.example.org/realms/loot/device?user_code=OOKL-URGS
Code: OOKL-URGS
Warte auf die Bestätigung …loot-cli): Das Passwort geben Sie nie im Terminal ein, sondern nur im Browser.loot logout beendet die Keycloak-Sitzung und löscht die Tokens.%APPDATA%/LooT (Windows) bzw. ~/.config/loot; LOOT_CONFIG_DIR verlegt den Ordner. Unter Windows sind die Tokens per DPAPI an den Benutzer gebunden.--authority, --node-server, --ingest-server, --query-server.Tenant/Wurzel.Kind.Enkel/ trennt den Tenant ab, danach trennt . die Ebenen. Pfade mit Leerzeichen oder Umlauten gehören in Anführungszeichen: "Hallifax/Werk Süd.Lager.Tür offen".…+01:00), Eingaben mit Offset (Z, +02:00) bleiben unverändert, ohne Offset gilt die Ortszeit. --utc schaltet Ein- und Ausgabe auf UTC.--json für Maschinen (unveränderte Serverantwort in UTC).Fehler: … auf stderr, Exitcode 1 (Server/Daten) oder 2 (Aufruf/Konfiguration).loot node show "Hallifax/Werk Süd.Gibt.Es.Nicht" Fehler: Pfad 'Hallifax/Werk Süd.Gibt.Es.Nicht' existiert nicht. [Exitcode 1] loot write "Hallifax/Werk Süd.Lager.Temperatur" abc Fehler: 'abc' ist kein gültiger Wert vom Typ Double (Dezimalpunkt, keine Tausendertrennung). [Exitcode 1]
$?.loot tenant list Id Name -- -------- 2 Demo 3 Hallifax 1 Monsters loot tenant create CliDemo Tenant 'CliDemo' angelegt (Id 5). loot tenant rename CliDemo Labor && loot tenant list Tenant 'CliDemo' heißt jetzt 'Labor'. Id Name -- -------- 2 Demo 3 Hallifax 5 Labor 1 Monsters
loot tenant list: alle Tenants mit Id.loot tenant create CliDemo (Systemadmin).loot tenant rename CliDemo Labor (Tenant-Admin oder Systemadmin).node createloot node create "Hallifax/Werk Süd" --description "Zweites Werk, komplett per CLI aufgebaut" Node 'Hallifax/Werk Süd' angelegt (Id 79). loot node create "Hallifax/Werk Süd.Lager" --description "Hochregallager" Node 'Hallifax/Werk Süd.Lager' angelegt (Id 80). loot node create "Hallifax/Werk Süd.Lager.Temperatur" --type double --unit °C --description "Lufttemperatur im Lager" Node 'Hallifax/Werk Süd.Lager.Temperatur' angelegt (Id 81). loot node create "Hallifax/Werk Süd.Lager.Tür offen" --type bool --description "Hallentor" && loot node create "Hallifax/Werk Süd.Lager.Paletten" --type int --description "Belegte Stellplätze" && loot node create "Hallifax/Werk Süd.Lager.Position" --type geo --description "Gabelstapler 1" && loot node create "Hallifax/Werk Süd.Lager.Status" --type string --description "Betriebszustand" Node 'Hallifax/Werk Süd.Lager.Tür offen' angelegt (Id 82). Node 'Hallifax/Werk Süd.Lager.Paletten' angelegt (Id 83). Node 'Hallifax/Werk Süd.Lager.Position' angelegt (Id 84). Node 'Hallifax/Werk Süd.Lager.Status' angelegt (Id 85).
Hallifax/Werk Süd legt eine Wurzel im Tenant an, Hallifax/Werk Süd.Lager ein Kind.--type double|float|int|long|bool|string|geo|compound|custom|stream; ohne Angabe ist der Node reine Struktur.--unit °C, Text --description ….--direction in|out|inout|none, --duplicate first|last (wer gewinnt bei gleichem Zeitstempel).loot node list Hallifax Id Name Werttyp Einheit Richtung -- --------- ------- ------- -------- 41 Werk Nord - - - 79 Werk Süd - - - loot node list "Hallifax/Werk Süd.Lager" Id Name Werttyp Einheit Richtung -- ---------- ------- ------- -------- 83 Paletten Int - InOut 84 Position Geo - InOut 85 Status String - InOut 81 Temperatur Double °C InOut 82 Tür offen Bool - InOut loot node show "Hallifax/Werk Süd.Lager.Temperatur" Pfad: Hallifax/Werk Süd.Lager.Temperatur Id: 81 Name: Temperatur Beschreibung: Lufttemperatur im Lager Werttyp: Double Einheit: °C Richtung: InOut Duplikate: LastServe Letzter Wert: (kein Wert)
loot node list Hallifax: Wurzel-Nodes des Tenants (Teil 1 hat „Werk Nord“ angelegt, jetzt steht „Werk Süd“ daneben).loot node list "Hallifax/Werk Süd.Lager": Kinder mit Id, Werttyp, Einheit, Richtung.loot node show <pfad>: alle Eigenschaften und der letzte Wert.?node=73 in der Adresse).writeloot write "Hallifax/Werk Süd.Lager.Temperatur" 4.5 --ts 2026-11-04T05:00:00 Wert geschrieben: Hallifax/Werk Süd.Lager.Temperatur = 4.5 (2026-11-04T05:00:00.000000+01:00). h=5; for v in 5.0 5.4 6.1 6.8 7.2; do h=$((h+1)); loot write "Hallifax/Werk Süd.Lager.Temperatur" $v --ts $(printf "2026-11-04T%02d:00:00" $h) > /dev/null; done; echo "5 Werte geschrieben" 5 Werte geschrieben loot write "Hallifax/Werk Süd.Lager.Tür offen" true --ts 2026-11-04T07:30:00 && loot write "Hallifax/Werk Süd.Lager.Paletten" 412 --ts 2026-11-04T07:30:00 && loot write "Hallifax/Werk Süd.Lager.Status" "Einlagerung läuft" --ts 2026-11-04T07:30:00 Wert geschrieben: Hallifax/Werk Süd.Lager.Tür offen = true (2026-11-04T07:30:00.000000+01:00). Wert geschrieben: Hallifax/Werk Süd.Lager.Paletten = 412 (2026-11-04T07:30:00.000000+01:00). Wert geschrieben: Hallifax/Werk Süd.Lager.Status = Einlagerung läuft (2026-11-04T07:30:00.000000+01:00).
loot write <pfad> <wert> [--ts …]. Ohne --ts gilt „jetzt“.true/false für Bool, Text für String; null heißt „kein Wert“.Fehler: 'abc' ist kein gültiger Wert vom Typ Double (Folie „Konventionen“).queryloot query "Hallifax/Werk Süd.Lager.Temperatur" Zeitstempel Wert [°C] -------------------------------- --------- 2026-11-04T05:00:00.000000+01:00 4.5 2026-11-04T06:00:00.000000+01:00 5 2026-11-04T07:00:00.000000+01:00 5.4 2026-11-04T08:00:00.000000+01:00 6.1 2026-11-04T09:00:00.000000+01:00 6.8 2026-11-04T10:00:00.000000+01:00 7.2 loot query "Hallifax/Werk Süd.Lager.Temperatur" --from 2026-11-04T06:00:00 --to 2026-11-04T08:00:00 Zeitstempel Wert [°C] -------------------------------- --------- 2026-11-04T06:00:00.000000+01:00 5 2026-11-04T07:00:00.000000+01:00 5.4 loot query "Hallifax/Werk Süd.Lager.Temperatur" --order desc --limit 3 Zeitstempel Wert [°C] -------------------------------- --------- 2026-11-04T10:00:00.000000+01:00 7.2 2026-11-04T09:00:00.000000+01:00 6.8 2026-11-04T08:00:00.000000+01:00 6.1 Hinweis: Die Ausgabe ist auf 3 Werte begrenzt (--limit erhöhen oder den Zeitraum eingrenzen).
loot query <pfad>: alle Rohwerte, Spaltenkopf nennt die Einheit.--from (einschließlich) und --to (ausschließlich) grenzen den Zeitraum ein.--order desc --limit 3: die letzten drei Werte. Bei Abschneiden erscheint ein Hinweis.--limit), aufsteigend sortiert.loot query "Hallifax/Werk Süd.Lager.Temperatur" --unit °F --limit 3 --order desc Zeitstempel Wert [°F] -------------------------------- --------- 2026-11-04T10:00:00.000000+01:00 44.96 2026-11-04T09:00:00.000000+01:00 44.24 2026-11-04T08:00:00.000000+01:00 42.98 Hinweis: Die Ausgabe ist auf 3 Werte begrenzt (--limit erhöhen oder den Zeitraum eingrenzen). loot query "Hallifax/Werk Süd.Lager.Temperatur" --limit 2 --json {"nodeRef":81,"valueType":"Double","points":[{"ts":"2026-11-04T04:00:00.000000Z","value":4.5},{"ts":"2026-11-04T05:00:00.000000Z","value":5}],"truncated":true,"unit":"\u00B0C"} loot query "Hallifax/Werk Süd.Lager.Temperatur" --limit 2 --utc Zeitstempel Wert [°C] --------------------------- --------- 2026-11-04T04:00:00.000000Z 4.5 2026-11-04T05:00:00.000000Z 5 Hinweis: Die Ausgabe ist auf 2 Werte begrenzt (--limit erhöhen oder den Zeitraum eingrenzen).
--unit °F: Umrechnung nur der Ausgabe. Gespeichert bleibt °C (wie die Anzeigeeinheit in der Weboberfläche).--json: unveränderte Serverantwort, Zeiten immer in UTC, mit unit und truncated.--utc: Tabelle in UTC statt Ortszeit. Die globale Option darf überall stehen.loot write "Hallifax/Werk Süd.Lager.Position" "51.9625;7.6256" --ts 2026-11-04T07:00:00 && loot write "Hallifax/Werk Süd.Lager.Position" --lat 51.9631 --lon 7.6262 --speed 2.5 --heading 90 --ts 2026-11-04T07:10:00 && loot write "Hallifax/Werk Süd.Lager.Position" "{\"lat\":51.9640,\"lon\":7.6270}" --ts 2026-11-04T07:20:00 Wert geschrieben: Hallifax/Werk Süd.Lager.Position = 51.9625, 7.6256 (2026-11-04T07:00:00.000000+01:00). Wert geschrieben: Hallifax/Werk Süd.Lager.Position = 51.9631, 7.6262 (2026-11-04T07:10:00.000000+01:00). Wert geschrieben: Hallifax/Werk Süd.Lager.Position = 51.964, 7.627 (2026-11-04T07:20:00.000000+01:00). loot query "Hallifax/Werk Süd.Lager.Position" Zeitstempel Breite Länge Höhe [m] Genauigkeit [m] Geschwindigkeit [m/s] Richtung [°] -------------------------------- ------- ------ -------- --------------- --------------------- ------------ 2026-11-04T07:00:00.000000+01:00 51.9625 7.6256 - - - - 2026-11-04T07:10:00.000000+01:00 51.9631 7.6262 - - 2.5 90 2026-11-04T07:20:00.000000+01:00 51.964 7.627 - - - -
"51.9625;7.6256" (Breite;Länge[;Höhe]).--lat --lon [--alt --accuracy --speed --heading].'{"lat":51.964,"lon":7.627}'.query zeigt Breite, Länge, Höhe, Genauigkeit, Geschwindigkeit und Richtung als Spalten.importcat paletten.csv && loot import paletten.csv --path "Hallifax/Werk Süd.Lager.Paletten" zeitstempel,wert 2026-11-04T05:00:00,380 2026-11-04T05:30:00,384 2026-11-04T06:00:00,391 2026-11-04T06:30:00,398 2026-11-04T07:00:00,405 5 Werte angenommen, 0 abgelehnt. cat multi.csv && loot import multi.csv pfad,zeitstempel,wert Hallifax/Werk Süd.Lager.Status,2026-11-04T05:00:00,Anfahren Hallifax/Werk Süd.Lager.Status,2026-11-04T06:00:00,Betrieb Hallifax/Werk Süd.Lager.Tür offen,2026-11-04T05:10:00,false Hallifax/Werk Süd.Lager.Tür offen,2026-11-04T06:45:00,true 4 Werte angenommen, 0 abgelehnt. loot import bad.csv Fehler: Zeile 3: 'viele' ist kein gültiger Wert vom Typ Int. [Exitcode 1] loot query "Hallifax/Werk Süd.Lager.Paletten" --limit 6 Zeitstempel Wert -------------------------------- ---- 2026-11-04T06:00:00.000000+01:00 380 2026-11-04T06:30:00.000000+01:00 384 2026-11-04T07:00:00.000000+01:00 391 2026-11-04T07:30:00.000000+01:00 398 2026-11-04T08:00:00.000000+01:00 405
loot import datei.csv --path <pfad>, Spalten zeitstempel,wert.pfad,zeitstempel,wert. --separator ; für Excel-Exporte.write. Deshalb stehen die Paletten-Werte unten eine Stunde später (05:00 UTC = 06:00+01:00). Mit +01:00 oder Z in der Datei ist das eindeutig.liveloot live "Hallifax/Werk Süd.Lager.Temperatur" --unit °F
Warte auf Werte von 1 Node(s) … (Strg+C beendet)
2026-11-04T10:24:46.675583+01:00 Hallifax/Werk Süd.Lager.Temperatur = 45.5 °F
2026-11-04T10:24:49.243818+01:00 Hallifax/Werk Süd.Lager.Temperatur = 46.22 °F
2026-11-04T10:24:51.783008+01:00 Hallifax/Werk Süd.Lager.Temperatur = 46.94 °F
^CIm Beispiel schrieb ein zweites Terminal alle 1,5 s einen neuen Wert (7,5 · 7,9 · 8,3 °C). Die Anzeige in °F kommt von --unit.
loot live "Hallifax/Werk Süd.Lager.Temperatur" --unit °Floot write "Hallifax/Werk Süd.Lager.Temperatur" 7.5Ein Kommando ist eine benannte Aktion an einem Node mit typisierten Parametern („Tor öffnen“, „Ventil schließen“). Dafür braucht ein Gerät den Rückkanal. Das Ausführen verlangt das Recht Execute.
loot command define "Hallifax/Werk Süd.Lager.Tür offen" "Tor öffnen" --description "Hallentor fahren" --param "Dauer:Int;default=10;min=1;max=60" --param "Modus:String;required;allowed=schnell|langsam" Kommando 'Tor öffnen' an 'Hallifax/Werk Süd.Lager.Tür offen' angelegt (2 Parameter). loot command list "Hallifax/Werk Süd.Lager.Tür offen" Name Parameter Beschreibung ---------- --------------------------- ---------------- Tor öffnen Dauer:Int=10, Modus:String* Hallentor fahren
loot command define <pfad> "Tor öffnen" --param "Dauer:Int;default=10;min=1;max=60" --param "Modus:String;required;allowed=schnell|langsam"name:Typ[;required][;default=…][;min=…][;max=…][;allowed=a|b][;description=…]loot command list <pfad>: Dauer:Int=10 = Typ und Standardwert, * = Pflicht.--replace ersetzt ein vorhandenes Kommando, command delete löscht es.loot device run --node "Hallifax/Werk Süd.Lager.Tür offen" --delay 2 Gerät 'loot-cli@50b0aa0cafd7' verbindet sich … Verbunden (Sitzung 2ac747e499e24abab6bb0db003941523). Hallifax/Werk Süd.Lager.Tür offen: zuständig (Node 82) Warte auf Kommandos … (Strg+C beendet) Kommando 'Tor öffnen' (Auslösung 1, Node 82) mit Dauer=15, Modus=schnell -> erfolgreich gemeldet ^C loot command send "Hallifax/Werk Süd.Lager.Tür offen" "Tor öffnen" --param Modus=schnell --param Dauer=15 --wait Kommando 'Tor öffnen' an 'Hallifax/Werk Süd.Lager.Tür offen' ausgelöst (Auslösung 1, ausstehend, läuft ab 2026-11-05T10:25:34.375795+01:00). Status: zugestellt Status: erfolgreich Erfolgreich: Vom Gerätesimulator ausgeführt. loot command history "Hallifax/Werk Süd.Lager.Tür offen" --limit 5 Id Ausgelöst Kommando Parameter Status Von Meldung -- -------------------------------- ---------- ----------------------- ----------- ----- ------------------------------- 1 2026-11-04T10:25:34.375795+01:00 Tor öffnen Dauer=15, Modus=schnell erfolgreich admin Vom Gerätesimulator ausgeführt.
loot device run --node "Hallifax/Werk Süd.Lager.Tür offen" --delay 2. Der Gerätesimulator meldet sich über den gRPC-Gerätekanal für den Node an, bestätigt jedes Kommando und meldet nach --delay Sekunden Erfolg (--fail simuliert Fehlschlag).loot command send … --param Modus=schnell --param Dauer=15 --wait. Der Exitcode ist 0 nur bei Erfolg.loot command history <pfad>: die letzten Auslösungen mit Status, Absender und Meldung (90 Tage).loot command send "Hallifax/Werk Süd.Lager.Tür offen" "Tor öffnen" --param Dauer=15 Fehler: Pflichtparameter fehlen: Modus. [Exitcode 1]
--expires 30m (Standard 24 h, höchstens 30 d). Ist das Gerät offline, wartet das Kommando bis zum Ablauf.Eine Datenquelle liefert Werte für Datenpunkte, ohne den Node-Baum zu kennen. Wohin sie gehören, bestimmen Sie per Zuordnung.
loot source create "Hallifax/Gateway Halle S" --point Temperatur:Double --point Feuchte:Double --point Alarm:Bool --overflow Reject Datenquelle 'Gateway Halle S' angelegt (Id 14, 3 Datenpunkt(e), Puffer 5000 Werte, Reject). Token: loot_ds_<geheim> Das Token wird nur jetzt angezeigt; LooT speichert es nicht im Klartext. Geht es verloren, hilft nur 'loot source token'. loot source show "Hallifax/Gateway Halle S" Datenquelle: Gateway Halle S Id: 14 Art: extern Zustand: aktiv Template: - Token: …iagQ (erzeugt 2026-11-04T10:26:05.567408+01:00) Puffer: 5000 Werte, Regel Reject Rechte: Manage Datenpunkt Typ Node Umwandlung ---------- ------ ---------------- ---------- Alarm Bool nicht zugeordnet - Feuchte Double nicht zugeordnet - Temperatur Double nicht zugeordnet -
loot source create "Hallifax/Gateway Halle S" --point Temperatur:Double --point Feuchte:Double --point Alarm:Bool --overflow Reject<geheim> ersetzt. Verloren? loot source token erzeugt ein neues, das alte ist sofort ungültig.--buffer-size 5000, Überlaufregel DropOldest (älteste verwerfen) oder Reject (neue abweisen).--template <name>. Compound-Punkt: --point "Log:compound{message:String,severity:Int}".loot node create "Hallifax/Werk Süd.Halle S" --description "Halle S" && loot node create "Hallifax/Werk Süd.Halle S.Temperatur" --type double --unit °C && loot node create "Hallifax/Werk Süd.Halle S.Feuchte" --type double --unit % && loot node create "Hallifax/Werk Süd.Halle S.Alarm" --type bool Node 'Hallifax/Werk Süd.Halle S' angelegt (Id 86). Node 'Hallifax/Werk Süd.Halle S.Temperatur' angelegt (Id 87). Node 'Hallifax/Werk Süd.Halle S.Feuchte' angelegt (Id 88). Node 'Hallifax/Werk Süd.Halle S.Alarm' angelegt (Id 89). loot source map "Hallifax/Gateway Halle S" Temperatur "Hallifax/Werk Süd.Halle S.Temperatur" && loot source map "Hallifax/Gateway Halle S" Feuchte "Hallifax/Werk Süd.Halle S.Feuchte" && loot source map "Hallifax/Gateway Halle S" Alarm "Hallifax/Werk Süd.Halle S.Alarm" Datenpunkt 'Temperatur' (Double) → Hallifax/Werk Süd.Halle S.Temperatur (Double). Datenpunkt 'Feuchte' (Double) → Hallifax/Werk Süd.Halle S.Feuchte (Double). Datenpunkt 'Alarm' (Bool) → Hallifax/Werk Süd.Halle S.Alarm (Bool). loot source send "Hallifax/Gateway Halle S" --token loot_ds_<geheim> Temperatur 21.5 Wert angenommen: Gateway Halle S.Temperatur = 21.5 (Eingangszeitpunkt); er liegt jetzt im Puffer. Wert angenommen: Gateway Halle S.Feuchte = 48 (Eingangszeitpunkt); er liegt jetzt im Puffer. Wert angenommen: Gateway Halle S.Alarm = false (Eingangszeitpunkt); er liegt jetzt im Puffer. loot source send "Hallifax/Gateway Halle S" --token loot_ds_<geheim> Temperatur heiß Fehler: 'heiß' ist kein gültiger Wert vom Typ Double (Dezimalpunkt, keine Tausendertrennung). [Exitcode 1]
Halle S.Temperatur usw., Werttypen passend).loot source map <quelle> <punkt> <node> ordnet zu; bei Umwandlung (z. B. Int → Double) zeigt die CLI eine Warnung. source unmap löst.loot source send <quelle> --token loot_ds_… <punkt> <wert> spielt ein Gerät nach. Die CLI prüft den Werttyp vorab.curl -X POST https://ingest.example.org/api/source/values \ -H "Authorization: Bearer loot_ds_<geheim>" -H "Content-Type: application/json" \ -d '{"values":[{"name":"Temperatur","value":22.1},{"name":"Feuchte","value":47.5}]}' {"accepted":2,"rejected":0,"rejections":[],"droppedValues":0} HTTP 202
POST /api/source/values mit Bearer-Token. Optional trägt jeder Wert ein "ts".loot source show "Hallifax/Gateway Halle S" Datenquelle: Gateway Halle S Id: 14 Art: extern Zustand: aktiv Template: - Token: …iagQ (erzeugt 2026-11-04T10:26:05.567408+01:00) Puffer: 5000 Werte, Regel Reject Rechte: Manage Datenpunkt Typ Node Umwandlung ---------- ------ --------------- ---------- Alarm Bool Alarm (89) - Feuchte Double Feuchte (88) - Temperatur Double Temperatur (87) - loot source buffer "Hallifax/Gateway Halle S" Füllstand: 0/5000 (0 %), 0 Einträge, Regel Reject Ältester: - Letzter: 2026-11-04T10:26:37.494887+01:00 Verworfen: 0 Werte (DropOldest), abgewiesen 0 (Reject) loot source events "Hallifax/Gateway Halle S" --limit 5 Zeit Art Anzahl Text -------------------------------- ------------ ------ ----------------------------------------------------------- 2026-11-04T10:27:59.247329+01:00 TokenRotated 1 Token erneuert von admin; das bisherige Token ist ungültig. 2026-11-04T10:27:57.593775+01:00 TokenRotated 1 Token erneuert von admin; das bisherige Token ist ungültig. loot query "Hallifax/Werk Süd.Halle S.Temperatur" Zeitstempel Wert [°C] -------------------------------- --------- 2026-11-04T10:26:35.415520+01:00 21.5
loot source show: Zuordnungen der Datenpunkte, Tokenalter, Puffer.loot source buffer <quelle> [--clear]: Füllstand, älteste/letzte Lieferung, verworfene oder abgewiesene Werte.loot source events <quelle>: Ereignisprotokoll (Ablehnungen, Überläufe, Token-Wechsel).loot query.loot source list Hallifax Id Name Art Zustand Datenpunkte Unzugeordnet Puffer Letzter Eingang -- -------------------- ------ ------- ----------- ------------ ------------ -------------------------------- 9 Band-Simulator intern aktiv 1 0 0/5000 (0 %) 2026-11-04T10:26:44.887857+01:00 13 Band-Simulator intern aktiv 1 0 0/5000 (0 %) 2026-11-04T10:26:45.217933+01:00 7 Druck-Simulator intern aktiv 1 0 0/5000 (0 %) 2026-11-04T10:26:45.225062+01:00 12 Druck-Simulator intern aktiv 1 0 0/5000 (0 %) 2026-11-04T10:26:45.215096+01:00 8 Energie-Simulator intern aktiv 1 0 0/5000 (0 %) 2026-11-04T10:26:45.213606+01:00 14 Gateway Halle S extern aktiv 3 0 0/5000 (0 %) 2026-11-04T10:26:37.494887+01:00 10 Hallensensor-Gateway extern aktiv 2 0 0/5000 (0 %) 2026-11-04T08:38:30.051834+01:00 6 Kessel-Simulator intern aktiv 1 0 0/5000 (0 %) 2026-11-04T10:26:45.225087+01:00 11 Kessel-Simulator intern aktiv 1 0 0/5000 (0 %) 2026-11-04T10:26:45.212442+01:00 loot source lock "Hallifax/Gateway Halle S" && loot source unlock "Hallifax/Gateway Halle S" Datenquelle 'Gateway Halle S' gesperrt; Lieferungen werden abgewiesen, gepufferte Werte gehen weiter an die Nodes. Datenquelle 'Gateway Halle S' entsperrt; sie nimmt wieder Werte an.
loot source-template create --from-source "Hallifax/Gateway Halle S" && loot source-template list Hallifax
Datenquellen-Template 'Gateway Halle S' angelegt (Tenant 3, Id 1, 3 Datenpunkt(e)).
Id Name Gültig Datenpunkte Beschreibung
-- --------------- -------- ----------- ------------
1 Gateway Halle S Tenant 3 3 -loot source-template create --from-source "Hallifax/Gateway Halle S": Vorlage aus den Datenpunkten einer vorhandenen Quelle.loot source create … --template "Gateway Halle S".source-template create Hallifax/Name --point Temperatur:Double …, systemweit mit --system (Systemadmin).loot producer list --tenant Hallifax
Id Name Version Art Katalog Ausführung
-- ----------------- ------- --------- ---------- ----------
6 Chart 1.0.0 Konverter systemweit LooT
1 LFO Simple 1.0.0 getaktet systemweit LooT
2 LFO Simple 1.1.0 getaktet systemweit LooT
4 Schwelle 1.0.0 Konverter systemweit LooT
3 Skalieren 1.0.0 Konverter systemweit LooT
5 Zuordnungstabelle 1.0.0 Konverter systemweit LooTloot producer list --tenant Hallifax: systemweite Producer plus die des Tenants, mit Art (getaktet oder Konverter) und Ausführung (LooT, Plugin, extern).loot producer upload datei.zip --tenant Hallifax (oder --system). Das Ziel ist ausdrücklich anzugeben.loot source list.loot template create "Hallifax/Werk Süd.Lager" --name Lagerhalle Template 'Lagerhalle' angelegt (Id 1, Version 1); 'Hallifax/Werk Süd.Lager' verweist darauf. loot template list Hallifax && loot template show Hallifax/Lagerhalle Id Name Neueste Version Versionen Verwendet -- ---------- --------------- --------- --------- 1 Lagerhalle 1 1 1 Template: Lagerhalle Id: 1 Arbeitsstand: wie neueste Version Verwendet: 1 Node(s) Version Angelegt Von Nodes Verwendet ------- -------------------------------- ----- ----- --------- 1 2026-11-04T10:27:19.571507+01:00 admin 6 1 Nodes der Version 1: Pfad Werttyp Einheit Richtung Defaultwert ---------- ------- ------- -------- ----------- (Wurzel) - - - - Paletten Int - InOut - Position Geo - InOut - Status String - InOut - Temperatur Double °C InOut - Tür offen Bool - InOut - Links: 0, Producer-Instanzen: 0, Kommandos: 1, Verbindungen: 0 loot node create "Hallifax/Werk Süd.Lager 2" --template Lagerhalle && loot node list "Hallifax/Werk Süd.Lager 2" Node 'Hallifax/Werk Süd.Lager 2' aus Template 'Lagerhalle' (Version 1) angelegt (Id 96); 0 Defaultwert(e) geschrieben. Id Name Werttyp Einheit Richtung --- ---------- ------- ------- -------- 97 Paletten Int - InOut 98 Position Geo - InOut 99 Status String - InOut 100 Temperatur Double °C InOut 101 Tür offen Bool - InOut loot node show "Hallifax/Werk Süd.Lager 2" Pfad: Hallifax/Werk Süd.Lager 2 Id: 96 Name: Lager 2 Beschreibung: Hochregallager Werttyp: - (keine Zeitreihe) Einheit: - Richtung: None Duplikate: LastServe Letzter Wert: (kein Wert) Template: Lagerhalle, Version 1 (neueste 1), keine Abweichung
loot template create "Hallifax/Werk Süd.Lager" --name Lagerhalle macht aus dem Teilbaum die Version 1.loot node create "Hallifax/Werk Süd.Lager 2" --template Lagerhalle erzeugt daraus einen neuen Teilbaum (inklusive Kommandos).loot node show nennt Template, Version und Abweichungen.loot node migrate-template <pfad> [--version n] stellt ohne Werteverlust um.loot node clone "Hallifax/Werk Süd.Halle S" "Hallifax/Werk Süd" --name "Halle T" --wait Node 'Hallifax/Werk Süd.Halle S' nach 'Hallifax/Werk Süd' geklont als 'Halle T' (Id 102). loot node list "Hallifax/Werk Süd" && loot copy list Hallifax --all Id Name Werttyp Einheit Richtung --- ------- ------- ------- -------- 86 Halle S - - - 102 Halle T - - - 80 Lager - - - 96 Lager 2 - - - Keine Klone.
loot node clone <pfad> <ziel> --name "Halle T": Teilbaum samt Links, Verbindungen und Producer-Instanzen, ohne Werte und Rechte. Ziel ist ein Tenant (Kopie wird Wurzel) oder ein Node (Kopie wird Kind).--with-commands nimmt auch Kommandos mit.--wait zeigt den Fortschritt, sonst loot copy show <id>, copy list, copy cancel.upload und downloadloot node create "Hallifax/Werk Süd.Lager.Bericht" --type custom --description "Schichtberichte als Datei" Node 'Hallifax/Werk Süd.Lager.Bericht' angelegt (Id 106). loot upload "Hallifax/Werk Süd.Lager.Bericht" lagerbericht.txt --type text/plain --ts 2026-11-04T08:00:00 Datei hochgeladen: Hallifax/Werk Süd.Lager.Bericht (63 Bytes, text/plain, Datenbank) um 2026-11-04T08:00:00.000000+01:00. loot query "Hallifax/Werk Süd.Lager.Bericht" Zeitstempel Größe [Bytes] Inhaltstyp Dateiname -------------------------------- ------------- ---------- ---------------- 2026-11-04T08:00:00.000000+01:00 63 text/plain lagerbericht.txt rm -f lagerbericht.txt && loot download "Hallifax/Werk Süd.Lager.Bericht" --ts 2026-11-04T08:00:00 && cat lagerbericht.txt Inhalt gespeichert: lagerbericht.txt (63 Bytes, text/plain). Lagerbericht 04.11.2026: Regal 3 gereinigt, Temperatur stabil.
--type custom anlegen.loot upload <pfad> datei.txt --type text/plain --ts …: bis 64 KB in der Datenbank, größere im Object Storage.loot query zeigt Größe, Typ und Dateiname. loot download <pfad> --ts … [-o datei] holt den Inhalt zurück.loot stream list|download|start|stop.loot node show "Hallifax/Werk Süd.Lager.Temperatur" > /dev/null && echo "Node vorhanden" ; loot node show "Hallifax/Gibt/es/nicht" 2>/dev/null || echo "Node fehlt (Exitcode $?)" Node vorhanden Node fehlt (Exitcode 1) for n in Temperatur Paletten Status; do printf "%-12s" $n; loot query "Hallifax/Werk Süd.Lager.$n" --order desc --limit 1 --json | python3 -c "import sys,json; print(json.load(sys.stdin)[\"points\"][0][\"value\"])"; done Temperatur 8.3 Paletten 405 Status Einlagerung läuft
set -e sauber ab.--json + jq oder Python. Zeiten stets in UTC.loot write Hallifax/Server.Last $(uptime …)loot query … --json in einen Report exportieren.loot node delete "Hallifax/Werk Süd.Lager 2" --recursive Gelöscht: Hallifax/Werk Süd.Lager 2 loot node delete "Hallifax/Werk Süd.Lager" Fehler: Der Node hat Kind-Nodes; zum Löschen samt Teilbaum recursive=true angeben. [Exitcode 1] loot tenant delete Labor --recursive && loot tenant list Gelöscht: Labor Id Name -- -------- 2 Demo 3 Hallifax 1 Monsters
loot node delete <pfad> löscht einen Node ohne Kinder. Mit Kindern oder Werten verlangt LooT --recursive.loot tenant delete <name> --recursive entfernt den Tenant samt aller Nodes (Systemadmin).--no-wait kehrt sofort zurück, loot deletion show <id> fragt den Stand ab.--recursive.loot node --help
Description:
Nodes anzeigen, anlegen, klonen, löschen und auf neue Template-Versionen umstellen
Usage:
loot node [command] [options]
Options:
-?, -h, --help Show help and usage information
--utc Zeiten in UTC ausgeben und Zeiten ohne Offset als UTC lesen (Standard: lokale Systemzeit)
Commands:
list <pfad> Wurzel-Nodes eines Tenants oder die Kinder eines Nodes auflisten
create <pfad> Node anlegen, mit --template aus einem Template
show <pfad> Eigenschaften und letzten Wert eines Nodes anzeigen
clone <pfad> <zielpfad> Node samt Teilbaum, Links, Verbindungen und Producer-Instanzen klonen (ohne Werte und Rechte); große Teilbäume im Hintergrund
delete <pfad> Node löschen; große Teilbäume werden im Hintergrund gelöscht
migrate-template <pfad> Node ohne Werteverlust auf eine neuere Version seines Templates umstellen (E305)loot -i startet eine Sitzung, in der Sie Befehle zeilenweise eingeben.loot --help, loot <familie> --help, loot <familie> <befehl> --help.--utc und -i an jedem Befehl.| Ich will … | Befehl |
|---|---|
| anmelden | loot login --server host |
| Struktur ansehen | loot node list "T/Pfad" · node show |
| Node anlegen | loot node create "T/A.B" --type double --unit °C |
| Wert schreiben | loot write "T/A.B" 21.5 [--ts …] |
| Werte lesen | loot query "T/A.B" --from … --to … [--unit °F] [--json] |
| live zuschauen | loot live "T/A.B" |
| CSV laden | loot import datei.csv [--path …] |
| Ich will … | Befehl |
|---|---|
| Kommando auslösen | loot command send "T/A" "Name" --param k=v --wait |
| Gerät simulieren | loot device run --node "T/A" |
| Datenquelle anlegen | loot source create "T/Name" --point X:Double |
| Datenpunkt zuordnen | loot source map "T/Name" X "T/A.B" |
| Struktur kopieren | loot template create · node clone |
| Datei ablegen | loot upload "T/A.B" datei |
| löschen | loot node delete "T/A" --recursive |