openapi: 3.0.3
info:
  title: MEKM REST API
  description: >-
    Diese REST API dient zur Kommunikation mit dem Mobile Easykey System (https://www.mobileeasykey.de/).
        
    Im Mobile Easykey (Manager oder Service) muss dazu ein sogenannter API-Treiber laufen, welcher diese Schnittstelle zur Verfügung stellt.
    Der API-Treiber in der Mobile Easykey Software erstellt dazu (auf Knopfdruck) ein selbstsigniertes Zertifikat.
    Aus Sicherheitsgründen und zum Datenschutz kann diese REST API aussschließlich über https angesprochen werden.
    Sie können dafür alternativ auch ein eigenes Zertifikat verwenden.
    
    Für die Nutzung der API ist generell ein API-Key (z.B. '0123456789ABCDEF01234567') erforderlich.
    Dieser muss bei jedem Login ('/auth/login') und bei den Befehlen '/auth/changepassword' und '/auth/resetpassword' im Header 'X-API-KEY' übergeben werden.
    Wenn Sie eigene Anwendungen für diese REST-API entwickeln wollen, wenden Sie sich bitte an khd@mobileeasykey.de
    
    Zur Authentifikation werden beim Login, siehe '/auth/login', neben dem API-Key die im Mobile Easykey Manager bereits vorhandenen Softwarebediener verwendet.
    Einem solchen Softwarebediener muss (im Manager) explizit das Recht zur Verwendung der REST API gegeben werden, damit er für die Authentifizierung in der REST API verwendet werden kann.
    
    Beim Login ('/auth/login') wird dann die basic authentification verwendet.
    Als Benutzername wird der Vor- und Nachname des jeweiligen Softwarebedieners (getrennt durch ein Leerzeichen) verwendet.
    (Achtung! Besitzt der Softwarebediener nur einen Vor- oder nur einen Nachnamen, wird lediglich dieser Vor- bzw. Nachname verwendet. Es wird dann kein zusätzliches Leerzeichen verwendet).
    Als Passwort dient das im Mobile Easykey Manager für diesen Softwarebediener hinterlegte Passwort.
    Der nach Base64 zu codierende Text sieht also wie folgt aus: 'Vorname Nachname:Passwort' (bzw. 'Vorname:Passwort' oder 'Nachname:Passwort', sofern kein Nach- bzw. Vorname angegeben ist).
    Weitere Informationen zur basic authentification finden Sie z.B. unter 'https://de.wikipedia.org/wiki/HTTP-Authentifizierung'
    
    Der Login liefert dann (im Rückgabeobjekt 'Api2User') ein Token (z.B. '911538BE-BEF9-493A-94F2-EE7B205AB516') mit einer im Manager einstellbaren Gültigkeitsdauer.
    Dieses Token wird für alle weiteren Befehle (Ausnahmen '/auth/changepassword' und '/auth/resetpassword') als bearer token (bearer authentification) verwendet.
    Dazu wird dieses Token mit vorangestelltem Text 'Bearer ' im Header 'Authorisation' übergeben (z.B. 'Bearer 911538BE-BEF9-493A-94F2-EE7B205AB516').
    Ist die Gültigkeitsdauer des Tokens abgelaufen wird eine entsprechende Fehlermeldung ausgegeben. Mit dem Befehl '/auth/login' kann dann ein neues Token angefordert werden.
  contact:
    name: Mobile Easykey
    email: khd@mobileeasykey.de
    url: http://mobileeasykey.de
  version: 2.7.0
servers:
  - url: https://{computername}:{port}/mobileeasykey/v2
    variables:
      computername:
        description: Entsprichen dem Rechnernamen, auf dem der Mobile Easykey Manager/Service mit dem API-Treiber läuft.
        default: localhost
      port:
        description: >-
          Entspricht dem im API-Treiber eingestellten Port.
          Beachten Sie, dass ggf. Firewall-Regeln erstellt werden müssen um eine Kommunikation auf diesem Port zu erlauben.
          Bei Verwendung der Microsoft eigenen Windows-Firewall konfiguriert der API-Treiber diese automatisch.
        default: '8081'
tags:
- name: '1. Info'
  description: Version dieser Schnittstelle
- name: '2. Authentification'
  description: Authentifizierung über Login, Passwort ändern
- name: '3. Bereiche'
  description: Bereiche
- name: '4. Module'
  description: Module
- name: '5. Benutzer'
  description: Benutzer
- name: '6. Batterien'
  description: Batterien
- name: '7. Abfahrtskontrolle'
  description: Abfahrtskontrolle
- name: '8. Statistische Daten'
  description: Statistische Daten
- name: '9. Datenbankkonfiguration'
  description: Datenbankkonfiguration
paths: 
  /about:
    get:
      tags:
        - '1. Info'
      description: Gibt die aktuelle Version der Schnittstelle und Name, Copyright etc. zurück
      operationId: GetAbout
      responses:
        '200':
          description: Aktuelle Version der Schnittstelle
          content:
            application/json:
              schema:
                type: object
                properties:
                  name: 
                    type: string
                    example: "Mobile Easykey API"
                  version:
                    type: string
                    example: '2.4.0'
                  mekmVersion:
                    type: string
                    example: '2022.0.0.0304'
                  copyright:
                    type: string
                    example: "Domnick+Müller GmbH+Co. KG (c) 2006-2022"
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /auth/login:
    get:
      tags:
        - '2. Authentification'
      security:
        - basicAuth: []
          apikeyAuth: []
      description: >-
        Einloggen und aktuelles Token abholen
        Authentifizierung über basic authentification UND api-key (Beides wird benötigt!)
        * basic authentification
        Bei der basic authentification wird als Benutzername der Vor- und Nachname des jeweiligen Softwarebedieners (getrennt durch ein Leerzeichen) verwendet. (Achtung! Besitzt der Softwarebediener nur einen Vor- oder nur einen Nachnamen, wird ledigliech dieser Vor- bzw. Nachname verwendet. Es wird dann kein zusätzliches Leerzeichen verwendet). Als Passwort dient das im Mobile Easykey Manager für diesen Softwarebediener hinterlegte Passwort. Der nach Base64 zu codierende Text sieht also wie folgt aus: 'Vorname Nachname:Passwort' (bzw. 'Vorname:Passwort' oder 'nachname:Passwort' sofern kein Nach- bzw. Vorname angegeben ist). Weitere Informationen zur basic authentification finden Sie z.B. unter 'https://de.wikipedia.org/wiki/HTTP-Authentifizierung'
        * api-key
        Der api-key wird direkt im Header X-API-KEY übergeben. Wenn Sie eigene Anwendungen für diese REST-API entwickeln wollen, wenden Sie sich bitte an khd@mobileeasykey.de
      operationId: GetAuthLogin
      responses:
        '200':
          description: Einloggen erfolgreich
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2User'
        '4XX':
          description: Einloggen nicht erfolgreich
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2AuthResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /auth/logout:
    get:
      tags:
        - '2. Authentification'
      security:
        - bearerAuth: []
      description: Ausloggen. Macht das übergebene Token ungültig
      operationId: GetAuthLogout
      responses:
        '200':
          description: Ausloggen erfolgreich. Das verwendete Token ist jetzt ungültig.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /auth/info:
    get:
      tags:
        - '2. Authentification'
      security: 
        - bearerAuth: []
      description: Gibt Daten über den momentan eingeloggten Softwarebediener zurück
      operationId: GetAuthInfo
      responses:
        '200':
          description: Token ist gültig
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2User'
        '4XX':
          description: Token ist ungültig
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /auth/changepassword:
    patch:
      tags:
        - '2. Authentification'
      security: 
        - apikeyAuth: []
      description: >-
        Ändert das Passwort des übergebenen Softwarebedieners
        Authentifizierung über api-key (und indirekt im body über Benutzername und altes Passwort)
        * api-key
        Der api-key wird direkt im Header X-API-KEY übergeben. Wenn Sie eigene Anwendungen für diese REST-API entwickeln wollen wenden Sie sich bitte an khd@mobileeasykey.de
      operationId: PatchAuthChangepassword
      requestBody:
        description: Benutzername (username), altes Passwort (oldPassword), neues Passwort (newPassword)
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Api2Password'
      responses:
        '200':
          description: Passwort wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: >- 
            userName nicht gefunden, altes Passwort ungültig oder neues Passwort wurde nicht akzeptiert.
            Weitere Infos ggf. in Api2AuthResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2AuthResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /auth/resetpassword:
    patch:
      tags:
        - '2. Authentification'
      security: 
        - apikeyAuth: []
      description: >-
        Fordert einen Rücksetzcode per E-Mail an (wenn dem Softwarebediener eine gültige E-Mail-Adresse hinterlegt ist).
        Dieser Rücksetzcode (z.B. E123-1A9F-2FD8-F31D) kann in einem zweiten Aufruf im Feld resetCode übergeben werden.
        Der Rücksetzcode ist maximal 12 Stunden gültig.
        Jeder Fehlversuch mit einem falschen resetCode führt zu einer immer länger werdenden Sperre, bevor der nächste Rücksetz-Versuch durchgeführt werden kann.
        Authentifizierung über api-key (und indirekt im body über den Rücksetzcode)
        * api-key
        Der api-key wird direkt im Header X-API-KEY übergeben. Wenn Sie eigene Anwendungen für diese REST-API entwickeln wollen wenden Sie sich bitte an khd@mobileeasykey.de
      operationId: PatchAuthResetpassword
      requestBody:
        description: >-
          Beim erste Aufruf nur Benutzername (userName) um einen resetCode per E-Mail anzufordern.
          Beim zweiten Aufruf Benutzername (userName), resetCode und neues Passwort (newPassword)
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Api2Password'
      responses:
        '200':
          description: ResetCode wurde versandt oder Passwort wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: >- 
            userName nicht gefunden, resetCode ungültig, gesperrt oder neues Passwort wurde nicht akzeptiert.
            Weitere Infos ggf. in Api2AuthResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2AuthResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /areas:
    get:
      tags:
        - '3. Bereiche'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Bereiche zurück.
        Ist äquivalent zu '/areas/00000000-0000-0000-0000-000000000000/subareas?sub=true',
        nur dass hier der Root-Bereich (00000000-0000-0000-0000-000000000000) ebenfalls enthalten ist
      operationId: GetAreas
      parameters:
        - in: query
          name: sub
          description: >-
            true - Root, alle Bereiche unter Root und alle Unterbereiche werden zurückgegeben
            false - nur Root und die Bereiche, die direkt unter Root liegen werden zurückgegeben
          schema:
            type: boolean
            default: true
            example: false
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: true
            example: false
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Area' mit übergeben wird.
      responses:
        '200':
          description: Liste der Bereiche
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Area'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /areas/{areaId}:
    get:
      tags:
        - '3. Bereiche'
      security: 
        - bearerAuth: []
      description: >-
        Gibt die Daten dieses einen Bereichs (areaID) zurück
      operationId: GetAreas_By_areaId
      parameters: 
        - in: path
          name: areaId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des auszulesenden Bereichs
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: true
            example: false
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Area' mit übergeben wird.
      responses:
        '200':
          description: Daten dieses Bereichs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Area'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /areas/{areaId}/subareas:
    get:
      tags:
        - '3. Bereiche'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Unterbereiche innerhalb des in areaId angegebenen Bereichs zurück
      operationId: GetAreasSubareas_By_areaId
      parameters: 
        - in: path
          name: areaId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des auszulesenden Bereichs
        - in: query
          name: sub
          description: >-
            true - alle Unterbereiche des angegebenen Bereichs (inc. Unter-Unter-Bereiche) werden zurückgegeben
            false - nur die Unterbereiche, die direkt unter dem angegebenen Bereich liegen werden zurückgegeben
          schema:
            type: boolean
            default: false
            example: true
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: true
            example: false
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Area' mit übergeben wird.
      responses:
        '200':
          description: Liste der Bereiche
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Area'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Module zurück, für die der aktuelle Softwarebediener (Api2User) ein modulesView-Recht besitzt.
        Ist äquivalent zu '/modules/groups/00000000-0000-0000-0000-000000000000/modules?sub=true'
        Werden die Filter filter_bluetooth, filter_wlan, filter_name, filter_moduleType, filter_moduleDbId, filter_hybridId, filter_locked, filter_vdiMode, filter_driveType oder filter zusammen verwendet, werden die Filter mit UND verknüpft. Eine Angabe 'filter_moduleType=smart_lock_3&filter_locked=true' gibt also nur Module des Typs smart lock 3 zurück, welche derzeit gesperrt sind.
        Ausnahme bildet hier die mehrfache Verwendung des selben Filters. Innerhalb des selben Filters wird mit ODER verknüpft. Mit der Angabe von 'filter_moduleType=smart_lock_2&filter_moduleType=smart_lock_3' werden also alle Module zurückgegeben, die vom Modultyp smart lock 2 ODER smart lock 3 sind.
      operationId: GetModules
      parameters: 
        - in: query
          name: sub
          description: >-
            true: alle Module werden zurückgegeben
            false: nur die Module, die direkt in Root liegen werden zurückgegeben
          schema:
            type: boolean
            default: true
            example: false
        - in: query
          name: filter_bluetooth
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Module mit gültiger Bluetooth-Adresse zurückgeben.
            false: nur Module ohne gültiger Bluetooth-Adresse zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter ist inaktiv. Es werden Module mit und ohne gültiger Bluetooth-Adresse zurückgeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_wlan
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Module mit gültiger WLAN-Adresse zurückgeben.
            false: nur Module ohne gültiger WLAN-Adresse zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter ist inaktiv. Es werden Module mit und ohne gültiger WLAN-Adresse zurückgeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_name
          schema:
            type: string
            example: 'Modul 1'
          description: >-
            nur Module mit diesem Namen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_name=Modul%201&filter_name=Modul%202' findet Module die den Namen 'Modul 1' ODER 'Modul 2' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Modul 1,Test' muss also als '?filter_name=Modul%201,,Test' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebigem Namen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_moduleType
          schema:
            type: string
            enum:
              - none                   # Modultyp wurde noch nicht vergeben
              - no_easykey
              - easykey_offline
              - basic_smart
              - smart_lock_1
              - smart_lock_2
              - smart_lock_3
              - modular_basic
              - modular_crash_duo
              - modular_crash_remote
              - modular_plus_basic
              - modular_plus_crash
            example: 'smart_lock_3'
          description: >-
            nur Module des angegebenen ModulTyps (siehe '#/components/schemas/ModuleSettings' moduleType) zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_moduleType=smart_lock_2&filter_moduleType=smart_lock_3'
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebigem Modultyp zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_moduleDbId
          schema:
            type: integer
            example: 1288028961
          description: >-
            nur Module mit dieser internen Datenbank-ID (siehe auch '#/components/schemas/ModuleAddress' dbId) zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebiger Datenbank-ID zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_hybridId
          schema:
            type: integer
            example: 127
          description: >-
            nur Module mit dieser Hybrid-ID (siehe auch '#/components/schemas/ModuleAddress' hybridId) zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebiger Hybrid-ID zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_locked
          schema:
            type: boolean
            example: true
          description: >-
            true: nur gesperrte Module zurückgeben
            false: nur nicht gesperrte Module zurückgeben.
            (siehe auch '#/components/schemas/ModuleSettings' locked)
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden sowohl gesperrte als auch nicht gesperrte Module zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_vdiMode
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Module mit vdiMode zurückgeben.
            false: nur Module ohne vdiMode zurückgeben.
            (siehe auch '#/components/schemas/ModuleSettings' vdiMode)
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden sowohl Module mit als auch ohne vdiMode zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter_driveType
          schema:
            type: string
            enum:
              - charge
              - exchange
              - fuel
              - other
            example: charge
          description: >-
            nur Module der angegebenen Antriebsart (siehe '#/components/schemas/ModuleSettings' driveType) zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_driveType=charge&filter_driveType=exchange'
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebiger Antriebsart zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: filter
          schema:
            type: object
            additionalProperties:
              type: object
              properties:
                id:
                  type: string
                value:
                  type: string
            minProperties: 1
            example:
              'Manufacturer': 'Linde'
          style: deepObject
          explode: true
          description: >-
            zusätzliche Suchparameter um nach Datenfeldern (siehe '#/components/schemas/ModuleData') zu suchen.
            Der Parameter wird dabei in der Form '?filter[id]=suchbegriff' eingegeben.
            id steht dabei für die id des Datenfeldes (siehe '#/components/schemas/ModuleData' id)
            Eine Liste aller möglichen Felder und deren Id erhalten Sie mit dem Befehl '/modules/dataFields'
            suchbegriff ist der Wert, nach dem in value (siehe '#/components/schemas/ModuleData' value) gesucht wird.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter[Manufacturer]=Linde&filter[Manufacturer]=Jungheinrich&filter[M1]=Frankfurt'
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Frankfurt, A' (für das Datenfeld mit der ID 'M1' muss also als '?filter[M1]=Frankfurt,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Modulen zu suchen.
        - in: query
          name: address
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das address-Objekt (Bluetoot-/IP-Adresse des Moduls) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: settings
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das settings-Objekt ('#/components/schemas/ModuleSettings') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/ModuleData') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/ModuleAlarms') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: infos
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das infos-Objekt ('#/components/schemas/ModuleInfos') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: drivingRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das drivingRights-Objekt (Fahrberechtigungen) in '#/components/schemas/Module' mit übergeben wird.
            Beachten Sie, dass die Datenmenge insbesondere bei der Rückgabe vieler Module sehr groß werden kann.
      responses:
        '200':
          description: Liste aller Module, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Module'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Erstellt ein neues Modul (in der Gruppe ROOT)
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesAdd-Recht für ROOT besitzen. 
      operationId: PostModules
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewModule'
      responses:
        '200':
          description: Das Modul wurde estellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Module'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        gibt die Daten dieses Moduls zurück, sofern der aktuelle Softwarebediener (Api2User) ein modulesView-Recht besitzt
      operationId: GetModules_By_moduleId
      parameters: 
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des auszulesenden Moduls
        - in: query
          name: address
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das address-Objekt (Bluetoot-/IP-Adresse des Moduls) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: settings
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das settings-Objekt ('#/components/schemas/ModuleSettings')
            in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/ModuleData')
            in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/ModuleAlarms')
            in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: infos
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das infos-Objekt ('#/components/schemas/ModuleInfos')
            in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: drivingRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das drivingRights-Objekt (Fahrberechtigungen) in '#/components/schemas/Module' mit übergeben wird.
      responses:
        '200':
          description: Daten dieses Moduls
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Module'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    delete:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        entfernt dieses Modul aus allen Gruppen und löscht es komplett.
        Achtung! Es werden auch alle Statistikdaten, Betriebsstunden-Daten und alle Logbuchdaten dieses Moduls unwiederruflich gelöscht!
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesDelete-Recht besitzen.
      operationId: DeleteModules_By_moduleId
      parameters: 
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des zu löschenden Moduls
        - in: query
          name: deleteAll
          description: >-
            false: Das Modul wird nur gelöscht, wenn keine Daten vorhanden sind.
            true: Das Modul wird ohne Rückfrage mit allen noch bestehenden Daten (Fahrberechtigungen, Dokumente, Statistik, Betriebsstunden, Logbuch) gelöscht!
            Beachten Sie, dass das Löschen aller Daten ggf. etwas Zeit in Anspruch nimmt.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Das Modul wurde gelöscht
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/datas:
    patch:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Schreibt den neuen Wert in das angegebene Datenfeld dieses Moduls
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesEdit-Recht für das angegebene Modul besitzen. 
      operationId: PatchModulesDatas_By_moduleId
      parameters: 
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Moduls
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste aller Datenfelder mit den jeweiligen neuen Werten die für dieses Modul gesetzt werden sollen.
                Eine Liste aller möglichen id's erhalten Sie mit dem Befehl '/modules/datafields'
              type: array
              items:
                $ref: '#/components/schemas/NewDataField'
      responses:
        '200':
          description: Das Datenfeld wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/orders:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt die Aufträge (orders) dieses Moduls zurück, sofern der aktuelle Softwarebediener (Api2User) ein commcenterView-Recht für das angegebene Modul besitzt
      operationId: GetModulesOrders_By_moduleId
      parameters:
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Moduls, dessen Aufträge (orders) gelesen werden sollen
        - in: query
          name: time
          schema:
            type: string
            format: date-time
            example: "2022-01-01T01:01:01"
            default: ""
          description: >-
            Ist dieser Filter angegeben, werden neben den offenen (noch nicht oder nicht vollständig ausgeführten) Aufträgen auch alle seit 'time' bereits ausgeführten Aufträge ausgegeben.
            Ist der Filter nicht angegeben, werden entsprechend nur offene (noch nicht oder nicht vollständig ausgeführten) Aufträge ausgegeben.
      responses:
        '200':
          description: Array mit Aufträgen (oders) dieses Moduls
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ModuleOrder'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/orders/{orderId}:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt den Auftrag mit der angegebenen orderID dieses Moduls zurück, sofern der aktuelle Softwarebediener (Api2User) ein commcenterView-Recht für das angegebene Modul besitzt
      operationId: GetModulesOrders_By_moduleId_orderId
      parameters:
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Moduls, dessen Aufträge (orders) gelesen werden sollen
        - in: path
          name: orderId
          schema:
            type: integer
            default: null
            example: 123
          required: true
          description: OrderId des Auftrags, der gelesen werden soll.
      responses:
        '200':
          description: Der Auftrag dieses Moduls mit dieser OrderId
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleOrder'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/orders/new/{orderType}:
    post:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Erstellt einen neuen Auftrag, z.B. Vollupdate
      operationId: PostModulesOrdersNew_By_moduleId_orderType
      parameters: 
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Moduls
        - in: path
          description: >-
            Art des zu erstellenen Auftrags.
            * program - Erstellt eine Vollupdate. Das Modul wird beim nächsten Kontakt komplett neu programmiert.
            * readState - Erstellt einen Status-Lesen Auftrag. Beim nächsten Kontakt mit dem Modul wird der aktuelle Status (inc. Position sofern vorhanden) ausgelesen.
            * readLogdata - Erstellt einen Auftrag zum Logbuch-Lesen. Beim nächsten Kontakt mit dem Modul wird der gesamte Logbuchspeicher aus dem Modul ausgelesen.
            * readCounters - Erstellt einen Auftrag zum betriebsstunden-Lesen. Beim nächsten Kontakt werden die aktuellen Betriebsstunden-Stände aus dem Modul ausgelesen (sofern dies nicht sowieso automatisch bei jedem Kontakt passiert).
            * timeSync - Erstellt einen Auftrag zum Uhr stellen. Beim nächsten Kontakt mit dem Modul wird die Uhr im Modul nach der Uhr des kontaktierten Servers gestellt. Je nach Konfiguration wird die Uhr auch automatisch (bei jedem Kontakt) gestellt, wenn sie mehr als 6 Sekunden (im Treiber einstellbar) abweicht.
            * clearCrash - Löscht einen anstehenden Crash
            * setRepairMode - Setzt das Modul in den Werkstatt-Modus
            * clearRepairMode - Beendet den Werkstatt-Modus
          name: orderType
          schema:
            type: string
            enum:
              - program
              - readState
              - readLogdata
              - readCounters
              - timeSync
              - clearCrash
              - setRepairMode
              - clearRepairMode
            example: 'program'
          required: true
        - in: query
          name: force_new_order
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            Normalerweise wird kein neuer Auftrag erstellt, wenn der gewünschte Auftrag bereits existiert.
            In diesem Fall wird der bereits existierende Auftrag zurückgegeben.
            Beachten Sie, dass der bereits existierende Auftrag auch dann zurückgegeben wird, wenn er gerade ausgeführt wird oder bereits vollständig ausgeführt, aber noch nicht gespeichert ist.
            Wenn sie einen neuen Auftrag erzwingen wollen, setzen Sie diesen Parameter auf true ('?force_new_order=true').
        - in: query
          name: force_connect
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            Erzwingt einen sofortigen passiven Verbindungsaufbau
            Sofern das Modul bereits einmal eine Verbindung mit dem MEKM hatte und dem MEKM dadurch die aktuelle (IP oder Bluetooth) Adresse bekannt ist, versucht der MEKM unmittelbar nach Erstellen dieses Auftrags sofort eine Verbindung zu diesem Modul aufzubauen um den Auftrag schnellstmöglich auszuführen.
      responses:
        '200':
          description: Der Auftrag wurde erstellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleOrder'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/alarms:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle Alarme bzw. Alarm-Definitionen (also auch Alarme, die noch nicht ausgelöst sind) dieses Moduls zurück, sofern der aktuelle Softwarebediener (Api2User) ein modulesView-Recht für das angegebene Modul besitzt.
      operationId: GetModulesAlarms_By_moduleId
      parameters:
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Moduls, dessen Alarme gelesen werden sollen
      responses:
        '200':
          description: Array mit Alarmen dieses Moduls
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ModuleAlarm'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/alarms/{alarmId}:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt den Alarme bzw. Alarm-Definitionen (also auch Alarme, die noch nicht ausgelöst sind) mit dieser alarmId dieses Moduls zurück, sofern der aktuelle Softwarebediener (Api2User) ein modulesView-Recht für das angegebene Modul besitzt.
      operationId: GetModulesAlarms_By_moduleId_alarmId
      parameters:
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Moduls, dessen Alarme gelesen werden sollen
        - in: path
          name: alarmId
          schema:
            type: string
            example: 'UVV1'
          required: true
          description: >-
            ID des Alarms, z.B. 'UVV1' oder 'BTR2'
            Eine vollständige Liste aller möglichen alarmId's erhalten Sie mit dem Befehl '\modules\alarmTypes'
      responses:
        '200':
          description: Der Alarm bzw. die Alarmdefinition dieses Alarms
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleAlarm'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    patch:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Legt beim angegebenen Modul für den Alarm 'alarmId' einen neuen Grenzwert (newThreshold) fest.
        Angegeben wird immer der Alarm-Wert. Die Werte für Warnung und Überfällig ergeben sich automatisch aus dem jeweiligen Alarm-Profil.
        Bei Zeitalarmen wird der neue Grenzwert (newThreshold) als date formatierter String (im Format JJJJ-MM-TT, z.B. '2022-01-15') übergeben.
        Bei Betriebsstundenalarmen wird der neue Grenzwert (newThreshold) in Stunden (als String formatiertert, z.B. '2000') übergeben.
        Um einen Zeitalarm zu deaktivieren, setzen Sie das Alarm-Datum (newThreshold) auf '2000-1-1'.
        Um den Betriebsstundenalarm zu deaktivieren, setzen Sie den neuen Grenzwert (newThreshold) auf '0'.
        Beachten Sie dabei, dass das Deaktivieren eines Alarms im jeweiligen Alarm-Profil erlaubt sein muss.
        Der aktuelle Softwarebediener (Api2User) muss das entsprechnde infocenterSetBtrAlarm- bzw. infocenterSetUvv-Recht für das angegebene Modul besitzen. 
      operationId: PatchModulesAlarms_By_moduleId_alarmId
      parameters: 
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Moduls
        - in: path
          name: alarmId
          schema:
            type: string
            example: 'UVV1'
          required: true
          description: >-
            ID des Alarms, z.B. 'UVV1' oder 'BTR2'
            Eine vollständige Liste aller möglichen alarmId's erhalten Sie mit dem Befehl '\modules\alarmTypes'
      requestBody:
        required: true
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewModulAlarm'
      responses:
        '200':
          description: Alarm-Grenzwert wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/drivingauthorisations/add:
    patch:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Fügt Fahrberechtigungen für dieses Modul hinzu
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesEditDrivingRights-Recht für das angegebene Modul sowie usersEditDrivingRights für die hinzuzufügenden Benutzer besitzen. 
      operationId: PatchModulesDrivingauthorisationsAdd_By_moduleId
      parameters: 
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Moduls, dessen Fahrberechtigungen geändert werden sollen
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste der id's aller Benutzer (userId) welche für dieses Modul fahrberechtigt sein sollen.
                Diese Benutzer werden zu den bereits vorhandenen Fahrberechtigungen dieses Moduls hinzugefügt.
                Doppelte Fahrberechtigungen werden ignoriert.
              type: array
              items:
                type: string
                format: uuid
                nullable: false
                example: '604B1527-BAEB-4845-8699-CC666A065404'
      responses:
        '200':
          description: Die Fahrberechtigungen wurden hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/{moduleId}/drivingauthorisations/remove:
    patch:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Entzieht diesem Modul Fahrberechtigungen
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesEditDrivingRights-Recht für das angegebene Modul sowie usersEditDrivingRights für die zu entfernenden Benutzer besitzen. 
      operationId: PatchModulesDrivingauthorisationsRemove_By_moduleId
      parameters: 
        - in: path
          name: moduleId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Moduls, dessen Fahrberechtigungen geändert werden sollen
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste der id's aller Benutzer (userId) welche für dieses Modul nicht mehr fahrberechtigt sein sollen.
                Benutzer die an diesem Modul bereits nicht fahrberechtigt waren, werden ignoriert.
              type: array
              items:
                type: string
                format: uuid
                nullable: false
                example: '604B1527-BAEB-4845-8699-CC666A065404'
      responses:
        '200':
          description: Die Fahrberechtigungen wurden entfernt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Modulgruppen zurück, für die der aktuelle Softwarebediener (Api2User) ein modulesView-Recht besitzt.
        Die Ausgabe ist identisch mit '/modules/groups/00000000-0000-0000-0000-000000000000/subgroups?sub=true',
        nur dass hier die Root (Gruppe00000000-0000-0000-0000-000000000000) mit zurückgegeben wird
      operationId: GetModulesGroups
      parameters: 
        - in: query
          name: sub
          description: >-
            true - alle Gruppen werden zurückgegeben
            false - nur die Untergruppen, die direkt in Root liegen werden zurückgegeben
          schema:
            type: boolean
            default: true
            example: false
      responses:
        '200':
          description: Liste aller Gruppen, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Erstellt eine neue Modulgruppe (in der Gruppe ROOT)
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesAdd-Recht für ROOT besitzen. 
      operationId: PostModulesGroups
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewGroup'
      responses:
        '200':
          description: Die Gruppe wurde estellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups/{groupId}:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt die Daten dieser Modulgruppe zurück, sofern der aktuelle Softwarebediener (Api2User) ein modulesView-Recht besitzt
      operationId: GetModulesGroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Daten zurückgegeben werden sollen
      responses:
        '200':
          description: Daten dieser Gruppe
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    delete:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        löscht diese Modulgruppe.
        Achtung! Die Modulgruppe darf keine Unter-Modulgruppen oder Modulverknüpfungen mehr enthalten. Sie muss komplett leer sein!
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesDelete-Recht besitzen.
      operationId: DeleteModulesGroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der zu löschenden Modulgruppe
        - in: query
          name: deleteAll
          description: >-
            false: Die Modulgruppe wird nur gelöscht, wenn keine Daten vorhanden sind.
            true: Die Modulgruppe wird ohne Rückfrage mit allen noch bestehenden Daten (Dokumente und/oder Gruppen-Fahrberechtigungen) gelöscht!
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Die Modulgruppe wurde gelöscht
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups/{groupId}/datas:
    patch:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Schreibt den neuen Wert in das angegebene Datenfeld dieser Modulgruppe
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesEdit-Recht für die angegebene Modulgruppe besitzen. 
      operationId: PatchModulesGroupsDatas_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Modulgruppe
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste aller Datenfelder mit den jeweiligen neuen Werten die für diese Modulgruppe gesetzt werden sollen.
                Eine Liste aller möglichen id's erhalten Sie mit dem Befehl '/modules/groups/dataFields'
              type: array
              items:
                $ref: '#/components/schemas/NewDataField'
      responses:
        '200':
          description: Das Datenfeld wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups/{groupId}/subgroups:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Modul-Untergruppen aus der in groupId angegebenen Modulgruppe zurück, für die der aktuelle Softwarebediener (Api2User) ein modulesView-Recht besitzt
      operationId: GetModulesGroupsSubgroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Untergruppen zurückgegeben werden sollen
        - in: query
          name: sub
          description: >-
            true: die Gruppen dieser und aller Untergruppen werden zurückgegeben
            false: nur die Gruppen, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Liste aller Gruppen, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Erstellt eine neue Unter-Modulgruppe der angegebenen Modulgruppe
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesAdd-Recht für die angegebene Modulgruppe besitzen. 
      operationId: PostModulesGroupsSubgroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Modulgruppe
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewGroup'
      responses:
        '200':
          description: Die Gruppe wurde estellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups/{groupId}/modules:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Module aus der Gruppe groupId zurück, für die der aktuelle Softwarebediener (Api2User) ein modulesView-Recht besitzt.
        Werden die Filter filter_bluetooth, filter_wlan, filter_name, filter_moduleType, filter_moduleDbId, filter_hybridId, filter_locked, filter_vdiMode, filter_driveType oder filter zusammen verwendet, werden die Filter mit UND verknüpft. Eine Angabe 'filter_moduleType=smart_lock_3&filter_locked=true' gibt also nur Module des Typs smart lock 3 zurück, welche derzeit gesperrt sind.
        Ausnahme bildet hier die mehrfache Verwendung des selben Filters. Innerhalb des selben Filters wird mit ODER verknüpft. Mit der Angabe von 'filter_moduleType=smart_lock_2&filter_moduleType=smart_lock_3' werden also alle Module zurückgegeben, die vom Modultyp smart lock 2 ODER smart lock 3 sind.
      operationId: GetModulesGroupsModules_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Module zurückgegeben werden sollen
        - in: query
          name: sub
          description: >-
            true: die Module dieser und aller Untergruppen werden zurückgegeben
            false: nur die Module, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: false
            example: true
        - in: query
          name: filter_bluetooth
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Module mit gültiger Bluetooth-Adresse zurückgeben.
            false: nur Module ohne gültiger Bluetooth-Adresse zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter ist inaktiv. Es werden Module mit und ohne gültiger Bluetooth-Adresse zurückgeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_wlan
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Module mit gültiger WLAN-Adresse zurückgeben.
            false: nur Module ohne gültiger WLAN-Adresse zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter ist inaktiv. Es werden Module mit und ohne gültiger WLAN-Adresse zurückgeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_name
          schema:
            type: string
            example: 'Modul 1'
          description: >-
            nur Module mit diesem Namen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_name=Modul%201&filter_name=Modul%202' findet Module die den Namen 'Modul 1' ODER 'Modul 2' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Modul 1,Test' muss also als '?filter_name=Modul%201,,Test' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebigem Namen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_moduleType
          schema:
            type: string
            enum:
              - none                   # Modultyp wurde noch nicht vergeben
              - no_easykey
              - easykey_offline
              - basic_smart
              - smart_lock_1
              - smart_lock_2
              - smart_lock_3
              - modular_basic
              - modular_crash_duo
              - modular_crash_remote
              - modular_plus_basic
              - modular_plus_crash
            example: 'smart_lock_3'
          description: >-
            nur Module des angegebenen ModulTyps (siehe '#/components/schemas/ModuleSettings' moduleType) zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_moduleType=smart_lock_2&filter_moduleType=smart_lock_3'
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebigem Modultyp zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_moduleDbId
          schema:
            type: integer
            example: 1288028961
          description: >-
            nur Module mit dieser internen Datenbank-ID (siehe auch '#/components/schemas/ModuleAddress' dbId) zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebiger Datenbank-ID zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_hybridId
          schema:
            type: integer
            example: 127
          description: >-
            nur Module mit dieser Hybrid-ID (siehe auch '#/components/schemas/ModuleAddress' hybridId) zurückgeben.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebiger Hybrid-ID zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_locked
          schema:
            type: boolean
            example: true
          description: >-
            true: nur gesperrte Module zurückgeben
            false: nur nicht gesperrte Module zurückgeben.
            (siehe auch '#/components/schemas/ModuleSettings' locked)
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden sowohl gesperrte als auch nicht gesperrte Module zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_vdiMode
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Module mit vdiMode zurückgeben.
            false: nur Module ohne vdiMode zurückgeben.
            (siehe auch '#/components/schemas/ModuleSettings' vdiMode)
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden sowohl Module mit als auch ohne vdiMode zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_driveType
          schema:
            type: string
            enum:
              - charge
              - exchange
              - fuel
              - other
            example: charge
          description: >-
            nur Module der angegebenen Antriebsart (siehe '#/components/schemas/ModuleSettings' driveType) zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_driveType=charge&filter_driveType=exchange'
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv. Es werden Module mit beliebiger Antriebsart zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter
          schema:
            type: object
            additionalProperties:
              type: object
              properties:
                id:
                  type: string
                value:
                  type: string
            minProperties: 1
            example:
              'Manufacturer': 'Linde'
          style: deepObject
          explode: true
          description: >-
            zusätzliche Suchparameter um nach Datenfeldern (siehe '#/components/schemas/ModuleData') zu suchen.
            Der Parameter wird dabei in der Form '?filter[id]=suchbegriff' eingegeben.
            id steht dabei für die id des Datenfeldes (siehe '#/components/schemas/ModuleData' id)
            Eine Liste aller möglichen Felder und deren Id erhalten Sie mit dem Befehl '/modules/dataFields'
            suchbegriff ist der Wert, nach dem in value (siehe '#/components/schemas/ModuleData' value) gesucht wird.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter[Manufacturer]=Linde&filter[Manufacturer]=Jungheinrich&filter[M1]=Frankfurt'
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Frankfurt, A' (für das Datenfeld mit der ID 'M1' muss also als '?filter[M1]=Frankfurt,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter inaktiv.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: address
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das address-Objekt (Bluetoot-/IP-Adresse des Moduls) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: settings
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das settings-Objekt ('#/components/schemas/ModuleSettings') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/ModuleData') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/ModuleAlarms') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: infos
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das infos-Objekt ('#/components/schemas/ModuleInfos') in '#/components/schemas/Module' mit übergeben wird.
        - in: query
          name: drivingRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das drivingRights-Objekt (Fahrberechtigungen) in '#/components/schemas/Module' mit übergeben wird.
            Beachten Sie, dass die Datenmenge insbesondere bei der Rückgabe vieler Module sehr groß werden kann.
      responses:
        '200':
          description: Liste aller Module, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Module'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Erstellt ein neues Modul und fügt dieses der angegebenen Modulgruppe hinzu
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesAdd-Recht für die angegebene Modulgruppe besitzen. 
      operationId: PostModulesGroupsModules_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Modulgruppe
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewModule'
      responses:
        '200':
          description: Das Modul wurde erstellt und zu der Gruppe hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Module'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups/{groupId}/links/add:
    patch:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Fügt dieser Modulgruppe eine bereits vorhandenes Modul als Modulverknüpfung hinzu
        Dieses Modul ist dann in mehreren Gruppen gleichzeitig vorhanden!
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesMove-Recht für das angegebene Modul besitzen. 
      operationId: PatchModulesGroupsLinksAdd_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            ID der jeweiligen Modulgruppe
            Verwenden Sie die ID '00000000-0000-0000-0000-000000000000' um eine Verknüpfung direkt unter Module (Root) zu erstellen.
      requestBody:
        required: true
        content:
            application/json:
              schema:
                description: die ID des Moduls, das hinzugefügt werden soll
                type: string
                format: uuid
                example: 'C8AADBCE-39A6-4114-AC18-9160CEBBA241'
      responses:
        '200':
          description: Das Modul wurde zu der Gruppe hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups/{groupId}/links/remove:
    patch:
      tags:
        - '4. Module'
      security:
        - bearerAuth: []
      description: >-
        Entfernt eine Modulverknüpfung aus dieser Modulgruppe
        Achtung! Ein Modul muss immmer in mindestens einer Modulgruppe sein. Aus der letzten Modulgruppe kann es mit diesem Befehl nicht entfernt werden! Verwenden Sie dazu den Befehl 'delete /modules/{moduleId}' um das Modul komplett zu löschen.
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende modulesMove-Recht für das angegebene Modul besitzen. 
      operationId: PatchModulesGroupsLinksRemove_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Modulgruppe
      requestBody:
        required: true
        content:
            application/json:
              schema:
                description: die ID des Moduls, das entfernt werden soll
                type: string
                format: uuid
                example: 'C8AADBCE-39A6-4114-AC18-9160CEBBA241'
      responses:
        '200':
          description: Das Modul wurde aus der Gruppe entfernt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/groups/dataFields:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Datenfelder für Modulgruppen zurück.
      operationId: GetModulesGroupsDataFields
      responses:
        '200':
          description: Liste aller möglichen Datenfelder.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataField'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/dataFields:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Datenfelder für Module zurück, so wie sie in der Datenbankkonfiguration definiert sind.
      operationId: GetModulesDataFields
      responses:
        '200':
          description: Liste aller möglichen Datenfelder.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataField'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /modules/alarmTypes:
    get:
      tags:
        - '4. Module'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Zeit(UVV)- und Betriebsstunden-Alarm-Typen für Module zurück, so wie sie in der Datenbankkonfiguration definiert sind.
      operationId: GetModulesAlarmTypes
      responses:
        '200':
          description: Liste aller möglichen UVV- und Betriebsstunden-Alarm-Typen.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ModuleAlarmType'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Benutzer zurück, für die der aktuelle Softwarebediener (Api2User) ein usersView-Recht besitzt.
        Ist äquivalent zu '/users/groups/00000000-0000-0000-0000-000000000000/users?sub=true'
        Werden die Filter filter_locked, filter_user, filter_master, filter_repair, filter_lowspeed oder filter zusammen verwendet, werden die Filter mit UND verknüpft. Eine Angabe 'filter_user=true&filter_master=false' gibt also nur Benutzer zurück, die den Status 'user' haben (also fahren dürfen) und nicht 'master' sind.
        Ausnahme bildet hier die mehrfache Verwendung des selben Filters. Innerhalb des selben Filters wird mit ODER verknüpft. Mit der Angabe von 'filter_firstname=Robert&filter_firstname=Roland&filter_lastname=Mustermann' werden also alle Benutzer zurückgegeben, die entweder den Vornamen 'Robert' ODER 'Roland' UND den Nachnamen 'Mustermann' haben. 
      operationId: GetUsers
      parameters: 
        - in: query
          name: sub
          description: >-
            true: die Benutzer dieser und aller Untergruppen werden zurückgegeben
            false: nur die Benutzer, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: true
            example: false
        - in: query
          name: filter_locked
          schema:
            type: boolean
            example: true
          description: >-
            true: nur derzeit gesperrte Benutzer zurückgeben
            false: nur derzeit nicht gesperrte Benutzer zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden sowohl gesperrte als auch nicht gesperrte Benutzer zurückgegeben
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: filter_user
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'user' zurückgeben (die fahren dürfen)
            false: nur Benutzer ohne status 'user' zurückgeben (die nicht fahren dürfen)
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'user' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: filter_master
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'master' zurückgeben (die Crashes freischalten dürfen)
            false: nur Benutzer ohne status 'master' zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'master' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: filter_repair
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'repair' zurückgeben (die den Werkstattmodus ein- bzw. ausschalten dürfen)
            false: nur Benutzer ohne status 'repair' zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'repair' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: filter_lowspeed
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'lowspeed' zurückgeben (die nur mit verringerter Geschwindigkeit fahren dürfen)
            false: nur Benutzer ohne status 'lowspeed' zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'lowspeed' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: filter_firstname
          schema:
            type: string
          description: >-
            nur Benutzer mit diesem Vornamen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_firstname=Robert&filter_firstname=Roland' findet Benutzer die den Vornamen 'Robert' ODER 'Roland' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Rober, F' muss also als '?filter_firstname=Robert,,%20F' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit beliebigem Vornamen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: filter_lastname
          schema:
            type: string
          description: >-
            nur Benutzer mit diesem Nachnamen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_lastname=Mustermann&filter_lastname=Musterfrau' findet Benutzer die den Nachnamen 'Mustermann' ODER 'Musterfrau' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Muster, Frau' muss also als '?filter_lastname=Muster,,%20Frau' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit beliebigem Nachnamen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: filter_transponder
          schema:
            oneOf:
              - type: integer
                format: int64
              - type: string
                example: '0x124F95E838'
          description: >-
            nur Benutzer mit diesem Transponder zurückgeben.
            Wenn sie den Transponder in Hex-Schreibweise suchen wollen, stellen Sie ein '0x' voran, z.B. '0x124F95E838'
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_transponder=78644635704&filter_transponder=0x124F95E822' findet Benutzer die aktuell den Transponder '78644635704' (Hex 124F95E838) ODER '78644635682' (Hex 124F95E822) haben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit beliebiger Transponder-ID zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
            Hinweis: Soll die Transponderzuordnung zu einem bestimmten Zeitpunkt (in der Vergangenheit) geprüft werden, verwenden Sie den Befehl '/users/transponder/{transponderId}'.
        - in: query
          name: filter
          schema:
            type: object
            additionalProperties:
              type: object
              properties:
                id:
                  type: string
                value:
                  type: string
            minProperties: 1
            example:
              'Company': 'Firma X'
          style: deepObject
          explode: true
          description: >-
            zusätzliche Suchparameter um nach Datenfeldern (siehe '#/components/schemas/UserData') zu suchen.
            Der Parameter wird dabei in der Form '?filter[id]=suchbegriff' eingegeben.
            id steht dabei für die id des Datenfeldes (siehe '#/components/schemas/UserData' id)
            Eine Liste aller möglichen Felder und deren Id erhalten Sie mit dem Befehl '/users/dataFields'
            suchbegriff ist der Wert, nach dem in value (siehe '#/components/schemas/UserData' value) gesucht wird.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter[Company]=Linde&filter[Company]=Jungheinrich&filter[U1]=56'
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff '56, A' (für das Datenfeld mit der ID 'U1' muss also als '?filter[U1]=56,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Benutzern zu suchen.
        - in: query
          name: modulclassValues
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das modulclassValues-Objekt (Modulklassen) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/UserData')
            in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/UserAlarms')
            in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: drivingRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das drivingRights-Objekt (Fahrberechtigungen) in '#/components/schemas/User' mit übergeben wird.
            Beachten Sie, dass die Datenmenge insbesondere bei der Rückgabe vieler Benutzer sehr groß werden kann.
      responses:
        '200':
          description: Liste aller Benutzer, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Erstellt einen neuen Benutzer (in der Gruppe ROOT)
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersAdd-Recht für ROOT besitzen. 
      operationId: PostUsers
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewUser'
      responses:
        '200':
          description: Der Benutzer wurde estellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        gibt die Daten dieses Benutzers zurück, sofern der aktuelle Softwarebediener (Api2User) ein usersView-Recht besitzt
      operationId: GetUsers_By_userId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des auszulesenden Benutzers
        - in: query
          name: modulclassValues
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das modulclassValues-Objekt (Modulklassen) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/UserData')
            in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/UserAlarms')
            in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: drivingRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das drivingRights-Objekt (Fahrberechtigungen) in '#/components/schemas/User' mit übergeben wird.
            Beachten Sie, dass die Datenmenge insbesondere bei der Rückgabe vieler Benutzer sehr groß werden kann.
      responses:
        '200':
          description: Daten dieses Benutzers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    delete:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        entfernt diesen Benutzer aus allen Gruppen und löscht ihn komplett.
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersDelete-Recht besitzen.
      operationId: DeleteUsers_By_userId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des zu löschenden Benutzers
        - in: query
          name: deleteAll
          description: >-
            false: Der Benutzer wird nur gelöscht, wenn keine Daten mehr vorhanden sind.
            true: Der Benutzer wird ohne Rückfrage mit allen noch bestehenden Daten (Fahrberechtigungen, Dokumente, Statistik) gelöscht!
            Beachten Sie, dass das Löschen aller Daten ggf. etwas Zeit in Anspruch nimmt.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Der Benutzer wurde gelöscht
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}/datas:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Schreibt den neuen Wert in das angegebene Datenfeld dieses Benutzers
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersEdit-Recht für den angegebenen Benutzer besitzen. 
      operationId: PatchUsersDatas_By_userId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Benutzers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste aller Datenfelder mit den jeweiligen neuen Werten die für diesen Benutzer gesetzt werden sollen.
                Eine Liste aller möglichen id's erhalten Sie mit dem Befehl '/users/dataFields'
              type: array
              items:
                $ref: '#/components/schemas/NewDataField'
      responses:
        '200':
          description: Das Datenfeld wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}/alarms:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle Alarme bzw. Alarm-Definitionen (also auch Alarme, die noch nicht ausgelöst sind) dieses Benutzers zurück, sofern der aktuelle Softwarebediener (Api2User) ein usersView-Recht für das angegebene Modul besitzt.
      operationId: GetUsersAlarms_By_userId
      parameters:
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Benutzers, dessen Alarme gelesen werden sollen
      responses:
        '200':
          description: Array mit Alarmen dieses Benutzers
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserAlarm'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}/alarms/{alarmId}:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt den Alarme bzw. Alarm-Definitionen (also auch Alarme, die noch nicht ausgelöst sind) mit dieser alarmId dieses Benutzers zurück, sofern der aktuelle Softwarebediener (Api2User) ein usersView-Recht für das angegebene Modul besitzt.
      operationId: GetUsersAlarms_By_userId_alarmId
      parameters:
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des Benutzers, dessen Alarme gelesen werden sollen
        - in: path
          name: alarmId
          schema:
            type: string
            example: 'ExpirationDate1'
          required: true
          description: >-
            ID des Alarms, z.B. 'ExpirationDate1' oder '002A4423-F8DB-45FB-94C5-4A1648411FD8'
            Eine vollständige Liste aller möglichen alarmId's erhalten Sie mit dem Befehl '\users\alarmTypes'
      responses:
        '200':
          description: Der Alarm bzw. die Alarmdefinition dieses Alarms
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAlarm'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Legt beim angegebenen Benutzer für das Ablaufdatum 'alarmId'einen neuen Grenzwert (newThreshold) fest.
        Angegeben wird immer der Alarm-Wert. Die Werte für Warnung und Überfällig ergeben sich automatisch aus dem jeweiligen Alarm-Profil.
        Das neue Ablaufdatum (Grenzwert bzw. newThreshold) wird als date formatierter String (im Format JJJJ-MM-TT, z.B. '2022-01-15') übergeben.
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersEditExpiration- bzw. das usersEditModulClassExpiration-Recht für den angegebenen Benutzer besitzen. 
      operationId: PatchUsersAlarms_By_userId_alarmId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Benutzers
        - in: path
          name: alarmId
          schema:
            type: string
            example: 'ExpirationDate1'
          required: true
          description: >-
            ID des Alarms, z.B. 'ExpirationDate1'
            Eine Liste aller möglichen alarmId's erhalten Sie mit dem Befehl '\users\alarmTypes'
      requestBody:
        required: true
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewUserAlarm'
      responses:
        '200':
          description: Alarm-Grenzwert wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}/drivingauthorisations/add:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Fügt Fahrberechtigungen für diesen Benutzer hinzu
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersEditDrivingRights-Recht für den angegebenen Benutzer sowie modulesEditDrivingRights für die hinzuzufügenden Module besitzen. 
      operationId: PatchUsersDrivingauthorisationsAdd_By_userId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Benutzers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste der id's aller Module (moduleId) für welche dieser Benutzer fahrberechtigt sein soll.
                Diese Module werden zu den bereits vorhandenen Fahrberechtigungen dieses Benutzers hinzugefügt.
                Doppelte Fahrberechtigungen werden ignoriert.
              type: array
              items:
                type: string
                format: uuid
                nullable: false
                example: '604B1527-BAEB-4845-8699-CC666A065404'
      responses:
        '200':
          description: Die Fahrberechtigungen wurden hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}/drivingauthorisations/remove:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Entzieht diesem Benutzer Fahrberechtigungen
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersEditDrivingRights-Recht für den angegebenen Benutzer sowie modulesEditDrivingRights für die zu entfernenden Module besitzen. 
      operationId: PatchUsersDrivingauthorisationsRemove_By_userId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Benutzers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste der id's aller Module (moduleId) für welche dieser Benutzer nicht mehr fahrberechtigt sein soll.
                Module für welche der Benutzer bereits nicht fahrberechtigt war, werden ignoriert.
              type: array
              items:
                type: string
                format: uuid
                nullable: false
                example: '604B1527-BAEB-4845-8699-CC666A065404'
      responses:
        '200':
          description: Die Fahrberechtigungen wurden entfernt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}/modulclasses/add:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Fügt Fahrzeugklassen zu diesem Benutzer hinzu
        Eine Liste aller möglichen Fahrzeugklassen (ModulClass) erhalten Sie mit '/settings/modulclasses'
        oder über das modulclassValues-Objekt (Modulklassen) in '#/components/schemas/User'
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersEdit-Recht für den angegebenen Benutzer besitzen. 
      operationId: PatchUsersModulclassesAdd_By_userId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Benutzers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste aller Fahrzeugklassen welche diesem Benutzer hinzugefügt werden sollen.
                Diese Fahrzeugklassen werden zu den bereits vorhandenen Fahrzeugklassen dieses Benutzers hinzugefügt.
                Besitzt der Benutzer eine dieser Fahrzeugklassen bereits und es ist ein Ablaufdatum mit angegeben, dann wird dieses Ablaufdatum für die Fahrzeugklasse übernommen. Ist kein Ablaufdatum angegeben, dann bleibt das Ablaufdatum dieser Fahrzeugklasse auf dem derzeit eingestellten Wert.
              type: array
              items:
                $ref: '#/components/schemas/AddModulclass'
      responses:
        '200':
          description: Die Fahrzeugklassen wurden hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/{userId}/modulclasses/remove:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Entzieht diesem Benutzer Fahrzeugklassen
        Eine Liste aller Fahrzeugklassen (ModulClass) erhalten Sie mit '/settings/modulclasses'
        oder über das modulclassValues-Objekt (Modulklassen) in '#/components/schemas/User'
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersEdit-Recht für den angegebenen Benutzer besitzen. 
      operationId: PatchUsersModulclassesRemove_By_userId
      parameters: 
        - in: path
          name: userId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID des jeweiligen Benutzers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste der id's aller Fahrzeugklassen welche diesem Benutzer entzogen werden sollen.
                Fahrzeugklassen die der Benutzer nicht besitzt, werden ignoriert.
              type: array
              items:
                type: string
                format: uuid
                example: '604B1527-BAEB-4845-8699-CC666A065404'
      responses:
        '200':
          description: Die Fahrberechtigungen wurden entfernt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Benutzergruppen zurück, für die der aktuelle Softwarebediener (Api2User) ein usersView-Recht besitzt.
        Die Ausgabe ist identisch mit '/users/groups/00000000-0000-0000-0000-000000000000/subgroups?sub=true',
        nur dass hier die Root (Gruppe00000000-0000-0000-0000-000000000000) mit zurückgegeben wird
      operationId: GetUsersGroups
      parameters: 
        - in: query
          name: sub
          description: >-
            true: alle Gruppen werden zurückgegeben
            false: nur die Untergruppen, die direkt in Root liegen werden zurückgegeben
          schema:
            type: boolean
            default: true
            example: false
      responses:
        '200':
          description: Liste aller Gruppen, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Erstellt eine neue Benutzergruppe (in der Gruppe ROOT)
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersAdd-Recht für ROOT besitzen. 
      operationId: PostUsersGroups
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewGroup'
      responses:
        '200':
          description: Die Gruppe wurde estellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups/{groupId}:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt die Daten dieser Benutzergruppe zurück, sofern der aktuelle Softwarebediener (Api2User) ein usersView-Recht besitzt
      operationId: GetUsersGroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Daten zurückgegeben werden sollen
      responses:
        '200':
          description: Daten dieser Gruppe
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    delete:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        löscht diese Benutzergruppe
        Achtung! Die Benutzergruppe darf keine Unter-Benutzergruppen oder Benutzerverknüpfungen mehr enthalten. Sie muss komplett leer sein!
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersDelete-Recht für dese Gruppe besizten besitzen.
      operationId: DeleteUsersGroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der zu löschenden Benutzergruppe
        - in: query
          name: deleteAll
          description: >-
            false: Die Benutzergruppe wird nur gelöscht, wenn keine Daten vorhanden sind.
            true: Die Benutzergruppe wird ohne Rückfrage mit allen noch bestehenden Daten (Dokumente und/oder Gruppen-Fahrberechtigungen) gelöscht!
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Die Benutzergruppe wurde gelöscht
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups/{groupId}/datas:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Schreibt den neuen Wert in das angegebene Datenfeld dieser Benutzergruppe
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersEdit-Recht für die angegebene Benutzergruppe besitzen. 
      operationId: PatchUsersGroupsDatas_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Benutzergruppe
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste aller Datenfelder mit den jeweiligen neuen Werten die für diese Benutzergruppe gesetzt werden sollen.
                Eine Liste aller möglichen id's erhalten Sie mit dem Befehl '/users/groups/dataFields'
              type: array
              items:
                $ref: '#/components/schemas/NewDataField'
      responses:
        '200':
          description: Das Datenfeld wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups/{groupId}/subgroups:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Benutzer-Untergruppen aus der in groupId angegebenen Benutzergruppe zurück, für die der aktuelle Softwarebediener (Api2User) ein usersView-Recht besitzt
      operationId: GetUsersGroupsSubgroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Untergruppen zurückgegeben werden sollen
        - in: query
          name: sub
          description: >-
            true: die Gruppen dieser und aller Untergruppen werden zurückgegeben
            false: nur die Gruppen, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Liste aller Gruppen, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Erstellt eine neue Unter-Benutzergruppe in der angegebenen Benutzergruppe
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersAdd-Recht für die angegebene Benutzergruppe besitzen. 
      operationId: PostUsersGroupsSubgroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Benutzergruppe
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewGroup'
      responses:
        '200':
          description: Die Gruppe wurde estellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups/{groupId}/users:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Benutzer aus der Gruppe groupId zurück, für die der aktuelle Softwarebediener (Api2User) ein usersView-Recht besitzt.
        Werden die Filter filter_locked, filter_user, filter_master, filter_repair, filter_lowspeed oder filter zusammen verwendet, werden die Filter mit UND verknüpft. Eine Angabe 'filter_user=true&filter_master=false' gibt also nur Benutzer zurück, die den Status 'user' haben (also fahren dürfen) und nicht 'master' sind.
        Ausnahme bildet hier die mehrfache Verwendung des selben Filters. Innerhalb des selben Filters wird mit ODER verknüpft. Mit der Angabe von 'filter_firstname=Robert&filter_firstname=Roland&filter_lastname=Mustermann' werden also alle Benutzer zurückgegeben, die entweder den Vornamen 'Robert' ODER 'Roland' UND den Nachnamen 'Mustermann' haben. 
      operationId: GetUsersGroupsUsers_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Benutzer zurückgegeben werden sollen
        - in: query
          name: sub
          description: >-
            true: die Benutzer dieser und aller Untergruppen werden zurückgegeben
            false: nur die Benutzer, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: false
            example: true
        - in: query
          name: filter_locked
          schema:
            type: boolean
            example: true
          description: >-
            true: nur derzeit gesperrte Benutzer zurückgeben
            false: nur derzeit nicht gesperrte Benutzer zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden sowohl gesperrte als auch nicht gesperrte Benutzer zurückgegeben
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_user
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'user' zurückgeben (die fahren dürfen)
            false: nur Benutzer ohne status 'user' zurückgeben (die nicht fahren dürfen)
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'user' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_master
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'master' zurückgeben (die Crashes freischalten dürfen)
            false: nur Benutzer ohne status 'master' zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'master' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_repair
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'repair' zurückgeben (die den Werkstattmodus ein- bzw. ausschalten dürfen)
            false: nur Benutzer ohne status 'repair' zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'repair' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_lowspeed
          schema:
            type: boolean
            example: true
          description: >-
            true: nur Benutzer mit status 'lowspeed' zurückgeben (die nur mit verringerter Geschwindigkeit fahren dürfen)
            false: nur Benutzer ohne status 'lowspeed' zurückgeben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit und ohne status 'lowspeed' zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_firstname
          schema:
            type: string
          description: >-
            nur Benutzer mit diesem Vornamen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_firstname=Robert&filter_firstname=Roland' findet Benutzer die den Vornamen 'Robert' ODER 'Roland' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Rober, F' muss also als '?filter_firstname=Robert,,%20F' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit beliebigem Vornamen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_lastname
          schema:
            type: string
          description: >-
            nur Benutzer mit diesem Nachnamen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_lastname=Mustermann&filter_lastname=Musterfrau' findet Benutzer die den Nachnamen 'Mustermann' ODER 'Musterfrau' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Muster, Frau' muss also als '?filter_lastname=Muster,,%20Frau' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit beliebigem Nachnamen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_transponder
          schema:
            oneOf:
              - type: integer
                format: int64
              - type: string
                example: '0x124F95E838'
          description: >-
            nur Benutzer mit diesem Transponder zurückgeben.
            Wenn sie den Transponder in Hex-Schreibweise suchen wollen, stellen Sie ein '0x' voran, z.B. '0x124F95E838'
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_transponder=78644635704&filter_transponder=0x124F95E822' findet Benutzer die aktuell den Transponder '78644635704' (Hex 124F95E838) ODER '78644635682' (Hex 124F95E822) haben
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Benutzer mit beliebiger Transponder-ID zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
            Hinweis: Soll die Transponderzuordnung zu einem bestimmten Zeitpunkt (in der Vergangenheit) geprüft werden, verwenden Sie den Befehl '/users/transponder/{transponderId}'.
        - in: query
          name: filter
          schema:
            type: object
            additionalProperties:
              type: object
              properties:
                id:
                  type: string
                value:
                  type: string
            minProperties: 1
            example:
              'Company': 'Firma X'
          style: deepObject
          explode: true
          description: >-
            zusätzliche Suchparameter um nach Datenfeldern (siehe '#/components/schemas/UserData') zu suchen.
            Der Parameter wird dabei in der Form '?filter[id]=suchbegriff' eingegeben.
            id steht dabei für die id des Datenfeldes (siehe '#/components/schemas/UserData' id)
            Eine Liste aller möglichen Felder und deren Id erhalten Sie mit dem Befehl '/users/dataFields'
            suchbegriff ist der Wert, nach dem in value (siehe '#/components/schemas/UserData' value) gesucht wird.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter[Company]=Linde&filter[Company]=Jungheinrich&filter[U1]=56'
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff '56, A' (für das Datenfeld mit der ID 'U1' muss also als '?filter[U1]=56,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: modulclassValues
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das modulclassValues-Objekt (Modulklassen) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/UserData')
            in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/UserAlarms')
            in '#/components/schemas/User' mit übergeben wird.
        - in: query
          name: drivingRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das drivingRights-Objekt (Fahrberechtigungen) in '#/components/schemas/User' mit übergeben wird.
            Beachten Sie, dass die Datenmenge insbesondere bei der Rückgabe vieler Benutzer sehr groß werden kann.
      responses:
        '200':
          description: Liste aller Benutzer, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Erstellt einen neuen Benutzer und fügt diesen der angegebenen Benutzergruppe hinzu
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersAdd-Recht für die angegebene Benutzergruppe besitzen. 
      operationId: PostUsersGroupsUsers_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Benutzergruppe
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewUser'
      responses:
        '200':
          description: Der Benutzer wurde erstellt und zu der Gruppe hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups/{groupId}/links/add:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Fügt dieser Benutzergruppe einen bereits vorhandenen Benutzer als Benutzerverknüpfung hinzu
        Dieser Benutzer ist dann in mehreren Gruppen gleichzeitig vorhenden!
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersMove-Recht für den angegebenen Benutzer besitzen. 
      operationId: PatchUsersGroupsLinksAdd_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            ID der jeweiligen Benutzergruppe
            Verwenden Sie die ID '00000000-0000-0000-0000-000000000000' um eine Verknüpfung direkt unter Benutzer (Root) zu erstellen.
      requestBody:
        required: true
        content:
            application/json:
              schema:
                description: die ID des Benutzers, der hinzugefügt werden soll
                type: string
                format: uuid
                example: 'C8AADBCE-39A6-4114-AC18-9160CEBBA241'
      responses:
        '200':
          description: Der Benutzer wurde zu der Gruppe hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups/{groupId}/links/remove:
    patch:
      tags:
        - '5. Benutzer'
      security:
        - bearerAuth: []
      description: >-
        Entfernt eine Benutzerverknüpfung aus dieser Benutzergruppe
        Achtung! Ein Benutzer muss immmer in mindestens einer Benutzergruppe sein. Aus der letzten Benutzergruppe kann er mit diesem Befehl nicht entfernt werden! Verwenden Sie dazu den Befehl 'delete /users/{userId}' um den Benutzer komplett zu löschen.
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende usersMove-Recht für den angegebenen Benutzer besitzen. 
      operationId: PatchUsersGroupsLinksRemove_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            ID der jeweiligen Benutzergruppe
            Verwenden Sie die ID '00000000-0000-0000-0000-000000000000' um eine Verknüpfung direkt unter Benutzer (Root) zu erstellen.
      requestBody:
        required: true
        content:
            application/json:
              schema:
                description: die ID des Benutzers, der entfernt werden soll
                type: string
                format: uuid
                example: 'C8AADBCE-39A6-4114-AC18-9160CEBBA241'
      responses:
        '200':
          description: Der Benutzer wurde aus der Gruppe entfernt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/groups/dataFields:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Datenfelder für Benutzergruppen zurück.
      operationId: GetUsersGroupsDataFields
      responses:
        '200':
          description: Liste aller möglichen Datenfelder.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataField'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/dataFields:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Datenfelder für Benutzer zurück, so wie sie in der Datenbankkonfiguration definiert sind.
      operationId: GetUsersDataFields
      responses:
        '200':
          description: Liste aller möglichen Datenfelder.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataField'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /users/alarmTypes:
    get:
      tags:
        - '5. Benutzer'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Ablaufdatum-Typen für Benutzer zurück, so wie sie in der Datenbankkonfiguration definiert sind.
        Beachten Sie dabei, dass Alarme für Modulklassen (id in der Form '5A08B9B5-EEC6-4E1A-847F-44D7D229837E') nur zur Verfügung stehen, wenn dem jeweiligen Benutzer die entsprechende Modulklasse auch zugewiesen ist.
      operationId: GetUsersAlarmTypes
      responses:
        '200':
          description: Liste aller möglichen Ablaufdatum-Typen.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserAlarmType'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Batterien zurück, für die der aktuelle Softwarebediener (Api2User) ein batteryView-Recht besitzt.
        Ist äquivalent zu '/batteries/groups/00000000-0000-0000-0000-000000000000/batteries?sub=true'
      operationId: GetBatteries
      parameters: 
        - in: query
          name: sub
          description: >-
            true: die Batterien dieser und aller Untergruppen werden zurückgegeben
            false: nur die Batterien, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: true
            example: false
        - in: query
          name: filter_name
          schema:
            type: string
          description: >-
            nur Batterien mit diesem Nachnamen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_name=Batterie%20A&filter_name=Batterie%20B' findet Batterien die den Namen 'Batterie A' ODER 'Batterie B' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Batterie, A' muss also als '?filter_name=Batterie,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Batterien mit beliebigem Namen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Batterien zu suchen.
        - in: query
          name: filter_macAddress
          schema:
            oneOf:
              - type: integer
                format: int64
              - type: string
                example: '12-34-56-78-90-AB'
          description: >-
            nur Batterien (bzw. die Batterie) mit dieser MAC-Adresse zurückgeben.
            Die MAC-Adresse kann entweder als Zahl (int64) übergeben werden (z.B. '20015998341291')
            oder als String in der üblichen Byte-Schreibweise mit Bindestrichen oder Doppelpunkten getrennt (z.B. '12-34-56-78-90-AB' oder '12:34:56:78:90:AB')
            oder in Hex-Schreibweise mit vorangestelltem '0x' (z.B. '0x1234567890AB').
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_macAddress=12-34-56-78-90-AB&filter_macAddress=18838593387468' findet Batterien mit der MAC-Adresse '12-34-56-78-90-AB' (als Zahl '20015998341291') ODER '11-22-33-AA-BB-CC' (als Zahl '18838593387468').
            Durch Filtern nach MAC-Adresse '0' ('?filter_macAddress=0') werden alle Batterien zurückgegeben, denen noch keine MAC-Adresse zugewiesen wurde.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Batterien ohne und mit beliebiger MAC-Adresse zurückgegeben.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Batterien zu suchen.
        - in: query
          name: filter
          schema:
            type: object
            additionalProperties:
              type: object
              properties:
                id:
                  type: string
                value:
                  type: string
            minProperties: 1
            example:
              'Company': 'Firma X'
          style: deepObject
          explode: true
          description: >-
            zusätzliche Suchparameter um nach Datenfeldern (siehe '#/components/schemas/BatteryData') zu suchen.
            Der Parameter wird dabei in der Form '?filter[id]=suchbegriff' eingegeben.
            id steht dabei für die id des Datenfeldes (siehe '#/components/schemas/BatteryData' id)
            Eine Liste aller möglichen Felder und deren Id erhalten Sie mit dem Befehl '/batteries/dataFields'
            suchbegriff ist der Wert, nach dem in value (siehe '#/components/schemas/BatteryData' value) gesucht wird.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter[Company]=Linde&filter[Company]=Jungheinrich&filter[B1]=56'
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff '56, A' (für das Datenfeld mit der ID 'B1' muss also als '?filter[B1]=56,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv.
            Beachten Sie auch den Parameter sub=true um nach ALLEN Batterien zu suchen.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/BatteryData')
            in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/BatteryAlarms')
            in '#/components/schemas/Battery' mit übergeben wird.
      responses:
        '200':
          description: Liste aller Batterien, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Battery'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/{batteryId}:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        gibt die Daten dieser Batterie zurück, sofern der aktuelle Softwarebediener (Api2User) ein batteryView-Recht besitzt
      operationId: GetBatteries_By_batteryId
      parameters: 
        - in: path
          name: batteryId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der auszulesenden Batterie
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/BatteryData')
            in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/BatteryAlarms')
            in '#/components/schemas/Battery' mit übergeben wird.
      responses:
        '200':
          description: Daten dieser Batterie
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Battery'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/{batteryId}/alarms:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle Alarme bzw. Alarm-Definitionen (also auch Alarme, die noch nicht ausgelöst sind) dieser Batterie zurück, sofern der aktuelle Softwarebediener (Api2User) ein batteryView-Recht für die angegebene Batterie besitzt.
      operationId: GetBatteriesAlarms_By_batteryId
      parameters:
        - in: path
          name: batteryId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Batterie, deren Alarme gelesen werden sollen
      responses:
        '200':
          description: Array mit Alarmen dieser Batterie
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BatteryAlarm'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/{batteryId}/alarms/{alarmId}:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt den Alarme bzw. Alarm-Definitionen (also auch Alarme, die noch nicht ausgelöst sind) mit dieser alarmId dieser Batterie zurück, sofern der aktuelle Softwarebediener (Api2User) ein batteryView-Recht für die angegebene Batterie besitzt.
      operationId: GetBatteriesAlarms_By_batteryId_alarmId
      parameters:
        - in: path
          name: batteryId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Batterie, deren Alarme gelesen werden sollen
        - in: path
          name: alarmId
          schema:
            type: string
            example: 'ExpirationDate1'
          required: true
          description: >-
            ID des Alarms, z.B. 'ExpirationDate1'
            Eine vollständige Liste aller möglichen alarmId's erhalten Sie mit dem Befehl '\batteries\alarmTypes'
      responses:
        '200':
          description: Der Alarm bzw. die Alarmdefinition dieses Alarms
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatteryAlarm'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    patch:
      tags:
        - '6. Batterien'
      security:
        - bearerAuth: []
      description: >-
        Legt bei der angegebenen Batterie für das Ablaufdatum 'alarmId'einen neuen Grenzwert (newThreshold) fest.
        Angegeben wird immer der Alarm-Wert. Die Werte für Warnung und Überfällig ergeben sich automatisch aus dem jeweiligen Alarm-Profil.
        Das neue Ablaufdatum (Grenzwert bzw. newThreshold) wird als date formatierter String (im Format JJJJ-MM-TT, z.B. '2022-01-15') übergeben.
        Der aktuelle Softwarebediener (Api2User) muss das entsprechende batteryEditExpiration-Recht für die angegebene Batterie besitzen. 
      operationId: PatchBatteriesAlarms_By_batteryId_alarmId
      parameters: 
        - in: path
          name: batteryId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der jeweiligen Batterie
        - in: path
          name: alarmId
          schema:
            type: string
            example: 'BatExpiration1'
          required: true
          description: >-
            ID des Alarms, z.B. 'ExpirationDate1'
            Eine Liste aller möglichen alarmId's erhalten Sie mit dem Befehl '\batteries\alarmTypes'
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewUserAlarm'
      responses:
        '200':
          description: Alarm-Grenzwert wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/groups:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Batteriegruppen zurück, für die der aktuelle Softwarebediener (Api2User) ein batteryView-Recht besitzt.
        Die Ausgabe ist identisch mit '/batteries/groups/00000000-0000-0000-0000-000000000000/subgroups?sub=true',
        nur dass hier die Root (Gruppe00000000-0000-0000-0000-000000000000) mit zurückgegeben wird
      operationId: GetBatteriesGroups
      parameters: 
        - in: query
          name: sub
          description: >-
            true: alle Gruppen werden zurückgegeben
            false: nur die Untergruppen, die direkt in Root liegen werden zurückgegeben
          schema:
            type: boolean
            default: true
            example: false
      responses:
        '200':
          description: Liste aller Gruppen, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/groups/{groupId}:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt die Daten dieser Batteriegruppe zurück, sofern der aktuelle Softwarebediener (Api2User) ein batteryView-Recht besitzt
      operationId: GetBatteriesGroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Daten zurückgegeben werden sollen
      responses:
        '200':
          description: Daten dieser Gruppe
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/groups/{groupId}/subgroups:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Batterie-Untergruppen aus der in groupId angegebenen Batteriegruppe zurück, für die der aktuelle Softwarebediener (Api2User) ein batteryView-Recht besitzt
      operationId: GetBatteriesGroupsSubgroups_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Untergruppen zurückgegeben werden sollen
        - in: query
          name: sub
          description: >-
            true: die Gruppen dieser und aller Untergruppen werden zurückgegeben
            false: nur die Gruppen, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Liste aller Gruppen, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Group'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/groups/{groupId}/batteries:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt eine Liste aller Batterien aus der Gruppe groupId zurück, für die der aktuelle Softwarebediener (Api2User) ein batteryView-Recht besitzt.
      operationId: GetBatteriesGroupsBatteries_By_groupId
      parameters: 
        - in: path
          name: groupId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: ID der Gruppe, deren Batterien zurückgegeben werden sollen
        - in: query
          name: sub
          description: >-
            true: die Batterien dieser und aller Untergruppen werden zurückgegeben
            false: nur die Batterien, die direkt in dieser Gruppe liegen werden zurückgegeben
          schema:
            type: boolean
            default: false
            example: true
        - in: query
          name: filter_name
          schema:
            type: string
          description: >-
            nur Batterien mit diesem Nachnamen zurückgeben.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_name=Batterie%20A&filter_name=Batterie%20B' findet Batterien die den Namen 'Batterie A' ODER 'Batterie B' haben
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff 'Batterie, A' muss also als '?filter_name=Batterie,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Batterien mit beliebigem Namen zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter_macAddress
          schema:
            oneOf:
              - type: integer
                format: int64
              - type: string
                example: '12-34-56-78-90-AB'
          description: >-
            nur Batterien (bzw. die Batterie) mit dieser MAC-Adresse zurückgeben.
            Die MAC-Adresse kann entweder als Zahl (int64) übergeben werden (z.B. '20015998341291')
            oder als String in der üblichen Byte-Schreibweise mit Bindestrichen oder Doppelpunkten getrennt (z.B. '12-34-56-78-90-AB' oder '12:34:56:78:90:AB')
            oder in Hex-Schreibweise mit vorangestelltem '0x' (z.B. '0x1234567890AB').
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter_macAddress=12-34-56-78-90-AB&filter_macAddress=18838593387468' findet Batterien mit der MAC-Adresse '12-34-56-78-90-AB' (als Zahl '20015998341291') ODER '11-22-33-AA-BB-CC' (als Zahl '18838593387468').
            Durch Filtern nach MAC-Adresse '0' ('?filter_macAddress=0') werden alle Batterien zurückgegeben, denen noch keine MAC-Adresse zugewiesen wurde.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv. Es werden Batterien ohne und mit beliebiger MAC-Adresse zurückgegeben.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: filter
          schema:
            type: object
            additionalProperties:
              type: object
              properties:
                id:
                  type: string
                value:
                  type: string
            minProperties: 1
            example:
              'Company': 'Firma X'
          style: deepObject
          explode: true
          description: >-
            zusätzliche Suchparameter um nach Datenfeldern (siehe '#/components/schemas/BatteryData') zu suchen.
            Der Parameter wird dabei in der Form '?filter[id]=suchbegriff' eingegeben.
            id steht dabei für die id des Datenfeldes (siehe '#/components/schemas/BatteryData' id)
            Eine Liste aller möglichen Felder und deren Id erhalten Sie mit dem Befehl '/batteries/dataFields'
            suchbegriff ist der Wert, nach dem in value (siehe '#/components/schemas/BatteryData' value) gesucht wird.
            Der Parameter kann mehrfach angegeben werden, z.B. '?filter[Company]=Linde&filter[Company]=Jungheinrich&filter[B1]=56'
            Der Suchbegriff muss ggf. Prozent-Encoded werden, siehe https://de.wikipedia.org/wiki/URL-Encoding#Prozentdarstellung
            ACHTUNG! Wenn der Suchbegriff ein Komma ',' enthält, muss dieses doppelt angegeben werden. Der Suchbegriff '56, A' (für das Datenfeld mit der ID 'B1' muss also als '?filter[B1]=56,,%20A' geschrieben werden.
            Ist der Parameter nicht angegeben, so ist der Filter ist nicht aktiv.
            Beachten Sie auch den Parameter sub=true um auch in Untergruppen zu suchen.
        - in: query
          name: areas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areas-Objekt (Bereiche) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: areaRights
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das areaRights-Objekt (Bedienrechte) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: links
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das links-Objekt (Links incl. Gruppen) in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: datas
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das datas-Objekt ('#/components/schemas/BatteryData')
            in '#/components/schemas/Battery' mit übergeben wird.
        - in: query
          name: alarms
          schema:
            type: boolean
            default: false
            example: true
          description: >-
            gibt an, ob das alarms-Objekt ('#/components/schemas/BatteryAlarms')
            in '#/components/schemas/Battery' mit übergeben wird.
      responses:
        '200':
          description: Liste aller Batterien, welche dieser Softwarebediener (Api2User) sehen darf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Battery'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/dataFields:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Datenfelder für Batterien zurück, so wie sie in der Datenbankkonfiguration definiert sind.
      operationId: GetBatteriesDataFields
      responses:
        '200':
          description: Liste aller möglichen Datenfelder.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataField'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /batteries/alarmTypes:
    get:
      tags:
        - '6. Batterien'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Ablaufdatum-Typen für Batterien zurück, so wie sie in der Datenbankkonfiguration definiert sind.
      operationId: GetBatteriesAlarmTypes
      responses:
        '200':
          description: Liste aller möglichen Ablaufdatum-Typen.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BatteryAlarmType'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /departurecontrol/languages:
    get:
      tags:
        - '7. Abfahrtskontrolle'
      security:
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Sprachen der Abfahrtskontrolle zurück
      operationId: GetDeparturecontrolLanguages
      responses:
        '200':
          description: >-
            Liste aller möglichen Sprachen der Abfahrtskontrolle
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DepartureControlLanguage'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /departurecontrol/texts:
    get:
      tags:
        - '7. Abfahrtskontrolle'
      security:
        - bearerAuth: []
      description: >-
        Gibt alle derzeit definierten Texte für die Abfahrtskontrolle zurück
      operationId: GetDeparturecontrolTexts
      responses:
        '200':
          description: Liste aller Texte die in der Abfahrtskontrolle vorkommen können
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DepartureControlText'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /departurecontrol/texts/{textNr}:
    get:
      tags:
        - '7. Abfahrtskontrolle'
      security:
        - bearerAuth: []
      description: >-
        Gibt den Abfahrtskontroll-Text der angegebenen Nummer zurück
      operationId: GetDeparturecontrolTexts_By_textNr
      parameters: 
        - in: path
          name: textNr
          schema:
            type: integer
            example: 5
          required: true
          description: Nummer des gewünschten Textes
      responses:
        '200':
          description: Abfahrtskontroll-Text mit der nummer 'textNr'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartureControlText'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /departurecontrol/lists:
    get:
      tags:
        - '7. Abfahrtskontrolle'
      security:
        - bearerAuth: []
      description: >-
        Gibt alle derzeit definierten Listen für die Abfahrtskontrolle zurück
        Jedem Modul kann (im Feld 'departureControl') eine dieser Listen zugeordnet sein, wodurch bestimmt wird welche Fragen für dieses Modul möglich sind und wann eine Abfahrtskontrolle druchgeführt werden muss.
      operationId: GetDeparturecontrolLists
      responses:
        '200':
          description: Aller Abfahrtskontroll-Listen die in der Abfahrtskontrolle vorkommen können
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DepartureControlList'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /departurecontrol/lists/{listId}:
    get:
      tags:
        - '7. Abfahrtskontrolle'
      security:
        - bearerAuth: []
      description: >-
        Gibt die Abfahrtskontroll-Liste der angegebenen id zurück
      operationId: GetDeparturecontrolLists_By_listId
      parameters: 
        - in: path
          name: listId
          schema:
            type: string
            format: uuid
            example: '24EA9015-5FBA-4463-806F-35CB933CB896'
          required: true
          description: id der gewünschten Liste
      responses:
        '200':
          description: Abfahrtskontroll-Liste mit der id 'listId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartureControlList'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/statlog15:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die ¼ stündlichen statistischen Daten aller Module zurück
      operationId: GetStatisticsStatlog15
      parameters: 
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
      responses:
        '200':
          description: ¼ stündliche statistische Daten
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLog15ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/{id}/statlog15:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die ¼ stündlichen statistischen Daten des oder der ausgewählten Module zurück
      operationId: GetStatisticsStatlog15_By_id
      parameters: 
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            Ist die angegebene id eine ModulID, werden nur Daten dieses Moduls zurückgegeben.
            Ist die angegebene is eine ModulGruppenID, werden die Daten aller Module aus dieser Gruppe (und ggf. Untergruppen) zurückgegeben.
            Daten werden jedoch nur für die Module ausgegeben, für welche das Bedienrecht 'statisticForModules' gegeben ist.
            Ist das Bedienrecht nicht gegeben, wird das Modul ohne Daten ausgegeben.
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
      responses:
        '200':
          description: ¼ stündliche statistische Daten
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLog15ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/statlog24:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten aller Module zurück
      operationId: GetStatisticsStatlog24
      parameters: 
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: shift
          description: >-
            Ist dieser Filter angegeben, werden nur Daten dieser Schicht zurückgegeben.
            Je nach Schichtmodell des Moduls kann es Schichten von 1 bis 4 geben. Sehen Sie dazu auch den Befehl '/settings/shiftmodels'
            Achtung! Werden die Daten mehrere Module mit unterschiedlichen Schichtmodellen gleichzeitig zurückgegeben, kann die Schichtlänge, d.h. die maximale Dauer innerhalt der Schciht, bei den jeweiligen Modulen unterschiedlich sein. Ebenso kann es sein, dass eine Schicht im Schichtmodell einiger oder aller Module (z.B. die Schicht 3) nicht existiert und daher nicht mit zurückgegeben wird.
            Ist der Filter nicht angegeben oder wird eine andere Zahl als 1, 2, 3 oder 4 angegeben, werden die Daten des gesamten Tages zurückgegeben.
          schema:
            type: integer
            minimum: 0
            maximum: 4
            example: 1
      responses:
        '200':
          description: tägliche statistische Daten oder die an diesem Tag in dieser Schicht angefallenen Daten
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLog24ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/{id}/statlog24:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten des oder der ausgewählten Module zurück
      operationId: GetStatisticsStatlog24_By_id
      parameters: 
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            Ist die angegebene id eine ModulID, werden nur Daten dieses Moduls zurückgegeben.
            Ist die angegebene is eine ModulGruppenID, werden die Daten aller Module aus dieser Gruppe (und ggf. Untergruppen) zurückgegeben.
            Daten werden jedoch nur für die Module ausgegeben, für welche das Bedienrecht 'statisticForModules' gegeben ist.
            Ist das Bedienrecht nicht gegeben, wird das Modul ohne Daten ausgegeben.
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: shift
          description: >-
            Ist dieser Filter angegeben, werden nur Daten dieser Schicht zurückgegeben.
            Je nach Schichtmodell des Moduls kann es Schichten von 1 bis 4 geben. Sehen Sie dazu auch den Befehl '/settings/shiftmodels'
            Achtung! Werden die Daten mehrere Module mit unterschiedlichen Schichtmodellen gleichzeitig zurückgegeben, kann die Schichtlänge, d.h. die maximale Dauer innerhalt der Schciht, bei den jeweiligen Modulen unterschiedlich sein. Ebenso kann es sein, dass eine Schicht im Schichtmodell einiger oder aller Module (z.B. die Schicht 3) nicht existiert und daher nicht mit zurückgegeben wird.
            Ist der Filter nicht angegeben oder wird eine andere Zahl als 1, 2, 3 oder 4 angegeben, werden die Daten des gesamten Tages zurückgegeben.
          schema:
            type: integer
            minimum: 0
            maximum: 4
            example: 1
      responses:
        '200':
          description: tägliche statistische Daten oder die an diesem Tag in dieser Schicht angefallenen Daten
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLog24ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/statlogModul24Users:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten aller Module pro Benutzer pro Tag zurück
        Daten werden jedoch nur für die Benutzer und Module ausgegeben, für welche das Bedienrecht 'statisticForUsers' bzw. 'statisticForModules' gegeben ist.
        Ist eines der Bedienrecht nicht gegeben, wird die jeweilige Kombination aus Benutzer und Modul ohne Daten ausgegeben.
      operationId: GetStatisticsStatlogModul24Users
      parameters: 
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: sum
          description: Ist dieser Filter angegeben und es wird 'true' übergeben, dann werden alle Daten über den angegebenen Zeitraum aufsummiert zurückgegeben.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: statistische Daten pro Modul pro Benutzer pro Tag
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogUser24ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/{id}/statlogModul24Users:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten des oder der ausgewählten Module pro Benutzer pro Tag zurück
        Daten werden jedoch nur für die Benutzer und Module ausgegeben, für welche das Bedienrecht 'statisticForUsers' bzw. 'statisticForModules' gegeben ist.
        Ist eines der Bedienrecht nicht gegeben, wird die jeweilige Kombination aus Benutzer und Modul ohne Daten ausgegeben.
      operationId: GetStatisticsStatlogModul24Users_By_id
      parameters: 
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            Ist die angegebene id eine ModulID, werden nur die Daten dieses Moduls zurückgegeben.'
            Ist die angegebene id eine ModulGruppenID, werden die Daten aller Module aus dieser Gruppe (und ggf. Untergruppen) zurückgegeben.
            Daten werden jedoch nur für die Benutzer und Module ausgegeben, für welche das Bedienrecht 'statisticForUsers' bzw. 'statisticForModules' gegeben ist.
            Ist eines der Bedienrecht nicht gegeben, wird die jeweilige Kombination aus Benutzer und Modul ohne Daten ausgegeben.
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: sum
          description: Ist dieser Filter angegeben und es wird 'true' übergeben, dann werden alle Daten über den angegebenen Zeitraum aufsummiert zurückgegeben.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: statistische Daten pro Modul pro Benutzer pro Tag
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogUser24ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/statlogUser24Modules:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten aller Benutzer pro Modul pro Tag zurück
        Daten werden jedoch nur für die Benutzer und Module ausgegeben, für welche das Bedienrecht 'statisticForUsers' bzw. 'statisticForModules' gegeben ist.
        Ist eines der Bedienrecht nicht gegeben, wird die jeweilige Kombination aus Benutzer und Modul ohne Daten ausgegeben.
      operationId: GetStatisticsStatlogUser24Modules
      parameters: 
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: sum
          description: Ist dieser Filter angegeben und es wird 'true' übergeben, dann werden alle Daten über den angegebenen Zeitraum aufsummiert zurückgegeben.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: statistische Daten pro Benutzer pro Modul pro Tag
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogUser24ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/{id}/statlogUser24Modules:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten des oder der ausgewählten Benutzer pro Modul pro Tag zurück
        Daten werden jedoch nur für die Benutzer und Module ausgegeben, für welche das Bedienrecht 'statisticForUsers' bzw. 'statisticForModules' gegeben ist.
        Ist eines der Bedienrecht nicht gegeben, wird die jeweilige Kombination aus Benutzer und Modul ohne Daten ausgegeben.
      operationId: GetStatisticsStatlogUser24Modules_By_id
      parameters: 
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            Ist die angegebene id eine BenutzerID, werden nur Daten dieses Benutzers zurückgegeben.
            Ist die angegebene id eine BenutzerGruppenID, werden die Daten aller Benutzer aus dieser Gruppe (und ggf. Untergruppen) zurückgegeben.
            Daten werden jedoch nur für die Benutzer und Module ausgegeben, für welche das Bedienrecht 'statisticForUsers' bzw. 'statisticForModules' gegeben ist.
            Ist eines der Bedienrecht nicht gegeben, wird die jeweilige Kombination aus Benutzer und Modul ohne Daten ausgegeben.
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: sum
          description: Ist dieser Filter angegeben und es wird 'true' übergeben, dann werden alle Daten über den angegebenen Zeitraum aufsummiert zurückgegeben.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: statistische Daten pro Benutzer pro Modul pro Tag
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogUser24ModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/statlogUser24Modulclasses:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten aller Benutzer pro Modulklasse pro Tag zurück
      operationId: GetStatisticsStatlogUser24Modulclasses
      parameters: 
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: sum
          description: Ist dieser Filter angegeben und es wird 'true' übergeben, dann werden alle Daten über den angegebenen Zeitraum aufsummiert zurückgegeben.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: statistische Daten pro Benutzer pro Modulklasse pro Tag
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogUser24ModulclassData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/{id}/statlogUser24Modulclasses:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die täglichen statistischen Daten des oder der ausgewählten Benutzer pro Modulklasse pro Tag zurück
      operationId: GetStatisticsStatlogUser24Modulclasses_By_id
      parameters: 
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            Ist die angegebene id eine BenutzerID, werden nur Daten dieses Benutzers zurückgegeben.
            Ist die angegebene is eine BenutzerGruppenID, werden die Daten aller Benutzer aus dieser Gruppe (und ggf. Untergruppen) zurückgegeben.
            Daten werden jedoch nur für die Benutzer und Module ausgegeben, für welche das Bedienrecht 'statisticForUsers' bzw. 'statisticForModules' gegeben ist.
            Ist eines der Bedienrecht nicht gegeben, wird die jeweilige Kombination aus Benutzer und Modul ohne Daten ausgegeben.
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
        - in: query
          name: sum
          description: Ist dieser Filter angegeben und es wird 'true' übergeben, dann werden alle Daten über den angegebenen Zeitraum aufsummiert zurückgegeben.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: statistische Daten pro Benutzer por Modulklasse pro Tag
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogUser24ModulclassData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/statlogpower:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die statistischen Daten der Bestromt-Zyklen aller Module zurück
      operationId: GetStatisticsStatlogpower
      parameters: 
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
      responses:
        '200':
          description: statistische Daten der Bestromt-Zyklen
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogPowerModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/{id}/statlogpower:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die statistischen Daten der Bestromt-Zyklen des oder der ausgewählten Module zurück
      operationId: GetStatisticsStatlogpower_By_id
      parameters: 
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            Ist die angegebene id eine ModulID, werden nur Daten dieses Moduls zurückgegeben.
            Ist die angegebene is eine ModulGruppenID, werden die Daten aller Module aus dieser Gruppe (und ggf. Untergruppen) zurückgegeben.
            Daten werden jedoch nur für die Module ausgegeben, für welche das Bedienrecht 'statisticForModules' gegeben ist.
            Ist das Bedienrecht nicht gegeben, wird das Modul ohne Daten ausgegeben.
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
      responses:
        '200':
          description: statistische Daten der Bestromt-Zyklen
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogPowerModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/statloggarage:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die statistischen Daten der Werkstatt-Aufenthalte aller Module zurück
      operationId: GetStatisticsStatloggarage
      parameters: 
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
      responses:
        '200':
          description: statistische Daten der Werkstatt-Aufenthalte
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogGarageModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /statistics/{id}/statloggarage:
    get:
      tags:
        - '8. Statistische Daten'
      security:
        - bearerAuth: []
      description: >-
        Gibt die statistischen Daten der Bestromt-Zyklen des oder der ausgewählten Module zurück
      operationId: GetStatisticsStatloggarage_By_id
      parameters: 
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: >-
            Ist die angegebene id eine ModulID, werden nur Daten dieses Moduls zurückgegeben.
            Ist die angegebene is eine ModulGruppenID, werden die Daten aller Module aus dieser Gruppe (und ggf. Untergruppen) zurückgegeben.
            Daten werden jedoch nur für die Module ausgegeben, für welche das Bedienrecht 'statisticForModules' gegeben ist.
            Ist das Bedienrecht nicht gegeben, wird das Modul ohne Daten ausgegeben.
        - in: query
          name: filter_from
          description: Ist dieser Filter angegeben, werden nur Daten ab diesem Zeitpunkt (einschließlich des angegebenen Zeitpunkts) zurückgegeben.
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-01-01"
        - in: query
          name: filter_to
          description: Ist dieser Filter angegeben, werden nur Daten vor diesem Zeitpunkt zurückgegeben. (Der angegebene Zeitpunkt selbst ist dabei ausgeschlossen. Eine Filterung von '2021-01-01' bis '2021-02-01' liefert also alle Daten von Januar 2021)
          schema:
            type: string                                        
            format: date-time                   
            example: "2021-02-01"
      responses:
        '200':
          description: statistische Daten der Werkstatt-Aufenthalte
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatLogGarageModulData'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/modulclasses:
    get:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: >-
        Gibt die in der Datenbankkonfiguration hinterlegten Modulklassen zurück
        Der aktuelle Softwarebediener (Api2User) muss das globale Bedienrecht für das Anzeigen der Datenbankkonfiguration besitzen. 
      operationId: GetSettingsModulclasses
      responses:
        '200':
          description: Liste aller in der Datenbankkonfiguration hinterlegten Fahrzeugklassen
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Modulclass'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
    post:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: >-
        Erstellt eine neue Modulklasse
        Der aktuelle Softwarebediener (Api2User) muss das globale Bedienrecht für das Ändern der Datenbankkonfiguration besitzen. 
      operationId: PostSettingsModulclasses
      requestBody:
        content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewModulclass'
      responses:
        '200':
          description: Die Modulklasse wurde estellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Modulclass'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/modulclasses/{modulclassId}:
    get:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: >-
        Gibt die angegebene Modulklasse zurück
        Der aktuelle Softwarebediener (Api2User) muss das globale Bedienrecht für das Anzeigen der Datenbankkonfiguration besitzen.
      operationId: GetSettingsModulclasses_By_modulclassId
      parameters: 
        - in: path
          name: modulclassId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: Die ID der gewünschten Modulklasse
      responses:
        '200':
          description: Liste aller in der Datenbankkonfiguration hinterlegten Fahrzeugklassen
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Modulclass'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/modulclasses/{modulclassId}/datas:
    patch:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: >-
        Schreibt den neuen Wert in das angegebene Datenfeld dieser Modulklasse
        Der aktuelle Softwarebediener (Api2User) muss das globale Bedienrecht für das Ändern der Datenbankkonfiguration besitzen.
      operationId: PatchSettingsModulclassesDatas_By_modulclassId
      parameters: 
        - in: path
          name: modulclassId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: Die ID der jeweiligen Modulklasse
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: >-
                Eine Liste aller Datenfelder mit den jeweiligen neuen Werten die für dieses Modul gesetzt werden sollen.
                Eine Liste aller möglichen id's erhalten Sie mit dem Befehle '/settings/modulclasses/dataFields'
                Für das Feld mit der id 'defaultexpirationdate' gilt dabei folgendes:
                Wird einem Benutzer diese Fahrzeugklasse zugewiesen ohne dabei ein explizites Ablaufdatum anzugeben, wird der Wert aus 'defaultexpirationdate' verwendet.
                Der Wert kann dabei als festes Datum in der Form 'YYYY-MM-DD' oder als relativer Wert in Tagen, Monaten oder Jahren angegeben werden.
                Relative Werte werden in der Form '+X [Tage|Monate|Jahre|Days|Month|Years]' angegeben, wobei jeweils nur der erste Buchstabe relevant ist.
                X steht für die jeweilige Anzahl (Erlaubt sind Werte von 1 bis 999)
                Das führende Pluszeichen und/oder das Leerzeichen dürfen weggelassen werden.
                Beispiele:
                - '2038-01-01'
                - '+100 Tage'
                - '6 M'
                - '+1J'
              type: array
              items:
                $ref: '#/components/schemas/NewDataField'
      responses:
        '200':
          description: Das Datenfeld wurde geändert
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2OkResponse'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/modulclasses/dataFields:
    get:
      tags:
        - '9. Datenbankkonfiguration'
      security: 
        - bearerAuth: []
      description: >-
        Gibt alle möglichen Datenfelder für Modulklassen zurück.
      operationId: GetSettingsModulclassesDataFields
      responses:
        '200':
          description: Liste aller möglichen Datenfelder.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataField'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/shiftmodels:
    get:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: >-
        Gibt die in der Datenbank hinterlegten Schichtmodelle zurück
      operationId: GetSettingsShiftmodels
      responses:
        '200':
          description: Liste aller in der Datenbank hinterlegten Schichtmodelle auf
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Shiftmodel'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/shiftmodels/{shiftmodelId}:
    get:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: Gibt das angegebene Schichtmodell zurück
      operationId: GetSettingsShiftmodels_By_shiftmodelId
      parameters: 
        - in: path
          name: shiftmodelId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: Die ID des gewünschten Schichtmodells
      responses:
        '200':
          description: Das angegebene Schichtmodell
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shiftmodel'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/holidaylists:
    get:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: >-
        Gibt die in der Datenbank hinterlegten Feiertagslisten zurück
      operationId: GetSettingsHolidaylists
      responses:
        '200':
          description: Liste aller in der Datenbank hinterlegten Feiertagslisten
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Holidaylist'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
  /settings/holidaylists/{holidaylistId}:
    get:
      tags:
        - '9. Datenbankkonfiguration'
      security:
        - bearerAuth: []
      description: Gibt die angegebene Feiertagsliste zurück
      operationId: GetSettingsHolidaylists_By_holidaylistId
      parameters: 
        - in: path
          name: holidaylistId
          schema:
            type: string
            format: uuid
            example: '604B1527-BAEB-4845-8699-CC666A065404'
          required: true
          description: Die ID der gewünschten Feiertagsliste
      responses:
        '200':
          description: Die angegebene Feiertagsliste
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Holidaylist'
        '4XX':
          description: Fehler! Weitere Infos ggf. in Api2CommandResponse.details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2CommandResponse'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api2UnexpectedError'
components:
  schemas:
    Api2Response:
      description: >-
        Das Objekt Api2Response kann alternativ anstatt der Api2OkResponse, Api2AuthResponse, Api2CommandResponse und Api2UnexpectedError Objekte verwendet werden. Es enthält alle enums aller möglichen Fehler auf einmal.
      properties:
        errorCode:
          description: >-
            * **OK** - Der Befehl wurde fehlerfrei ausgeführt.
            * **warning** - Der Befehl wurde zumindest teilweise ausgeführt. Nährer Informationen befinden sich in 'details'.
            * **invalid_apikey** - Es ist kein API-Key angegeben oder der angegebenen API-KEY ist ungültig. Der API-KEY muss im im Header 'X-API-KEY' übergeben werden. Wenn Sie keinen API-KEY besitzen, wenden Sie sich bitte an khd@mobileeasykey.de
            * **no_rights** - Der momentan eingeloggte SoftwareBediener hat nicht das notwendige Bedienrecht für diesen Befehl oder diese Daten.
            * **not_found** - Das angegebene Element (Bereich, Gruppe, Modul etc.) wurde nicht gefunden.
            * **not_an_api_user** - Ein Login konnte nicht ausgeführt oder das Passwort nicht geändert werden, da der angegebene Softwarebediener nicht das Recht zum Verwenden der API hat. Der Softwarebediener muss im Mobile Easykey Manager mindestens den Bediener-Type 'REST API' haben.
            * **token_expired** - Das Token wurde zu lange nicht verwendet oder ist am Ende seiner Gesamt-Gültigkeit angekommen. Fordern Sie über den Befehl '/auth/login' ein neues Token an.
            * **token_invalid** - Das verwendete Token hat ein ungültiges Format.
            * **token_unknown** - Das Token ist nicht (mehr) bekannt. Einige Zeit, nach dem das Token abgelaufen ist (token_expired) wird das Token komplett entfernt. Es kann dann nicht mehr erkannt werden. Auch wenn der API-Treiber beendet (und neu gestartet) wird, werden automatisch alle vorhandenen Tokens gelöscht. Fordern Sie über den Befehl '/auth/login' ein neues Token an.
            * **locked** - Die Funktion oder der Softwarebediener ist momentan gesperrt. Im Feld details befinden sich ggf. weitere Informationen.
            * **please_change_password** - Das Passwort ist zwar korrekt aber nicht (mehr) gültig und muss daher geändert werden. Setzen Sie mit der Funktion '/auth/changepassword' ein neues Passwort und wiederholen Sie den Login mit dem neuen Passwort.
            * **invalid_reset_code** - Der verwendete (Passwort) Reset-Code ist ungültig.
            * **invalid_password** - Das beim Login verwendete Passwort oder beim Passwort-Ändern (/auth/changepassword) verwendete alte Passwort ist nicht korrekt. Wenn Sie das Passwort vergessen haben und bei dem Softwarebediener die Passwort-Rücksetzen Funktion aktiviert ist, können Sie mit der Funktion '/auth/resetpassword' das Passwort zurücksetzen. Ist die Funktion Passwort-Rücksetzen nicht aktiviert, wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **invalid_password_user_locked** - Wie invalid_password nur dass der Softwarebediener durch wiederholte Fehleingabe des Passworts jetzt gesperrt ist. Das Feld details enthält ggf. weitere Informationen.
            * **invalid_email** - Dem Softwarebediener ist keine gültige E-Mail-Adresse zugewiesen. Die Funktion '/auth/resetpassword' kann daher nicht verwendet werden. Wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **email_error** - Die E-Mail mit dem Rücksetz-Code konnte nicht versendet werden. Wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **new_password_must_not_be_empty** - Beim Ändern oder Zurücksetzen des Passwortes muss ein gültiges neues Passwort gesetzt werden.
            * **new_password_to_short** - Das neue Passwort ist zu kurz. Das Feld details enthält weitere Informationen. Bei Fragen zu den Anforderungen an das neue Passwort wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **new_password_insufficient_complexity** - Das neue Passwort ist nicht komplex genug. Das Feld details enthält weitere Informationen. Bei Fragen zu den Anforderungen an das neue Passwort wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **new_password_already_used** - Das neue Passwort wurde so bereits früher verwendet. Das Feld details enthält weitere Informationen. Bei Fragen zu den Anforderungen an das neue Passwort wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **reset_password_locked** - Die Passwort-Reset-Funktion ist/wurde aufgrund eines falschen Reset-Codes vorübergehend gesperrt. Das Feld details enthält weitere Informationen. Wenden Sie sich ggf. an ihren Mobile Easykey Administrator.
            * **not_allowed** - Die Funktion wird nicht ausgeführt. Weitere Informationen befinden sich im Feld details.
            * **not_empty** - Die Funktion wurde nicht ausgeführt weil das Element oder die Gruppe noch Daten enthält. Weitere Informationen befinden sich im Feld details.
            * **param_error** - Einer der übergebenen Parameter (z.B. Filter) konnte nicht interpretiert werden. Im Feld details befinden sich ggf. weitere Informationen.
            * **internet_error ** - Die Funktion erfordert eine Internet-Verbindung. Weitere Informationen befinden sich ggf. im Feld 'details' und 'statckTrace'
            * **unknown_error** - es ist ein unbekannter Fehler aufgetreten. Die Felder details und stackTrace enthalten weitere Informationen. Kontaktieren Sie mit diesen Informationen ggf. den Support von Mobile Easykey (khd@mobileeasykey.de).
          type: string
          enum:
            - OK
            - warning
            - invalid_apikey
            - no_rights
            - token_expired
            - token_invalid
            - token_unknown
            - not_found
            - not_an_api_user
            - locked
            - please_change_password
            - invalid_reset_code
            - invalid_password
            - invalid_password_user_locked
            - invalid_email
            - email_error
            - new_password_must_not_be_empty
            - new_password_to_short
            - new_password_insufficient_complexity
            - new_password_already_used
            - reset_password_locked
            - not_allowed
            - not_empty
            - param_error
            - internet_error
            - unknown_error
        message:
          description: Stellt den Fehler aus errorCode als lesbaren Text dar. Es wird (soweit möglich) die Sprache des jeweiligen Softwarebedieners verwendet.
          type: string
        details:
          description: Enthält ggf. eine genauere Beschreibung des Fehlers. Es wird (soweit möglich) die Sprache des jeweiligen Softwarebedieners verwendet.
          type: string
        stackTrace:
          description: Wird nur bei Api2UnexpectedError verwendet. Enthält bei unbekannten Fehlern eine interne Fehlerbeschreibung. Bitte senden Sie dieses stackTrace zusammen mit dem Inhalt aus details ggf. an den Support von Mobile Easykey (khd@mobileeasykey.de)
          type: string
    Api2OkResponse:
      description: >-
        Das Objekt Api2OkResponse wird bei Befehlen zurückgegeben, welche im Erfolgsfall ansonsten kein Ergebnis haben.
      properties:
        errorCode:
          description: >-
            * **OK** - Der Befehl wurde fehlerfrei ausgeführt.
            * **warning** - Der Befehl wurde zumindest teilweise ausgeführt. Nährer Informationen befinden sich in 'details'.
          type: string
          enum:
            - OK
            - warning
        message:
          description: Stellt den Fehler aus errorCode als lesbaren Text dar. Es wird (soweit möglich) die Sprache des jeweiligen Softwarebedieners verwendet.
          type: string
        details:
          description: Enthält ggf. einen zusätzlichen Text
          type: string
    Api2AuthResponse:
      description: >-
        Das Objekt Api2AuthResponse enthält alle möglichen Fehler (enums) für die Befehle, welche mit BasicAuthentification oder komplett ohne Authentifizierung (wie z.B. '/auth/changepassword') ausgeführt werden.
      properties:
        errorCode:
          description: >-
            * **invalid_apikey** - Es ist kein API-Key angegeben oder der angegebenen API-KEY ist ungültig. Der API-KEY muss im im Header 'X-API-KEY' übergeben werden. Wenn Sie keinen API-KEY besitzen, wenden Sie sich bitte an khd@mobileeasykey.de
            * **not_found** - Das angegebene Element (Softwarebediener) wurde nicht gefunden.
            * **not_an_api_user** - Ein Login konnte nicht ausgeführt oder das Passwort nicht geändert werden, da der angegebene Softwarebediener nicht das Recht zum Verwenden der API hat. Der Softwarebediener muss im Mobile Easykey Manager mindestens den Bediener-Type 'REST API' haben.
            * **locked** - Die Funktion oder der Softwarebediener ist momentan gesperrt. Im Feld details befinden sich ggf. weitere Informationen.
            * **please_change_password** - Das Passwort ist zwar korrekt aber nicht (mehr) gültig und muss daher geändert werden. Setzen Sie mit der Funktion '/auth/changepassword' ein neues Passwort und wiederholen Sie den Login mit dem neuen Passwort.
            * **invalid_reset_code** - Der verwendete (Passwort) Reset-Code ist ungültig.
            * **invalid_password** - Das beim Login verwendete Passwort oder beim Passwort-Ändern (/auth/changepassword) verwendete alte Passwort ist nicht korrekt. Wenn Sie das Passwort vergessen haben und bei dem Softwarebediener die Passwort-Rücksetzen Funktion aktiviert ist, können Sie mit der Funktion '/auth/resetpassword' das Passwort zurücksetzen. Ist die Funktion Passwort-Rücksetzen nicht aktiviert, wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **invalid_password_user_locked** - Wie invalid_password nur dass der Softwarebediener durch wiederholte Fehleingabe des Passworts jetzt gesperrt ist. Das Feld details enthält ggf. weitere Informationen.
            * **invalid_email** - Dem Softwarebediener ist keine gültige E-Mail-Adresse zugewiesen. Die Funktion '/auth/resetpassword' kann daher nicht verwendet werden. Wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **email_error** - Die E-Mail mit dem Rücksetz-Code konnte nicht versendet werden. Wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **new_password_must_not_be_empty** - Beim Ändern oder Zurücksetzen des Passwortes muss ein gültiges neues Passwort gesetzt werden.
            * **new_password_to_short** - Das neue Passwort ist zu kurz. Das Feld details enthält weitere Informationen. Bei Fragen zu den Anforderungen an das neue Passwort wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **new_password_insufficient_complexity** - Das neue Passwort ist nicht komplex genug. Das Feld details enthält weitere Informationen. Bei Fragen zu den Anforderungen an das neue Passwort wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **new_password_already_used** - Das neue Passwort wurde so bereits früher verwendet. Das Feld details enthält weitere Informationen. Bei Fragen zu den Anforderungen an das neue Passwort wenden Sie sich bitte an ihren Mobile Easykey Administrator.
            * **reset_password_locked** - Die Passwort-Reset-Funktion ist/wurde aufgrund eines falschen Reset-Codes vorübergehend gesperrt. Das Feld details enthält weitere Informationen. Wenden Sie sich ggf. an ihren Mobile Easykey Administrator.
          type: string
          enum:
            - invalid_apikey
            - not_found
            - not_an_api_user
            - locked
            - please_change_password
            - invalid_reset_code
            - invalid_password
            - invalid_password_user_locked
            - invalid_email
            - email_error
            - new_password_must_not_be_empty
            - new_password_to_short
            - new_password_insufficient_complexity
            - new_password_already_used
            - reset_password_locked
        message:
          description: Stellt den Fehler aus errorCode als lesbaren Text dar. Es wird (soweit möglich) die Sprache des jeweiligen Softwarebedieners verwendet.
          type: string
        details:
          description: Enthält ggf. eine genauere Beschreibung des Fehlers. Es wird (soweit möglich) die Sprache des jeweiligen Softwarebedieners verwendet.
          type: string
    Api2CommandResponse:
      description: >-
        Das Objekt Api2CommandResponse enthält alle möglichen Fehler (enums) für die Befehle, welche mit BearerAuthentification (Token im Authentification Header) ausgeführt werden.
      properties:
        errorCode:
          description: >-
            * **no_rights** - Der momentan eingeloggte SoftwareBediener hat nicht das notwendige Bedienrecht für diesen Befehl oder diese Daten.
            * **not_allowed** - Die Funktion wird nicht ausgeführt. Weitere Informationen befinden sich im Feld details.
            * **not_empty** - Die Funktion wurde nicht ausgeführt weil das Element oder die Gruppe noch Daten enthält. Weitere Informationen befinden sich im Feld details.
            * **not_found** - Das angegebene Element (Bereich, Gruppe, Modul etc.) wurde nicht gefunden.
            * **token_expired** - Das Token wurde zu lange nicht verwendet oder ist am Ende seiner Gesamt-Gültigkeit angekommen. Fordern Sie über den Befehl '/auth/login' ein neues Token an.
            * **token_invalid** - Das verwendete Token hat ein ungültiges Format.
            * **token_unknown** - Das Token ist nicht (mehr) bekannt. Einige Zeit, nach dem das Token abgelaufen ist (token_expired) wird das Token komplett entfernt. Es kann dann nicht mehr erkannt werden. Auch wenn der API-Treiber beendet (und neu gestartet) wird, werden automatisch alle vorhandenen Tokens gelöscht. Fordern Sie über den Befehl '/auth/login' ein neues Token an.
            * **param_error** - Einer der übergebenen Parameter (z.B. Filter) konnte nicht interpretiert werden. Im Feld details befinden sich ggf. weitere Informationen.
            * **internet_error ** - Die Funktion erfordert eine Internet-Verbindung. Weitere Informationen befinden sich ggf. im Feld 'details' und 'statckTrace'
          type: string
          enum:
            - no_rights
            - not_allowed
            - not_empty
            - not_found
            - token_expired
            - token_invalid
            - token_unknown
            - param_error
            - internet_error
        message:
          description: Stellt den Fehler aus errorCode als lesbaren Text dar. Es wird (soweit möglich) die Sprache des jeweiligen Softwarebedieners verwendet.
          type: string
        details:
          description: Enthält ggf. eine genauere Beschreibung des Fehlers. Es wird (soweit möglich) die Sprache des jeweiligen Softwarebedieners verwendet.
          type: string
    Api2UnexpectedError:
      description: >-
        Das Objekt Api2UnexpectedError wird zurückgegeben, wenn ein unerwarteter Fehler aufgetreten ist.
      properties:
        errorCode:
          description: >-
            * **unknown_error** - es ist ein unbekannter Fehler aufgetreten. Die Felder details und stackTrace enthalten weitere Informationen. Kontaktieren Sie mit diesen Informationen ggf. den Support von Mobile Easykey (khd@mobileeasykey.de).
          type: string
          enum:
            - unknown_error
        message:
          description: Hat hier (je nach Sprache des jeweiligen Softwarebedieners) immer den Inhalt 'Unbekannter Fehler' oder 'Unknown error'.
          type: string
        details:
          description: Enthält eine genauere Beschreibung des Fehlers in der Sprache des Betriebssystems..
          type: string
        stackTrace:
          description: >-
            enthält eine interne Fehlerbeschreibung in der Sprache des Betriebssystems.
            Bitte senden Sie dieses stackTrace zusammen mit dem Inhalt aus details ggf. an den Support von Mobile Easykey (khd@mobileeasykey.de)
          type: string
    Api2User:
      description: Dieses Objekt enthält alle Daten des momentan angemeldeten Softwarebedieners.
      properties:
        id:
          description: Interne, eindeutige ID dieses Softwarebedieners
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        userName:
          description: Entspricht dem Anmeldenamen, der beim Login verwendet wurde und setzt sich zusammen aus Vor- und Nachname
          type: string
        firstName:
          description: Vorname des Softwarebedieners
          type: string
        lastName:
          description: Nachname des Softwarebedieners
          type: string
        language:
          description: Gibt an, welche Sprache für den jeweiligen Softwarebediener eingestellt ist.
          type: string
          example: "de"
        languageNr:
          description: Gibt an, welche Nummer (0-3) diese Sprache im Mobile Easykey Manager hat (Datenbankkonfiguration)
          type: integer
        token:
          description: Hier wird das Token zurückgegeben, das bei (fast) allen weitern Befehlen als Bearer-Token im Authentification-Header übergeben werden muss.
          type: string
          example: '911538BE-BEF9-493A-94F2-EE7B205AB516'
        validUntil:
          description: >-
            Das übergebene Token ist nur bis zu diesem Zeitpunkt gültig!
            Danach muss über den Befehl 'auth\login' ein neues Token angefordert werden.
          type: string
          format: date-time
          example: "2000-01-01T01:01:01"
        validTimeoutSeconds:
          description: >-
            Wird das Token länger als hier (in Sekunden) angegeben nicht verwendet, erlischt es vorzeitig
            und es muss über den Befehl 'auth\login' ein neues Token angefordert werden.
          type: integer
          format: int32
    Api2Password:
      description: >-
        Dieses Objekt wird zum Ändern des Passworts verwendet. Je nach Befehl müssen unterschiedliche Daten übergeben werden
      required: 
        - userName
      properties:
        userName:
          description: >-
            Der Name muss immer übergeben werden.
            Der Name setzt sich aus Vor- und Nachname des jeweiligen Softwarebedieners zusammen.
            Besitzt der Softwarebediener einen Vor- und einen Nachnamen, werden Vorname und Nachname durch ein Leerzeichen getrennt, z.B. "Max Mustermann"
            Besitzt der Softwarebediener nur einen Vor- oder einen Nachnamen, wird nur der Vor- bzw. Nachnamen (ohne zusätzliches Leerzeichen) verwendet.
          type: string
        oldPassword:
          description: >-
            Dieses Feld wird nur beim Ändern des Passwortes (/auth/changepassword) verwendet und muss das derzeit gültige Passwort enthalten.
            Bei allen anderen Befehlen ist das Feld null.
          type: string
        resetCode:
          description: >-
            Dieses Feld wird beim 2. Aufruf von '/auth/resetpassword' verwendet.
            Hier wird der Reset-Code eingetragen, der durch den 1. Aufruf des Befehls '/auth/resetpassword' ohne Reset-Code (resetCode=null) an die E-Mail-Adresse des unter userName angegebenen Softwarebedieners gesendet wurde.
          type: string
          example: "E123-1A9F-2FD8-F31D"
        newPassword:
          description: >-
            Hier wird bei '/auth/changepassword' und beim 2. Aufruf von '/auth/resetpassword' das neue Passwort übergeben.
          type: string
    Element:
      properties:
        viewRight:
          description: >-
            * **yes** - Es besteht ein komplettes Anzeige-Recht für dieses Element. Die id, name und icon enthalten die Daten des Elements.
            * **no** - Es besteht keinerlei Anzeigerecht. Die datenbank-interne id wird nicht zurückgegeben (null). Der Name hat (je nach Sprache) den Text '<<Datenschutz>>' / '<<Data protection>>' (Betriebsrat-Einstellung) oder '<<Anzeige gesperrt>>' / '<<Display locked>>' (Bedienrecht fehlt). Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
          type: string
          enum:
            - 'yes'
            - 'no'
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
        icon:
          type: string
    ElementUser:
      properties:
        viewRight:
          description: >-
            * **yes** - Es besteht ein komplettes Anzeige-Recht für dieses Element. Die id, name und icon enthalten die Daten des Elements.
            * **no** - Es besteht keinerlei Anzeigerecht. Die datenbank-interne id wird nicht zurückgegeben (null). Der Name hat (je nach Sprache) den Text '<<Datenschutz>>' / '<<Data protection>>' (Betriebsrat-Einstellung) oder '<<Anzeige gesperrt>>' / '<<Display locked>>' (Bedienrecht fehlt). Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
            * **id_only** - Betriebsrat-Einstellung: Es besteht nur ein Anzeige-Recht für die Transponder-ID des Benutzers. Die id enthält die datenbank-interne id des Benutzers, der name jedoch nur die Transponder-ID. Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
            * **workcouncil** - Betriebsrat-Einstellung: Es besteht kein Anzeige-Recht für diesen Benutzer. Als Name wird nur '<<Betriebsrat-Sperre>>' angezeigt. Die datenbank-interne id wird nicht zurückgegeben (null). Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
          type: string
          enum:
            - 'yes'
            - 'no'
            - id_only
            - work_council
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
        icon:
          type: string
    DataElement:
      properties:
        viewRight:
          description: >-
            * **yes** - Es besteht ein komplettes Anzeige-Recht für dieses Element. Die id, name und icon enthalten die Daten des Elements.
            * **no** - Es besteht keinerlei Anzeigerecht. Die datenbank-interne id wird nicht zurückgegeben (null). Der Name hat (je nach Sprache) den Text '<<Datenschutz>>' / '<<Data protection>>' (Betriebsrat-Einstellung) oder '<<Anzeige gesperrt>>' / '<<Display locked>>' (Bedienrecht fehlt). Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
          type: string
          enum:
            - 'yes'
            - 'no'
        dataRight:
          description: >-
            dataRight ist null, wenn keine Daten vorhanden sind.
            Ansonsten gelten folgende Werte:
            * **yes** - Zu diesem Element dürfen Daten (z.B. Statistiken) angezeigt werden.
            * **no** - Zu diesem Element dürfen keinerlei Daten (z.B. Statistiken) angezeigt werden
            * **partly** - Dieses Element steht für mehrere Unter-Elemente (z.B. eine Fahrzeugklasse enthält mehrere Module). Für einige dieser Unter-Elemente dürfen Daten angezeigt werden, für andere jedoch nicht. Es werden entsprechend nur die Daten der Unter-Elemente ausgegeben, für welche Daten angezeigt werden dürfen.
          type: string
          enum:
            - 'yes'
            - 'no'
            - partly
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
        icon:
          type: string
    DataElementUser:
      properties:
        viewRight:
          description: >-
            * **yes** - Es besteht ein komplettes Anzeige-Recht für dieses Element. Die id, name und icon enthalten die Daten des Elements.
            * **no** - Es besteht keinerlei Anzeigerecht. Die datenbank-interne id wird nicht zurückgegeben (null). Der Name hat (je nach Sprache) den Text '<<Datenschutz>>' / '<<Data protection>>' (Betriebsrat-Einstellung) oder '<<Anzeige gesperrt>>' / '<<Display locked>>' (Bedienrecht fehlt). Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
            * **id_only** - Betriebsrat-Einstellung: Es besteht nur ein Anzeige-Recht für die Transponder-ID des Benutzers. Die id enthält die datenbank-interne id des Benutzers, der name jedoch nur die Transponder-ID. Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
            * **workcouncil** - Betriebsrat-Einstellung: Es besteht kein Anzeige-Recht für diesen Benutzer. Als Name wird nur '<<Betriebsrat-Sperre>>' angezeigt. Die datenbank-interne id wird nicht zurückgegeben (null). Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
          type: string
          enum:
            - 'yes'
            - 'no'
            - id_only
            - work_council
        dataRight:
          description: >-
            dataRight ist null, wenn keine Daten vorhanden sind.
            Ansonsten gelten folgende Werte:
            * **yes** - Zu diesem Element dürfen Daten (z.B. Statistiken) angezeigt werden.
            * **no** - Zu diesem Element dürfen keinerlei Daten (z.B. Statistiken) angezeigt werden
            * **partly** - Dieses Element steht für mehrere Unter-Elemente (z.B. eine Fahrzeugklasse enthält mehrere Module). Für einige dieser Unter-Elemente dürfen Daten angezeigt werden, für andere jedoch nicht. Es werden entsprechend nur die Daten der Unter-Elemente ausgegeben, für welche Daten angezeigt werden dürfen.
          type: string
          enum:
            - 'yes'
            - 'no'
            - partly
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
        icon:
          type: string
    LinkElement:
      properties:
        viewRight:
          description: >-
            * **yes** - Ds besteht ein komplettes Anzeige-Recht für dieses Element. Die groupId, groupName, groupIcon, path und linkId enthalten die Daten des Elements.
            * **no** - Es besteht kein Bedienrecht zur Anzeigerecht dieser Gruppe. Die groupId und die linkId werden nicht zurückgegeben (null). name und path haben (je nach Sprache) den Text '<<Anzeige gesperrt>>' oder '<<Display locked>>'. Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
          type: string
          enum:
            - 'yes'
            - 'no'
        groupId:
          description: Enthält die ID der Gruppe, in welcher sich diese Link befindet
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        groupName:
          description: Enthält den Namen der Gruppe, in welcher sich diese Link befindet
          type: string
          example: 'Modulgruppe 2'
        groupIcon:
          description: Enthält das Icon der Gruppe, in welcher sich diese Link befindet
          type: string
        path:
          description: Enthält den kompletten Pfad wo sich diese Link befindet
          type: string
          example: 'Module/Modulgruppe 1/Modulgruppe 2'
        linkId:
          description: Enthält die eindeutige ID dieses Links
          type: string
          format: uuid
          example: '918BDCF9-4B78-4212-A62E-D49D7AF2CAA4'
    NewDataField:
      required: 
        - id
        - value
      properties:
        id:
          description: >-
            Die interne ID dieses Datenfeldes (siehe ), z.B. 'Department' oder 'U2'
          type: string
          example: 'Department'
        value:
          description: >-
            Gibt den neuen Wert für das Datenfeld an.
          type: string
          example: 'Einkauf'
    DataField:
      description: >-
        Beschreibt ein Stammdaten-Feld.
        Je nach Datenbankkonfiguration können unterschiedliche Felder in der Datenbank definiert sein.
      required:
        - id
        - name
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
          readOnly: true
        name:
          description: der Anzeige-Name dieses Feldes (je nach Sprache des Softwarebedieners/Tokens ggf. unterschiedlich)
          type: string
          readOnly: true
        isIdField:
          description: >-
            Gibt an, ob es sich um ein ID-Feld handelt.
            Bei ID-Feldern darf jeder Wert nur ein einziges mal vorkommen. 
            Über den Wert des ID-Feldes kann ein Element also eindeutig identifiziert werden.
          type: boolean
          default: false
          readOnly: true
        isIdFieldCaseSensitive:
          description: gibt an, ob die Groß- und Kleinschreibung bei dem ID-Feld berücksichtigt wird
          type: boolean
          default: false
          readOnly: true
        selectionList:
          description: Wenn hier eine Liste mit Werten übergeben wird, darf dem Feld nur einer dieser Werte zugewiesen werden.
          type: array
          items:
            type: string
            readOnly: true
          readOnly: true
        type:
          description: >-
            Gespeichert und übertragen werden alle Werte als String. Je nach type wird der String jedoch unterschiedlich interpretiert.
            Der Standard type ist 'string'. In diesem Fall wird der Wert als Text interpretiert und im property maxLength ist angegeben, wie lang der Text maxiaml sein darf.
            Beim type 'boolean' sind lediglich die Werte 'true', 'false', '1' oder '0' gültig.
            Der type 'int64' (wird für die TransponderId verwendet) stellt einesigned integer mit 64 bit dar. Der Wert kann als Dezimalzahl (z.B. '1234567890' oder als Hexadizimalzahl mit vorangestellten '0X' (z.B. '0X499602D2') übergeben werden.
          type: string
          readOnly: true
        note:
          description: Gibt einen Hinweis oder einen zusätzlichen Erklärungstext zu diesem DataField an.
          type: string
          readOnly: true
        maxLenght:
          type: integer
          readOnly: true
        value:
          description: der eigentliche Wert dieses Feldes. Ist NULL, wenn das DataField als abstrakter Typ übergeben wird, beispielsweise bei dem Befehl '/modules/dataFields'
          type: string
    Drivingright:
      properties:
        viewRight:
          description: >-
            * **yes** - Es besteht ein komplettes Anzeige-Recht für dieses Element. Die id, name und icon enthalten die Daten des Elements.
            * **id_only** - Betrifft nur Benutzer/Fahrer. Es besteht nur ein Anzeige-Recht für die Transponder-ID des Fahrers. Die id enthält die datenbank-interne id des Benutzers, der name jedoch nur die Transponder-ID. Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
            * **no** - Es besteht keinerlei Anzeigerecht. Die datenbank-interne id wird nicht zurückgegeben (null). Der Name hat (je nach Sprache) den Text '<<Datenschutz>>' / '<<Data protection>>' (Betriebsrat-Einstellung) oder '<<Anzeige gesperrt>>' / '<<Display locked>>' (Bedienrecht fehlt). Als icon wird immer ein anonymes Standard-Icon zurückgegeben.
          type: string
          enum:
            - 'yes'
            - id_only
            - 'no'
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
        icon:
          type: string
        valid:
          type: boolean
          description: false = Die Fahrberechtigung ist zugewiesen, der Benutzer darf jedoch nicht fahren weil er gesperrt ist, ein Ablaufdatum abgelaufen ist oder eine Modulklasse fehlt
    Area:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
          maxLength: 40
        icon:
          type: string
        description:
          type: string
          maxLength: 255
        parentArea:
            $ref: '#/components/schemas/Element'
        isModulScope:
          type: boolean
          description: Der Bereich ist unter 'Module' sichtbar
        isUserScope:
          type: boolean
          description: Der Bereich ist unter 'Benutzer' sichtbar
        isBatteryScope:
          type: boolean
          description: Der Bereich ist unter 'Batterien' sichtbar
        isProfileScope:
          type: boolean
          description: Der Bereich ist unter 'Profile' sichtbar
        isAlarmProfileScope:
          type: boolean
          description: Der Bereich ist unter 'AlarmProfile' sichtbar
        isShiftScope:
          type: boolean
          description: Der Bereich ist unter 'Schichten' sichtbar
        rights: 
            $ref: '#/components/schemas/AreaRights'
    NewGroup:
      properties:
        name:
          description: Der Name der neuen Gruppe.
          type: string
          maxLength: 40
    Group:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
          maxLength: 40
        icon:
          type: string
        description:
          type: string
          maxLength: 255
        isArea:
          type: boolean
          description: Diese Gruppe ist gleichzeitig ein Bereich
        mayView:
          type: boolean
          description: Wenn die Gruppe ein Bereich ist, wird sie mit aufgelistet, auch wenn der Softwarebediener (Api2User) kein Anzeige-Recht für diesen Bereich hat. Er könnte aber ein Anzeige-Recht für einen Unterbereich haben.
        parentGroup:
            $ref: '#/components/schemas/Element'
        area:
            $ref: '#/components/schemas/Element'
    NewModule:
      properties:
        name:
          description: Der Name des neuen Moduls.
          type: string
          maxLength: 40
    Module:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
          maxLength: 40
        icon:
          type: string
        isValid:
          type: boolean
        address:
          $ref: '#/components/schemas/ModuleAddress'
        areas:
          description: Bereich oder Bereiche, in denen dieses Modul zu finden ist. Wird nur übergeben, wenn im entsprechenden Befehl 'areas=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/Element'
        rights: 
          $ref: '#/components/schemas/AreaRights'
        links:
          description: >-
            Enthält alle Links, wo dieses Modul zu finden ist.
            Zusätzlich wird angegeben, in welcher Gruppe sich der jeweilige Link befindet.
            Wird nur übergeben, wenn im entsprechenden Befehl 'links=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/LinkElement'
        settings:
          $ref: '#/components/schemas/ModuleSettings'
        datas:
          description: Enthält die Stammdaten des Moduls. Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'datas=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/DataField'
        alarms:
          description: Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'alarms=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/ModuleAlarm'
        infos:
          $ref: '#/components/schemas/ModuleInfos'
        drivingRights:
          description: >-
            Enthält eine Liste alle Benutzer, welche dieses Modul aktuell benutzen (fahren) dürfen.
            Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'drivingRights=true' übergeben wird.
          type: array
          items:
            $ref: '#/components/schemas/Drivingright'
    ModuleAddress:
      description: Hardware-Adresse eines Moduls. Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'address=true' übergeben wird
      properties:
        address:
          description: je nach Verbindungstyp Bluetooth- oder IP-Adresse
          type: string
        friendlyName:
          description: je nach Verbindungstyp der Bluetooth-Friendlyname oder der Hostname
          type: string
        hybridId:
          description: interne Modul-Adresse
          type: integer
        dbId:
          description: interne Modul-Adresse
          type: integer
        smartlock_HardwareSnr:
          type: integer
          minimum: 0
          maximum: 65536
          description: 0 bedeutet, es ist kein smart lock 2/3 oder es wurde noch keine Seriennummer vergeben
    ModuleSettings:
      description: Einstellungen eines Moduls. Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'settings=true' übergeben wird
      properties:
        disconnected:
          description: Gibt an, ob das Modul aktuell offline ist. So lange ein Modul 'offline' ist, wird es nicht ausgelesen oder upgedatet.
          type: boolean
        locked:
          description: Gibt an, ob das Modul aktuell gesperrt ist. An einem gesperrten Modul kann man sich nicht per Transponder anmelden (Einloggen)
          type: boolean
        loadSensorMac:
          description: Hat das Modul einen Beladungssensor, wird hier die MAC-Adresse des Beladungssensors verwaltet
          type: string
          example: "01:23:45:67:89:AB"
        loadSensorFork:
          description: Gibt die Einstellung des Beladungssensors an
          type: string
          enum:
            - regularFork
            - longFork
        moduleType:
          type: string
          enum:
            - none                   # Modultyp wurde noch nicht vergeben
            - no_easykey
            - easykey_offline
            - basic_smart
            - smart_lock_1
            - smart_lock_2
            - smart_lock_3
            - modular_basic
            - modular_crash_duo
            - modular_crash_remote
            - modular_plus_basic
            - modular_plus_crash
        vdiMode:
          description: Gibt an, ob der Anschlusstyp VDI verwendet werden soll (steht nicht für alle Modultypen zu Verfügung)
          type: boolean
          default: false
        driveType:
          description: >-
              Gibt die Antriebart des Moduls an. Mögliche Werte sind
              * **charge** - Elektro-Ladebetrieb
              * **exchange** - Elektro-Wechsel-Betrieb
              * **fuel** - Brennkraft
              * **other** - Andere
          type: string
          enum:
            - charge
            - exchange
            - fuel
            - other
        moduleProfile:
          $ref: '#/components/schemas/Element'
        crashProfile:
          $ref: '#/components/schemas/Element'
        financeProfile:
          $ref: '#/components/schemas/Element'
        shiftModel:
          $ref: '#/components/schemas/Element'
        kpiProfile:
          $ref: '#/components/schemas/Element'
        moduleClass:
          $ref: '#/components/schemas/Element'
        departureControl:
          $ref: '#/components/schemas/Element'
        servicePartner:
          $ref: '#/components/schemas/Element'
    ModuleAlarmType:
      description: >-
        Alarm-Type zur Auflistung aller möglichen UVV- und Betriebsstunden-Alarm-Typen.
        Die möglichen Alarm-Typen sind im Manager in der Datenbankkonfiguration einstellbar.
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
        alarmType:
          description: >-
            Gibt den Alarm-Typ an. Mögliche Werte sind
            * **time** - Zeit-Alarm (UVV-Alarm)
            * **operatingHoursLogin** - Betriebsstundenalarm Einschaltstunden
            * **operatingHoursUsed** - Betriebsstundenalarm Nutzungsstunden
          type: string
          enum:
            - time
            - operatingHoursLogin
            - operatingHoursUsed
        name:
          description: der Anzeige-Name dieses Feldes
          type: string
    ModuleAlarm:
      description: UVV- oder Betriebsstunden-Alarm eines Moduls.
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
        alarmType:
          description: >-
            Gibt den Alarm-Typ an. Mögliche Werte sind
            * **time** - Zeit-Alarm (UVV-Alarm)
            * **operatingHoursLogin** - Betriebsstundenalarm Einschaltstunden
            * **operatingHoursUsed** - Betriebsstundenalarm Nutzungsstunden
          type: string
          enum:
            - time
            - operatingHoursLogin
            - operatingHoursUsed
        name:
          description: der Anzeige-Name dieses Feldes
          type: string
        alarmProfile:
          $ref: '#/components/schemas/Element'
        alarmState:
          description: >-
            Aktueller Zustand des Alarms (Alarmstufe)
            * **inactive** - Der Alarm ist inaktiv
            * **ok** - Kein Alarm
            * **warning** - Warnung
            * **alarm** - Alarm/Fällig
            * **overdue** - Überfällig
          type: string
          enum:
            - inactive
            - ok
            - warning
            - alarm
            - overdue
        enabled:
          description: >-
            Gibt an, ob der Alarm derzeit aktiv ist oder nicht.
          type: boolean
          default: true
        timeWarningThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'warning' (Warnung) geht. Wird nur für alarmType=time angezeigt/verwendet.
            Die Warnung kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm springt bei erreichen der timeAlarmThreshold direkt in den Zustand 'Alarm'.
          type: string
          format: date-time
          example: "2022-01-01T01:01:01"
        timeAlarmThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'alarm' (Alarm) geht. Wird nur für alarmType=time angezeigt/verwendet.
          type: string
          format: date-time
          example: "2022-01-01T01:01:01"
        timeOverdueThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'overdue' (Überfällig) geht. Wird nur für alarmType=time angezeigt/verwendet.
            Die Stufe Überfällig kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm bleibt im Zustand 'Alarm'.
          type: string
          format: date-time
          example: "2022-01-01T01:01:01"
        btrWarningThreshold:
          description: >-
            Betriebsstunden-Stand (in Stunden), ab dem der Alarm in Stufe 'warning' (Warnung) geht. 
            Wird nur für alarmType=operatingHoursLogin und alarmType=operatingHoursUsed angezeigt/verwendet.
            Die Warnung kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm springt bei erreichen der btrAlarmThreshold direkt in den Zustand 'Alarm'.
          type: integer
        btrAlarmThreshold:
          description: >-
            Betriebsstunden-Stand (in Stunden), ab dem der Alarm in Stufe 'alarm' (Alarm) geht.
            Wird nur für alarmType=operatingHoursLogin und alarmType=operatingHoursUsed angezeigt/verwendet.
          type: integer
        btrOverdueThreshold:
          description: >-
            Betriebsstunden-Stand (in Stunden), ab dem der Alarm in Stufe 'overdue' (Überfällig) geht.
            Wird nur für alarmType=operatingHoursLogin und alarmType=operatingHoursUsed angezeigt/verwendet.
            Die Stufe Überfällig kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm bleibt im Zustand 'Alarm'.
          type: integer
    NewModulAlarm:
      description: dient der Datenübergabe um einen Alarm-Wert zu verändern
      required: 
        - newThreshold
      properties:
        newThreshold:
          description: >-
            Gibt den neuen Alarm-Grenzwert an.
            Bei Zeitalarmen als Datum (formatierter String im Format JJJJ-MM-TT, z.B. '2022-01-15')
            Der Wert '2000-1-1' deaktiviert den Alarm, sofern dies im jeweiligen Alarmprofil erlaubt ist.
            Bei Betriebsstundenalarmen als Anzahl Stunden (formatierter String, z.B. '2000')
            Der Wert '0' deaktiviert den Alarm, sofern dies im jeweiligen Alarmprofil erlaubt ist.
          type: string
          example: '2022-01-15'
    ModuleInfos:
      description: Enthält Daten aus der Informationszentrale. Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'infos=true' übergeben wird
      properties:
        viewRight:
          description: Hat der aktuelle Softwarebediener für dieses Modul kein Anzeigerecht für die Informationszentrale, wird nur viewRight=false zurückgegeben. Ansonstenr werden alle folgenden Daten (soweit möglich) zurückgegeben.
          type: boolean
        lastUpdateStateTime:
          description: Zeitpunkt, wann das letzte mal ein Update an diesem Modul ausgeführt wurde
          type: string                                        
          format: date-time                   
          example: "2000-01-01T01:01:01"
        updateState:
          description: >-
            * **locked** - das Modul ist zur zeit gesperrt -> updateStatus unbekannt. Bitte versuchen Sie es süäter nochmal.
            * **no_easykey** - kein Easykey Modul (nur Easykey Module besitzen einen Update-Status)
            * **no_update_possible** - Das Modul kann nicht programmiert werden! Eine oder mehrere Einstellungen in der Datenbank verhindern ein Update.
            * **ok** - Das Modul ist entsprechend der Einstellungen in der Datenbank programmiert.
            * **update_running** - Es wurde bereits ein Update entsprechend der aktuellen Einstenlungen in der Datenbank erstellt, jedoch noch nicht (oder nicht komplett) ausgeführt.
            * **update_needed** - In der Datenbank wurde für dieses Modul Einstellungen verändert. Es gibt noch keinen Update-Auftrag für diese Änderungen.
            * **full_update_needed** - Das Modul muss komplett neu programmiert werden.
            * **initialisation_needed** - Das Modul muss initialisiert werden. Bei der Initialisierung wird das Modul (die Hardware) eindeutig mit einem Modul (in der Software) verbunden. Außer bei smart lock 2/3 Modulen muss das per Kabel erfolgen.
            * **auto_initialisation_needed** - Das Modul muss initialisiert werden. Dies kann jedoch automatisch über eine beliebige Verbindung erfolgen.
            * **ok_locked** - der Status ist OK (Das Modul ist entsprechend der Einstellungen in der Datenbank programmiert), das Modul ist jedoch gerade gesperrt (und kann daher momentan nicht umprogrammiert werden)
          type: string
          enum:
            - locked
            - no_easykey
            - no_update_possible
            - ok
            - update_running
            - update_needed
            - full_update_needed
            - initialisation_needed
            - auto_initialisation_needed
            - ok_locked
        lastModuleStateTime:
          description: Zeitpunkt, wann das letzte mal der Modulstatus aus diesem Modul ausgelesen wurde
          type: string                                        
          format: date-time                   
          example: "2000-01-01T01:01:01"
        moduleState:
          description: Als Modulstatus wird eine Menge von Zuständen bezeichnet, in denen sich das Modul gerade befindet.
          type: array
          items:
            description: >-
              * **no_easykey** - Kein Easykey Modul
              * **unknown** - Der Status ist unbekannt
              * **power_on** - Das Modul war/ist Bestromt
              * **power_off** - Das Modul war/ist Bestromt, der letzte Kontakt ist aber bereits länger her und der Status eventuell nicht mehr aktuell
              * **login** - Es war/ist ein Benutzer eingeloggt
              * **logoff** - Es war/ist kein Benutzer eingeloggt
              * **present** - Ein Benutzer war/ist anwesend
              * **absent** - Es war/ist kein Benutzer anwesend
              * **vdi_license_inactive** - Das Modul unterstützt den VDI-Modus, der VDI-Modus ist aber nicht aktiviert.
              * **vdi_license_active** - Das Modul unterstützt den VDI-Modus und der VDI-Modus ist aktiviert
              * **passive** - Das Modul wird über passive WLAN/Bluetooth-Verbindung kontaktiert
              * **active** - Das Modul ist aktiv und kommuniziert über aktive WLAN/Bluetooth-Verbindung
              * **crash_teach_running** - Das (modular plus crash oder modular crash+remote) Modul befindet sich im Testfahrt-Betrieb
              * **crash** - bei älteren modulen konnte noch nicht zwischen aktiven- und passivem crash unterschieden werden
              * **crash_active** - Das Modul ist im Crash (aktiver Crash)
              * **crash_passive** - Das Modul ist im Crash (passiver Crash)
              * **els_failure** - Der ELS-Sensor (der Batterie) ist defekt.
              * **load_sensor_load** - Lastsensor ist vorhanden und funktionstüchtig und meldet eine Last.
              * **load_sensor_noload** - Lastsensor ist vorhanden und funktionstüchtig und meldet keine Last.
              * **load_sensor_load_bat** - Lastsensor ist vorhanden und funktionstüchtig und meldet eine Last und Batteriewarnung.
              * **load_sensor_noload_bat** - Lastsensor ist vorhanden und funktionstüchtig und meldet keine Last und Batteriewarnung.
              * **load_sensor_error** - Lastsensor ist programmiert (MAC-Adresse ist zugewiesen), konnte aber nicht gefunden werden oder ist defekt.
              * **repair_mode** - Das Modul befindet sich im Werkstatt-Modus.
              * **time_alarm_warning** - Das Modul befindet sich im Zustand Warnung (Zeit-Alarm)
              * **time_alarm_due** - Das Modul befindet sich im Zustand Alarm (Zeit-Alarm)
              * **time_alarm_overdue** - as Modul befindet sich im Zustand Überfällig (Zeit-Alarm)
              * **login_hours_alarm_warning** - Das Modul befindet sich im Zustand Warnung (Einschaltstunden-Alarm)
              * **login_hours_alarm_due** - Das Modul befindet sich im Zustand Alarm (Einschaltstunden-Alarm)
              * **login_hours_alarm_overdue** - as Modul befindet sich im Zustand Überfällig (Einschaltstunden-Alarm)
              * **used_hours_alarm_warning** - Das Modul befindet sich im Zustand Warnung (Nutzungsstunden-Alarm)
              * **used_hours_alarm_due** - Das Modul befindet sich im Zustand Alarm (Nutzungsstunden-Alarm)
              * **used_hours_alarm_overdue** - as Modul befindet sich im Zustand Überfällig (Nutzungsstunden-Alarm)
              * **firmware_update_running** - Es wurde eine neuere Firmware übertragen, die beim nächsten Neustart des Moduls automatisch programmiert wird.
              * **hybrid_bat_error** - Die Uhr im Hybriden ging falsch. Die Knopfzellenbatterie im Hybrid ist möglicherweise leer.
              * **disconnected** - Das Modul ist momentan "offline" geschaltet und wird daher nicht ausgelesen oder programmiert.
              * **manually_locked** - Das Modul ist gesperrt! Nur Werkstatt-Transponder können sich einloggen.
            type: string
            enum:
              - no_easykey
              - unknown
              - power_on
              - power_off
              - login
              - logoff
              - present
              - absent
              - vdi_license_inactive
              - vdi_license_active
              - passive
              - active
              - crash_teach_running
              - crash
              - crash_active
              - crash_passive
              - els_failure
              - load_sensor_load
              - load_sensor_noload
              - load_sensor_load_bat
              - load_sensor_noload_bat
              - load_sensor_error
              - repair_mode
              - time_alarm_warning
              - time_alarm_due
              - time_alarm_overdue
              - login_hours_alarm_warning
              - login_hours_alarm_due
              - login_hours_alarm_overdue
              - used_hours_alarm_warning
              - used_hours_alarm_due
              - used_hours_alarm_overdue
              - firmware_update_running
              - hybrid_bat_error
              - disconnected
              - manually_locked
        lastPositionTime:
          description: Zeitpunkt, wann das letzte mal die Position dieses Moduls ausgelesen wurde
          type: string                                        
          format: date-time                   
          example: "2000-01-01T01:01:01"
        position:
          type: object
          properties:
            type:
              description: >-
                * **unknown** - unbekanntes Format
                * **indoor** - IndoorLocator-Format. Z.B. "Halle 3"
                * **gps** - GPS-Daten
              type: string
              enum:
                - unknown
                - indoor
                - gps
            position:
              description: Gibt die aktuelle Position als Text zurück. Bei IndoorLocator z.B. "Halle 3", bei GPS z.B. "48.136403N, 11.577591E"
              type: string
            latitude:
              description: Breitengrad. Wird nur bei type=gps angegeben
              type: number
              format: double
            longitude:
              description: Längengrad. Wird nur bei type=gps angegeben
              type: number
              format: double
        lastPowerOffDuration:
          description: Gibt (in Sekunden) an, wie lange das Modul vor dem letzten Neubestromen abgeschaltet war.
          type: integer
        lastPowerOn:
          description: Gibt den Zeitpunkt an, wann das Modul zuletzt neu Bestromt wurde.
          type: string                                        
          format: date-time                   
          example: "2000-01-01T01:01:01"
        battery:
          $ref: '#/components/schemas/Element'
        lastBatteryChargeDuration:
          description: >-
            Gibt (in Sekunden) an, wie lange diese Batterie (battery) vor dieser Nutzung abgeschaltet war (und vermutlich geladen wurde).
            Wird in dem Modul immer die selbe Batterie verwendet (z.B. bei Batterie-Ladebetrieb), ist diese lastBatteryChargeDuration identisch mit lastPowerOffDuration. War zuvor jedoch eine andere Batterie verwendet, gibt lastBatteryChargeDuration an, wie lange die **jetzt verwendete** Batterie zuvor nicht verwendet (also vermutlich geladen) wurde.
          type: integer
        lastUser:
          $ref: '#/components/schemas/ElementUser'
        lastCrashSwitchOff:
          description: Zeitpunkt, an dem das Modul zuletzt wegen eines Crashes stillgelegt wurde. Unter lastCrashCauser wird (Anzeigerecht vorausgesetzt) angezeigt, wer der Verursacher des Crashs war.
          type: string                                        
          format: date-time                   
          example: "2000-01-01T01:01:01"
        lastCrashCauser:
          $ref: '#/components/schemas/ElementUser'
        lastCrashReset:
          description: Zeitpunkt, an dem zuletzt ein Crashe Crash-Stillegung) zurückgesetzt wurde. Unter lastCrashResetCauser wird (Anzeigerecht vorausgesetzt) angezeigt, wer den Crash zurückgesetzt hat.
          type: string                                        
          format: date-time                   
          example: "2000-01-01T01:01:01"
        lastCrashResetCauser:
          $ref: '#/components/schemas/ElementUser'
        lastSignalStregth:
          description: Signalstärke in db ()bei Funkmodulen)
          type: integer
        moduleVersion:
          description: Aktuelle Modulversion
          type: string
          example: "F-24"
        hardwareVersion: 
          description: Aktuelle Hardwareversion
          type: string
        clockDeviation:
          description: Aktuelle Abweichung der Uhr im Modul (Angabe in Sekunden)
          type: integer
          format: int64
        hybridBatteryAge:
          description: Alter der Hybrid-Batterie in 1/10'tel Jahren. Der Wert '11' steht z.B. für ein Alter von '1,1 Jahren'. Der Wert '-1' hat eine Sezialfunktion und steht für eine leere Batterie - hier kann kein Alter angegeben werden.
          type: integer
          format: int32
          example: "11"
        lastOperatingHoursTime:
          description: Zeitpunkt, wann zuletzt die Betriebsstunden ausgelesen wurden
          type: string                                        
          format: date-time                   
          example: "2000-01-01T01:01:01"
        loginHours:
          description: Aktueller Stand der Einschaltstunden (in Sekunden)
          type: integer
          format: int64
        usedHours:
          description: Aktueller Stand der Nutzungsstunden (in Sekunden)
          type: integer
          format: int64
        applicationCounters:
          description: In der Datenbank können eigene Betriebsstunden-Zähler (z.B. Reifenzähler) definiert werden.
          type: array
          items:
            type: object
            properties:
              name:
                description: Der Name des Zählers (wie in der Datenbak definiert)
                type: string
              loginHours:
                description: Aktueller Stand der Einschaltstunden (in Sekunden)
                type: integer
                format: int64
              usedHours:
                description: Aktueller Stand der Nutzungsstunden (in Sekunden)
                type: integer
                format: int64
        relativeLoginHours:
          description: Gibt die relativen Einschaltstunden an. Berücksichtigt werden hier nur die Einschaltstunden der letzten Zeit (z.B. der letzten 30 Tage)
          type: object
          properties:
            value:
              description: Einschaltstunden aus dem angegebenen Zeitraum (in Sekunden)
              type: integer
            days:
              description: Betrachteter Zeitraum. value bezieht sich auf die Anzahl Einschaltstunden in den letzten 'days' Tagen.
              type: integer
            percent:
              description: Gibt an, wie lange das Modul im angegebenen Zeitraum prozentual im Zustand eingeloggt war.
              type: number
              format: double
        relativeUsedHours:
          description: Gibt die relativen Nutzungsstunden an. Berücksichtigt werden hier nur die Nutzungsstunden der letzten Zeit (z.B. der letzten 30 Tage)
          type: object
          properties:
            value:
              description: Nutzungsstunden aus dem angegebenen Zeitraum (in Sekunden)
              type: integer
            days:
              description: Betrachteter Zeitraum. value bezieht sich auf die Anzahl Nutzungsstunden in den letzten 'days' Tagen.
              type: integer
            percent:
              description: Gibt an, wie lange das Modul im angegebenen Zeitraum prozentual genutzt wurde.
              type: number
              format: double
        workloadPowerOn:
          description: Gibt an, wie lange das Modul im angegebenen Zeitraum (bezogen auf die tatsächliche Arbeitszeit) bestromt war.
          type: object
          properties:
            value:
              description: Bestromt-Zeit in % aus dem angegebenen Zeitraum (bezogen auf die tatsächliche Arbeitszeit entsprechend des eingestellten Schichtmodells)
              type: number
              format: double
            days:
              description: Betrachteter Zeitraum. value bezieht sich auf die Arbeitszeit in den letzten 'days' Tagen.
              type: integer
        workloadLogin:
          description: Gibt an, wie lange das Modul im angegebenen Zeitraum (bezogen auf die tatsächliche Arbeitszeit) im Zustand eingeloggt war.
          type: object
          properties:
            value:
              description: Einschalt-Zeit (eingeloggt) in % aus dem angegebenen Zeitraum (bezogen auf die tatsächliche Arbeitszeit entsprechend des eingestellten Schichtmodells)
              type: number
              format: double
            days:
              description: Betrachteter Zeitraum. value bezieht sich auf die Arbeitszeit in den letzten 'days' Tagen.
              type: integer
        workloadUsed:
          description: Gibt an, wie lange das Modul im angegebenen Zeitraum (bezogen auf die tatsächliche Arbeitszeit) genutzt wurde.
          type: object
          properties:
            value:
              description: Nutzungs-Zeit in % aus dem angegebenen Zeitraum (bezogen auf die tatsächliche Arbeitszeit entsprechend des eingestellten Schichtmodells)
              type: number
              format: double
            days:
              description: Betrachteter Zeitraum. value bezieht sich auf die Arbeitszeit in den letzten 'days' Tagen.
              type: integer
        kpiDate:
          description: Zeitpunkt, zu dem die aktuellen KPI-Werte zuletzt berechnet wurden
          type: string                                        
          format: date-time                   
          example: "2000-01-01T00:00:00"
        kpiDays:
          description: Anzahl Tage, über die die KPI berechnet wurde
          type: integer
          format: int32
        kpiDataAvailable:
          description: Normalerweise 100%. Sollte jedoch das Logbuch über den Berechnungszeitraum nicht vollständig sein, wird hier angegeben, wie viele Prozent Daten im Berechnungeszeitraum zur Verfügung stehen.
          type: number
          format: double
        kpiPower:
          description: Bestromt-KPI = Bestromt-Zeit (während der Schichtzeit) / Schichtzeit * 100%
          type: number
          format: double
        kpiLoginFactorY:
          description: Sind in der Datenbankkonfiguration Einlog-Faktoren definiert und ist diesem Modul ein Einlog-Faktor zugewiesen, dann wird die Einlog-KPI mit diesem Faktor multipliziert. Ist kein Einlog-Faktor zugewiesen (kpiLoginFactorY = null) gilt der Einlog-Faktor 1.0
          type: number
          format: double
        kpiLogin:
          description: Einlog-KPI = Einlog-Zeit (während der Schichtzeit) / Bestromt-Zeit (während der Schichtzeit) * Einlog-Faktor * 100%
          type: number
          format: double
        kpiUsed:
          description: Nutzungs-KPI = Nutzungszeit (während der Schichtzeit) / Einlog-Zeit (während der Schichtzeit) * 100%
          type: number
          format: double
        kpiLoad:
          description: Last-KPI = Nutzungszeit mit Last (während der Schichtzeit) / Nutzungs-Zeit (während der Schichtzeit) * 100%
          type: number
          format: double
        kpiLoadFactorZ:
          description: Für die Berechnung der Gesamt-KPI wird die Last-KPI normalerweise mit dem Standard-Faktor 2.0 multipliziert, was einem Last-Verhältnis von 50% mit Last zu 50% ohne Last entspricht. Um die Gesamt-KPI bei unterschiedlichen typischen Last-Verhältnissen vergleichbar zu machen, kann dem Modul ein Last-Faktor zugewiesen werden. Die Gesamt-KPI wird dann statt mit 2.0 mit diesem spezifischen Last-Faktor multipliziert. Ist kein Last-Faktor angegeben (kpiLoadFactorZ = null) wird der Faktor 2.0 verwendet.
          type: number
          format: double
        kpiTotal:
          description: Gesamt-KPI = Nutzungszeit mit Last (während der Schichtzeit) / Schichtzeit * Einlog-Faktor * Last-Faktor * 100%
          type: number
          format: double
    ModuleOrder:
      description: Enthält einen Auftrag (order) wie z.B. Logbuch-Lesen oder Betriebsstunden-Setzen, wie er in der Kommunikationszentrale des Mobile Easykey Managers angezeigt wird.
      properties:
        moduleId:
          description: Gibt die id des Moduls an, zu dem dieser Auftrag gehört
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        orderId:
          description: Ging die oderId dieses Auftrags an. Jeder Auftrag hat eine (über alle Module hinweg) eindeutige id.
          type: integer
        type:
          description: >-
            * **status** - Status-Autrag wie z.B. Status-Lesen, Crash-Löschen
            * **program** - Programmier-Auftrag wie z.B. Vollupdate, Quickupdate
            * **info** - Informations-Auftrag wie z.B. Loguch-Lesen
          type: string
          enum:
            - status
            - program
            - info
        state:
          description: >-
            * **creating** - Der Auftrag wird gerade erzeugt oder verändert
            * **created** - DerAuftrag ist vollständig erstellt, jedoch noch nicht ausgeführt oder die Ausführung wurde abgebrochen (Fortschritt bis zum Abbruch wird in progress angezeigt)
            * **running** - Der Auftrag wird gerade ausgeführt. Im Feld progress wird der aktuelle Fortschritt angezeigt
            * **success** - Der Auftrag wurde vollständig ausgeführt.
            * **deleted** - Der Auftrag wurde gelöscht
            * **obsolete** - Der Auftrag ist hinfällig. Z.B. wird ein noch nicht ausgeführtes Quick-Update hinfällig, wenn ein (danach erstelltes) Vollupdate ausgeführt wurde.
            * **error** - Bei der Ausführung kam es zu einem Fehler.
          type: string
          enum:
            - creating
            - created
            - running
            - success
            - deleted
            - obsolete
            - error
        content:
          description: >-
            Enthält ein Array mit den einzelen Bestandteilen dieses Auftrags.
            * **FirstInit** - Erstinitialisierung.
            * **ModulChange** - Modultausch 
            * **PreModulChange** - Modultausch vorbereiten
            * **ChangeLogSize** - Speicheraufteilung verändern (Betrifft nur Module des Typs D-xx)
            * **Config** - Konfiguration verändern
            * **CellsFull** - Vollupdate
            * **CellsQuick** - Quickupdate
            * **ConfigCS** - Crash-Sensor programmieren
            * **ConfigAlarm** - Alarm-Werte schreiben
            * **DepartureControl** - Abfahrtskontrolle programmieren
            * **FirmwareD** - Firmwareupdate (nur für Modules des Typs D-xx)
            * **FirmwareF** - Firmwareupdate (alle anderen Module)
            * **GetStatus** - Modulstatus auslesen
            * **ClearCrash** - Crash zurücksetzen
            * **TimeSync** - Uhr stellen
            * **SetBtr** - Betriebsstunden setzen
            * **ReadLog** - Logbuch auslesen
            * **ReadBtr** - Betreibsstunden auslesen
            * **ReadPos** - Position auslesen
            * **DetectHardwareType** - Hardware erkennen
            * **CSIIITeachStart** - Crash-Sensor Teachfahlt starten
            * **CSIIITeachStop** - Crash-Sensor Teachfahlt beenden
            * **SetRepairMode** - Werkstatt-Modus setzen
            * **ClearRepairMode** - Werkstatt-Modus zurücksetzen
            * **Diagnostic** - Diagnose ausführen
          type: array
          items:
            type: string
            enum:
               - FirstInit
               - ModulChange
               - PreModulChange
               - ChangeLogSize
               - Config
               - ConfigGsm
               - CellsFull
               - CellsQuick
               - CellsDiff
               - ConfigCS
               - ConfigAlarm
               - DepartureControl
               - FirmwareD
               - FirmwareF
               - GetStatus
               - ClearCrash
               - TimeSync
               - SetBtr
               - ReadLog
               - ReadBtr
               - ReadPos
               - DetectHardwareType
               - CSIIITeachStart
               - CSIIITeachStop
               - SetRepairMode
               - ClearRepairMode
               - Diagnostic
        creationTime:
          description: Zeitpunkt, wann der Auftrag erstellt oder das letzte mal verändert wurde
          type: string
          format: date-time
          example: "2000-01-01T01:01:01"
        finishTime:
          description: Zeitpunkt, wann der Auftrag fertig gestellt wurde
          type: string
          format: date-time
          example: "2000-01-01T01:01:01"
        errorText:
          description: Enthält ggf. eine Fehlerbeschreibung, wenn während der Ausführung ein Fehler aufgetreten ist.
          type: string
        progress:
          description: Gibt den Fortschritt der Ausführung in Prozent an, z.B. 50%
          type: integer
          example: 50
    NewUser:
      properties:
        firstname:
          description: Der Vorname des neuen Benutzers.
          type: string
          maxLength: 40
        lastname:
          description: >-
            Der Nachname des neuen Benutzers.
            Anmerkung: Werden weder Vor- noch Namchname angegeben, wird ein Nachname in der Form 'Benutzer 123' erstellt.
          type: string
          maxLength: 40
    User:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        firstName:
          type: string
          maxLength: 40
        lastName:
          type: string
          maxLength: 40
        icon:
          type: string
        transponderId:
          description: Gibt die Transpondernummer als Dezimalzahl an. Eine 0 steht hier für 'kein Transponder zugewiesen'.
          type: integer
          format: int64
        pseudonym:
          type: string
        isValid:
          type: boolean
        status:
          description: >-
            Gibt an, welchen Status dieser Benutzers hat.
            Mögliche Werte:
            * **locked** - Der Benutzer ist aktuell gesperrt. Alle weiteren Funktionen sind deaktiviert.
            * **user** - Der Benutzer darf sich am Modul ein- und ausloggen (darf fahren).
            * **master** - Der Benutzer dard einen Crash freischalten
            * **repair** - Der Benutzer kann den Werkstattmodus ein- und ausschalten. (Der Status 'user' ist automatisch mit gesetzt)
            * **lowspeed** - Der Benutzer darf nur mit geringer Geschwindigkeit fahren. (Der Status 'user' ist automatisch mit gesetzt)
          type: array
          items:
            type: string
            enum:
              - locked
              - user
              - master
              - repair
              - lowspeed
        servicePartner:
          $ref: '#/components/schemas/Element'
        modulclassValues:
          description: >-
            Fahrzeugklassen, welche diesem Benutzer zugewiesen sind.
            Wird nur übergeben, wenn im entsprechenden Befehl 'modulclassValues=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/ModulclassValue'
        areas:
          description: >-
            Bereich oder Bereiche, in denen dieser Benutzer zu finden ist.
            Wird nur übergeben, wenn im entsprechenden Befehl 'areas=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/Element'
        areaRights: 
          $ref: '#/components/schemas/AreaRights'
        links:
          description: >-
            Enthält alle Links, wo dieser Benutzer zu finden ist.
            Zusätzlich wird angegeben, in welcher Gruppe sich der jeweilige Link befindet.
            Wird nur übergeben, wenn im entsprechenden Befehl 'links=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/LinkElement'
        datas:
          description: Enthält die Stammdaten des Benutzers. Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'datas=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/DataField'
        alarms:
          description: Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'alarms=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/UserAlarm'
        drivingRights:
          description: >-
            Enthält eine Liste alle Benutzer, welche dieses Modul aktuell benutzen (fahren) dürfen.
            Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'drivingRights=true' übergeben wird.
          type: array
          items:
            $ref: '#/components/schemas/Drivingright'
    UserAlarmType:
      description: >-
        Alarm-Type zur Auflistung aller möglichen Ablaufdatum-Typen.
        Die möglichen Alarm-Typen sind im Manager in der Datenbankkonfiguration einstellbar.
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
        name:
          description: der Anzeige-Name dieses Feldes
          type: string
    UserAlarm:
      description: >-
        Ablaufdatum-Alarme eines Benutzers.
        Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'alarms=true' übergeben wird.
        Achtung: Die Ablaufdaten der Benutzer sind ein Sonderfall. Sie können auch gesetzt werden, wenn kein Alarmprofil zugewiesen ist. In diesem Fall gibt es dann allerdings nur das Alarm-Datum und kein Datum für Warnung oder Überfällig.
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
        name:
          description: der Anzeige-Name dieses Feldes
          type: string
        alarmProfile:
          $ref: '#/components/schemas/Element'
        alarmState:
          description: >-
            Aktueller Zustand des Alarms (Alarmstufe)
            * **inactive** - Der Alarm ist inaktiv
            * **ok** - Kein Alarm
            * **warning** - Warnung
            * **alarm** - Alarm/Fällig
            * **overdue** - Überfällig
          type: string
          enum:
            - inactive
            - ok
            - warning
            - alarm
            - overdue
        enabled:
          description: >-
            Gibt an, ob der Alarm derzeit aktiv ist oder nicht.
          type: boolean
          default: true
        timeWarningThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'warning' (Warnung) geht. Wird nur für alarmType=time angezeigt/verwendet.
            Die Warnung kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm springt bei erreichen der timeAlarmThreshold direkt in den Zustand 'Alarm'.
          type: string
          format: date
          example: "2022-01-01"
        timeAlarmThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'alarm' (Alarm) geht. Wird nur für alarmType=time angezeigt/verwendet.
          type: string
          format: date
          example: "2022-02-01"
        timeOverdueThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'overdue' (Überfällig) geht. Wird nur für alarmType=time angezeigt/verwendet.
            Die Stufe Überfällig kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm bleibt im Zustand 'Alarm'.
          type: string
          format: date
          example: "2022-03-01"
    NewUserAlarm:
      description: dient der Datenübergabe um einen Alarm-Wert zu verändern
      required: 
        - newThreshold
      properties:
        newThreshold:
          description: >-
            Gibt das neue Ablaufdatum (Alarm-Grenzwert) an.
          type: string
          format: date
          example: '2022-01-15'
    Battery:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
          maxLength: 40
        icon:
          type: string
        macAddress:
          description: Enthält die MAC-Adresse des in der Batterie verwendeten Elektrolyt-Sensors
          type: string
          example: "01:23:45:67:89:AB"
        isValid:
          type: boolean
        areas:
          description: Bereich oder Bereiche, in denen diese Batterie zu finden ist. Wird nur übergeben, wenn im entsprechenden Befehl 'areas=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/Element'
        rights: 
          $ref: '#/components/schemas/AreaRights'
        links:
          description: >-
            Enthält alle Links, wo diese Batterie zu finden ist.
            Zusätzlich wird angegeben, in welcher Gruppe sich der jeweilige Link befindet.
            Wird nur übergeben, wenn im entsprechenden Befehl 'links=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/LinkElement'
        datas:
          description: Enthält die Stammdaten der Batterie. Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'datas=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/DataField'
        alarms:
          description: Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'alarms=true' übergeben wird
          type: array
          items:
            $ref: '#/components/schemas/BatteryAlarm'
    BatteryAlarmType:
      description: >-
        Alarm-Type zur Auflistung aller möglichen Ablaufdatum-Typen.
        Die möglichen Alarm-Typen sind im Manager in der Datenbankkonfiguration einstellbar.
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
        name:
          description: der Anzeige-Name dieses Feldes
          type: string
    BatteryAlarm:
      description: Ablaufdatum-Alarme einer Batterie. Dieser Teil wird nur übergeben, wenn im entsprechenden Befehl 'alarms=true' übergeben wird
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
        alarmType:
          description: >-
            Gibt den Alarm-Typ an. Mögliche Werte sind
            * **time** - Zeit-Alarme (Ablaufdatum-Alarm)
          type: string
          enum:
            - time
        name:
          description: der Anzeige-Name dieses Feldes
          type: string
        alarmProfile:
          $ref: '#/components/schemas/Element'
        alarmState:
          description: >-
            Aktueller Zustand des Alarms (Alarmstufe)
            * **ok** - Kein Alarm oder der Alarm ist inaktiv.
            * **warning** - Warnung
            * **alarm** - Alarm/Fällig
            * **overdue** - Überfällig
          type: string
          enum:
            - ok
            - warning
            - alarm
            - overdue
        enabled:
          description: >-
            Gibt an, ob der Alarm derzeit aktiv ist oder nicht.
          type: boolean
          default: true
        timeWarningThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'warning' (Warnung) geht. Wird nur für alarmType=time angezeigt/verwendet.
            Die Warnung kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm springt bei erreichen der timeAlarmThreshold direkt in den Zustand 'Alarm'.
          type: string
          format: date-time
          example: "2022-01-01T01:01:01"
        timeAlarmThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'alarm' (Alarm) geht. Wird nur für alarmType=time angezeigt/verwendet.
          type: string
          format: date-time
          example: "2022-01-01T01:01:01"
        timeOverdueThreshold:
          description: >-
            Zeitpunkt, ab dem der Zeit-Alarm in Stufe 'overdue' (Überfällig) geht. Wird nur für alarmType=time angezeigt/verwendet.
            Die Stufe Überfällig kann deaktiviert sein. In diesem Fall wird null ausgegeben und der Alarm bleibt im Zustand 'Alarm'.
          type: string
          format: date-time
          example: "2022-01-01T01:01:01"
    AreaRights:
      properties:
        modulesView:
          type: boolean
        modulesAdd:
          type: boolean
        modulesDelete:
          type: boolean
        modulesMove:
          type: boolean
        modulesEdit:
          type: boolean
        modulesEditDrivingRights:
          type: boolean
        modulesEditBatteryRights:
          type: boolean
        modulesLock:
          type: boolean
        modulesEditNotes:
          type: boolean
        modulesDocumentsView:
          type: boolean
        modulesDocumentsOpen:
          type: boolean
        modulesDocumentsAddEdit:
          type: boolean
        modulesDocumentsDelete:
          type: boolean
        modulesViewCrashRemoteTeach:
          type: boolean
        modulesExport:
          type: boolean
        serviceCallView:
          type: boolean
        serviceCallAdd:
          type: boolean
        serviceCallEdit:
          type: boolean
        serviceCallCancel:
          type: boolean
        infocenterView:
          type: boolean
        infocenterLastUserView:
          type: boolean
        infocenterLastCrashCauserView:
          type: boolean
        infocenterLastResetterView:
          type: boolean
        infocenterCreateProgramOrder:
          type: boolean
        infocenterModulChange:
          type: boolean
        infocenterCreateInfoOrder:
          type: boolean
        infocenterCreateStateOrder:
          type: boolean
        infocenterClearCrash:
          type: boolean
        infocenterSetBtr:
          type: boolean
        infocenterSetRepairMode:
          type: boolean
        infocenterSetHybridBatAge:
          type: boolean
        infocenterSetBtrAlarms:
          type: array
          items:
            $ref: '#/components/schemas/AreaRight'
        infocenterSetUvv:
          type: array
          items:
            $ref: '#/components/schemas/AreaRight'
        commcenterView:
          type: boolean
        commcenterEdit:
          type: boolean
        btrView:
          type: boolean
        btrDelete:
          type: boolean
        btrExport:
          type: boolean
        btrManualAdd:
          type: boolean
        logView:
          type: boolean
        logTimeView:
          type: boolean
        logActionView:
          type: boolean
        logDurationView:
          type: boolean
        logBatteryView:
          type: boolean
        logUserView:
          type: boolean
        logPKView:
          type: boolean
        logEventDokuView:
          type: boolean
        logCommentView:
          type: boolean
        logCommentEdit:
          type: boolean
        logDelete:
          type: boolean
        logExport:
          type: boolean
        usersView:
          type: boolean
        usersEditDrivingRights:
          type: boolean
        usersAdd:
          type: boolean
        usersDelete:
          type: boolean
        usersMove:
          type: boolean
        usersEdit:
          type: boolean
        usersEditTransponder:
          type: boolean
        usersLock:
          type: boolean
        usersEditMaster:
          type: boolean
        usersEditGarage:
          type: boolean
        usersEditNotes:
          type: boolean
        usersEditExpiration:
          type: array
          items:
            $ref: '#/components/schemas/AreaRight'
        usersEditModulClassExpiration:
          type: boolean
        usersDocumentsView:
          type: boolean
        usersDocumentsOpen:
          type: boolean
        usersDocumentsAddEdit:
          type: boolean
        usersDocumentsDelete:
          type: boolean
        usersExport:
          type: boolean
        batteryView:
          type: boolean
        batteryAdd:
          type: boolean
        batteryDelete:
          type: boolean
        batteryMove:
          type: boolean
        batteryEdit:
          type: boolean
        batteryEditNotes:
          type: boolean
        batteryEditDrivingRights:
          type: boolean
        batteryEditExpiration:
          type: array
          items:
            $ref: '#/components/schemas/AreaRight'
        batteryDocumentsView:
          type: boolean
        batteryDocumentsOpen:
          type: boolean
        batteryDocumentsAddEdit:
          type: boolean
        batteryDocumentsDelete:
          type: boolean
        batteryExport:
          type: boolean
        alarmCenterView:
          type: boolean
        alarmCenterViewAlarmCauser:
          type: boolean
        alarmCenterViewResetCauser:
          type: boolean
        alarmCenterPopupWarning:
          type: boolean
        alarmCenterPopupAlarm:
          type: boolean
        alarmCenterPopupOverdue:
          type: boolean
        alarmCenterPopupCrashes:
          type: boolean
        alarmCenterPopupReset:
          type: boolean
        alarmCenterPopupChangeLimit:
          type: boolean
        statisticView:
          type: boolean
        statisticForModules:
          type: boolean
    AreaRight:
      required:
        - id
        - name
        - value
      properties:
        id:
          description: der Datenbank-interne Name dieses Feldes
          type: string
          readOnly: true
        name:
          description: der Anzeige-Name dieses Feldes (je nach Sprache des Softwarebedieners/Tokens ggf. unterschiedlich)
          type: string
          readOnly: true
        value:
          description: der eigentliche Wert dieses Feldes
          type: boolean
    DepartureControlLanguage:
      properties:
        languageNr:
          description: Nummer der Sprache (0-3)
          type: integer
        language:
          description: Der Name der jeweiligen Sprache. Ein Leerstring bedeutet, diese Sprache wird nicht verwendet.
          type: string
    DepartureControlText:
      properties:
        textNr:
          description: Mit dieser Nummer wird der Text in den Abfahrtskontroll-Listen referenziert.
          type: integer
        name:
          description: Ein kurzer Name dieses Textes. Dient nur der Information und wird in der Abfahrtskontrolle nicht verwendet.
          type: string
        vital:
          description: Gibt an, ob das Modul bei negativer Antwort stillgelegt werden soll (Werkstattmodus).
          type: boolean
        logintime:
          description: >-
            Gibt an, wie lange das Modul zur Beantwortung dieser Frage freigeschaltet (eingeloggt) werden soll.
            Der Wert 0 gibt an, dass das Modul für diese Frage nicht freigeschaltet wird.
          type: boolean
        buttonOrder:
          description: >-
            Gibt an, in welcher Reigenfolge die Schaltflächen für die positive und negative Antwort dargestellt werden sollen
            * **negative_positive** - Die Schaltfläche für die negative Antwort ist immer links.
            * **positive_negative** - Die Schaltfläche für die negative Antwort ist immer rechts.
            * **random** - Die Schaltflächen für die positive und negative Antwort werden jedes mal zufällig rechts oder links angezeigt.
          type: string
          enum:
            - negative_positive
            - positive_negative
            - random
        items:
          description: Listet den Frage-Text und die positive und negative Antwort in allen 4 Sprachen auf
          type: array
          items:
            type: object
            properties:
              questionText:
                description: Gibt den Text der Frage an
                type: string
                example: 'Lenkfunktion in Ordnung?'
              positiveButton:
                description: Gibt den Text der positiven Antwort an
                type: string
                example: 'Ja'
              negativeButton:
                description: Gibt den Text der negativen Antwort an
                type: string
                example: 'Nein'
    DepartureControlList:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          type: string
          maxLength: 40
        icon:
          type: string
        description:
          type: string
        numberQuestionsToAsk:
          description: >-
            Gibt an, wie viele zufällig ausgewählte Fragen aus dieser Liste bei jeder Abfahrtskontrolle gestellt werden sollen.
            Diese Zahl entspricht der Angabe die im Mobile Easykey Manager zu dieser Liste eingestellt wurde.
          type: integer
        effectiveNumberQuestionsToAsk:
          description: >-
            Diese Zahl entspricht der tatsächlichen Anzahl Fragen, die bei jeder Abfahrtskontrolle gestellt werden.
            Sind der Liste weniger Fragen zugeordnet als unter numberQuestionsToAsk angegeben, dann werden entsprechend weniger Fragen gestellt.
            Zudem wird die effektive Anzahl zu stellender Fragen auf 0 gesetzt, wenn keine einziger trigger verwendet wird. Die Abfahrtskontrolle gilt dann als deaktiviert.
          type: integer
        trigger:
          description: >-
            Gibt an, zu welchen Ereignissen (jeweils beim nächsten Einloggen) eine Abfahrtskontrolle durchgeführt werden soll
            * **powerOn** - Nach jedem Neubestromen
            * **crash** - Nach einem Crash (mit Crash-Abschaltung)
            * **repaireMode** - Nach dem das Modul im Werkstatt-Modus war
            * **userChange** - Jedes mal, wenn sich ein anderer Benutzer als zuvor einloggt
            * **time** - Nach der in triggerTimeMinutes angegebenen Zeit
          type: array
          items:
            type: string
            enum:
              - powerOn
              - crash
              - repaireMode
              - userChange
              - time
        triggerTimeMinutes:
          description: >-
            Wenn unter trigger (auch) die Option 'time' gewählt ist, wird hier die entsprechende Zeit (in Minuten) eingestellt.
            Ist bei einem Einloggen die letzte Abfahrtskontrolle vor mehr als dieser zeit durchgeführt worden, muss mit diesem Einloggen einen neue Abfahrtskontrolle durchgeführt werden.
          type: integer
        questionsList:
          description: >-
            Gibt eine Liste aller möglichen Fragen zurück, welche mit dieser Abfahrtskontroll-Liste gestellt werden können.
            Aus dieser Liste werden für jede Abfahrtskontrolle zufällig 'numberQuestionsToAsk' Fragen ausgewählt.
          type: array
          items:
            type: integer
    StatLog15Data:
      properties:
        date:
          description: >-
            Zeitpunkt auf ¼ Stunde genau (Angabe in lokaler Zeit)
            Alle weiteren Werte beziehen sich auf die in dieser ¼ Stunde angefallenen Daten.
          type: string                                        
          format: date-time                   
          example: "2021-01-01T00:15:00"
        dataTime:
          description: >-
            Anzahl Sekunden Daten Verfügbar innerhalb dieser ¼ Stunde
            Dieser Wert sollte normalerweise 900 betragen (15 * 60 Sekunden)
            Der Wert kann durch fehlende Daten oder durch ein Stellen der Uhr abweichen.
            Abweichungen duch das Stellen der Uhr werden unter TimeCorrection erfasst. In dem Fall sollte dann die Summe aus dataTime + timeCorrection 900 betragen. Beträgt die Summe aus dataTime und dimeCorrection nicht 900, wurden entsprechend weniger Daten erfasst (Z.B. da das Logbuch nicht ausgelesen wurde).
          type: integer
          format: int16
          example: "900"
        timeCorrection:
          description: Anzahl Sekunden (+/-) Uhr Stellen. Siehe auch DataTime
          type: integer
          format: int16
        garageTime:
          description: Anzahl Sekunden Werkstattmodus innerhalb dieser ¼ Stunde
          type: integer
          format: int16
        overdueTime:
          description: Anzahl Sekunden, wie lange das Modul durch BTR-/UVV-Alarme NICHT betrieben werden konnte (Zustand Alarm überfällig)
          type: integer
          format: int16
        powerTime:
          description: Anzahl Sekunden Bestromt innerhalb dieser ¼ Stunde
          type: integer
          format: int16
        crashRelaisTime:
          description: Anzahl Sekunden CrashRelais innerhalb dieser ¼ Stunde
          type: integer
          format: int16
        crashFlashTime:
          description: Anzahl Sekunden Blitzlampe innerhalb dieser ¼ Stunde
          type: integer
          format: int16
        crashPowerOffTime:
          description: Anzahl Sekunden Crash während PowerOff innerhalb dieser ¼ Stunde
          type: integer
          format: int16
        usablePowerTime:
          description: PowerTime OHNE CrashRelaisTime Bestromt Anteil
          type: integer
          format: int16
        loginTime:
          description: Anzahl Sekunden Eingeloggt innerhalb dieser ¼ Stunde
          type: integer
          format: int16
        usedTime:
          description: Anzahl Sekunden Nutzung innerhalb dieser ¼ Stunde
          type: integer
          format: int16
        event1Time:
          description: Ereignis 1. Anzahl Sekunden innerhalb dieser ¼ Stunde (ohne Werkstatt)
          type: integer
          format: int16
        event1UsedTime:
          description: Ereignis 1. Anzahl Sekunden effektiv innerhalb dieser ¼ Stunde (ohne Werkstatt)
          type: integer
          format: int16
        event2Time:
          description: Ereignis 1. Anzahl Sekunden innerhalb dieser ¼ Stunde (ohne Werkstatt)
          type: integer
          format: int16
        event2UsedTime:
          description: Ereignis 2. Anzahl Sekunden effektiv innerhalb dieser ¼ Stunde (ohne Werkstatt)
          type: integer
          format: int16
        event1And2Time:
          description: Ereignis 2. Anzahl Sekunden Ev1 und Ev2 gleichzeitig (ohne Werkstatt)
          type: integer
          format: int16
        event1And2UsedTime:
          description: Ereignis 2. Anzahl Sekunden effektiv Ev1 und Ev2 gleichzeitig (ohne Werkstatt)
          type: integer
          format: int16
        elektrolytLowTime:
          description: Anzahl Sekunden bis ELS wieder OK war, oder bis Power Off (gesamt)
          type: integer
          format: int16
        elektrolytLowPowerTime:
          description: Anzahl Sekunden bis ELS nach Neubestromen wieder OK war, oder bis Power Off
          type: integer
          format: int16
        blsTime:
          description: Anzahl Sekunden BLS innerhalb dieser ¼ Stunde (ohne Werkstatt)
          type: integer
          format: int16
        blsLoginTime:
          description: Anzahl Sekunden BLS+Eingeloggt innerhalb dieser ¼ Stunde (ohne Werkstatt)
          type: integer
          format: int16
        blsUsedTime:
          description: Anzahl Sekunden BLS+effektiv innerhalb dieser ¼ Stunde (ohne Werkstatt)
          type: integer
          format: int16
        timeCorrectionCount:
          description: Anzahl Zeitkorrekturen (auch durchlaufend)
          type: integer
          format: int16
        garageCount:
          description: Anzahl Werkstattmodus ein
          type: integer
          format: int16
        overdueCount:
          description: Anzahl Overdue-Alarme (Summe aus Btr/Eff/UVV)
          type: integer
          format: int16
        powerCount:
          description: Anzahl Neubestromt (OHNE Neubestromt in der Werkstatt)
          type: integer
          format: int16
        powerFluctuationCount:
          description: Anzahl Spannungsschwankungen
          type: integer
          format: int16
        powerErrorCount:
          description: Anzahl Spannungsfehler (PowerOFF ohne Datenspeicherung)
          type: integer
          format: int16
        loginCount:
          description: Anzahl Login
          type: integer
          format: int16
        crashActiveCount:
          description: Anzahl aktiver Crashes (ohne 3-Stufige Crash Logik)
          type: integer
          format: int16
        crashPassiveCount:
          description: Anzahl passiver Crashes (ohne 3-Stufige Crash Logik)
          type: integer
          format: int16
        crashActive1Count:
          description: Anzahl aktiver Crashes Stufe I
          type: integer
          format: int16
        crashActive2Count:
          description: Anzahl aktiver Crashes Stufe II
          type: integer
          format: int16
        crashActive3Count:
          description: Anzahl aktiver Crashes Stufe III
          type: integer
          format: int16
        crashPassive1Count:
          description: Anzahl passiver Crashes Stufe I
          type: integer
          format: int16
        crashPassive2Count:
          description: Anzahl passiver Crashes Stufe II
          type: integer
          format: int16
        crashPassive3Count:
          description: Anzahl passiver Crashes Stufe III
          type: integer
          format: int16
        crashFlashCount:
          description: Anzahl Blitzlampe ein
          type: integer
          format: int16
        crashRelaisCount:
          description: Anzahl CrashRelais ein
          type: integer
          format: int16
        event1Count:
          description: Anzahl Ereignis 1 EIN
          type: integer
          format: int16
        event2Count:
          description: Anzahl Ereignis 2 EIN
          type: integer
          format: int16
        event1And2Count:
          description: Anzahl Ereignis 1 und Ereignis 2 gleichzeitig
          type: integer
          format: int16
        elektrolytLowPowerCount:
          description: Anzahl Elektrolyt Low nach Neubestromen
          type: integer
          format: int16
        elektrolytLowCount:
          description: Anzahl Elektrolyt Low gesamt
          type: integer
          format: int16
        blsCount:
          description: Anzahl BLS EIN
          type: integer
          format: int16
    StatLog15ModulData:
      properties:
        module: 
          $ref: '#/components/schemas/DataElement'
        data:
          type: array
          items:
            $ref: '#/components/schemas/StatLog15Data'
    StatLog24Data:
      properties:
        date:
          description: >-
            Datum (in lokaler Zeit)
            Alle weiteren Werte beziehen sich auf die an diesem Tag angefallenen Daten.
          type: string                                        
          format: date-time                   
          example: "2021-01-01T00:00:00"
        dataTime:
          description: >-
            Anzahl Sekunden Daten Verfügbar (innerhalb dieser Schicht oder innerhalb von 24 Stunden)
            Bei Angabe einer Schicht ist dies üblicherweise die Schicht-Zeit. Ohne Angabe einer Schicht sollte dieser Wert normalerweise 86400 betragen (24 * 60 * 60 Sekunden)
            Der Wert kann durch fehlende Daten, durch ein Stellen der Uhr oder durch die Sommerzeitumstellung abweichen.
            Abweichungen duch das Stellen der Uhr werden unter TimeCorrection erfasst. In dem Fall sollte dann die Summe aus dataTime + timeCorrection 86400 (bzw. die Schichtzeit in Sekunden) betragen. Beträgt die Summe aus dataTime und dimeCorrection nicht 86400 (bzw. die Schichtzeit in Sekunden), wurden entsprechend weniger Daten erfasst (Z.B. da das Logbuch nicht ausgelesen wurde). Ausnahme sind die Schalttage, an denen entsprechend 23 oder 25 Stunden erfasst werden.
          type: integer
          format: int32
          example: "86400"
        timeCorrection:
          description: Anzahl Sekunden (+/-) Uhr Stellen. Siehe auch DataTime
          type: integer
          format: int32
        garageTime:
          description: Anzahl Sekunden Werkstatt innerhalb dieses Tages
          type: integer
          format: int32
        overdueTime:
          description: Anzahl Sekunden, wie lange das Modul durch BTR-/UVV-Alarme NICHT betrieben werden konnte (Zustand Alarm überfällig)
          type: integer
          format: int32
        powerTime:
          description: Anzahl Sekunden Bestomt innerhalb dieses Tages
          type: integer
          format: int32
        crashRelaisTime:
          description: Anzahl Sekunden CrashRelais innerhalb dieses Tages
          type: integer
          format: int32
        crashFlashTime:
          description: Anzahl Sekunden Blitzlampe innerhalb dieses Tages
          type: integer
          format: int32
        crashPowerOffTime:
          description: Anzahl Sekunden Crash während PowerOff innerhalb dieses Tages
          type: integer
          format: int32
        usablePowerTime:
          description: PowerTime OHNE CrashRelaisTime Bestromt Anteil
          type: integer
          format: int32
        loginTime:
          description: Anzahl Sekunden Eingeloggt innerhalb dieses Tages
          type: integer
          format: int32
        usedTime:
          description: Anzahl Sekunden innerhalb dieses Tages
          type: integer
          format: int32
        event1Time:
          description: Ereignis 1. Anzahl Sekunden innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event1UsedTime:
          description: Ereignis 1. Anzahl Sekunden effektiv innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event2Time:
          description: Ereignis 1. Anzahl Sekunden innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event2UsedTime:
          description: Ereignis 2. Anzahl Sekunden effektiv innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event1And2Time:
          description: Ereignis 2. Anzahl Sekunden Ev1 und Ev2 gleichzeitig (ohne Werkstatt)
          type: integer
          format: int32
        event1And2UsedTime:
          description: Ereignis 2. Anzahl Sekunden effektiv Ev1 und Ev2 gleichzeitig (ohne Werkstatt)
          type: integer
          format: int32
        elektrolytLowTime:
          description: Anzahl Sekunden bis ELS wieder OK war, oder bis Power Off (gesamt)
          type: integer
          format: int32
        elektrolytLowUsedTime:
          description:   Während effektiv
          type: integer
          format: int32
        elektrolytLowPowerTime:
          description: Anzahl Sekunden bis ELS nach Neubestromen wieder OK war, oder bis Power Off
          type: integer
          format: int32
        elektrolytLowPowerUsedTime:
          description:   Während effektiv
          type: integer
          format: int32
        blsTime:
          description: Anzahl Sekunden BLS innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        blsLoginTime:
          description: Anzahl Sekunden BLS+Eingeloggt innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        blsUsedTime:
          description: Anzahl Sekunden BLS+effektiv innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        timeCorrectionCount:
          description: Anzahl Zeitkorrekturen (auch durchlaufend)
          type: integer
          format: int32
        garageCount:
          description: Anzahl Werkstattmodus  ein
          type: integer
          format: int32
        overdueCount:
          description: Anzahl Overdue-Alarme (Summe aus Btr/Eff/UVV)
          type: integer
          format: int32
        batteryChangedCount:
          description: Anzahl PowerCount mit neuer Batterie
          type: integer
          format: int32
        powerCount:
          description: Anzahl Neubestromt (OHNE Neubestromt in der Werkstatt)
          type: integer
          format: int32
        powerFluctuationCount:
          description: Anzahl Spannungsschwankungen
          type: integer
          format: int32
        powerErrorCount:
          description: Anzahl Spannungsfehler (PowerOFF ohne Datenspeicherung)
          type: integer
          format: int32
        loginCount:
          description: Anzahl Login
          type: integer
          format: int32
        crashActiveCount:
          description: Anzahl aktiver Crashes (ohne 3-Stufige Crash Logik)
          type: integer
          format: int32
        crashPassiveCount:
          description: Anzahl passiver Crashes (ohne 3-Stufige Crash Logik)
          type: integer
          format: int32
        crashActive1Count:
          description: Anzahl aktiver Crashes Stufe I
          type: integer
          format: int32
        crashActive2Count:
          description: Anzahl aktiver Crashes Stufe II
          type: integer
          format: int32
        crashActive3Count:
          description: Anzahl aktiver Crashes Stufe III
          type: integer
          format: int32
        crashPassive1Count:
          description: Anzahl passiver Crashes Stufe I
          type: integer
          format: int32
        crashPassive2Count:
          description: Anzahl passiver Crashes Stufe II
          type: integer
          format: int32
        crashPassive3Count:
          description: Anzahl passiver Crashes Stufe III
          type: integer
          format: int32
        crashFlashCount:
          description: Anzahl Blitzlampe ein
          type: integer
          format: int32
        crashRelaisCount:
          description: Anzahl CrashRelais ein
          type: integer
          format: int32
        event1Count:
          description: Anzahl Ereignis 1 EIN
          type: integer
          format: int32
        event2Count:
          description: Anzahl Ereignis 2 EIN
          type: integer
          format: int32
        event1And2Count:
          description: Anzahl Ereignis 1 und Ereignis 2 gleichzeitig
          type: integer
          format: int32
        elektrolytLowPowerCount:
          description: Anzahl Elektrolyt Low nach Neubestromen
          type: integer
          format: int32
        elektrolytLowCount:
          description: Anzahl Elektrolyt Low gesamt
          type: integer
          format: int32
        blsCount:
          description: Anzahl BLS EIN
          type: integer
          format: int32
    StatLog24ModulData:
      properties:
        module: 
          $ref: '#/components/schemas/DataElement'
        data:
          type: array
          items:
            $ref: '#/components/schemas/StatLog24Data'
    StatLogUser24Data:
      properties:
        date:
          description: >-
            Datum (in lokaler Zeit)
            Alle weiteren Werte beziehen sich auf die an diesem Tag angefallenen Daten.
            Wird die Summe über alle Tage des ausgewählten Zeitraums ausgewählt (Filter sum=true), wird als Datum 'null' zurückgegeben.
          type: string                                        
          format: date-time                   
          example: "2021-01-01T00:00:00"
        timeCorrection:
          description: Anzahl Sekunden (+/-) Uhr Stellen.
          type: integer
          format: int32
        garageTime:
          description: Anzahl Sekunden Werkstatt
          type: integer
          format: int32
        crashRelaisTime:
          description: Anzahl Sekunden CrashRelais innerhalb dieses Tages
          type: integer
          format: int32
        crashFlashTime:
          description: Anzahl Sekunden Blitzlampe innerhalb dieses Tages
          type: integer
          format: int32
        loginTime:
          description: Anzahl Sekunden Eingeloggt innerhalb dieses Tages
          type: integer
          format: int32
        usedTime:
          description: Anzahl Sekunden innerhalb dieses Tages
          type: integer
          format: int32
        event1Time:
          description: Ereignis 1. Anzahl Sekunden innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event1UsedTime:
          description: Ereignis 1. Anzahl Sekunden effektiv innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event2Time:
          description: Ereignis 1. Anzahl Sekunden innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event2UsedTime:
          description: Ereignis 2. Anzahl Sekunden effektiv innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        event1And2Time:
          description: Ereignis 2. Anzahl Sekunden Ev1 und Ev2 gleichzeitig (ohne Werkstatt)
          type: integer
          format: int32
        event1And2UsedTime:
          description: Ereignis 2. Anzahl Sekunden effektiv Ev1 und Ev2 gleichzeitig (ohne Werkstatt)
          type: integer
          format: int32
        elektrolytLowPowerTime:
          description: Anzahl Sekunden bis ELS nach Neubestromen wieder OK war, oder bis Power Off
          type: integer
          format: int32
        blsLoginTime:
          description: Anzahl Sekunden BLS+Eingeloggt innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        blsUsedTime:
          description: Anzahl Sekunden BLS+effektiv innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        timeCorrectionCount:
          description: Anzahl Zeitkorrekturen (auch durchlaufend)
          type: integer
          format: int32
        loginCount:
          description: Anzahl Login
          type: integer
          format: int32
        crashCount:
          description: Anzahl Crashes (ohne 3-Stufige Crash Logik)
          type: integer
          format: int32
        crash1Count:
          description: Anzahl Crashes Stufe I
          type: integer
          format: int32
        crash2Count:
          description: Anzahl Crashes Stufe II
          type: integer
          format: int32
        crash3Count:
          description: Anzahl Crashes Stufe III
          type: integer
          format: int32
        crashFlashCount:
          description: Anzahl Blitzlampe ein
          type: integer
          format: int32
        crashRelaisCount:
          description: Anzahl CrashRelais ein
          type: integer
          format: int32
        event1Count:
          description: Anzahl Ereignis 1 EIN
          type: integer
          format: int32
        event2Count:
          description: Anzahl Ereignis 2 EIN
          type: integer
          format: int32
        event1And2Count:
          description: Anzahl Ereignis 1 und Ereignis 2 gleichzeitig
          type: integer
          format: int32
        elektrolytLowPowerCount:
          description: Anzahl Elektrolyt Low nach Neubestromen
          type: integer
          format: int32
        blsCount:
          description: Anzahl BLS EIN
          type: integer
          format: int32
    StatLogUser24ModulData:
      properties:
        user: 
          $ref: '#/components/schemas/DataElementUser'
        module: 
          $ref: '#/components/schemas/DataElement'
        data:
          type: array
          items:
            $ref: '#/components/schemas/StatLogUser24Data'
    StatLogUser24ModulclassData:
      properties:
        user: 
          $ref: '#/components/schemas/DataElementUser'
        modulclass: 
          $ref: '#/components/schemas/DataElement'
        data:
          type: array
          items:
            $ref: '#/components/schemas/StatLogUser24Data'
    StatLogPowerData:
      properties:
        powerOn:
          description: Zeitpunkt (in lokaler Zeit) wann das Modul bestromt wurde
          type: string                                        
          format: date-time                   
          example: "2021-01-01T13:14:15"
        battery:
          $ref: '#/components/schemas/Element'
        batteryChanged:
          description: >-
            Gibt an, ob dieses Power On (Neu Bestromt) mit einer anderen Batterie war als das Power On (Neu Bestromt) zuvor.
            Dieser Wert kann null sein, wenn es kein entsprechendes Power ON (Neu Bestromt) davor gab.
          type: boolean
          nullable: true
        modulPowerOffTimeBefore:
          description: >-
            Gibt an, wie lange (in Sekunden) dieses Modul vor diesem Power On (Neu Bestromt) nicht Bestromt war.
            Dieser Wert kann null sein, wenn es kein entsprechendes Power ON (Neu Bestromt) davor gab.
          type: integer
          format: int32
          nullable: true
        batteryPowerOffTimeBefore:
          description: >-
            Gibt an, wie lange (in Sekunden) die bei diesem Power On (Neu Bestromt) verwendete Batterie vor diesem Power On (Neu Bestromt) nicht Bestromt war.
            Dieser Wert gibt die vermutliche Ladezeit der batterie an.
            Dieser Wert kann null sein, wenn es kein entsprechendes Power ON (Neu Bestromt) davor gab.
          type: integer
          format: int32
          nullable: true
        powerOnInGarage:
          description: Gibt an, ob das Modul im Werkstattmodus war, als es Neu Bestromt wurde.
          type: boolean
        powerOnTime:
          description: Anzahl Sekunden Bestromt (Dauer dieses Bestromt-Zyklus)
          type: integer
          format: int32
        timeCorrection:
          description: Anzahl Sekunden (+/-) Uhr Stellen
          type: integer
          format: int32
        powerOff:
          description: >-
            Zeitpunkt (in lokaler Zeit) wann das Modul wieder nicht bestromt wurde.
            Dieser Wert kann null sein, wenn es (noch) kein entsprechendes Power OFF (Nicht Bestromt) gab.
          type: string                                        
          format: date-time                   
          example: "2021-01-01T13:14:15"
          nullable: true
        powerOffInGarage:
          description: >-
            Gibt an, ob das Modul im Werkstattmodus war, als es Nicht Bestromt (abgeschaltet) wurde.
            Dieser Wert kann null sein, wenn es (noch) kein entsprechendes Power OFF (Nicht Bestromt) gab.
          type: boolean
          nullable: true
        garageTime:
          description: Anzahl Sekunden im Werkstattmodus
          type: integer
          format: int32
        overdueTime:
          description: Anzahl Sekunden Überfällig (OHNE Werkstatt)
          type: integer
          format: int32
        loginTime:
          description: Anzahl Sekunden Eingeloggt (inc. Eingeloggt in Werkstatt)
          type: integer
          format: int32
        usedTime:
          description: Anzahl Sekunden Nutzungszeit (inc. Nutzung in Werkstatt)
          type: integer
          format: int32
        event1Time:
          description: Anzahl Sekunden Ereignis 1 (incl. Werkstatt)
          type: integer
          format: int32
        event1UsedTime:
          description: Anzahl Sekunden Nutzung (inc. Werkstatt)
          type: integer
          format: int32
        event2Time:
          description: Anzahl Sekunden Ereignis 2 (incl. Werkstatt)
          type: integer
          format: int32
        event2UsedTime:
          description: Anzahl Sekunden Nutzung (inc. Werkstatt)
          type: integer
          format: int32
        event1And2Time:
          description: Anzahl Sekunden Ereignis 1 und 2 gleichzeitig (incl. Werkstatt)
          type: integer
          format: int32
        event1And2UsedTime:
          description: Anzahl Sekunden Nutzung 1 und 2 gleichzeitig (inc. Werkstatt)
          type: integer
          format: int32
        elektrolytLowTime:
          description: Anzahl Sekunden bis ELS wieder OK war, oder bis Power Off (gesamt)
          type: integer
          format: int32
        elektrolytLowUsedTime:
          description:   Während Nutzung
          type: integer
          format: int32
        elektrolytLowPowerTime:
          description: Anzahl Sekunden bis ELS nach Neubestromen wieder OK war, oder bis Power Off
          type: integer
          format: int32
        elektrolytLowPowerUsedTime:
          description:   Während Nutzung
          type: integer
          format: int32
        blsTime:
          description: Anzahl Sekunden BLS innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        blsLoginTime:
          description: Anzahl Sekunden BLS+Eingeloggt innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        blsUsedTime:
          description: Anzahl Sekunden BLS+effektiv innerhalb dieses Tages (ohne Werkstatt)
          type: integer
          format: int32
        timeCorrectionCount:
          description: Anzahl Uhr stellen
          type: integer
          format: int32
        timeErrorCount:
          description: Anzahl unerwarteter Rückwärtssprünge
          type: integer
          format: int32
        loginCount:
          description: Anzahl Eingeloggt
          type: integer
          format: int32
        event1Count:
          description: Anzahl Ereignis 1
          type: integer
          format: int32
        event2Count:
          description: Anzahl Ereignis 2
          type: integer
          format: int32
        event1And2Count:
          description: Anzahl Ereignis 1 und 2 gleichzeitig
          type: integer
          format: int32
        elektrolytLowPowerCount:
          description: Anzahl Ereignis Batterie identifiziert + ElektrolytLow
          type: integer
          format: int32
        elektrolytLowCount:
          description: Anzahl Ereignis ElektrolytLow (nach dem die Batterie schon identifiziert war)
          type: integer
          format: int32
        blsCount:
          description: Anzahl Ereignis BLS EIN
          type: integer
          format: int32
    StatLogPowerModulData:
      properties:
        module: 
          $ref: '#/components/schemas/DataElement'
        data:
          type: array
          items:
            $ref: '#/components/schemas/StatLogPowerData'
    StatLogGarageData:
      properties:
        garageOn:
          description: Zeitpunkt (in lokaler Zeit) wann das Modul in den Werkstattmodus versetzt wurde
          type: string                                        
          format: date-time                   
          example: "2021-01-01T13:14:15"
        garageOnUser:
          $ref: '#/components/schemas/ElementUser'
        garageOff:
          description: >-
            Zeitpunkt (in lokaler Zeit) wann Werkstattmodus wieder beendet wurde.
            Dieser Wert kann null sein, wenn es (noch) kein entsprechendes Werkstattmodul AUS im Logbuch gibt.
          type: string                                        
          format: date-time                   
          example: "2021-01-01T13:14:15"
          nullable: true
        garageOffUser:
          $ref: '#/components/schemas/ElementUser'
        garageTime:
          description: >-
            Die Gesamtzeit (in Sekunden), wie lange das Modul im Werkstattmodus war.
            Dieser Wert kann null sein, wenn es (noch) kein entsprechendes Werkstattmodul AUS im Logbuch gibt.
          type: integer
          format: int32
          nullable: true
    StatLogGarageModulData:
      properties:
        module: 
          $ref: '#/components/schemas/DataElement'
        data:
          type: array
          items:
            $ref: '#/components/schemas/StatLogGarageData'
    NewModulclass:
      properties:
        name:
          description: Der Name der neuen Modulklasse.
          type: string
          maxLength: 40
    AddModulclass:
      required: 
        - id
      properties:
        id:
          description: Die id dieser Modulklasse
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        expirationDate:
          description: >- 
            Gibt ggf. ein Ablaufdatum für diese Fahrzeugklasse an.
            Wird kein Ablaufdatum angegeben, wird das für die jeweilige Fahrzeugklasse definierte Default-Ablaufdatum verwendet.
          type: string
          format: date
          example: '2022-01-01'
    ModulclassValue:
      properties:
        id:
          description: Die id dieser Modulklasse
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          description: Der Name dieser Fahrzeugklasse
          type: string
          example: 'Hochregalstapler'
        icon:
          description: Das Icon dieser Modulklasse
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        assigned:
          description: Gibt an, ob dem Benutzer diese Fahrzeugklasse zugewiesen ist oder nicht.
          type: boolean
        expirationDate:
          description: >-
            Gibt das Ablaufdatum für diese Fahrzeugklasse an.
            Ist die Fahrzeugklasse nicht zugewiesen, wird hier null übergeben.
          type: string
          format: date
          example: '2022-01-01'
    Modulclass:
      properties:
        id:
          description: Die ID dieser Modulklasse
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          description: Der Name dieser Fahrzeugklasse
          type: string
          example: 'Hochregalstapler'
        icon:
          description: Das Icon dieser Modulklasse
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        description:
          description: Beschreibung dieser Modulklasse
          type: string
        defaultexpirationdate:
          description: >-
            Wird einem Benutzer diese Fahrzeugklasse zugewiesen ohne ein explizites Ablaufdatum anzugeben wird das aktuelle Datum plus dem Wert aus DefaultDate verwendet.
            Beim Erstellen einer neuen Fahrzeugklasse ist defaultexpirationdate '+1 Jahr'
          type: string
          example: 'Heute + 1 Jahr'
    Shiftmodel:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          description: Der Name dieses Schichtmodells
          type: string
          example: "Warenlieferung 3-Schicht"
        icon:
          description: Das Icon dieses Schichtmodells
          type: string
        description:
          description: Eine optionale Beschreibung dieses Schichtmodells
          type: string                                        
        shifts:
          description: Eine Liste aller Schichten in diesem Schichtmodell
          type: array
          items:
            $ref: '#/components/schemas/Shift'
    Shift:
      properties:
        number:
          description: Alle Schichten sind von 1 bis maximal 4 durchnummeriert
          type: integer
          minimum: 1
          maximum: 4
        name:
          description: Der Name dieser Schicht
          type: string
          example: "Frühschicht"
        begin:
          description: Uhrzeit, wann diese Schicht beginnt
          type: string
          format: time
          example: '06:00'
        end:
          description: Uhrzeit, wann diese Schicht endet
          type: string
          format: time
          example: '14:00'
        pause:
          description: Pausezeit (in Minuten) während dieser Schicht
          type: integer
          example: 70
        monday:
          description: Gibt an, ob diese Schicht an einem Montag stattfindet
          type: boolean
        tuesday:
          description: Gibt an, ob diese Schicht an einem Dienstag stattfindet
          type: boolean
        wednesday:
          description: Gibt an, ob diese Schicht an einem Mttwoch stattfindet
          type: boolean
        thursday:
          description: Gibt an, ob diese Schicht an einem Donnerstag stattfindet
          type: boolean
        friday:
          description: Gibt an, ob diese Schicht an einem Freitag stattfindet
          type: boolean
        saturday:
          description: Gibt an, ob diese Schicht an einem Samstag stattfindet
          type: boolean
        sunday:
          description: Gibt an, ob diese Schicht an einem Sonntag stattfindet
          type: boolean
        hollidaylist:
          description: Gibt die ID einer Feiertagsliste an. An den Tagen welche in dieser Liste enthalten sind, findet diese Schicht nicht statt. Sehen Sie dazu auch den Befehl '/settings/holidaylists'
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
    Holidaylist:
      properties:
        id:
          type: string
          format: uuid
          example: '604B1527-BAEB-4845-8699-CC666A065404'
        name:
          description: Der Name dieses Schichtmodells
          type: string
          example: "Warenanlieferung 3-Schicht"
        icon:
          description: Das Icon dieses Schichtmodells
          type: string
        description:
          description: Eine optionale Beschreibung dieses Schichtmodells
          type: string                                        
        holidays:
          description: Eine Liste aller Feiertage in dieser Feiertagsliste
          type: array
          items:
            type: object
            properties:
              holiday:
                description: Datum des Feiertags
                type: string
                format: date
                example: "2022-01-01"
              name:
                description: Name des Feiertags
                type: string
                example: 'Neujahr'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    apikeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
    bearerAuth:
      type: http
      scheme: bearer
