Zum Inhalt springen
Grafana Panels Docs

Inputs

generateInputs(id, config) rendert Eingaben für IOTA-Attribute und Commands. Alle Felder mit data-iota werden von extractData() erfasst.

FeldRequiredTypDefaultBeschreibung
typeIdJastring-Blocktyp, z.B. block_inputs oder block_mail_inputs.
typeConfigJaobject-Block-spezifische Konfiguration.
saveButtonNeinActionConfig-Globaler Speichern-Button.
actionButtonsNeinActionConfig[]-Zusätzliche Action Buttons.
layoutNein{ type?: 'splitActionButtons'; actionButtonsPosition?: 'left' | 'right' }-Layout für Action Buttons.

Actions werden nur im Input-Kontext genutzt: in saveButton, actionButtons, input.action.onclick oder onchange.

Fügt den Inhalt eines Mail-Inputs der Chip-Liste unter dem Feld hinzu.

  • Validiert einzelne Mail-Adressen.
  • Ignoriert Duplikate.
  • Leert das Eingabefeld nach erfolgreichem Hinzufügen.
{
  typeId: 'addMail',
}

Synchronisiert das Offline-Zeitfeld mit der Offline-Checkbox.

  • Setzt die Checkbox auf aktiv, wenn der Input nicht leer und nicht 0 ist.
{
  typeId: 'offlineInput',
}

Setzt beim Aktivieren der Offline-Checkbox einen Default-Wert in das Offline-Zeitfeld.

FeldRequiredTypDefaultBeschreibung
defaultValueNeinstring | number48Wert in Stunden, der in das Offline-Zeitfeld geschrieben wird.
{
  typeId: 'offlineCheckbox',
  config: {
    defaultValue: initVarGraf('${OFFLINE}', 2),
  },
}

Aktualisiert Optionen, Wert und Disabled-State eines Ziel-Selects anhand eines Quell-Selects.

FeldRequiredTypDefaultBeschreibung
targetIotaVarJastring-data-iota des Ziel-Selects.
defaultValueNeinstring-Fallback-Wert, wenn keine Regel passt.
rulesNeinArray<{ when: string; options?: Array<{ label: string; value: string }>; value?: string; disabled?: boolean }>-Regeln pro Quellwert.
{
  typeId: 'updateSelectDependency',
  config: {
    targetIotaVar: 'alarm_level',
    rules: [
      {
        when: 'advanced',
        options: [{ label: 'High', value: 'high' }],
      },
    ],
  },
}

Speichert alle Inputs, Selects, Checkboxes und Mail-Chips mit data-iota auf dem aktuellen Device.

  • Validiert Number-Felder vor dem Speichern.
  • Sendet PATCH an /Device/${deviceid}.
  • Aktualisiert danach das Dashboard.
{
  typeId: 'saveAttributes',
}

Speichert den Wert eines Input-Feldes zuerst im Userlog und danach als description am Device. Die Notiz verwendet den normalen block_inputs; ein eigener Notiz-Block ist nicht notwendig.

FeldRequiredTypDefaultBeschreibung
deviceIdNeinstring | number${deviceid}Device, dessen Beschreibung aktualisiert wird.
iotaVarNeinstringnoteInput-Feld, dessen Wert gespeichert wird.
savingButtonNeinstringSpeichert …Button-Text während der Schreibzugriffe.
serialNeinstring''Seriennummer im Userlog-Eintrag.
userLogDeviceIdNeinstring | number5DeviceId für den Userlog-Result.
  • Leere Notizen, Konfigurationsfehler und API-Fehler werden mit myAlert() angezeigt.
  • Während des Speicherns ist der Button deaktiviert.
  • Nach einem erfolgreichen Userlog-Eintrag wird { description: note } am Device gespeichert.
  • Schlägt nur das Aktualisieren der Device-Beschreibung fehl, wird der Teilerfolg ausdrücklich per myAlert() angezeigt.
  • Bei Erfolg wird das Input geleert, notes.success per myAlert() angezeigt und das Dashboard nach dem Device-Update neu geladen. Der Userlog-Request löst keinen Reload aus.
  • Liegt saveButton im selben inputAttributes-Eintrag wie das Feld, wird der Button rechts neben dem Feld gerendert.
var config = {
  typeConfig: {
    inputAttributes: [
      {
        input: {
          autocomplete: 'off',
          iotaVar: 'note',
          label: translate('notes.label'),
          maxLength: 1000,
          placeholder: translate('notes.placeholder'),
          required: true,
          type: 'textarea',
        },
        saveButton: {
          config: {
            deviceId: '${deviceid}',
            serial: initVarGraf('${EDITVARS}', 0),
            userLogDeviceId: 5,
          },
          typeId: 'saveNote',
        },
      },
    ],
  },
  typeId: 'block_inputs',
};

generateInputs(id, config);

Speichert Attribute, wechselt den DeviceType und leitet danach auf das neue Details-Dashboard weiter.

FeldRequiredTypDefaultBeschreibung
changeDeviceType.iotaVarJastring-Attribut, dessen Wert für die Typauswahl verwendet wird.
changeDeviceType.arrayJaArray<{ value: string; typeId: string | number }>-Mapping von Attributwert zu neuem DeviceType.
{
  typeId: 'changeDeviceType',
  config: {
    changeDeviceType: {
      iotaVar: 'measuring_direction',
      array: [
        { value: 'consumption', typeId: 20437 },
        { value: 'supply', typeId: 20438 },
      ],
    },
  },
}

Sendet einen IOTA Command mit den Werten der Felder im aktuellen Input-Block. Die Config liegt am jeweiligen saveButton, in einem Eintrag von actionButtons oder an einer Feld-Action.

FeldRequiredTypDefaultBeschreibung
commandType | typeJastring-Command-Typ. commandType hat Vorrang; type ist der Legacy-Alias.
deviceId | deviceidNeinstring${deviceid}Zielgerät. deviceId hat Vorrang; deviceid ist der Legacy-Alias.
parameterMapNeinRecord<string, string>-Wählt Input-iotaVars aus und benennt sie für den Command um.
staticParameters | parametersNeinArray<{ name: string; value: unknown }>-Hängt feste Parameter an. staticParameters hat Vorrang; parameters ist der Legacy-Alias.
parameterTransformNein{ type: 'thresholdAlarm'; low?: string; high?: string; active?: string; control?: string }-Ersetzt den normalen Parameteraufbau durch den angegebenen Transform. Unterstützt thresholdAlarm.

Die jeweils erstgenannten Feldnamen sind die empfohlenen Varianten. Statische Parameter akzeptieren zusätzlich die Legacy-Schreibweisen Name und Value.

  1. Alle Number-Inputs im aktuellen Block werden anhand von min, max und step validiert. Bei einem Fehler wird kein Command gesendet.
  2. extractData() liest alle Felder mit data-iota aus demselben Block aus.
  3. Die Parameter werden entweder standardmäßig oder über parameterTransform aufgebaut.
  4. Der Command wird als PUT /Commands?tenantId=${tenantid} gesendet. Ein erfolgreicher Request zeigt die Erfolgsmeldung und aktualisiert das Dashboard.

Die erzeugte Payload hat immer diese Form:

{
  deviceId: 'target-device-id',
  parameters: [{ name: 'state', value: '1' }],
  type: 'out_set',
}

Ohne unterstützten parameterTransform gelten folgende Regeln:

  • Ohne parameterMap wird jedes extrahierte Feld als { name: iotaVar, value } übernommen.
  • Mit parameterMap werden nur die dort aufgeführten iotaVars übernommen. Der Map-Key ist die Quell-iotaVar, der Map-Wert der Parametername im Command.
  • staticParameters werden anschließend in der angegebenen Reihenfolge angehängt.
  • Parameter werden nicht dedupliziert. Configs sollten deshalb keine Namen mehrfach erzeugen.
{
  typeId: 'saveCommand',
  config: {
    commandType: 'out_set',
    parameterMap: {
      relay_state: 'state',
    },
    staticParameters: [{ name: 'source', value: 'grafana' }],
  },
}

Bei einem Feld mit iotaVar: 'relay_state' und dem Wert '1' entstehen daraus:

[
  { name: 'state', value: '1' },
  { name: 'source', value: 'grafana' },
];

thresholdAlarm bildet zwei optionale Schwellwerte und den Aktiv-Status auf die von IOTA erwarteten Alarmparameter ab.

FeldDefaultBedeutung
lowthreshold_lowiotaVar des unteren Schwellwerts und zugleich Name dieses Parameters im Command.
highthreshold_highiotaVar des oberen Schwellwerts und zugleich Name dieses Parameters im Command.
activealarm_activeiotaVar des Aktiv-Status. Dieses Feld wird nur ausgewertet und nicht als Parameter mitgesendet.
controlctrlName des erzeugten Steuerparameters.

Sobald dieser Transform aktiv ist, ersetzt er den Standard-Parameteraufbau vollständig: parameterMap, staticParameters und parameters werden nicht berücksichtigt.

Der Transform behandelt undefined, null und '' als leeren Schwellwert. Andere Werte, einschließlich 0, gelten als gesetzt. Für den Aktiv-Status deaktiviert exakt ein zu '0' konvertierbarer Wert den Alarm.

Aktiv-StatusUnterer WertOberer WertErzeugte Parameter
'0'beliebigbeliebig{ name: control, value: 'disabled' }
nicht '0'gesetztgesetztlow, high, danach { name: control, value: 'below or above' }
nicht '0'gesetztleerlow, danach { name: control, value: 'below' }
nicht '0'leergesetzthigh, danach { name: control, value: 'above' }
nicht '0'leerleerKeine Parameter
{
  typeId: 'saveCommand',
  config: {
    commandType: 'threshold_alarm',
    parameterTransform: {
      type: 'thresholdAlarm',
    },
  },
}

Bei threshold_low: '10', threshold_high: '20' und alarm_active: '1' wird folgende Parameterliste gesendet:

[
  { name: 'threshold_low', value: '10' },
  { name: 'threshold_high', value: '20' },
  { name: 'ctrl', value: 'below or above' },
];
{
  typeId: 'saveCommand',
  config: {
    commandType: 'temperature_alarm',
    parameterTransform: {
      type: 'thresholdAlarm',
      low: 'temperature_min',
      high: 'temperature_max',
      active: 'temperature_alarm_active',
      control: 'temperature_ctrl',
    },
  },
}

Die zu low, high und active angegebenen Namen müssen den iotaVar-Werten der Felder im selben Input-Block entsprechen. control muss dagegen dem gewünschten Parameter-Namen des IOTA Commands entsprechen.

Speichert zuerst Attribute auf dem aktuellen Device ohne Alert oder Reload und sendet danach einen Command. Der Command verwendet denselben Parameteraufbau wie saveCommand, einschließlich parameterTransform: { type: 'thresholdAlarm' }.

FeldRequiredTypDefaultBeschreibung
commandType | typeJastring-Command-Typ.
deviceId | deviceidNeinstring${deviceid}Zielgerät des Commands.
parameterMapNeinRecord<string, string>-Mappt gespeicherte Rohdaten auf Command-Parameter.
staticParameters | parametersNeinArray<{ name: string; value: unknown }>-Zusätzliche feste Parameter.
parameterTransformNein{ type: 'thresholdAlarm'; low?: string; high?: string; active?: string; control?: string }-Alternativer Parameteraufbau wie bei saveCommand.
  • Der Command wird nur gesendet, wenn das Attributspeichern erfolgreich war.
  • Die Attribute werden immer auf ${deviceid} gespeichert. deviceId beziehungsweise deviceid ändert nur das Ziel des nachfolgenden Commands.
{
  typeId: 'saveAttributesAndCommand',
  config: {
    commandType: 'threshold_set',
    parameterMap: {
      threshold: 'value',
    },
  },
}

Sendet je nach Checkbox-Wert einen von zwei Command-Typen.

FeldRequiredTypDefaultBeschreibung
type_1Jastring-Command-Typ bei Wert 1.
type_0Jastring-Command-Typ bei Wert 0.
deviceId | deviceidNeinstring${deviceid}Zielgerät.
  • Erwartet exakt ein extrahiertes Feld, sonst wird ein Fehler angezeigt.
{
  typeId: 'saveCommandType',
  config: {
    type_1: 'relay_on',
    type_0: 'relay_off',
    deviceId: 'target-device-id',
  },
}

Speichert nur gemappte Attribute. Nützlich, wenn UI-Feldnamen nicht den IOTA-Attributen entsprechen.

FeldRequiredTypDefaultBeschreibung
attributeMapJaRecord<string, string>-Mapping von Input-iotaVar zu Zielattribut.
{
  typeId: 'saveAttributesMapped',
  config: {
    attributeMap: {
      ui_threshold: 'temperature_threshold',
    },
  },
}

Speichert dieselben Attribute auf mehrere Devices aus einer Grafana-Variable.

FeldRequiredTypDefaultBeschreibung
usecaseDevicesVarGrafJastring-Kommagetrennte DeviceIds, typischerweise aus einer Grafana-Variable.
  • Zeigt vorab einen Zeit-Hinweis.
  • Sendet Updates nacheinander mit kurzem Delay.
{
  typeId: 'saveAttributesToMulitpleDevices',
  config: {
    usecaseDevicesVarGraf: '${all_usecase_devices}',
  },
}

Standard-Eingabefeld für Text, längere Texte, Zahlen, Passwörter, E-Mail und Selects.

FeldRequiredTypDefaultBeschreibung
input.labelNeinstring-Label oberhalb des Feldes.
input.placeholderNeinstring-Placeholder im Feld.
input.initNeinstring | number-Initialer Wert, meistens aus initVarGraf().
input.iotaVarJastring-IOTA-Attribut. Kommagetrennte Werte schreiben denselben Wert auf mehrere Attribute.
input.typeNein'text' | 'textarea' | 'email' | 'number' | 'password' | 'select'textHTML-Input-Typ. Bei select wird createSelectField genutzt.
input.minNeinnumber-Minimalwert für Number-Validierung.
input.maxNeinnumber-Maximalwert für Number-Validierung.
input.maxLengthNeinnumber-Maximale Textlänge für Input und Textarea.
input.stepNeinnumber | string-Schrittweite für Number-Validierung.
input.autocompleteNeinstring-Wert für das native autocomplete-Attribut.
input.requiredNeinbooleanfalseMarkiert das Feld als erforderlich; Save- und Command-Actions validieren den Wert.
input.iconNeinstring-Classic-Regular-Icon links im Feld; akzeptiert Alias oder direkten FA-Slug.
input.onchangeNeinActionConfig-Action bei Wert-Änderung.
input.actionNein{ icon: string; onclick?: ActionConfig }-Classic-Regular-Icon rechts; akzeptiert Alias oder direkten FA-Slug.
input.optionsBedingtArray<{ label: string; value: string }>-Optionen, wenn input.type = select ist.
input.disabledNeinboolean-Deaktiviert Select-Inputs.
input.shortFieldNeinbooleanfalseBegrenzt das Feld auf 16rem. Die Zeile übernimmt die 32rem-Standardbreite und nutzt zwischen kurzen Feldern einen festen Abstand.
{
  input: {
    label: 'Alarm Schwellwert [°C]',
    iotaVar: 'temp_threshold',
    type: 'number',
    min: -10,
    max: 50,
    step: 0.5,
    init: initVarGraf('${THRESHOLD}', 0),
  },
}
{
  input: {
    label: 'E-Mail',
    iotaVar: 'notification_emails',
    type: 'email',
    icon: 'mail',
    action: {
      icon: 'add',
      onclick: { typeId: 'addMail' },
    },
  },
}
{
  input: {
    iotaVar: 'description',
    label: 'Beschreibung',
    maxLength: 1000,
    type: 'textarea',
  },
}

Eigenes Select-Feld oder Input mit type select.

FeldRequiredTypDefaultBeschreibung
select.labelNeinstring-Label oberhalb des Selects.
select.initNeinstring-Initial ausgewählter Wert.
select.iotaVarJastring-IOTA-Attribut für den Select-Wert.
select.optionsJaArray<{ label: string; value: string }>-Optionen.
select.onchangeNeinActionConfig-Action, z.B. updateSelectDependency.
select.disabledNeinboolean-Rendert den Select deaktiviert.
{
  select: {
    label: 'Messrichtung',
    iotaVar: 'measuring_direction',
    init: initVarGraf('${INPUTS}', 1),
    options: [
      { label: 'Verbrauch', value: 'consumption' },
      { label: 'Einspeisung', value: 'supply' },
    ],
  },
}
{
  select: {
    label: 'Modus',
    iotaVar: 'mode',
    options: [
      { label: 'Standard', value: 'standard' },
      { label: 'Erweitert', value: 'advanced' },
    ],
    onchange: {
      typeId: 'updateSelectDependency',
      config: {
        targetIotaVar: 'alarm_level',
        rules: [
          {
            when: 'advanced',
            options: [{ label: 'High', value: 'high' }],
          },
        ],
      },
    },
  },
}

Toggle, der als 1 oder 0 extrahiert und gespeichert wird.

FeldRequiredTypDefaultBeschreibung
checkbox.labelNeinstring-Text neben der Checkbox.
checkbox.initNeinstring | number-0 = aus, 1 = an.
checkbox.iotaVarJastring-IOTA-Attribut.
checkbox.onchangeNeinActionConfig-Action bei Statuswechsel.
checkbox.centerNeinbooleanfalseZentriert die Checkbox.
{
  checkbox: {
    label: 'Alarm aktiv',
    iotaVar: 'alarm_active',
    init: initVarGraf('${ALARMS}', 0),
  },
  saveButton: { typeId: 'saveAttributes' },
}

Optionaler zweiter Toggle in demselben Feld.

FeldRequiredTypDefaultBeschreibung
checkbox2.labelNeinstring-Text neben der zweiten Checkbox.
checkbox2.initNeinstring | number-0 = aus, 1 = an.
checkbox2.iotaVarJastring-IOTA-Attribut.
checkbox2.onchangeNeinActionConfig-Action bei Statuswechsel.
{
  checkbox: {
    label: 'Eingang',
    iotaVar: 'io_in',
    init: initVarGraf('${IO}', 0),
  },
  checkbox2: {
    label: 'Ausgang',
    iotaVar: 'io_out',
    init: initVarGraf('${IO}', 1),
  },
}

Checkbox, die nur aktiv ist, wenn checkbox oder checkbox2 aktiv ist.

FeldRequiredTypDefaultBeschreibung
dependentCheckbox.labelNeinstring-Text neben der abhängigen Checkbox.
dependentCheckbox.initNeinstring | number-Initialwert. Wird ignoriert, wenn keine Hauptcheckbox aktiv ist.
dependentCheckbox.iotaVarJastring-IOTA-Attribut.
{
  checkbox: {
    label: 'Alarm aktiv',
    iotaVar: 'alarm_active',
    init: initVarGraf('${ALARM}', 0),
  },
  dependentCheckbox: {
    label: 'Push zusätzlich aktivieren',
    iotaVar: 'alarm_push',
    init: initVarGraf('${ALARM}', 1),
  },
}

Statische Textanzeige für Werte, die nicht bearbeitet oder gespeichert werden.

FeldRequiredTypDefaultBeschreibung
display.labelNeinstring-Label oberhalb des Textes.
display.valueJastring | number-Anzuzeigender Textwert.
display.emptyTextNeinstring-Text, wenn value leer ist.
{
  display: {
    emptyText: 'Keine Einstellung vorhanden!',
    label: 'Alarmeinstellung auf dem Sensor:',
    value: initVarGraf('${SENSOR_THRESHOLD}', 0),
  },
}

E-Mail-Eingabe mit Chip-Liste, Semikolon-Trennung und Validierung.

FeldRequiredTypDefaultBeschreibung
mail.labelNeinstring-Label des Mail-Feldes.
mail.initNeinstring-Initiale Mail-Liste, getrennt mit Semikolon.
mail.iotaVarJastring-IOTA-Attribut für die gespeicherte Semikolon-Liste.
{
  mail: {
    label: 'Benachrichtigungen an:',
    iotaVar: 'notification_emails',
    init: initVarGraf('${MAILS}', 0),
  },
}

Zusätzliche Buttons unter oder neben dem Input-Inhalt.

FeldRequiredTypDefaultBeschreibung
actionButtons[].labelJastring-Button-Text.
actionButtons[].typeIdJaAction typeId-Action aus der Action-Referenz.
layout.typeNein'splitActionButtons'-Teilt Inhalt und Buttons in zwei Spalten.
layout.actionButtonsPositionNein'left' | 'right'rightPosition der Buttons im Split-Layout.
var config = {
  typeId: 'block_inputs',
  layout: {
    type: 'splitActionButtons',
    actionButtonsPosition: 'right',
  },
  actionButtons: [
    {
      label: 'Relais setzen',
      typeId: 'saveCommand',
      config: { commandType: 'relay_set' },
    },
  ],
  typeConfig: {
    inputAttributes: [{ input: { label: 'Status', iotaVar: 'relay_state' } }],
  },
};

Eine Standardzeile mit beliebigen Input-, Select-, Checkbox- oder Display-Feldern.

Config-Pfad: typeConfig.inputAttributes

FeldRequiredTypDefaultBeschreibung
saveButtonNeinActionConfig-Globaler Speichern-Button unterhalb aller Felder.
typeConfig.inputAttributesJaArray<FieldConfig>-Felder in einer Zeile.
typeConfig.inputAttributes[].saveButtonNeinActionConfig-Speichern-Button rechts neben dem zugehörigen Feld.
var config = {
  typeId: 'block_inputs',
  saveButton: { typeId: 'saveAttributes' },
  typeConfig: {
    inputAttributes: [
      { input: { label: 'Name', iotaVar: 'serial', init: initVarGraf('${EDITVARS}', 0) } },
      {
        input: {
          label: 'Installationsort',
          iotaVar: 'installation_place',
          init: initVarGraf('${EDITVARS}', 1),
        },
      },
      {
        input: { label: 'Kommentar', iotaVar: 'description', init: initVarGraf('${EDITVARS}', 2) },
      },
    ],
  },
};

Standard-Mail-Konfiguration mit optionaler Checkbox, zweiter Checkbox und dependentCheckbox.

Config-Pfad: typeConfig.mailConfig

FeldRequiredTypDefaultBeschreibung
typeConfig.mailConfig.mailJaMailConfig-Mail-Feld.
typeConfig.mailConfig.checkboxNeinCheckboxConfig-Hauptcheckbox.
typeConfig.mailConfig.checkbox2NeinCheckboxConfig-Zweite Hauptcheckbox.
typeConfig.mailConfig.dependentCheckboxNeinCheckboxConfig-Nur aktiv, wenn checkbox oder checkbox2 aktiv ist.
typeConfig.mailConfig.saveButtonNeinActionConfig-Speichern für die Mail-Zeile.
var config = {
  typeId: 'block_mail',
  typeConfig: {
    mailConfig: {
      mail: {
        label: 'Report E-Mails',
        iotaVar: 'report_emails',
        init: initVarGraf('${REPORT}', 1),
      },
      checkbox: {
        label: 'Reporting aktivieren',
        iotaVar: 'report_active',
        init: initVarGraf('${REPORT}', 0),
      },
      saveButton: { typeId: 'saveAttributes' },
    },
  },
};

Zwei Spalten: Attributzeilen und Mail-Konfiguration. Optional kann die Reihenfolge gedreht werden.

Config-Pfad: typeConfig

FeldRequiredTypDefaultBeschreibung
typeConfig.rowsJaArray<RowConfig>-Attributzeilen.
typeConfig.mailConfigJaMailConfig-Mail-Konfiguration.
typeConfig.reverseColsNeinbooleanfalseDreht die Spaltenreihenfolge.
FeldRequiredTypDefaultBeschreibung
attributesJaArray<FieldConfig>[]Felder, die innerhalb der Row gerendert werden.
headerNeinstring-Zentrierte Überschrift der Row.
extraTopMarginNeinbooleanfalseFügt oberhalb der Row zusätzlichen Abstand ein.
hideDividerBeforeNeinbooleanfalseBlendet den Trenner zur vorherigen Row aus.
hideDividerAfterNeinbooleanfalseBlendet den Trenner zur nachfolgenden Row aus.

Zwischen zwei Rows wird kein Trenner angezeigt, sobald hideDividerAfter an der vorherigen Row oder hideDividerBefore an der nachfolgenden Row gesetzt ist. Vor der ersten und nach der letzten Row wird grundsätzlich kein Trenner erzeugt. Ein display innerhalb von attributes erzeugt eine reine Textzeile.

var config = {
  typeId: 'block_mail_inputs',
  saveButton: { typeId: 'saveAttributes' },
  typeConfig: {
    rows: [
      {
        attributes: [
          {
            input: {
              iotaVar: 'temp_min',
              label: 'unterer Alarm',
              shortField: true,
              step: 0.5,
              type: 'number',
            },
          },
          {
            input: {
              iotaVar: 'temp_max',
              label: 'oberer Alarm',
              shortField: true,
              step: 0.5,
              type: 'number',
            },
          },
        ],
        header: 'Temperatur [°C]',
      },
      {
        attributes: [
          {
            display: {
              emptyText: 'Keine Einstellung vorhanden!',
              label: 'Alarmeinstellung auf dem Sensor:',
              value: initVarGraf('${SENSOR_THRESHOLD}', 0),
            },
          },
        ],
        hideDividerBefore: true,
      },
    ],
    mailConfig: { mail: { label: 'Alarm Mails', iotaVar: 'alarm_mails' } },
    reverseCols: true,
  },
};

Spezialblock für Offline-Benachrichtigungen mit Mail-Liste, Checkbox und Offline-Zeit.

Config-Pfad: typeConfig.offline

FeldRequiredTypDefaultBeschreibung
typeConfig.offline.checkboxJaCheckboxConfig-Aktiviert Offline-Benachrichtigung.
typeConfig.offline.inputJaInputConfig-Offline-Zeit in Stunden; wird beim Speichern als Minutenwert geschrieben.
typeConfig.offline.mailJaMailConfig-Mail-Liste.
typeConfig.offline.saveButtonNeinActionConfig{ typeId: 'saveAttributes' }Speichern der Offline-Zeit.
typeConfig.reverseColsNeinbooleanfalseDreht Mail- und Offline-Spalte.
var config = {
  typeId: 'block_offline',
  typeConfig: {
    offline: {
      checkbox: { label: 'Offline Alarm aktiv', onchange: { typeId: 'offlineCheckbox' } },
      input: {
        label: 'Offline-Zeit [h]',
        iotaVar: 'offline_time',
        onchange: { typeId: 'offlineInput' },
      },
      mail: { iotaVar: 'offline_emails', init: initVarGraf('${OFFLINE}', 1) },
    },
  },
};

Eine horizontale Reihe aus Checkboxes mit optionalem Save-Button.

Config-Pfad: typeConfig.checkboxRow

FeldRequiredTypDefaultBeschreibung
typeConfig.checkboxRow.checkboxesJaArray<CheckboxConfig>-Checkboxes in der Reihe.
typeConfig.checkboxRow.saveButtonNeinActionConfig-Speicherbutton unterhalb der Reihe.
var config = {
  typeId: 'block_checkbox_row',
  typeConfig: {
    checkboxRow: {
      checkboxes: [
        { label: 'Eingang', iotaVar: 'io_in', init: initVarGraf('${IO}', 0) },
        { label: 'Ausgang', iotaVar: 'io_out', init: initVarGraf('${IO}', 1) },
      ],
      saveButton: { typeId: 'saveAttributes' },
    },
  },
};

Container für mehrere Custom Columns.

Config-Pfad: typeConfig.custom_columns

FeldRequiredTypDefaultBeschreibung
typeConfig.custom_columnsJaArray<CustomColumnConfig>-Liste von Custom Columns.
var config = {
  typeId: 'block_custom',
  typeConfig: {
    custom_columns: [
      {
        typeId: 'custom_column_inputs',
        typeConfig: {
          headers: ['unterer Alarm', 'oberer Alarm'],
          rows: [
            {
              title: 'Distanz [m]',
              inputs: [
                { iotaVar: 'alarm_low', type: 'number', step: 0.01 },
                { iotaVar: 'alarm_high', type: 'number', step: 0.01 },
              ],
            },
          ],
        },
      },
    ],
  },
};

Mail-Spalte innerhalb von block_custom.

Config-Pfad: typeConfig.mailConfig

FeldRequiredTypDefaultBeschreibung
typeConfig.mailConfigJaMailConfig-Mail-Konfiguration.
{
  typeId: 'custom_column_mail',
  typeConfig: {
    mailConfig: {
      mail: {
        label: 'Alarm Mails',
        iotaVar: 'alarm_mails',
        init: initVarGraf('${MAILS}', 0),
      },
      saveButton: { typeId: 'saveAttributes' },
    },
  },
}

Tabellarisches Input-Grid mit Spaltenüberschriften und Zeilentiteln.

Config-Pfad: typeConfig

FeldRequiredTypDefaultBeschreibung
typeConfig.headersJaArray<string>-Spaltenüberschriften.
typeConfig.rowsJaArray<{ title: string; inputs: InputConfig[] }>-Grid-Zeilen.
{
  typeId: 'custom_column_inputs',
  typeConfig: {
    headers: ['untere Warnung', 'obere Warnung'],
    rows: [
      {
        title: 'Temperatur [°C]',
        inputs: [
          { iotaVar: 'temp_warning_low', type: 'number', step: 0.5 },
          { iotaVar: 'temp_warning_high', type: 'number', step: 0.5 },
        ],
      },
    ],
  },
}

custom_column_checkbox_row - Custom Column Checkbox Row

Abschnitt betitelt „custom_column_checkbox_row - Custom Column Checkbox Row“

Checkbox-Reihe innerhalb von block_custom.

Config-Pfad: typeConfig.checkboxRow

FeldRequiredTypDefaultBeschreibung
typeConfig.checkboxRow.checkboxesJaArray<CheckboxConfig>-Checkboxes.
{
  typeId: 'custom_column_checkbox_row',
  typeConfig: {
    checkboxRow: {
      checkboxes: [
        { label: 'Eingang', iotaVar: 'io_in' },
        { label: 'Ausgang', iotaVar: 'io_out' },
      ],
      saveButton: { typeId: 'saveAttributes' },
    },
  },
}

custom_column_checkbox_input - Custom Column Checkbox Input

Abschnitt betitelt „custom_column_checkbox_input - Custom Column Checkbox Input“

Kombiniert eine Checkbox mit einem Input in einer Custom Column.

Config-Pfad: typeConfig

FeldRequiredTypDefaultBeschreibung
typeConfig.checkboxJaCheckboxConfig-Checkbox.
typeConfig.inputJaInputConfig-Input.
typeConfig.saveButtonNeinActionConfig-Optionaler Speicherbutton.
{
  typeId: 'custom_column_checkbox_input',
  typeConfig: {
    checkbox: {
      label: 'Grenzwert aktiv',
      iotaVar: 'threshold_active',
      init: initVarGraf('${THRESHOLD}', 0),
    },
    input: {
      label: 'Grenzwert',
      iotaVar: 'threshold_value',
      type: 'number',
      step: 0.5,
      init: initVarGraf('${THRESHOLD}', 1),
    },
    saveButton: { typeId: 'saveAttributes' },
  },
}