IoBroker JSON-Konfiguration: Ein Leitfaden für Anfänger
Diese Anleitung erklärt, wie Sie Konfigurationsoptionen für Ihren ioBroker-Adapter mithilfe von JSON definieren. Dieser Ansatz bietet eine benutzerfreundlichere und flexiblere Möglichkeit, die Adaptereinstellungen innerhalb der ioBroker-Administrationsoberfläche zu verwalten.
Was Sie benötigen
- ioBroker Admin Version 6 (oder neuer)
- Grundlegendes Verständnis der JSON-Syntax
Vorteile der JSON-Konfiguration
- Verbesserte Benutzerfreundlichkeit bei der Konfiguration von Adaptern
- Einfachere Integration komplexer Konfigurationsoptionen
- Klare Trennung zwischen Adaptercode und Konfiguration
Erste Schritte
- Konfigurationsdatei definieren:
- Erstellen Sie eine Datei namens
jsonConfig.jsonoderjsonConfig.json5im Admin-Verzeichnis Ihres Adapters. - JSON5 ist eine Erweiterung von JSON, die Kommentare ermöglicht und dadurch die Lesbarkeit der Konfigurationsdatei verbessert.
- JSON-Konfiguration aktivieren:
- Fügen Sie in der
io-package.json-Datei Ihres Adapters die folgende Zeile unter dem Abschnittcommonhinzu:
{
"common": {
"adminUI": {
"config": "json"
}
}
}
- Struktur der Konfigurationsdatei:
Die Konfigurationsdatei definiert eine hierarchische Struktur von Registerkarten, Bereichen und Steuerelementen. Jedes Element verfügt über spezifische Attribute, die sein Verhalten und sein Erscheinungsbild in der Admin-Oberfläche bestimmen.
jsonConfig stellt automatisch sicher, dass die gesammelten Daten als Konfigurationsdaten für den Adapter aufgezeichnet und intern gespeichert werden, sodass sie im Adapter abgerufen und weiterverarbeitet werden können.
Das folgende Beispiel würde das folgende Konfigurationsobjekt erzeugen:
{
options1: {
myPort: 1234,
options: {
myType: 1,
},
myBool: false,
},
}
Attributnamen, die mit "_" beginnen, werden nicht im Objekt gespeichert.
Beispiel einer jsonConfig mit mehreren Tabs
{
"type": "tabs",
"items": {
"options1": {
"type": "panel",
"label": "Tab1",
"icon": "base64 svg", // optional
"items": {
myPort: {
"type": "number",
"min": 1,
"max": 65565,
"label": "Number",
"sm": 6, // 1 - 12
"validator": "!!data.name", // else error
"hidden": "data.myType === 1", // hidden if myType is 1
"disabled": "data.myType === 2" // disabled if myType is 2
},
"options.myType": { // name could support more than one level
"newLine": true, // must start from new row
"type": "select",
"label": "Type",
"sm": 6, // 1 - 12
"options": [
{"label": "option 1", "value": 1},
{"label": "option 2", "value": 2}
]
},
"myBool": {
"type": "checkbox",
"label": "My checkbox",
},
"_notSaved":"abc"
}
},
"tab2": {
"label": "Tab2",
"type": "panel",
"disabled": "data.myType === 1",
"hidden": "data.myType === 2",
}
},
}
Weitere Beispiele finden sich in vielen anderen Adaptern auf GitHub im jeweiligen Admin-Verzeichnis.
Unterstützung für die Entwicklung von Tools
VS Code
Um die Validierung der jsonConfig in VS Code zu aktivieren, muss der folgende Abschnitt zur Datei ".vscode/settings.json" hinzugefügt werden.
"json.schemas": [
{
"fileMatch": ["admin/jsonConfig.json", "admin/jsonCustom.json", "admin/jsonTab.json"],
"url": "https://raw.githubusercontent.com/ioBroker/ioBroker.admin/master/packages/jsonConfig/schemas/jsonConfig.json"
}
]
Gemeinsame Steuerelemente
Eine jsonConfig besteht aus mehreren hierarchisch strukturierten Elementen. Jedes Element kann einem der folgenden Typen angehören. Einige Elemente können weitere untergeordnete Elemente enthalten.
Sie können fast alle Komponenten in Aktion sehen, wenn Sie diesen Adapter testen: jsonconfig-demo.\ Sie können ihn über das GitHub-Symbol im Adminbereich installieren, indem Sie iobroker.jsonconfig-demo auf der Registerkarte npm eingeben.
accordion: Akkordeon-Element für ausklappbare Inhalte (Admin 6.6.0 oder neuer)alive: Zeigt an, ob eine Instanz ausgeführt wird (schreibgeschützt)autocomplete: Eingabefeld mit AutovervollständigungsvorschlägenautocompleteSendTo: Autocomplete-Steuerelement mit Instanzwerten zum Senden von Datencertificate: Verwaltet Zertifikate für sichere VerbindungencertificateCollection: Wählt eine Sammlung für Let's Encrypt-Zertifikate auscertificates: Universeller Typ zur Verwaltung verschiedener Zertifikatstypen (ab Admin 6.4.0)checkbox: Kontrollkästchen für boolesche WertecheckDocker: Spezielle Komponente zur Überprüfung, ob Docker verfügbar ist, und falls ja, kann ein Kontrollkästchen aktiviert werden (ab Admin 7.8.0)checkLicense: Eine spezielle Komponente zur Online-Lizenzprüfungchips: Der Benutzer kann Wörter eingeben, die einem Array hinzugefügt werden.color: Farbauswahlcoordinates: Bestimmt den aktuellen Standort und verwendet die Koordinaten aussystem.config, falls diese nicht im Formatlatitude,longitudeverfügbar sind.credential: Wählt eine Anmeldeinformation aus dem zentralen Anmeldeinformationsspeicher aus (verwaltet in den Administratoreinstellungen)cron: Konfiguriert Cron-Ausdrücke für die Planung von Aufgabencustom: Integriert benutzerdefinierte Komponenten für spezifische Funktionalitäten (nur Admin 6)datePicker: Ermöglicht Benutzern die Auswahl eines DatumsdeviceManager: Gerätemanager anzeigendivider: Erzeugt eine horizontale Trennliniefile: Eingabefeld mit Dateiauswahl und optionaler Upload-/Download-Funktion (nur Admin 6)fileSelector: Ermöglicht Benutzern die Auswahl von Dateien aus dem System (nur Admin6)func: Wählt eine Funktion aus der Liste enum.func aus (nur Admin 6)header: Erstellt eine Überschrift mit verschiedenen Größen (h1-h5)iframe: Zeigt iFrame mit der angegebenen URL an (admin >= 7.7.28)iframeSendTo: Zeigt ein iFrame mit URL aus dem Backend an (Admin >= 7.7.28)image: Lädt ein Bild hoch oder zeigt es animageSendTo: Zeigt ein vom Backend empfangenes Bild an und sendet Daten basierend auf einem Befehlinstance: Wählt eine Adapterinstanz aus.interface: Wählt die Schnittstelle des Hosts aus, auf der die Instanz ausgeführt wird.ip: Eingabefeld für IP-Adressen mit erweiterten OptionenjsonEditor: JSON-Editor für komplexe Konfigurationsdatenlanguage: Wählt die Sprache der Benutzeroberfläche auslicense: zeigt die Lizenzinformationen an, falls diese noch nicht akzeptiert wurden.number: Numerisches Eingabefeld mit Minimal-/Maximalwerten und Schrittweiteoauth2: OAuth2-Authentifizierung für den Adapter aktivieren (Admin 7.6.18 oder neuer)objectId: Wählt eine Objekt-ID mit Name, Farbe und Symbol aus.panel: Registerkarte mit Elementenpassword: Passwort-Eingabefeldpattern: Schreibgeschütztes Feld, das ein Muster (z. B. eine URL) anzeigtport: Spezieller Eingang für PortsqrCode: Zeigt Daten als QR-Code an (Admin 7.0.18 oder neuer)qrCodeSendTo: Zeigt einen QR-Code mit den vom Backend empfangenen Daten an.room: Wählt einen Raum aus der Listeenum.roomaus (nur Admin 6)select: Dropdown-Menü mit vordefinierten OptionenselectSendTo: Dropdown-Menü mit Instanzwerten zum Senden von DatensendTo: Schaltfläche, die eine Anfrage an eine Instanz sendetsetState: Schaltfläche, die den Zustand einer Instanz festlegtslider: Schieberegler zur Auswahl eines Wertes innerhalb eines Bereichs (nur Admin 6)state: Zeigt Steuerungselemente oder Informationen aus dem Status an (admin >= 7.1.0)staticImage: Zeigt ein statisches Bild anstaticInfo: Zeigt statische Informationen in vorformatierter Form an, z. B. "Titel: Werteinheit" (admin >= 7.3.3)staticLink: Erstellt einen statischen LinkstaticText: Zeigt statischen Text an (z. B. eine Beschreibung)table: Tabelle mit Zeilen, die hinzugefügt, gelöscht oder neu angeordnet werden könnentabs: Tabs mit Elemententext: Ein- oder mehrzeiliges TexteingabefeldtextSendTo: Zeigt ein schreibgeschütztes Steuerelement mit den angegebenen Instanzwerten an.timePicker: Ermöglicht Benutzern die Auswahl einer Uhrzeituser: Wählt einen Benutzer aus der Listesystem.userausuuid: iobroker-UUID anzeigenyamlEditor: YAML-Editor für komplexe Konfigurationsdaten (admin >= 7.7.30)
Durch die Verwendung von JSON-Konfiguration können Sie eine benutzerfreundliche und anpassungsfähige Konfigurationsumgebung für Ihren ioBroker-Adapter schaffen.
Beispielprojekte
| Typ | Link |
|---|---|
| Mehrere Tabs: | ioBroker.admin |
| Benutzerdefinierte Komponente: | telegram oder in pushbullet |
| Benutzerdefinierte Komponente: | telegram oder in pushbullet |
| Validierung: |
Trennung der großen Konfigurationen
Enthält
Erfordert Administratorversion 6.17.1 oder neuer.
Um komplexe JSON-Dateien zu erstellen, können Sie andere JSON-Dateien einbinden. Die eingebundene Datei muss sich im selben Verzeichnis wie die Hauptdatei befinden.
{
tabs: {
tab1: {
type: "panel", // data will be combined with the content of "tab1.json". If the same attribute is defined in both files, the value from the included file will be used.
"#include": "tab1.json",
},
},
}
I18n - Internationalisierung
Es gibt mehrere Möglichkeiten, die Übersetzungen bereitzustellen. Nur die erste ist mit unserem Community-Übersetzungstool Weblate kompatibel und sollte daher den anderen vorgezogen werden!
Um die Übersetzungsfunktion zu aktivieren, müssen Sie die i18n-Eigenschaft auf oberster Ebene des JSON-Konfigurationsobjekts bereitstellen und aktivieren.
{
i18n: true,
}
Übersetzung in separaten Dateien: kompatibel mit weblate
Standardmäßig müssen sich die Dateien in den folgenden Verzeichnissen befinden:
admin/i18n/de/translations.json
admin/i18n/en/translations.json
oder
admin/i18n/de.json
admin/i18n/en.json
Zusätzlich kann der Benutzer den Pfad zu den Dateien i18n, i18n: customI18n angeben und Dateien im Adminbereich bereitstellen:
"i18n": "customI18n",
admin/customI18n/de/translations.json
admin/customI18n/en/translations.json
oder
admin/customI18n/de.json
admin/customI18n/en.json
Die Struktur einer Datei entspricht der folgenden Struktur
en.json:
{
i18nText1: "Open",
i18nText2: "Close",
"This is a Text": "This is a Text",
}
de.json:
{
i18nText1: "Öffnen",
i18nText2: "Schließen",
"This is a Text": "Dies ist ein Text",
}
Bei der Suche nach einer Übersetzung werden die Informationen im entsprechenden Feld verwendet, um die Datei mit dem gewünschten Text zu finden. Wird die Datei nicht gefunden, bleiben die Informationen aus dem Feld erhalten. Es wird empfohlen, den Text auf Englisch einzugeben.
Übersetzung direkt in den Feldern bereitstellen
Übersetzungen können in allen Feldern angegeben werden, die Text enthalten können. Beispiele für Felder sind Beschriftung, Titel, Tooltip, Text usw.
"type": "text",
"label: {
"en": "house",
"de": "Haus"
}
}
Übersetzung direkt im i18n bereitstellen
Die Übersetzungen können auch direkt als Objekt im Attribut i18n auf der obersten Ebene des Objekts jsonConfig bereitgestellt werden.
Bei der Suche nach einer Übersetzung werden die Informationen im entsprechenden Feld verwendet, um die Eigenschaft mit dem Text im i18n-Objekt zu finden. Wird die Eigenschaft nicht gefunden, bleiben die Informationen aus dem Feld erhalten. Es wird empfohlen, den Text auf Englisch einzugeben.
Elementtypen
Jedes Element kann gemeinsame Merkmale und die dem jeweiligen Typ zugeordneten speziellen Attribute wie folgt haben:
tabs
Registerkarten mit Elementen
| Objekt | Beschreibung |
|---|---|
items | Objekt mit Paneelen {"tab1": {}, "tab2": {}...} |
tabsStyle | CSS-Stile im React-Format (marginLeft und nicht margin-left) für die Mui-Tabs-Komponente |
tabsStyle | CSS-Stile im React-Format (marginLeft und nicht margin-left) für die Mui-Tabs-Komponente |
panel
Registerkarte mit Elementen
| Objekt | Beschreibung |
|---|---|
icon | Der Tab kann ein Symbol (base64 wie data:image/svg+xml;base64,...) oder jpg/png Bilder (endet mit .png) haben |
items | Objekt {"attr1": {}, "attr2": {}}... |
collapsable | nur möglich, da nicht Teil von TabsjsonConfig.json |
color | Farbe der ausklappbaren Kopfzeile primary oder secondary oder nichts |
innerStyle | CSS-Stile für innere Div-Elemente im React-Format (marginLeft und nicht margin-left) für die Panel-Komponente. Wird nicht für ausklappbare Panels verwendet. |
innerStyle | CSS-Stile für innere Div-Elemente im React-Format (marginLeft und nicht margin-left) für die Panel-Komponente. Wird nicht für ausklappbare Panels verwendet. |
text
Textkomponente
| Objekt | Beschreibung |
|---|---|
maxLength | Maximale Textlänge im Feld |
copyToClipboard | Schaltfläche „In die Zwischenablage kopieren“ anzeigen, aber nur, wenn deaktiviert oder schreibgeschützt auf „true“ gesetzt ist |
trim | Standardwert ist „true“. Setzen Sie dieses Attribut auf false, wenn das Kürzen nicht gewünscht ist. |
minRows | Standardwert ist 1. Setzen Sie dieses Attribut auf 2 oder höher, wenn Sie ein Textfeld mit mehr als einer Zeile wünschen. |
maxRows | Maximale Zeilenanzahl des Textbereichs. Wird nur verwendet, wenn minRows > 1. |
noClearButton | Wenn wahr, wird die Schaltfläche "Löschen" nicht angezeigt (Admin >= 6.17.13) |
validateJson | Wenn wahr, wird der Text als JSON validiert |
allowEmpty | Wenn wahr, wird das JSON nur validiert, wenn der Wert nicht leer ist. |
time | Der Wert ist eine Zeitangabe in Millisekunden oder eine Zeichenkette. Wird nur mit dem Flag "readOnly" verwendet. |
time | Der Wert ist die Zeit in Millisekunden oder eine Zeichenkette. Wird nur mit dem Flag readOnly verwendet. |
number
| Objekt | Beschreibung | Bemerkung |
|---|---|---|
min | Minimalwert | |
step | Schritt | |
unit | Einheit | Admin >= 7.4.9 |
unit | unit | admin >= 7.4.9 |
color
Farbauswahl
| Objekt | Beschreibung |
|---|---|
noClearButton | Wenn wahr, wird die Schaltfläche "Löschen" nicht angezeigt (Admin >= 6.17.13) |
checkbox
Kontrollkästchen anzeigen
slider
Schieberegler anzeigen (nur Admin6)
| Objekt | Beschreibung |
|---|---|
min | (Standardwert 0) |
step | (Standard (max - min) / 100) |
unit | Einheit des Schiebereglers |
unit | Einheit des Schiebereglers |
qrCode
Daten in einem QR-Code anzeigen (Admin >= 7.0.18)
| Objekt | Beschreibung |
|---|---|
data | die im QR-Code zu kodierenden Daten |
fgColor | Vordergrundfarbe |
bgColor | Hintergrundfarbe |
level | QR-Code-Ebene (L M Q H) |
level | QR-Code-Level (L M Q H) |
ip
Bindungsadresse
| Objekt | Beschreibung |
|---|---|
listenOnAllPorts | Füge 0.0.0.0 zur Option hinzu |
onlyIp6 | Nur IP6-Adressen anzeigen |
noInternal | Interne IP-Adressen nicht anzeigen |
noInternal | Interne IP-Adressen nicht anzeigen |
user
Wählen Sie einen Benutzer aus der Systembenutzerliste aus. (Mit Farbe und Symbol)
| Objekt | Beschreibung |
|---|---|
short | kein Systembenutzer. |
room
Raum aus enum.room auswählen (mit Farbe und Symbol) - (nur Admin6)
| Objekt | Beschreibung |
|---|---|
short | kein enum.rooms. |
allowDeactivate | Zimmer leer lassen |
func
Funktion aus enum.func auswählen (mit Farbe und Symbol) - (nur Admin6)
| Objekt | Beschreibung |
|---|---|
short | kein enum.func. |
allowDeactivate | Funktionalität in den Leerlauf versetzen |
select
| Objekt | Beschreibung |
|---|---|
options | Objekt mit Beschriftungen, optionalen Übersetzungen, optionaler Gruppierung und Werten |
showAllValues | Element auch dann anzeigen, wenn keine Bezeichnung dafür gefunden wurde (bei mehreren Elementen), Standardwert=true |
format | Darstellungsformat: "dropdown" (Standard) oder "radio", um Optionen als Optionsfelder anstelle eines Dropdown-Menüs anzuzeigen |
horizontal | Wenn true, werden Optionsfelder horizontal angezeigt (gilt nur, wenn format gleich "radio" ist) (ab Version 8.3.3) |
horizontal | Wenn true, werden Optionsfelder horizontal angezeigt (gilt nur, wenn format auf "radio" gesetzt ist) (ab Version 8.3.3) |
Jede Option in options kann Folgendes enthalten:
| Objekt | Beschreibung |
|---|---|
label | Bezeichnung der Option (kann eine Zeichenkette oder ein übersetzbares Objekt sein) |
color | Farbe des Optionstextes |
hidden | Formel oder boolescher Wert zum Ein- oder Ausblenden der Option |
os | Diese Option soll nur auf diesen Betriebssystemen des Hosts angezeigt werden |
notOs | Diese Option soll auf folgenden Betriebssystemen des Hosts nicht angezeigt werden |
docker | Die Option nur anzeigen, wenn der ioBroker in Docker ausgeführt wird (true) oder nicht (false) |
description | Beschreibung unterhalb der Optionsbezeichnung (kann übersetzbar sein) |
icon | Symbol-URL oder Base64-Zeichenkette, die neben der Option angezeigt werden soll (ab Version 8.3.3) |
icon | URL oder Base64-String des Symbols, das neben der Option angezeigt werden soll (ab Version 8.3.3) |
Beispiel für select options
[
{"label": {"en": "option 1"}, "value": 1}, //...
]
oder
[
{
"items": [
{"label": "Val1", "value": 1},
{"label": "Val2", "value": 2}
],
"name": "group1"
},
{
"items": [
{"label": "Val3", "value": 3},
{"label": "Val4", "value": 4}
],
"name": "group2"
},
{"label": "Val5", "value": 5}
]
autocomplete
| Objekt | Beschreibung |
|---|---|
options | ["value1", "value2", ...] oder [{"value": "value", "label": "Value1"}, "value2", ...] (Schlüssel und Namen (Werte) müssen eindeutig sein) |
freeSolo | Setzen Sie freeSolo auf true, damit das Textfeld einen beliebigen Wert enthalten kann. |
image
Speichert das Bild als Datei des Objekts adapter.X oder als Base64 im Attribut
| Objekt | Beschreibung |
|---|---|
filename | Der Dateiname ist der Strukturname. Im folgenden Beispiel ist login-bg.png der Dateiname für writeFile("myAdapter.INSTANCE", "login-bg.png") |
maxSize | Maximale Größe der hochzuladenden Datei |
base64 | Wenn wahr, wird das Bild als Daten-URL im Attribut gespeichert, andernfalls als Binärdatei im Dateispeicher. |
crop | Wenn wahr, dem Benutzer das Zuschneiden des Bildes erlauben |
!maxWidth | |
!maxHeight | |
!square | Die Breite muss gleich der Höhe sein, oder der Zuschnitt darf nur quadratische Formen zulassen |
!square | Die Breite muss gleich der Höhe sein, oder der Zuschnitt darf nur quadratische Formen zulassen. |
Beispiel für image
"login-bg.png": {
"type": "image",
"accept": "image/png",
"label": {
"en": "Upload image"
},
"crop": true
},
"picture": {
"type": "image",
"base64": true,
"accept": "image/*",
"label": {
"en": "Upload image"
},
"crop": true
}
}
oauth2
(admin >= 17.06.2018)
Zeigt die Schaltfläche „OAuth2-Authentifizierung“ an, um die Aktualisierungs- und Zugriffstoken für den Adapter zu erhalten.
Um dies nutzen zu können, müssen Sie zunächst die OAuth2-Daten (Client-ID, Geheimnis usw.) an das ioBroker-Wartungsteam übermitteln, damit dieses sie in die Cloud einbinden kann.
| Objekt | Beschreibung |
|---|---|
identifier | OAuth2-Kennung, wie z. B. spotify, google, dropbox, microsoft |
scope | Optionale Bereiche, durch Leerzeichen getrennt, z. B. user-read-private user-read-email |
refreshLabel | Optionale Schaltflächenbeschriftung zum Aktualisieren des Tokens |
ownClientId | Optionaler Attributname, unter dem die OAuth-Client-ID des Benutzers gespeichert wird. Falls gesetzt, wird ein Eingabefeld für die Client-ID angezeigt. |
ownClientSecret | Optionaler Attributname, unter dem das OAuth-Client-Geheimnis des Benutzers gespeichert wird. Falls festgelegt, wird ein Eingabefeld für das Client-Geheimnis angezeigt. |
ownClientSecret | Optionaler Attributname, unter dem das OAuth-Clientgeheimnis des Benutzers gespeichert wird. Falls festgelegt, wird ein Eingabefeld für das Clientgeheimnis angezeigt. |
Beispiel für oauth2
"_oauth2": {
"type": "oauth2",
"identifier": "spotify",
"label": "Get Spotify OAuth2 Token",
"refreshLabel": "Refresh Spotify OAuth2 Token",
"icon": "data:image/svg+xml;base64,...",
}
Siehe auch OAUTH2.md für weitere Informationen.
objectId
Objekt-ID: Anzeige mit Name, Farbe und Symbol
| Objekt | Beschreibung |
|---|---|
types | Gewünschter Typ: channel, device, ... (standardmäßig nur state). Es handelt sich um einen Plural, da type bereits belegt ist. |
customFilter | [optional] Kann nicht zusammen mit den types-Einstellungen verwendet werden. Es handelt sich um ein Objekt und nicht um eine JSON-Zeichenfolge. |
filterFunc | [optional] Kann nicht zusammen mit den Einstellungen types verwendet werden. Es handelt sich um eine Funktion, die für jedes Objekt aufgerufen wird und true oder false zurückgeben muss. Beispiel: obj.common.type === 'number' |
fillOnSelect | [optional] Füllt weitere Konfigurationsfelder, wenn eine Objekt-ID ausgewählt wird. Format: pathInObject1=>attr1,pathInObject2=>attr2(X). Hängen Sie (X) an, um nicht leere Felder zu überschreiben. Beispiel: common.name=>name,common.color=>color(X) füllt das Feld name mit dem Namen des Objekts und überschreibt color mit der Farbe des Objekts. |
fillOnSelect | [optional] Füllt andere Konfigurationsfelder, wenn eine Objekt-ID ausgewählt wird. Format: pathInObject1=>attr1,pathInObject2=>attr2(X). Hängen Sie (X) an, um nicht leere Felder zu überschreiben. Beispiel: common.name=>name,common.color=>color(X) füllt das Feld name mit dem Namen des Objekts und überschreibt color mit der Farbe des Objekts. |
Beispiele für customFilter
Nur Objekte mit bestimmten benutzerdefinierten Einstellungen anzeigen
{common: {custom: true}}
Nur Objekte mit benutzerdefinierten SQL.0-Einstellungen anzeigen (nur die jeweilige Instanz)
{common: {custom: 'sql.0'}}
Nur Objekte der Adapter influxdb oder sql oder history anzeigen
{common: {custom: '_dataSources'}}
Nur Objekte mit benutzerdefinierten Einstellungen für einen bestimmten Adapter anzeigen (alle Instanzen)
{common: {custom: 'adapterName.'}}
Nur Kanäle anzeigen
{type: 'channel'}
Nur Kanäle und Geräte anzeigen
{type: ['channel', 'device']}
Nur Zustände vom Typ 'Zahl' anzeigen
{common: {type: 'number'}
Nur Zustände vom Typ 'Zahl' und 'Zeichenkette' anzeigen
{common: {type: ['number', 'string']}
Nur Zustände mit Rollen anzeigen, die mit „switch“ beginnen
{common: {role: 'switch'}
Nur Zustände mit Rollen anzeigen, die mit switch und button beginnen
{common: {role: ['switch', 'button']}
password
Dieser Feldtyp wirkt sich nur auf die Benutzeroberfläche aus.
Passwörter und andere sensible Daten müssen verschlüsselt gespeichert werden! Dazu muss der Schlüssel in der io-package.json unter nativeEncrypted hinterlegt werden.
Zusätzlich können Sie verhindern, dass diese Eigenschaft an andere Adapter als admin und cloud ausgeliefert wird, indem Sie sie in der Datei io-package.json unter protectedNative hinzufügen.
| Objekt | Beschreibung |
|---|---|
repeat | Das Wiederholungspasswort muss mit dem Passwort verglichen werden |
readOnly | Das Schreibschutzflag. Sichtbar ist automatisch wahr, wenn Schreibschutz wahr ist. |
maxLength | Maximale Textlänge im Feld |
maxLength | Maximale Textlänge im Feld |
instance
| Objekt | Beschreibung |
|---|---|
adapter | Name des Adapters. Mit dem speziellen Namen _dataSources erhalten Sie alle Adapter mit dem Flag common.getHistory. |
allowDeactivate | falls wahr. Die zusätzliche Option "Deaktivieren" wird angezeigt. |
onlyEnabled | falls wahr. Nur aktivierte Instanzen werden angezeigt. |
long | Der Wert sieht eher aus wie system.adapter.ADAPTER.0 und nicht wie ADAPTER.0 |
short | Der Wert sieht aus wie 0 und nicht wie ADAPTER.0 |
all | Füge der Option "all" den Wert * hinzu |
all | Füge der Optionsliste die Option "all" mit dem Wert * hinzu. |
chips
Der Benutzer kann das Wort eingeben, und es wird hinzugefügt (siehe Cloud => Dienste => Whitelist). Die Ausgabe ist ein Array, falls kein delimiter definiert ist.
| Objekt | Beschreibung |
|---|---|
delimiter | Wenn diese Option definiert ist, wird sie als Zeichenkette mit Trennzeichen anstelle eines Arrays gespeichert. Beispiel: Aus delimiter=; wird a;b;c anstelle von ['a', 'b', 'c'] |
alive
Dient lediglich als Indikator dafür, ob die Instanz aktiv ist, und kann im "ausgeblendeten" und "deaktivierten" Zustand verwendet werden (wird nicht in der Konfiguration gespeichert).
Nur Text: Instanz läuft, Instanz läuft nicht
| Objekt | Beschreibung |
|---|---|
instance | Prüfen, ob die Instanz aktiv ist. Falls nicht definiert, wird die aktuelle Instanz verwendet. Sie können das Muster ${data.number} im Text verwenden. |
textNotAlive | Der Standardtext ist Instance %s is not alive, wobei %s durch ADAPTER.0 ersetzt wird. Die Übersetzung muss in den i18n-Dateien vorhanden sein. |
textNotAlive | Der Standardtext lautet Instanz %s ist nicht aktiv, wobei %s durch ADAPTER.0 ersetzt wird. Die Übersetzung muss in den i18n-Dateien vorhanden sein. |
pattern
Das schreibgeschützte Feld mit einem Muster wie 'https://${data.ip}:${data.port}' (wird nicht in der Konfiguration gespeichert) Texteingabe mit dem schreibgeschützten Flag, das ein Muster anzeigt.
| Objekt | Beschreibung |
|---|---|
copyToClipboard | wenn wahr - Schaltfläche anzeigen |
Muster | mein Muster |
sendTo
Schaltfläche, die eine Anfrage an die aktuelle Instanz sendet (https://github.com/iobroker-community-adapters/ioBroker.email/blob/master/admin/index_m.html#L128)
| Objekt | Beschreibung |
|---|---|
command | (Standard send) |
data | Objekt - {"subject1": 1, "data": "static"}. Sie können entweder jsonData oder data angeben, aber nicht beides. |
result | {result1: {en: 'A'}, result2: {en: 'B'}} |
error | {error1: {en: 'E'}, error2: {en: 'E2'}} |
variant | contained, outlined oder nichts. Variante der Schaltfläche. |
openUrl | Wenn wahr - URL in neuem Tab öffnen, falls die Antwort das Attribut openUrl enthält, wie z. B. {"openUrl": "http://1.2.3.4:80/aaa", "window": "_blank", "saveConfig": true}. Wenn saveConfig wahr ist, wird der Benutzer aufgefordert, die Konfiguration zu speichern. |
reloadBrowser | Falls wahr - lade das aktuelle Browserfenster neu, falls die Antwort das Attribut reloadBrowser enthält, z. B. {"reloadBrowser": true}. |
window | Wenn openUrl wahr ist, ist dies der Name des neuen Fensters. Kann überschrieben werden, wenn die Antwort das Attribut window enthält. this.props.socket.sendTo(adapterName.instance, command || 'send', data, result => {}); |
icon | Falls ein Symbol angezeigt werden soll: auth, send, web, warning, error, info, search. Sie können Symbole der Kategorie base64 (wie data:image/svg+xml;base64,...) oder Bilder der Kategorie jpg/png (endet mit .png) verwenden. (Bitte melden Sie weitere Symbole über ein Issue an.) |
useNative | Wenn der Adapter ein Ergebnis mit dem Attribut native zurückgibt, wird dieses für die Konfiguration verwendet. Wenn saveConfig wahr ist, wird der Benutzer aufgefordert, die Konfiguration zu speichern. |
showProcess | Ladekreis anzeigen, solange die Anfrage bearbeitet wird |
timeout | Timeout für die Anfrage in ms. Standard: keiner. |
onLoaded | Die Schaltflächenlogik einmalig initial ausführen |
controlStyle | Stile für die Schaltfläche. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
setState
Schaltfläche zum Festlegen des Instanzstatus
| Objekt | Beschreibung |
|---|---|
id | system.adapter.myAdapter.%INSTANCE%.test, Sie können den Platzhalter %INSTANCE% verwenden, um ihn durch den aktuellen Instanznamen zu ersetzen |
val | ${data.myText}\_test oder Zahl. Der Typ wird automatisch anhand des Zustandstyps erkannt und die Konvertierung ebenfalls durchgeführt. |
okText | Warnmeldung, die durch Drücken der Schaltfläche angezeigt wird |
variant | contained, outlined, '' |
Variante | enthalten, umrandet, '' |
staticText
Statischer Text wie Beschreibung
| Objekt | Beschreibung |
|---|---|
label | mehrsprachiger Text |
format | text (Standard), html, json (ab Admin-Version 7.8.4) |
href | Link. Der Link könnte dynamisch sein, wie z. B. #tab-objects/customs/${data.parentId} |
target | _blank oder _self oder Fenstername. Bei relativen Links ist der Standardwert _self und bei absoluten _blank |
close | Wenn wahr, wird die GUI geschlossen (wird nicht für JsonConfig im Adminbereich verwendet, sondern nur für die dynamische GUI, und zwar nur, wenn das Ziel _self ist) |
button | Link als Schaltfläche anzeigen |
variant | Typ der Schaltfläche (outlined, contained, text) |
color | Farbe der Schaltfläche (z. B. primary) |
icon | wenn Symbol angezeigt werden soll: auth, send, web, warning, error, info, search, book, help, upload. Sie können die Icons base64 (beginnt mit data:image/svg+xml;base64,...) oder die Bilder jpg/png (endet mit .png) verwenden. (Bitte fordern Sie weitere Icons über das Issue an.) |
controlStyle | CSS-Stile im React-Format für den Button oder das Steuerelement selbst |
controlStyle | CSS-Stile im React-Format für den Button oder das Steuerelement selbst |
Es muss genau eines von label oder text angegeben werden - nicht beide.
staticLink
| Objekt | Beschreibung |
|---|---|
label | mehrsprachiger Text |
target | _blank oder _self oder Fenstername. Bei relativen Links ist der Standardwert _self und bei absoluten _blank |
close | Wenn wahr, wird die GUI geschlossen (wird nicht für JsonConfig im Adminbereich verwendet, sondern nur für die dynamische GUI, und zwar nur, wenn das Ziel _self ist) |
button | Link als Schaltfläche anzeigen |
variant | Typ der Schaltfläche (outlined, contained, text) |
color | Farbe der Schaltfläche (z. B. primary) |
icon | wenn Symbol angezeigt werden soll: auth, send, web, warning, error, info, search, book, help, upload. Sie können die Icons base64 (beginnt mit data:image/svg+xml;base64,...) oder die Bilder jpg/png (endet mit .png) verwenden. (Bitte fordern Sie weitere Icons über das Issue an.) |
controlStyle | CSS-Stile im React-Format für den Button oder das Steuerelement selbst |
format | text (Standard), html, json |
format | text (Standard), html, json |
staticImage
| Objekt | Beschreibung |
|---|---|
href | optionaler HTTP-Link |
showInDialog | Wenn wahr, wird eine kleine Miniaturansicht angezeigt; durch Klicken darauf öffnet sich ein Dialog mit dem Bild in voller Größe. |
showInDialogButtonLabel | falls showInDialog, eine optionale Beschriftung für eine Schaltfläche, die auch den Dialog öffnet |
showInDialogSmallSize | falls showInDialog, die Höhe des kleinen Vorschaubildes in Pixeln (Standardwert 100) |
showInDialogSmallSize | falls showInDialog, die Höhe des kleinen Vorschaubildes in Pixeln (Standardwert 100) |
table
Tabelle mit Elementen, die gelöscht, hinzugefügt, nach oben oder nach unten verschoben werden können.
| Objekt | Beschreibung |
|---|---|
items | [{"type": see above, "width": px or %, "title": {"en": "header"}, "attr": "name", "filter": false, "sort": true, "default": ""}] |
objKeyName | (Veraltete Einstellung, nicht verwenden!) - Name des Schlüssels in {"192.168.1.1": {delay: 1000, enabled: true}, "192.168.1.2": {delay: 2000, enabled: false}} |
objValueName | (Veraltete Einstellung, nicht verwenden!) - Name des Werts in {"192.168.1.1": "value1", "192.168.1.2": "value2"} |
allowAddByFilter | Hinzufügen erlaubt, auch wenn ein Filter gesetzt ist |
showSecondAddAt | Anzahl der Zeilen, ab denen die zweite Schaltfläche „Hinzufügen“ am unteren Rand der Tabelle angezeigt wird. Standardwert: 5 |
showFirstAddOnTop | Die erste Plus-Schaltfläche soll oben in der ersten Spalte und nicht links angezeigt werden. |
clone | [optional] - Gibt an, ob die Schaltfläche „Klonen“ angezeigt werden soll. Ist dies der Fall, wird die Schaltfläche „Klonen“ angezeigt. Falls es sich um einen Attributnamen handelt, muss dieser eindeutig sein. |
export | [optional] - wenn die Export-Schaltfläche angezeigt werden soll. Als CSV-Datei exportieren. |
import | [optional] - falls die Import-Schaltfläche angezeigt werden soll. Import aus einer CSV-Datei. |
uniqueColumns | [optional] - Geben Sie ein Array von Spalten an, die eindeutige Einträge enthalten müssen |
encryptedAttributes | [optional] - Geben Sie ein Array von Spalten an, die verschlüsselt werden sollen |
useCardFor | [optional] - Haltepunkt, der als Karten gerendert wird: ["xs", "sm", "md", "lg", "xl"] |
titleAttribute | [optional] - Definiert den Namen des Attributs des Elements, das im Kartenmodus als Titel des Elements angezeigt werden soll. |
compact | [optional] - Falls wahr, wird die Tabelle im Kompaktmodus angezeigt |
compact | [optional] - Wenn true, wird die Tabelle im Kompaktmodus angezeigt |
accordion
Akkordeonmenü mit Elementen, die gelöscht, hinzugefügt, nach oben oder nach unten verschoben werden können (Admin 6.6.0 und neuer)
| Objekt | Beschreibung |
|---|---|
items | [{"type": see above, "attr": "name", "default": ""}] Elemente können wie auf einem panel (xs, sm, md, lg und newLine) platziert werden |
noDelete | Boolescher Wert, der angibt, ob das Löschen oder Hinzufügen deaktiviert ist. Wenn noDelete auf „false“ gesetzt ist, sollten Hinzufügen, Löschen und Verschieben nach oben/unten funktionieren. |
clone | [optional] - Gibt an, ob die Schaltfläche „Klonen“ angezeigt werden soll. Ist dies der Fall, wird die Schaltfläche „Klonen“ angezeigt. Falls es sich um einen Attributnamen handelt, muss dieser eindeutig sein. |
clone | [optional] - Gibt an, ob die Schaltfläche „Klonen“ angezeigt werden soll. Ist dies der Fall, wird die Schaltfläche „Klonen“ angezeigt. Falls es sich um einen Attributnamen handelt, muss dieser eindeutig sein. |
jsonEditor
Schaltfläche zum Öffnen eines JSON(5)-Editors. JSON5 wird ab Admin-Version 5.7.3 unterstützt.
| Objekt | Beschreibung |
|---|---|
validateJson | Wenn false, wird der Text nicht als JSON validiert |
json5 | falls JSON5-Format zulässig ist (ab Version 7.5.3) |
doNotApplyWithError | Speichern des Werts bei Fehlern in JSON oder JSON5 nicht zulassen (ab Version 7.5.3) |
readOnly | Editor im Nur-Lese-Modus öffnen - Editor kann geöffnet, aber Inhalt kann nicht geändert werden |
readOnly | Öffnet den Editor im Nur-Lese-Modus - der Editor kann geöffnet, aber der Inhalt nicht geändert werden |
Der Editor selbst gehört nicht zu dieser Bibliothek: Er wird vom Host zusammen mit der Eigenschaft AceEditor von JsonConfig / JsonConfigComponent bereitgestellt. react-ace bringt die gesamte Eigenschaft ace-builds mit sich und würde andernfalls in jedem Bundle landen, das diese Bibliothek verwendet, einschließlich benutzerdefinierter Komponenten und Adapter, obwohl nur drei der sechzig Steuerelemente jemals einen Editor anzeigen. Ohne diesen wird das Feld als einfacher Textbereich dargestellt, der weiterhin gelesen und beschrieben werden kann.
yamlEditor
Schaltfläche zum Öffnen eines YAML-Editors mit Syntaxprüfung. (Ab Admin-Version 7.7.30)
| Objekt | Beschreibung |
|---|---|
validateYaml | Wenn false, wird der Text nicht als YAML validiert |
doNotApplyWithError | Speichern des Werts bei Fehlern in YAML nicht zulassen |
readOnly | Editor im Nur-Lese-Modus öffnen - Editor kann geöffnet, aber Inhalt kann nicht geändert werden |
readOnly | Öffnet den Editor im Nur-Lese-Modus - der Editor kann geöffnet, aber der Inhalt nicht geändert werden |
language
Sprache auswählen
| Objekt | Beschreibung |
|---|---|
system | Erlaubt die Verwendung der Systemsprache aus system.config als Standard (hat einen leeren String-Wert, wenn ausgewählt) |
certificate
| Objekt | Beschreibung |
|---|---|
certType | einer von: public, private, chained. Ab Version 6.4.0 kann jedoch der Typ certificates verwendet werden. |
certificates
Es handelt sich um einen universellen Typ, der die Attribute certPublic, certPrivate, certChained und leCollection für Sie verwaltet.
Beispiel:
{
"_certs": {
"type": "certificates",
"newLine": true,
"hidden": "!data.secure",
"sm": 12
}
}
certCollection
Wählen Sie eine Zertifikatssammlung aus, verwenden Sie einfach alle Sammlungen oder verzichten Sie ganz auf Let's Encrypt.
| Objekt | Beschreibung |
|---|---|
leCollectionName | Name der Zertifikatssammlung |
credential
Wählen Sie eine Anmeldeinformation aus dem zentralen Anmeldeinformationsspeicher aus. Die Anmeldeinformationen können in den Administratoreinstellungen (Einstellungen → Anmeldeinformationen) verwaltet werden, und die Adapterkonfiguration speichert lediglich die ID der ausgewählten Anmeldeinformation (z. B. system.credentials.anthropic) im entsprechenden Attribut.
Sofern disableCreation nicht festgelegt ist, wird neben dem Auswahlfeld eine Schaltfläche ➕ angezeigt, die direkt ein kleines Dialogfeld zum Hinzufügen von Anmeldeinformationen öffnet - ähnlich dem Admin-Dialog. Es bietet Vorlagen (mit Symbolen), gefiltert nach credentialType (z. B. Anthropic / ChatGPT / Google Gemini für ai sowie die allgemeinen Vorlagen „Anmelden & Passwort“ und „Schlüssel“).
Die gewählte Vorlage definiert das Formular, einen vorgeschlagenen Namen und das Symbol; die geheimen Felder werden beim Speichern mit dem Systemschlüssel verschlüsselt. Die neu erstellten Anmeldeinformationen werden als system.credentials.<name> gespeichert und sofort ausgewählt.
| Objekt | Beschreibung |
|---|---|
credentialType | Zeigt nur Anmeldeinformationen dieses Typs an: email, cloud, ai oder custom. Falls nicht definiert, werden alle Anmeldeinformationen aufgelistet. |
disableCreation | Wenn true, wird die Schaltfläche ➕ ausgeblendet, sodass der Benutzer nur eine vorhandene Anmeldeinformation auswählen kann (keine Erstellung an dieser Stelle). |
Beispiel:
{
"credentialId": {
"type": "credential",
"credentialType": "email",
"label": "E-Mail account",
"disableCreation": false,
"sm": 6
}
}
Jede Anmeldeinformation hat eine von zwei Formen: login (ein login- und ein password-Feld) oder key (ein einzelnes key-Feld, z. B. ein API-Schlüssel). Im Adapter werden die Anmeldeinformationen mit @iobroker/adapter-core gelesen und entschlüsselt.
import { Credentials } from '@iobroker/adapter-core';
const cred = await Credentials.getCredentials<Credentials.LoginPasswordCredentials>(this, this.config.credentialId);
// cred.values.login, cred.values.password (already decrypted)
// or for the key form: Credentials.KeyCredentials -> cred.values.key
custom
nur Admin6
| Objekt | Beschreibung |
|---|---|
name | Komponentenname, der über Props bereitgestellt wird, z. B. ComponentInstancesEditor |
i18n | wahr, wenn sich die i18n/xx.json-Dateien im selben Verzeichnis wie die Komponente oder das Übersetzungsobjekt {"text1": {"en": Text1"}} befinden |
bundlerType | Wenn das Modul mit TypeScript geschrieben wurde, setzen Sie es auf module. Ab Admin 7.5.x |
bundlerType | Wenn das Modul mit TypeScript geschrieben wurde, setzen Sie es auf module. Ab Admin 7.5.x |
Beispiel für eine URL
custom/customComponents.js: In diesem Fall werden die Dateien von/adapter/ADAPTER_NAME/custom/customComponents.jsgeladen.https://URL/myComponent: direkt von der URL./adapter/ADAPTER_NAME/custom/customComponent.js: In diesem Fall werden die Dateien von/adapter/ADAPTER_NAME/custom/customComponents.jsgeladen.
datePicker
Dem Benutzer ermöglichen, ein Datum auszuwählen; das UI-Format stammt aus der konfigurierten Konfiguration.
timePicker
Dem Benutzer die Auswahl eines Datums ermöglichen; die zurückgegebene Zeichenkette ist eine auswertbare Datumszeichenkette oder hat das Format HH:mm:ss
| Objekt | Beschreibung |
|---|---|
format | Das an den Datumswähler übergebene Format ist standardmäßig HH:mm:ss |
timeSteps | Stellt die verfügbaren Zeitschritte für jede Ansicht dar. Standardwert ist { hours: 1, minutes: 5, seconds: 5 } |
returnFormat | fullDate oder HH:mm:ss. Standardmäßig wird aus Gründen der Abwärtskompatibilität das vollständige Datum verwendet. |
returnFormat | fullDate oder HH:mm:ss. Standardmäßig wird aus Gründen der Abwärtskompatibilität das vollständige Datum verwendet. |
divider
horizontale Linie
| Objekt | Beschreibung |
|---|---|
height | optionale Höhe: eine Zahl in Pixeln oder eine beliebige CSS-Länge, wie z. B. 1px |
color | optionale Trennlinienfarbe: beliebige CSS-Farbe oder primary, secondary |
header
| Objekt | Beschreibung |
|---|---|
text | |
size | 1-5 => h1-h5 |
cron
Zeigt die CRON-Einstellungen an. Sie haben 3 Optionen:
simple- zeigt einfache CRON-Einstellungen ancomplex- zeigt CRON mit "Minuten", "Sekunden" usw. an- Weder „einfach“ noch „komplex“ - Der Benutzer kann im Dialog zwischen einfach und komplex wechseln.
| Objekt | Beschreibung |
|---|---|
complex | CRON mit "Minuten", "Sekunden" usw. anzeigen |
simple | einfache CRON-Einstellungen anzeigen |
fileSelector
Wählen Sie eine Datei aus einem Ordner über ein Dropdown-Menü aus. Und wenn Sie möchten, können Sie eine neue Datei in diesen Ordner hochladen.
nur Admin6
| Objekt | Beschreibung |
|---|---|
pattern | Dateierweiterungsmuster. Zulässig sind **/*.ext, um auch alle Dateien aus Unterordnern anzuzeigen, *.ext, um alle Dateien aus dem Stammverzeichnis anzuzeigen, oder folderName/*.ext, um alle Dateien im Unterordner folderName anzuzeigen. Standardwert: **/*.*. |
objectID | Objekt-ID vom Typ meta. Sie können den speziellen Platzhalter %INSTANCE% verwenden: wie z. B. myAdapter.%INSTANCE%.files |
upload | Pfad, unter dem die hochgeladenen Dateien gespeichert werden. Ähnlich wie folderName. Wenn nicht definiert, wird kein Upload-Feld angezeigt. Um im Stammverzeichnis hochzuladen, setzen Sie dieses Feld auf /. |
refresh | Aktualisierungsschaltfläche neben dem Auswahlfeld anzeigen. |
maxSize | Maximale Dateigröße (Standard 2 MB) |
withFolder | Ordnernamen auch dann anzeigen, wenn sich alle Dateien im selben Ordner befinden |
delete | Löschen von Dateien zulassen |
noNone | Option none nicht anzeigen |
noSize | Dateigröße nicht anzeigen |
noSize | Dateigröße nicht anzeigen |
file
Eingabefeld mit Dateiauswahl. Es wird als Textfeld mit einer Schaltfläche zum Öffnen des Dialogs angezeigt. Nur Admin6.
| Objekt | Beschreibung |
|---|---|
disableEdit | wenn der Benutzer den Dateinamen manuell eingeben kann und nicht nur über einen Auswahldialog |
filterFiles | wie ['png', 'svg', 'bmp', 'jpg', 'jpeg', 'gif'] |
allowUpload | Zulässiges Hochladen von Dateien |
allowDownload | Download von Dateien erlaubt (Standard: true) |
allowCreateFolder | Erstellung von Ordnern erlaubt |
allowView | Kachelansicht erlaubt (Standard: true) |
showToolbar | Symbolleiste anzeigen (Standardeinstellung: true) |
selectOnlyFolders | Der Benutzer kann nur Ordner auswählen (z. B. für den Upload-Pfad) |
trim | Dateinamen kürzen |
trim | Dateinamen kürzen |
imageSendTo
zeigt das vom Backend empfangene Bild als Base64-Zeichenkette an.
| Objekt | Beschreibung |
|---|---|
width | Breite des QR-Codes in Pixeln |
command | sendTo-Befehl |
jsonData | Zeichenkette - {"subject1": "${data.subject}", "options1": {"host": "${data.host}"}}. Diese Daten werden an das Backend gesendet |
data | Objekt - {"subject1": 1, "data": "static"}. Sie können entweder jsonData oder data angeben, aber nicht beides. Diese Daten werden an das Backend gesendet, wenn jsonData nicht definiert ist. |
sendFirstByClick | Bild zuerst anzeigen, wenn angeklickt wird. true - Standardtext (Zum Anzeigen klicken) oder spezifischer Text |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
Beispielcode im Backend für imageSendTo
adapter.on("message", (obj) => {
if (obj.command === "send") {
const QRCode = require("qrcode");
QRCode.toDataURL(
"3ca4234a-fd81-fdb8-5584-08c732f70e4d",
(err, url) =>
obj.callback && adapter.sendTo(obj.from, obj.command, url, obj.callback)
);
}
});
qrCodeSendTo
Sendet einen Befehl an die Adapterinstanz und zeigt die Antwortzeichenfolge als QR-Code an. Das Backend muss eine einfache Zeichenkette (die zu kodierenden Daten) zurückgeben.
| Objekt | Beschreibung |
|---|---|
command | sendTo-Befehl (Standard: "send") |
jsonData | Zeichenkette - {"subject1": "${data.subject}", "options1": {"host": "${data.host}"}}. Diese Daten werden an das Backend gesendet |
data | Objekt - {"subject1": 1, "data": "static"}. Sie können entweder jsonData oder data angeben, aber nicht beides. Diese Daten werden an das Backend gesendet, wenn jsonData nicht definiert ist. |
sendFirstByClick | QR-Code erst nach einem Klick laden. true - Standardtext („Zum Anzeigen klicken“) oder ein benutzerdefiniertes Zeichenketten-/Übersetzungsobjekt, das als Schaltflächenbeschriftung verwendet wird |
size | Größe des QR-Codes in Pixeln |
fgColor | Vordergrundfarbe (Standard: "#000000") |
bgColor | Hintergrundfarbe (Standard: "#ffffff") |
level | Fehlerkorrekturstufe: L, M, Q oder H (Standard: L) |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
Beispielcode im Backend für qrCodeSendTo
adapter.on("message", (obj) => {
if (obj.command === "send") {
// return the string to be encoded in the QR code
obj.callback && adapter.sendTo(obj.from, obj.command, "https://example.com/pair?token=abc123", obj.callback);
}
});
iframe
Zeigt einen iFrame mit der angegebenen URL an. (aus Admin 7.7.28)
| Objekt | Beschreibung |
|---|---|
url | URL, die im iFrame angezeigt werden soll. Falls definiert, handelt es sich um ein statisches Element. |
sandbox | Sandbox-Attribute für Sicherheitsbeschränkungen (z. B. "allow-same-origin allow-scripts") |
loading | Lazy Loading: lazy oder eager (Standard: lazy) |
frameBorder | Rahmenbreite (Standard: 0) |
reloadOnShow | iFrame neu laden, sobald er im Viewport sichtbar wird |
reloadOnShow | iFrame neu laden, sobald er im Viewport sichtbar wird |
Beispiel für iframe
{
"type": "iframe",
"url": "https://example.com",
"allowFullscreen": true,
"sandbox": "allow-same-origin allow-scripts",
"loading": "lazy",
"reloadOnShow": false
}
iframeSendTo
Zeigt einen iFrame mit einer vom Backend empfangenen URL an. (aus Admin 7.7.28)
| Objekt | Beschreibung |
|---|---|
command | sendTo-Befehl |
data | Objekt - {"subject1": 1, "data": "static"}. Sie können entweder jsonData oder data angeben, aber nicht beides. Diese Daten werden an das Backend gesendet, wenn jsonData nicht definiert ist. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
Das Backend muss eine URL als Zeichenkette zurückgeben.
Beispiel für iframeSendTo
{
"type": "iframeSendTo",
"command": "getUrl",
"jsonData": "{\"param\": \"${data.value}\"}",
"height": 600
}
Beispielcode im Backend für iframeSendTo
adapter.on("message", (obj) => {
if (obj.command === "getUrl") {
const url = "https://example.com?param=" + obj.message.param;
adapter.sendTo(obj.from, obj.command, url, obj.callback);
}
});
selectSendTo
Zeigt das Dropdown-Menü mit den angegebenen Instanzwerten an.
| Objekt | Beschreibung |
|---|---|
command | sendTo-Befehl |
data | Objekt - {"subject1": 1, "data": "static"}. Sie können entweder jsonData oder data angeben, aber nicht beides. Diese Daten werden an das Backend gesendet, wenn jsonData nicht definiert ist. |
manual | Manuelle Bearbeitung zulassen. Ohne Dropdown-Menü (wenn die Instanz offline ist). Standardmäßig true. |
multiple | Mehrfachauswahl |
showAllValues | Element auch dann anzeigen, wenn keine Bezeichnung dafür gefunden wurde (bei mehreren Elementen), Standardwert=true |
noTranslation | Die Beschriftung der Auswahllisten wird nicht übersetzt. Um diese Option zu verwenden, muss Ihr Adapter einen Nachrichtenhandler implementieren. Das Ergebnis des Befehls muss ein Array im Format [{"value": 1, "label": "one"}, ...] |
alsoDependsOn | Durch welche Änderung der Attribute muss der Befehl erneut gesendet werden? |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
Der Backend-Handler kann Elemente mit einem optionalen Feld description: [{"value": 1, "label": "one", "description": "Some hint"}, ...] zurückgeben. Die Beschreibung wird unterhalb der Bezeichnung im Dropdown-Menü angezeigt.
Beispielcode im Backend für selectSendTo
adapter.on("message", (obj) => {
if (obj) {
switch (obj.command) {
case "command":
if (obj.callback) {
try {
const { SerialPort } = require("serialport");
if (SerialPort) {
// read all found serial ports
SerialPort.list()
.then((ports) => {
adapter.log.info(`List of port: ${JSON.stringify(ports)}`);
adapter.sendTo(
obj.from,
obj.command,
ports.map((item) => ({
label: item.path,
value: item.path,
})),
obj.callback
);
})
.catch((e) => {
adapter.sendTo(obj.from, obj.command, [], obj.callback);
adapter.log.error(e);
});
} else {
adapter.log.warn("Module serialport is not available");
adapter.sendTo(
obj.from,
obj.command,
[{ label: "Not available", value: "" }],
obj.callback
);
}
} catch (e) {
adapter.sendTo(
obj.from,
obj.command,
[{ label: "Not available", value: "" }],
obj.callback
);
}
}
break;
}
}
});
autocompleteSendTo
Zeigt ein Autovervollständigungssteuerelement mit den angegebenen Instanzwerten an.
| Objekt | Beschreibung |
|---|---|
command | sendTo-Befehl |
data | Objekt - {"subject1": 1, "data": "static"}. Sie können entweder jsonData oder data angeben, aber nicht beides. Diese Daten werden an das Backend gesendet, wenn jsonData nicht definiert ist. |
freeSolo | Setze freeSolo auf true, damit das Textfeld einen beliebigen Wert enthalten kann. |
alsoDependsOn | Durch welche Änderung der Attribute muss der Befehl erneut gesendet werden? |
maxLength | Maximale Textlänge im Feld |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
Um diese Option nutzen zu können, muss Ihr Adapter einen Nachrichtenhandler implementieren:
Das Ergebnis des Befehls muss ein Array der Form ["value1", {"value": "value2", "label": "Value2"}, ...] sein (Schlüssel und Namen (Werte) müssen eindeutig sein). Siehe selectSendTo für ein Handler-Beispiel.
textSendTo
Zeigt ein schreibgeschütztes Steuerelement mit den angegebenen Instanzwerten.
| Objekt | Beschreibung |
|---|---|
container | div, text, html |
alsoDependsOn | Durch welche Änderung der Attribute muss der Befehl erneut gesendet werden? |
command | sendTo-Befehl |
jsonData | Zeichenkette - {"subject1": "${data.subject}", "options1": {"host": "${data.host}"}}. Diese Daten werden an das Backend gesendet |
data | Objekt - {"subject1": 1, "data": "static"}. Sie können entweder jsonData oder data angeben, aber nicht beides. Diese Daten werden an das Backend gesendet, wenn jsonData nicht definiert ist. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
instance | Instanz, an die die Anfrage gesendet werden soll (z. B. "admin.0"). Überschreibt oContext.instance. Falls nicht definiert, wird die Anfrage an die aktuelle Adapterinstanz gesendet. Sie können das Muster ${data.number} im Text verwenden. |
Um diese Option zu nutzen, muss Ihr Adapter einen Nachrichtenhandler implementieren: Das Ergebnis des Befehls muss eine Zeichenkette oder ein Objekt mit den folgenden Parametern sein:
{
text: "text to show", // mandatory
style: { color: "red" }, // optional
icon: "search", // optional. It could be base64 or link to an image in the same folder as jsonConfig.json file
// possible predefined names: edit, rename, delete, refresh, add, search, unpair, pair, identify, play, stop, pause, forward, backward, next, previous, lamp, backlight, dimmer, socket, settings, group, user, qrcode, connection, no-connection, visible
iconStyle: { width: 30 }, // optional
}
Beispiel für textSendTo
adapter.on("message", (obj) => {
if (obj) {
switch (obj.command) {
case "command":
obj.callback &&
adapter.sendTo(
obj.from,
obj.command,
"Received " + JSON.stringify(obj.message),
obj.callback
);
// or with style
obj.callback &&
adapter.sendTo(
obj.from,
obj.command,
{
text: "Received " + JSON.stringify(obj.message),
style: { color: "red" },
icon: "search",
iconStyle: { width: 30 },
},
obj.callback
);
// or as html
obj.callback &&
adapter.sendTo(
obj.from,
obj.command,
`<div style="color: green">${JSON.stringify(obj.message)}</div>`,
obj.callback
);
break;
}
}
});
coordinates
Ermittelt den aktuellen Standort und verwendet die Koordinaten system.config, falls dies nicht in der Form latitude,longitude möglich ist.
| Objekt | Beschreibung |
|---|---|
divider | Trennzeichen zwischen Breitengrad und Längengrad. Standardwert: "," (Wird verwendet, wenn longitudeName und latitudeName nicht definiert sind) |
longitudeName | Falls definiert, wird der Längengrad in diesem Attribut gespeichert, das Trennzeichen wird ignoriert. |
latitudeName | Falls definiert, wird der Breitengrad in diesem Attribut gespeichert, das Trennzeichen wird ignoriert. |
useSystemName | Falls definiert, wird das Kontrollkästchen mit der Aufschrift "Systemeinstellungen verwenden" angezeigt und Breitengrad und Längengrad werden aus system.config gelesen. Ein boolescher Wert wird unter dem angegebenen Namen gespeichert. |
useSystemName | Falls definiert, wird das Kontrollkästchen mit der Aufschrift "Systemeinstellungen verwenden" angezeigt und die Breiten- und Längengrade werden aus system.config gelesen. Ein boolescher Wert wird unter dem angegebenen Namen gespeichert. |
interface
Wählen Sie die Schnittstelle des Hosts aus, auf dem die Instanz ausgeführt wird.
| Objekt | Beschreibung |
|---|---|
ignoreLoopback | Loopback-Schnittstelle (127.0.0.1) nicht anzeigen |
ignoreInternal | Interne Schnittstellen nicht anzeigen (normalerweise auch 127.0.0.1) |
Gemeinsame Eigenschaften von Steuerelementen
Layoutoptionen xl,lg,md,sm,xs
Mithilfe dieser Optionen lässt sich die Breite von Elementen auf verschiedenen Bildschirmgrößen festlegen, um ein responsives und anpassungsfähiges Layout auf verschiedenen Geräten zu gewährleisten.
Gültige Zahlen sind 1 bis 12.
Wenn Sie eine Zahl angeben, beispielsweise 6, beträgt die Breite des Elements 6/12 (50 %) der Bildschirmbreite. Geben Sie beispielsweise 3 an, beträgt die Breite des Elements 3/12 (25 %) der Bildschirmbreite. Weisen Sie den verschiedenen Layoutoptionen Zahlen zu, um die Breite des Elements für die unterschiedlichen Bildschirmgrößen festzulegen.
| Option | Beschreibung |
|---|---|
xl | extra große Bildschirme (1536px >= Breite) |
md | mittlere Bildschirme (900px <= Breite < 1200px) |
sm | kleiner Bildschirm (600px <= Breite < 900px) |
xs | winzige Bildschirme (Breite < 600px) |
xs | winzige Bildschirme (Breite < 600px) |
Die folgenden Optionen sind die empfohlenen Voreinstellungen, die für die meisten Fälle geeignet sind.
"xs": 12,
"sm": 12,
"md": 6,
"lg": 4,
"xl": 4,
Es wird empfohlen, das Layout zu überprüfen.
Das jeweilige Layout sollte für jeden Adapter überprüft werden, um festzustellen, ob das Layout in allen Auflösungen angezeigt und verwendet werden kann.
Dies kann beispielsweise mit den Web Developer Tools getestet werden, die in jeden Chromium-basierten Browser integriert sind.
Schritt 1: Öffnen Sie die Webentwicklertools mit F12
Schritt 2: Öffnen Sie die Geräte-Symbolleiste (1).
Schritt 3: Verschiedene Geräte auswählen (2)

In den Einstellungen der Webentwicklertools können Sie bei Bedarf eigene Geräte mit exakten Breiten erstellen.
Weitere Optionen
| Option | Beschreibung |
|---|---|
type | Wenn ein Element kein Attribut type besitzt, wird der Standardtyp „Panel“ angenommen. Typ eines Elements. Die aktuell verfügbaren Optionen finden Sie unter Gemeinsame Steuerelemente: |
label | Zeichenkette oder Objekt wie {en: 'Name', ru: 'Имя'} |
hidden | JS-Funktion, die native.attribute für Berechnungen verwenden könnte |
hideOnlyControl | Wenn der Ort ausgeblendet ist, wird er angezeigt, aber es gibt keine Steuerungsmöglichkeiten. |
os | Dieses Element soll nur auf den folgenden Betriebssystemen des Hosts angezeigt werden, auf denen die Instanz ausgeführt wird: "win32" oder ["linux", "darwin"] |
notOs | Dieses Element soll auf folgenden Betriebssystemen des Hosts, auf dem die Instanz ausgeführt wird, nicht angezeigt werden: "win32" oder ["linux", "darwin"] |
docker | Dieses Element nur anzeigen, wenn der ioBroker in einem Docker-Container ausgeführt wird (true) oder nicht ausgeführt wird (false) |
disabled | JS-Funktion, die native.attribute für Berechnungen verwenden könnte |
dependsOnStates | ioBroker-Zustände, von denen dieses Element abhängt: {"running": ".info.browsing"}. Siehe Elemente je nach ioBroker-Zustand ein- oder ausblenden. |
help | Hilfetext (mehrsprachig) |
helpLink | href to help (could be used only together with help) |
style | CSS-Stil in ReactJS-Notation: radiusBorder und nicht radius-border. |
darkStyle | CSS-Stil für den Dunkelmodus |
validator | JS-Funktion: true - kein Fehler, false - Fehler |
validatorErrorText | Text, der angezeigt wird, wenn die Validierung fehlschlägt |
validatorNoSaveOnError | Speichern-Schaltfläche bei Fehler deaktivieren |
tooltip | optionaler Tooltip |
default | Standardwert |
defaultFunc | JS-Funktion zur Berechnung des Standardwerts |
placeholder | Platzhalter (für Textsteuerung) |
noTranslation | Auswahllisten und andere Optionen nicht übersetzen (nicht für Hilfe, Beschriftung oder Platzhalter) |
onChange | Struktur in Form {"alsoDependsOn": ["attr1", "attr2"], "calculateFunc": "data.attr1 + data.attr2", "ignoreOwnChanges": true} |
doNotSave | Dieses Attribut nicht speichern, da es nur für interne Berechnungen verwendet wird |
noMultiEdit | Wenn dieses Flag auf „true“ gesetzt ist, wird dieses Feld nicht angezeigt, wenn der Benutzer mehr als ein Objekt zur Bearbeitung ausgewählt hat. |
expertMode | Wenn dieses Flag auf „true“ gesetzt ist, wird dieses Feld nur angezeigt, wenn der Expertenmodus aktiviert ist (ab Admin 7.4.3) |
expertMode | Wenn dieses Flag auf „true“ gesetzt ist, wird dieses Feld nur angezeigt, wenn der Expertenmodus aktiviert ist (ab Admin 7.4.3) |
Elemente abhängig vom Betriebssystem anzeigen
Jedes Element (einschließlich panel, tabs, Tabellenspalten und einzelne select-Optionen) kann auf das Betriebssystem des ioBroker-Hosts beschränkt werden, auf dem die konfigurierte Instanz ausgeführt wird. Es ist nicht das Betriebssystem des Browsers.
{
"comPort": { "type": "text", "label": "COM port", "os": "win32" },
"ttyPort": { "type": "text", "label": "Serial device", "os": ["linux", "darwin"] },
"sudoHint": { "type": "staticText", "text": "The service must be started with sudo", "notOs": "win32" }
}
Zulässige Werte sind die Werte von node.js process.platform (wie in common.os oder io-package.json): aix, android, cygwin, darwin, freebsd, haiku, linux, netbsd, openbsd, sunos, win32.
- Wenn
osdefiniert ist, wird das Element nur auf den angegebenen Betriebssystemen angezeigt. - Wenn
notOsdefiniert ist, wird das Element auf allen Betriebssystemen außer den angegebenen angezeigt. - Wenn das Betriebssystem des Hosts nicht erkannt werden kann (z. B. wenn das Hostobjekt nicht lesbar ist), das Element
wird angezeigt. Es ist besser, ein Element zu viel anzuzeigen, als ein notwendiges zu verbergen.
- Ein nicht angezeigtes Element wird nicht gelöscht: Der Wert bleibt in der Konfiguration unverändert, genau wie bei
hidden.
Der Wert default eines solchen Elements wird jedoch nicht in die Konfiguration geschrieben.
Für komplexere Bedingungen können die Variablen _os, _arch und _host in jeder JS-Funktion (hidden, disabled, validator, defaultFunc, onChange.calculateFunc, confirm.condition) und in den Textmustern label, help usw. verwendet werden:
{
"type": "text",
"label": "Path to the executable file",
"disabled": "_os === 'win32'",
"defaultFunc": "_os === 'win32' ? 'C:\\\\Program Files\\\\app.exe' : '/usr/bin/app'",
"help": "Host ${_host.id} runs ${_os} on ${_arch}"
}
Elemente je nach ioBroker-Zustand ein- oder ausblenden.
Mit dependsOnStates kann ein Element auf die Werte von ioBroker-Zuständen reagieren. Die Zustände werden abonniert, sodass das Element bei einer Zustandsänderung sofort aktualisiert wird - ein Neuladen des Konfigurationsdialogs ist nicht erforderlich.
{
"startBrowse": {
"type": "sendTo",
"command": "browse",
"label": "${_states.running?.val ? 'Stop browse' : 'Start browse'}",
"dependsOnStates": { "running": ".info.browsing" },
"disabled": "!!_states.running?.val"
}
}
dependsOnStateswird als{"<alias>": "<state ID>"}geschrieben. Die Werte sind in allen JS-Funktionen verfügbar.
(hidden, disabled, validator, defaultFunc, onChange.calculateFunc, confirm.condition) und in den Textmustern von label, help, tooltip und so weiter bis _states.<alias>.
_states.<alias>enthält das gesamte Zustandsobjekt, also_states.running?.val,_states.running?.ts,
_states.running?.ack kann verwendet werden. Existiert der Zustand nicht, ist es null, daher sollte immer ?. verwendet werden.
- Eine Status-ID, die mit einem Punkt beginnt, adressiert die eigene Instanz:
.info.browsing=>myAdapter.0.info.browsing.
Jede zweite ID wird unverändert verwendet, sodass auch die Zustände anderer Adapter überwacht werden können.
- Die ID kann Muster wie
${data.xxx}enthalten, z. B."device": "${data.deviceInstance}.info.connection".
Bei einer Konfigurationsänderung wird das Problem erneut gelöst. Platzhalter (*) sind nicht zulässig.
- Wenn sich einer der Zustände ändert, werden
hidden,disabled,label,help,validatorunddefaultFuncdieser Funktion aktualisiert.
Das Element wird neu berechnet. Jeder Zustand wird nur einmal abonniert, unabhängig davon, wie viele Elemente (oder Tabellenzeilen) ihn verwenden.
- Die Kurzform
"dependsOnStates": ["admin.0.info.connection"]verwendet die ID selbst als Alias:
_states['admin.0.info.connection'].
- Das Attribut kann für jedes Element verwendet werden, auch für
panel,tabsund Tabellenspalten.
Hinweis: Ältere Admin-Versionen kennen _states nicht und würden bei der Auswertung einer solchen Funktion einen Fehler auslösen, sodass das Element sichtbar und aktiviert bleibt.
Hinweis: Ältere Admin-Versionen kennen _os nicht und würden "hidden": "_os !== 'linux'" zu true auswerten, wodurch das Element überall ausgeblendet würde. Daher sollten os/notOs bevorzugt werden, da diese von älteren Admin-Versionen einfach ignoriert werden (das Element wird angezeigt). Falls eine JavaScript-Funktion verwendet werden muss, sollte diese defensiv implementiert werden: "hidden": "!!_os && _os !== 'linux'".
Docker
Wenn ein Element davon abhängt, ob der ioBroker selbst in einem Docker-Container läuft, kann das Attribut docker verwendet werden:
{
"service": { "type": "checkbox", "label": "Install as service", "docker": false },
"volumeHint": { "type": "staticText", "text": "The directory must be mapped as volume", "docker": true }
}
"docker": true- Das Element wird nur angezeigt, wenn der ioBroker in einem Docker-Container ausgeführt wird."docker": false- Das Element wird nur angezeigt, wenn der ioBroker nicht in einem Docker-Container ausgeführt wird. Der Docker-Status kann nicht aus den Objekten gelesen werden, er muss von einem laufenden Host angefordert werden.
Wenn keine Antwort erfolgt, bleibt der Status unbekannt und das Element wird angezeigt.
Die Anfrage wird nur gesendet, wenn die Konfiguration tatsächlich docker oder _host.docker verwendet; alle anderen Anfragen werden ignoriert.
Die Konfigurationen verursachen keinen zusätzlichen Datenverkehr.
- In den JS-Funktionen ist der Status als
_host.dockerverfügbar (true,falseoderundefined, falls unbekannt) und
die Version des offiziellen ioBroker Docker-Images als _host.dockerVersion.
Verwechseln Sie dies nicht mit der checkDocker-Kontrolle: Diese prüft, ob auf dem Host eine Docker-Installation zur Steuerung von Containern verfügbar ist, und nicht, ob der ioBroker selbst in Docker läuft.
Optionen mit detaillierter Konfiguration
defaultSendTo
Befehl zum Anfordern eines Anfangswerts von der laufenden Instanz, Beispiel: "myInstance": {"type": "text", "defaultSendTo": "fill"}
data- statische DatenjsonData- statische Daten- Falls weder
datanochjsonDatadefiniert sind, werden die folgenden Informationen gesendet:{"attr": "<Attributname>", "value": "<aktueller Wert>"} button- Schaltflächenbeschriftung zum erneuten Auslösen der Anfrage von der InstanzbuttonTooltip- Tooltip für Schaltflächen (Standard:Daten pro Instanz anfordern)buttonTooltipNoTranslation- Schaltflächen-Tooltip nicht übersetzenallowSaveWithError- Ermöglicht das Speichern der Konfiguration auch dann, wenn die Instanz offline ist.
confirm
Bedingung- JS-Funktion: true Bestätigungsdialog anzeigentext- Text des Bestätigungsdialogstitle- Titel des Bestätigungsdialogsok- Text für die OK-Schaltflächecancel- Text für die Schaltfläche "Abbrechen"type- Einer der folgenden Werte:info,warning,error,nonealsoDependsOn- Array mit Attributen, um die Bedingung auch anhand dieser Attribute zu prüfen.
Autovervollständigung
Number, text, checkbox und select unterstützen die automatische Vervollständigung, um die Auswahl von Optionen zu ermöglichen, wenn diese als benutzerdefinierte Einstellungen verwendet werden.
In diesem Fall wird der Wert als Array aller möglichen Werte bereitgestellt.
Beispiel:
// ...
"timeout": {
"type": "number",
"label": "Timeout"
}
// ...
"data": {
"timeout": [1000, 2000, 3000]
}
In diesem Fall muss die Eingabe als Text erfolgen, wie im Beispiel __different__ dargestellt. Zur Vervollständigung stehen drei mögliche Werte zur Verfügung.
Benutzer können aus den Dropdown-Menüs 1000, 2000 oder 3000 auswählen oder einen eigenen Wert eingeben, z. B. 500.
Boolesche Werte müssen den Status „unbestimmt“ unterstützen, wenn ein Wert [false, true] ist.
Für nicht geänderte __different__ muss der abweichende Wert zurückgegeben werden:
Eingang:
"data": {
"timeout": [1000, 2000, 3000]
}
Ausgabe, wenn das Timeout nicht geändert wurde:
"newData": {
"timeout": "__different__"
}
Der Wert __different__ ist reserviert und darf von keinem Texteingabefeld vom Benutzer akzeptiert werden.
Die Komponente muss wie folgt aussehen
<SchemaEditor
style={customStyle}
className={classes.myClass}
schema={schema}
customInstancesEditor={CustomInstancesEditor}
data={common.native}
onError={(error, attribute) => {/* error can be true/false or text. Attribute is optional */}}
onChanged={(newData, isChanged) => console.log('Changed ' + isChanged)}
/>
Wird kein Schema angegeben, muss das Schema automatisch aus den Daten erstellt werden.
boolean=> Kontrollkästchentext=> Texteingabenumber=> number- name
bind=> ip - Name
Port=> Nummer, min=1, max=0xFFFF - name
timeout=> number, help="ms"
Todo
Die folgenden Kapitel stammen aus der Originaldatei SCHEMA.MD. Ich habe den Inhalt nicht im Detail verstanden und er musste von Bluefox überarbeitet werden.
JS-Funktionen
Konfigurationsdialog
Die JS-Funktion lautet:
const myValidator = "_alive === true && data.options.myType == 2";
const func = new Function(
'data', // actual obj.native or obj.common.custom['adapter.X'] object
// If table, so data is current line in the table
'originalData', // data before changes
'_system', // system config => 'system.config'=>common
'_alive', // If instance is alive
'_common', // common part of instance = 'system.config.ADAPTER.X' => common
'_socket', // socket connection
'_instance', // instance number
'arrayIndex', // filled only by table and represents the row index
'globalData', // filled only by table and represents the obj.native or obj.common.custom['adapter.X'] object
'_changed', // indicator if some data was changed and must be saved
'_href', // Current browser href
'getObject', // You can call `await getObject(data.id)`in hidden, disabled, pattern functions
'_os', // Operating system of the host, where the instance runs: 'win32', 'linux', 'darwin', ...
'_arch', // Architecture of the host, where the instance runs: 'x64', 'arm64', ...
'_host', // Information about the host: {id, os, osType, arch, release, nodeVersion, controllerVersion, docker, dockerVersion}
'_states', // Values of the states from `dependsOnStates`: {<alias>: <state object or null>}
myValidator.includes('return') ? myValidator : 'return ' + myValidator); // e.g. "_alive === true"
const isValid = func(data, systemConfig.common, instanceAlive, adapter.common, this.props.socket);
Ändert sich der Status alive, müssen alle Felder erneut aktualisiert, validiert, deaktiviert oder ausgeblendet werden.
Folgende Variablen stehen in der JS-Funktion in den Adaptereinstellungen zur Verfügung:
data- native Einstellungen für diese Instanz oder die aktuelle Zeile in der Tabelle (um auf alle Einstellungen zuzugreifen, verwenden Sie globalData)_system- Systemkonfiguration_alive- bedeutet, dass die Instanz lebt_common- Allgemeine Einstellungen für diese Instanz_socket- Socket_instance- InstanznummerarrayIndex- wird nur in Tabellen verwendet und repräsentiert die aktuelle Zeile in einem ArrayglobalData- wird nur in der Tabelle für alle Einstellungen verwendet und nicht nur in einer einzelnen Tabellenzeile_os- Betriebssystem des Hosts, auf dem die Instanz ausgeführt wird (process.platform), z. B.linux,win32,darwin. Leerer String, falls unbekannt._arch- Architektur des Hosts, auf dem die Instanz ausgeführt wird, z. B.x64,arm64_host- Informationen über den Host:{id, os, osType, arch, release, nodeVersion, controllerVersion, docker, dockerVersion}.dockeristundefined, wenn der Docker-Status nicht angefordert wurde oder der Host nicht geantwortet hat._states- Werte der Zustände ausdependsOnStates:{<alias>: <Zustandsobjekt>}.null, falls der Zustand nicht existiert
Dialog für benutzerdefinierte Einstellungen
Die JS-Funktion lautet:
const myValidator =
"customObj.common.type === 'boolean' && data.options.myType == 2";
const func = new Function(
"data",
"originalData",
"_system",
"instanceObj",
"customObj",
"_socket",
arrayIndex,
"_os",
"_arch",
"_host",
"_states",
myValidator.includes("return") ? myValidator : "return " + myValidator
); // e.g. "_alive === true"
const isValid = func(
data || this.props.data,
this.props.originalData,
this.props.systemConfig,
instanceObj,
customObj,
this.props.socket
);
Folgende Variablen stehen in der JS-Funktion in den benutzerdefinierten Einstellungen zur Verfügung:
data- aktuelle benutzerdefinierte Einstellungen oder aktuelle Zeile in der Tabelle (um auf alle Einstellungen zuzugreifen, verwenden Sie globalData)originalData- Unveränderte Daten_system- SystemkonfigurationinstanceObj- AdapterinstanzobjektcustomObj- das aktuelle Objekt selbst_socket- SocketarrayIndex- wird nur in Tabellen verwendet und repräsentiert die aktuelle Zeile in einem ArrayglobalData- wird nur in der Tabelle für alle Einstellungen verwendet und nicht nur in einer einzelnen Tabellenzeile_os- Betriebssystem des Hosts, auf dem die Instanz ausgeführt wird (process.platform), z. B.linux,win32,darwin. Leerer String, falls unbekannt._arch- Architektur des Hosts, auf dem die Instanz ausgeführt wird, z. B.x64,arm64_host- Informationen über den Host:{id, os, osType, arch, release, nodeVersion, controllerVersion, docker, dockerVersion}.dockeristundefined, wenn der Docker-Status nicht angefordert wurde oder der Host nicht geantwortet hat._states- Werte der Zustände ausdependsOnStates:{<alias>: <Zustandsobjekt>}.null, falls der Zustand nicht existiert
{
"general": {
// ....
"customSettingsValidator": "customObj.common.type === 'boolean' && data.options.myType == 2",
// ....
}
}
Sie können die Anwendung der benutzerdefinierten Einstellungen auf bestimmte Zustände beschränken, indem Sie statesFilter im Stammelement (panel oder tabs) der benutzerdefinierten Einstellungen definieren:
jsonCustom.json:
{
"i18n": true,
"type": "panel",
"statesFilter": true, // or "^hm-rpc\\.\\d\\..*\\.STATE$" - apply on "hm-rpc.X.*.STATE" states only
"items": {
// ...
}
}
Benutzerdefinierte Komponente
<CustomInstancesEditor
common={common.data}
alive={isInstanceAlive}
data={data}
socket={this.props.socket}
themeName={this.props.themeName}
themeType={this.props.themeType}
theme={this.props.theme}
name="accessAllowedConfigs"
onChange={(newData, isChanged) => {}}
onError={error => /* error can be true/false or text */ {}}
/>
Beispiele finden Sie im telegram oder in pushbullet Adapter.
JSON-Registerkarte im Adminbereich
Ab der Admin-Version 7.6.x können Sie die Registerkarte (z. B. backitup oder matter) über die JSON-Konfiguration definieren.
Dazu müssen Sie in io-package.json im folgenden Teil von common definieren:
{
"common": {
// ....
"adminTab": {
"link": "jsonTab.json", // the name could be any, but only ends with `.json` or `.json5`
// all following parameters are optional
"icon": "AABBCC", // base64 icon. If not provided, the adapter icon will be taken
"name": "TabName", // String or multi-language object for menu label
"singleton": true, // Tab will not have an instance number, and for all instances will exist only one menu item.
"order": 10, // Order in the admin tab (0 is disabled, 1 - first after static menu items, 200 is last)
},
// ....
}
}
Die Datei jsonTab.json5 könnte beispielsweise so aussehen:
{
"i18n": "tabI18n", // folder name in admin, where the translations are stored (relative to "admin" folder)
"command": "tab", // If defined, the tab will send a message by initializing to backend with command "tab" (string contained in "sendTo")
"items": {
"memHeapTotal": {
// This will show "system.adapter.admin.0.memHeapTotal" value
"type": "state",
"label": "Memory",
"sm": 12,
"system": true,
"oid": "memHeapTotal"
},
"infoConnected": {
// This will show "admin.0.info.connected" value
"newLine": true,
"type": "state",
"label": "Info about connected socket clients",
"sm": 12,
"oid": "info.connected"
},
"dayTime": {
// This will show "javascript.0.variables.dayTime" value
"newLine": true,
"type": "state",
"label": "Aktuelle Zeit",
"sm": 12,
"foreign": true,
"oid": "javascript.0.variables.dayTime"
},
"value": {
// This will show "data.value" value from "sendTo" answer
"newLine": true,
"type": "text",
"readOnly": "true",
"label": "Value from sendTo answer",
"sm": 12,
}
}
}
Wird sendTo angegeben, empfängt die Instanz eine Nachricht (common.messagebox muss in io-package.json wahr sein) mit dem Befehl tab oder, falls es sich um einen String handelt, mit einem in sendTo gespeicherten Wert.
Die Instanz muss mit folgender Struktur antworten:
onMessage = (obj: ioBroker.Message): void => {
if (obj?.command === 'tab' && obj.callback) {
// if not instance message
this.sendTo(obj.from, obj.command, { data: { value: 5 } }, obj.callback);
}
};
Schemafehler melden
Erstellen Sie hier ein Problem: https://github.com/ioBroker/ioBroker.admin/issues
Für den Maintainer
Um den Speicherort des JsonConfig-Schemas zu aktualisieren, erstellen Sie einen Pull Request für diese Datei: https://github.com/ioBroker/ioBroker.admin/blob/master/packages/jsonConfig/schemas/jsonConfig.json
Für Entwickler
Das Schema wird hier verwendet: https://github.com/SchemaStore/schemastore/blob/6da29cd9d7cc240fb4980625f0de6cf7bd8dfd06/src/api/json/catalog.json#L3214
Changelog
10.0.2 (2026-09-15)
- (@MiSchroe) Fixed: CRON schema accepts either simple or complex or none of them
- (@GermanBluefox) Updated Schema
10.0.1 (2026-09-12)
- (@GermanBluefox) The schema was corrected: closable to closeable.
- (@GermanBluefox) Updated packages
10.0.0 (2026-09-04)
- (@GermanBluefox) The schema allows the root property
commandof a JSON tab now. It was documented and honoured by admin, but everyjsonTab.json5that uses it was reported as invalid: https://github.com/ioBroker/ioBroker.admin/issues/3610 - (@GermanBluefox) The schema of
divideraccepts any CSS color and a height as a CSS length, as the control has always rendered them. Until now onlyprimary/secondaryand a number were allowed - (@GermanBluefox) Added
ackto thestatecontrol: the value is written as a command (ack: false) by default, as before, and an adapter that only shows its own value can now ask for an acknowledged write - (@GermanBluefox) Added
highlightto thestatecontrol, which highlights the line on mouse over, likestaticInfoalready did - (@GermanBluefox) Breaking for hosts:
react-aceis not a dependency of this library anymore. The host hands the editor in with the new propertyAceEditorofJsonConfig/JsonConfigComponent, together with the modesjson,json5,yamland the themesclouds_midnight,chrome. Without it the editors are plain text areas. Until now every bundle that uses this library carried the wholeace-buildsalong, the custom components of all adapters included
9.1.2 (2026-09-01)
- (@GermanBluefox) Replaced
react-colorwith theColorPickerfrom@iobroker/gui-componentsin thecolorcomponent
9.1.1 (2026-08-31)
- (@GermanBluefox) Do not show export import on narrow devices
9.1.0 (2026-08-31)
- (@GermanBluefox) Added progress bar to the state component
- (@GermanBluefox) Added the possibility to show or hide elements depending on the states:
dependsOnStatesand the JS variable_states
9.0.23 (2026-08-27)
- (@krobipd) Corrected: the object browser stayed empty after closing the object customization dialog if any object was changed while the dialog was open (ioBroker/ioBroker.admin#3391)
- (@krobipd) Changed:
ObjectBrowserClass.subscribesand.recordStatesare Sets instead of arrays now - (@krobipd) Improved: object browser performance on large installations — bursts of object changes cause one tree rebuild instead of several, state-change echoes no longer trigger redraws, subscription bookkeeping is no longer quadratic, and rows outside the viewport skip layout and paint
9.0.22 (2026-08-21)
- (@GermanBluefox) Corrected layout of Config view
9.0.21 (2026-08-19)
- (@GermanBluefox) Added the possibility to show or hide elements depending on the operating system of the host:
os,notOsand the JS variables_os,_arch,_host - (@GermanBluefox) Added the possibility to show or hide elements depending on the docker installation:
dockerand_host.docker
9.0.20 (2026-08-13)
- (@GermanBluefox) Correcting ConfigSelect component
9.0.19 (2026-08-09)
- (@GermanBluefox) Correcting autocompleteSendTo component
9.0.18 (2026-08-07)
- (@GermanBluefox) Updated packages
9.0.14 (2026-07-31)
- (@GermanBluefox) Updated packages
9.0.9 (2026-07-30)
- (@GermanBluefox) Improvement of I18n
9.0.7 (2026-07-26)
- (@GermanBluefox) Breaking: React 19 + MUI 9 + TS 6
- (@GermanBluefox) Added loading of the new custom components
8.5.5 (2026-07-24)
- (@GermanBluefox) Trying to improve the behaviour of tabs
8.5.4 (2026-07-23)
- (@GermanBluefox) Corrected the displaying of zero number values
- (@GermanBluefox) Trying to improve the behaviour of tabs
8.5.3 (2026-07-20)
- (@GermanBluefox) Changed the handling of Tabs
8.5.0 (2026-07-12)
- (@GermanBluefox) No functional updates, but only strict types for all components and attributes. This will help to avoid errors in the future.
8.4.15 (2026-07-04)
- (@GermanBluefox) Extended Credentials Component with AWS and Azure
8.4.13 (2026-06-29)
- (@GermanBluefox) Corrected the file selector component
- (@GermanBluefox) Implemented no translation for the select component
- (@GermanBluefox) Implemented debug mode for components to analyze JS functions
- (@ThomasPohl) Corrected rendering of the link in the static text component
8.4.11 (2026-06-21)
- (@GermanBluefox) Added missing translations
8.4.10 (2026-06-20)
- (@GermanBluefox) Fixed state component
8.4.9 (2026-06-19)
- (@GermanBluefox) Moved translations from adapter-react to this repository
8.4.8 (2026-06-18)
- (@GermanBluefox) Allowed creating credentials directly in the
credentialcomponent (templates with icons, filtered bycredentialType; can be disabled withdisableCreation)
8.4.7 (2026-06-07)
- (@GermanBluefox) Added a credential component
8.4.5 (2026-05-30)
- (@GermanBluefox) Fixing help rendering
8.4.4 (2026-05-29)
- (@GermanBluefox) Corrected groups in the select component
8.4.3 (2026-05-24)
- (@GermanBluefox) Optimization of interfaces
8.4.1 (2026-05-19)
- (@GermanBluefox) Allowed to use
await getObject(data.oid)?.common?.type === 'boolean'in hidden, pattern or disabled
8.3.13 (2026-05-16)
- (@GermanBluefox) Added
_hreftojsonData
8.3.11 (2026-04-29)
- (@GermanBluefox) Added
instanceoption for allsendTocomponents to override the target adapter instance
8.3.9 (2026-04-17)
- (@GermanBluefox) Updated packages
8.3.8 (2026-04-13)
- (@GermanBluefox) Adjust a path to images
8.3.5 (2026-04-11)
- (@GermanBluefox) Extend schema for staticLink and staticImage components
8.3.4 (2026-04-09)
- (@GermanBluefox) Added
horizontaloption forselectcomponent withformat: "radio"to display radio buttons in a row - (@GermanBluefox) Added
iconoption forselectcomponent options to display icons next to labels
8.3.2 (2026-03-31)
- (@GermanBluefox) Added possibility to provide custom components
8.2.22 (2026-03-29)
- (@GermanBluefox) Corrected error for "state" component
8.2.19 (2026-03-27)
- (@GermanBluefox) Added option "small cards" for device manager
8.2.18 (2026-03-25)
- (@GermanBluefox) Added the possibility to use own Client ID for oauth authentication
- (@GermanBluefox) Added the possibility to show a small image and open it in full size by clicking on it
8.2.11 (2026-03-20)
- (@GermanBluefox) Correcting unit in schema
- (@GermanBluefox) Fill other config fields when an object ID is selected
8.2.8 (2026-03-15)
- (@GermanBluefox) Added radio button control for the state component ('select')
8.2.7 (2026-03-14)
- (@GermanBluefox) Made the secondary text in 'select' and 'selectSendTo' smaller, italic and semi-transparent
8.2.6 (2026-03-14)
- (@GermanBluefox) Added description for options in 'select' or 'selectSendTo' component
8.2.5 (2026-03-12)
- (@GermanBluefox) Extended the staticText component with HTML and JSON visualization
8.2.3 (2026-03-04)
- (@GermanBluefox) Increased the QR code padding
8.2.2 (2026-03-03)
- (@GermanBluefox) Added option
sendFirstByClicktoimageSendTo - (@GermanBluefox) Added a new component:
qrCodeSendTo - (@GermanBluefox) Added option
digitstostatecomponent - (@GermanBluefox) Trying to fix indication of the problems in the table
8.1.11 (2026-02-12)
- (@GermanBluefox) Added the copy-to-clipboard dialog for
sendTo
8.1.9 (2026-02-10)
- (@GermanBluefox) Hiding the whole line in the table if shown as card and the line is empty
- (@GermanBluefox) Added the header to the table in the card mode
8.1.3 (2026-02-09)
- (@GermanBluefox) Added component
yamlEditorfor editing YAML files in admin
8.1.1 (2026-02-06)
- (@GermanBluefox) Added
iframeandiframeSendTocomponents
8.0.8 (2026-01-27)
- (@GermanBluefox) Fixing the
alivecomponent - (@GermanBluefox) Fixing the
datePickercomponent
8.0.7 (2026-01-27)
- (@GermanBluefox) Updated adapter-react-v5
8.0.6 (2025-11-10)
- (@GermanBluefox) Added width to many table elements
8.0.5 (2025-10-25)
- (@GermanBluefox) Do not translate certificates names
- (@GermanBluefox) Update packages
8.0.3 (2025-10-23)
- (@GermanBluefox) Do not translate certificates names
8.0.2 (2025-10-23)
- (@GermanBluefox) Renamed gui-components to adapter-react-v5
8.0.1 (2025-10-23)
- (@GermanBluefox) initial commit
License
It shows the license information if not already accepted. One of attributes texts or licenseUrl must be defined. When the license is accepted, the defined configuration attribute will be set to true.
| Property | Description |
|---|---|
texts | array of paragraphs with texts, which will be shown each as a separate paragraph |
licenseUrl | URL to the license file (e.g. https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/LICENSE) |
title | Title of the license dialog |
agreeText | Text of the agreed button |
checkBox | If defined, the checkbox with the given name will be shown. If checked, the agreed button will be enabled. |
checkDocker
- (admin >= 7.7.2) initial implementation
Special component to check if Docker is installed and running. If docker is installed, a checkbox will be shown to allow the usage of docker.
| Property | Description |
|---|---|
hideVersion | If the information about docker version or error should be hidden (e.g. if used more than one such element on the page the error or version will be shown once |
checkLicense
Very special component to check the license online. It's required exactly license and useLicenseManager properties in native.
| Property | Description |
|---|---|
uuid | Check UUID |
version | Check version |
uuid
Show iobroker UUID
port
Special input for ports. It checks automatically if the port is used by other instances and shows a warning
| Property | Description |
|---|---|
min | minimal allowed port number. It could be 0. And if the value is then zero, the check if the port is occupied will not happen. |
state
- (admin >= 7.1.0) Show control or information from the state
- (admin >= 7.6.4) attributes
showEnterButtonandsetOnEnterKey
| Property | Description |
|---|---|
oid | Which object ID should be taken for the controlling. The ID is without adapter.X. prefix |
system | If true, the state will be taken from system.adapter.X. and not from adapter.X |
foreign | The oid is absolute and no need to add adapter.X or system.adapter.X. to oid |
control | How the value of the state should be shown: text, html, input, slider, select, button, switch, number |
controlled | If true, the state will be shown as switch, select, button, slider or text input. Used only if no control property is defined |
unit | Add unit to the value |
trueText | this text will be shown if the value is true |
trueTextStyle | Style of the text if the value is true |
falseText | this text will be shown if the value is false or if the control is a "button" |
falseTextStyle | Style of the text if the value is false or if the control is a "button" |
trueImage | This image will be shown if the value is true |
falseImage | This image will be shown if the value is false or if the control is a "button" |
min | Minimum value for control type slider or number |
max | Maximum value for control type slider or number |
step | Step value for control type slider or number |
controlDelay | delay in ms for slider or number |
variant | Variant of button: contained, outlined, text |
readOnly | Defines if the control is read-only |
narrow | Normally the title and value are shown on the left and right of the line. With this flag, the value will appear just after the label |
blinkOnUpdate | Value should blink when updated (true or color) |
size | Font size: small, normal, large or number |
addColon | Add to label the colon at the end if not exist in label |
labelIcon | Base64 icon for label |
buttonValue | Optional value, that will be sent for button |
showEnterButton | Show SET button. The value in this case will be sent only when the button is pressed. You can define the text of the button. Default text is "Set" (Only for "input", "number" or "slider") |
setOnEnterKey | The value in this case will be sent only when the "Enter" button is pressed. It can be combined with showEnterButton |
options | Options for select in form ["value1", "value2", ...] or [{"value": "value", "label": "Value1", "color": "red"}, "value2", ...]. If not defiled, the common.states in the object must exist. |
digits | Number of decimal places to display for numeric values in text/html mode (e.g. 2 turns 230.2764537654374 into 230.28) |
ack | Write the value as acknowledged. A control writes a command by default (false), so that the adapter reacts to it |
highlight | Highlight the line on mouse over |
staticInfo
Shows static information in preformatted form, like "Title: value unit" (admin >= 7.3.3) This control is used mostly in dynamic forms
| Property | Description |
|---|---|
data | Value to be shown |
label | Label for the value (could be multi-language) |
unit | (optional) unit (could be multi-language) |
narrow | (optional) Normally the title and value are shown on the left and right of the line. With this flag, the value will appear just after the label |
addColon | (optional) Add to label the colon at the end if not exist in label |
blinkOnUpdate | (optional) Value should blink when updated (true or color) |
blink | (optional) Value should blink continuously (true or color) |
styleLabel | (optional) React CSS Styles |
styleValue | (optional) React CSS Styles |
styleUnit | (optional) React CSS Styles |
copyToClipboard | (optional) Show copy to clipboard button for value |
labelIcon | (optional) base64 icon for label |
size | (optional) font size: small, normal, large or number |
highlight | (optional) Highlight line on mouse over |
booleanAsCheckbox | (optional) Show boolean values as checkbox |
infoBox
Shows closable static text with optional title and icon. (From admin >= 7.6.19)
| Property | Description |
|---|---|
text | Text to be shown |
title | (optional) title for info box |
boxType | (optional) warning, info, error, ok. (Default info) |
closeable | (optional) If the box is closeable (Default true) |
iconPosition | (optional) top, middle (Default middle) |
closed | (optional) Will be shown as closed at the beginning |
deviceManager
show device manager. For that, the adapter must support device manager protocol. See iobroker/dm-utils.
| Property | Description |
|---|---|
smallCards | (optional) Show small device cards in the device manager |
Here is an example of how to show the device manager in a tab:
{
//...
"_deviceManager": {
"type": "panel",
"label": "Device manager",
"items": {
"_dm": {
"type": "deviceManager",
"sm": 12,
"style": {
"width": "100%",
"height": "100%",
"overflow": "hidden"
}
}
},
"style": {
"width": "100%",
"height": "100%",
"overflow": "hidden"
},
"innerStyle": {
"width": "100%",
"height": "100%",
"overflow": "hidden"
}
}
}
License
The MIT License (MIT)
Copyright (c) 2019-2026 @GermanBluefox dogafox@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.