External Display
Event / Externe Anzeige
Liefert eine Liste von ExternalDisplays.
GET/api/event/external_display
Query-Parameter
idinteger | |
deletedboolean | Diese Eigenschaft markiert eine Entität als gelöscht / archiviert | Benötigtes Zugriffsrecht: SCOPE | Standardwert: false |
namestring | |
deviceTypestring | Art des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den eingebauten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts. | Erforderliches Zugriffsrecht: SCOPE |
deviceIdstring | Öffentliche Kennung des Geräts, übermittelt im Anfragepfad. Bewusst nicht das Geheimnis: Pfade landen in Zugriffsprotokollen, Proxy-Protokollen und Support-Screenshots. Eine Kennung dort erlaubt es, ein Gerät im Protokoll zu identifizieren, ohne dass die Zugangsdaten mitgeführt werden. | Benötigt Zugriffsrecht: SCOPE |
contentProfilestring | Wie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: dass der Renderer die Daten lesen darf, bedeutet nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, da derselbe Raum ein Flurschild und ein Schild für das Personal tragen kann. | Benötigt Zugriffsrecht: SCOPE |
languagestring | Sprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gilt für das Display, nicht für die Installation: Eine Foyer-Anzeige in einem zweisprachigen Gebäude kann Englisch wünschen, während die Türschilder dahinter Deutsch bleiben. | Benötigt Zugriffs-Tag: SCOPE |
baseBookablestring | |
baseLocationstring | |
showBookingQrstring | Einen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn das Buchbare tatsächlich Selbstbuchungen annimmt - ein Code, der ins Leere führt, ist schlechter als kein Code. |
lastSeenAtstring | Letzter erfolgreicher Abruf durch das Gerät. Bewusst keine Log-Tabelle: Ein Display meldet sich alle paar Minuten, also rund 288 Zeilen pro Gerät und Tag, und nur die letzte wird gelesen. | Benötigt Zugriffs-Tag: SCOPE |
createdstring | |
updatedstring | |
searchStringstring | Text, nach dem in der Liste gesucht wird |
orderFieldNamestring | Name des Bestellfelds |
orderFieldSortstring | SortiermodusErlaubt: DESCASC |
pageinteger | Seite der Liste |
pageSizeinteger | Anzahl der Einträge je Seite |
withMaxPageNumberstring | gibt die Anzahl verfügbarer Seiten als Header zurück, wenn dies gesetzt ist |
Antworten
200Liefert eine Liste von ExternalDisplays.array<ExternalDisplay>
Felder anzeigen (22)
idintegerPrimärschlüssel der externen Anzeige. Interne ID.
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
device_idstringÖffentliche Kennung des Geräts, übermittelt im Anfragepfad. Bewusst nicht das Geheimnis: Pfade landen in Zugriffsprotokollen, Proxy-Logs und Support-Screenshots. Eine ID dort zu behalten erlaubt, ein Gerät in einem Log zu identifizieren, ohne dass das Credential mitläuft.
previous_secret_valid_untilstring (date-time)Zeitpunkt, bis zu dem das bisherige Geheimnis des Displays noch akzeptiert wird.
base_bookableBaseBookable16Buchbares Objekt, das die Anzeige zeigt.
Felder anzeigen (49)
ticketSeatingPlanIdintegerID des Platzplans des Raums, auch für die öffentliche Serialisierung.
idintegerPrimärschlüssel der buchbaren Ressource. Interne ID.
tokenstringÖffentlicher Token der buchbaren Ressource. In Links anstelle der ID verwendet.
bookable_typestringArt der Buchungsressource, zum Beispiel Raum, Platz oder Fahrzeug.
floor_levelstringEtage, auf der das Buchbare liegt.
floor_sizeintegerGrundfläche in Quadratmetern.
pets_allowedbooleanHaustiere sind erlaubt.
barrier_freebooleanDer Buchungsgegenstand ist barrierefrei.
cargo_volumeintegerLadevolumen in Litern.
fuel_typestringKraftstoffart des Fahrzeugs.
seating_capacityintegerAnzahl der Plätze.
has_wait_listbooleanDer Buchungsgegenstand hat eine Warteliste, sobald er voll belegt ist.
booking_limitintegerMaximale Anzahl Buchungen.
billing_modestringWie Buchungen zu diesem Buchbaren abgerechnet werden: BILLING_MODE_UPFRONT (null = vorab, Rechnung zum Buchungszeitpunkt) oder BILLING_MODE_USAGE (kostenlose Reservierung, nachgelagerte Abrechnung anhand der realen Nutzungsdaten) Auch im Standard: Die Mitglieder-App zeigt "Nutzung erfassen" nur für nutzungsabgerechnete Buchbare an.
max_active_bookings_per_userintegerMaximale Anzahl aktiver (zukünftiger, nicht stornierter) Selbstbedienungsbuchungen, die eine Person gleichzeitig für dieses buchbare Objekt halten darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
max_advance_booking_hoursintegerMaximale Anzahl Stunden, die eine Selbstbedienungsbuchung in der Zukunft beginnen darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
inventory_managedbooleanAls Inventar erfasst (Inventar-Ausleihe): Die Geschäftsstelle übergibt den Eintrag und nimmt ihn zurück, mit Kaution und Erinnerungen. Wird nur verwendet, solange die Einstellung event_inventory_enabled aktiv ist.
inventory_depositnumber (float)Kaution pro Stück, die bei der Übergabe verlangt wird. Null = keine Kaution.
require_addressbooleanDie Adresse muss bei der Buchung eingegeben werden.
require_contactbooleanKontaktdaten müssen bei der Buchung eingegeben werden.
require_billingbooleanBeim Buchen müssen Abrechnungsdaten eingegeben werden.
require_booking_titlebooleanBeim Buchen muss ein Titel eingegeben werden.
allow_direct_billingbooleanrequire_agebooleanDas Alter muss bei der Buchung eingegeben werden.
counter_update_modestringWie die Nutzungszähler des Buchbaren aktualisiert werden.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
base_locationBaseLocation10Standort, an dem das Display aufgestellt ist.
Felder anzeigen (29)
idintegerPrimärschlüssel des Standorts. Interne ID.
tokenstringÖffentlicher Token des Standorts. In Links anstelle der ID verwendet.
location_typestringArt des Ortes, zum Beispiel Raum, Halle oder Außenbereich.
in_contact_centerbooleanDer Standort wird im Kontaktcenter angezeigt.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
is_ui_filterbooleanDiese Eigenschaft markiert eine Entität als Filter für das Frontend
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
last_seen_atstring (date-time)Letzter erfolgreicher Abruf durch das Gerät. Bewusst keine Logtabelle: Ein Display meldet sich alle paar Minuten, das sind etwa 288 Zeilen pro Gerät und Tag, und nur die letzte wird jemals gelesen.
battery_voltagenumber (float)Akkuspannung des Displays in Volt.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
battery_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass die Batterie unter dem Schwellenwert liegt. Wird zurückgesetzt, sobald ein Messwert wieder deutlich darüber liegt; so wird bei einer ersetzten Batterie die Warnung erneut scharfgeschaltet. Dies ist ebenso das Wartungskennzeichen des Displays wie eine Sendemarkierung: Es wird auch gesetzt, wenn kein Empfänger konfiguriert ist.
offline_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass das Display zu lange keine Rückmeldung gegeben hat. Wird beim nächsten Abruf des Geräts zurückgesetzt.
firmware_versionstringFirmware-Version des Displays.
rssiintegerSignalstärke des Displays in dBm.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/external_display \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://eure-instanz.iw-erp.de/api/event/external_display', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"language": "de",
"notice_text": "Text",
"name": "Beispiel",
"device_type": "string",
"device_id": "42",
"previous_secret_valid_until": "2026-10-15T09:30:00+02:00",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"base_location": {
"id": 42,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel",
"image_url": "https://vynst.de"
},
"content_profile": "string"
}
]Fügt ein neues ExternalDisplay hinzu
POST/api/event/external_display
Request-Body application/json
dataExternalDisplay2Felder anzeigen (10)
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
base_bookableBaseBookable17Buchbares Objekt, das die Anzeige zeigt.
base_locationBaseLocation6Standort, an dem das Display aufgestellt ist.
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
Antworten
200ExternalDisplay neu anlegenExternalDisplay
Felder anzeigen (22)
idintegerPrimärschlüssel der externen Anzeige. Interne ID.
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
device_idstringÖffentliche Kennung des Geräts, übermittelt im Anfragepfad. Bewusst nicht das Geheimnis: Pfade landen in Zugriffsprotokollen, Proxy-Logs und Support-Screenshots. Eine ID dort zu behalten erlaubt, ein Gerät in einem Log zu identifizieren, ohne dass das Credential mitläuft.
previous_secret_valid_untilstring (date-time)Zeitpunkt, bis zu dem das bisherige Geheimnis des Displays noch akzeptiert wird.
base_bookableBaseBookable16Buchbares Objekt, das die Anzeige zeigt.
Felder anzeigen (49)
ticketSeatingPlanIdintegerID des Platzplans des Raums, auch für die öffentliche Serialisierung.
idintegerPrimärschlüssel der buchbaren Ressource. Interne ID.
tokenstringÖffentlicher Token der buchbaren Ressource. In Links anstelle der ID verwendet.
bookable_typestringArt der Buchungsressource, zum Beispiel Raum, Platz oder Fahrzeug.
floor_levelstringEtage, auf der das Buchbare liegt.
floor_sizeintegerGrundfläche in Quadratmetern.
pets_allowedbooleanHaustiere sind erlaubt.
barrier_freebooleanDer Buchungsgegenstand ist barrierefrei.
cargo_volumeintegerLadevolumen in Litern.
fuel_typestringKraftstoffart des Fahrzeugs.
seating_capacityintegerAnzahl der Plätze.
has_wait_listbooleanDer Buchungsgegenstand hat eine Warteliste, sobald er voll belegt ist.
booking_limitintegerMaximale Anzahl Buchungen.
billing_modestringWie Buchungen zu diesem Buchbaren abgerechnet werden: BILLING_MODE_UPFRONT (null = vorab, Rechnung zum Buchungszeitpunkt) oder BILLING_MODE_USAGE (kostenlose Reservierung, nachgelagerte Abrechnung anhand der realen Nutzungsdaten) Auch im Standard: Die Mitglieder-App zeigt "Nutzung erfassen" nur für nutzungsabgerechnete Buchbare an.
max_active_bookings_per_userintegerMaximale Anzahl aktiver (zukünftiger, nicht stornierter) Selbstbedienungsbuchungen, die eine Person gleichzeitig für dieses buchbare Objekt halten darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
max_advance_booking_hoursintegerMaximale Anzahl Stunden, die eine Selbstbedienungsbuchung in der Zukunft beginnen darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
inventory_managedbooleanAls Inventar erfasst (Inventar-Ausleihe): Die Geschäftsstelle übergibt den Eintrag und nimmt ihn zurück, mit Kaution und Erinnerungen. Wird nur verwendet, solange die Einstellung event_inventory_enabled aktiv ist.
inventory_depositnumber (float)Kaution pro Stück, die bei der Übergabe verlangt wird. Null = keine Kaution.
require_addressbooleanDie Adresse muss bei der Buchung eingegeben werden.
require_contactbooleanKontaktdaten müssen bei der Buchung eingegeben werden.
require_billingbooleanBeim Buchen müssen Abrechnungsdaten eingegeben werden.
require_booking_titlebooleanBeim Buchen muss ein Titel eingegeben werden.
allow_direct_billingbooleanrequire_agebooleanDas Alter muss bei der Buchung eingegeben werden.
counter_update_modestringWie die Nutzungszähler des Buchbaren aktualisiert werden.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
base_locationBaseLocation10Standort, an dem das Display aufgestellt ist.
Felder anzeigen (29)
idintegerPrimärschlüssel des Standorts. Interne ID.
tokenstringÖffentlicher Token des Standorts. In Links anstelle der ID verwendet.
location_typestringArt des Ortes, zum Beispiel Raum, Halle oder Außenbereich.
in_contact_centerbooleanDer Standort wird im Kontaktcenter angezeigt.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
is_ui_filterbooleanDiese Eigenschaft markiert eine Entität als Filter für das Frontend
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
last_seen_atstring (date-time)Letzter erfolgreicher Abruf durch das Gerät. Bewusst keine Logtabelle: Ein Display meldet sich alle paar Minuten, das sind etwa 288 Zeilen pro Gerät und Tag, und nur die letzte wird jemals gelesen.
battery_voltagenumber (float)Akkuspannung des Displays in Volt.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
battery_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass die Batterie unter dem Schwellenwert liegt. Wird zurückgesetzt, sobald ein Messwert wieder deutlich darüber liegt; so wird bei einer ersetzten Batterie die Warnung erneut scharfgeschaltet. Dies ist ebenso das Wartungskennzeichen des Displays wie eine Sendemarkierung: Es wird auch gesetzt, wenn kein Empfänger konfiguriert ist.
offline_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass das Display zu lange keine Rückmeldung gegeben hat. Wird beim nächsten Abruf des Geräts zurückgesetzt.
firmware_versionstringFirmware-Version des Displays.
rssiintegerSignalstärke des Displays in dBm.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request POST \
--url https://eure-instanz.iw-erp.de/api/event/external_display \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
language: 'de',
notice_text: 'Text',
device_type: 'string',
base_bookable: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
base_location: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
content_profile: 'string'
}
})
};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display"
payload = { "data": {
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://eure-instanz.iw-erp.de/api/event/external_display', [
'body' => '{"data":{"language":"de","notice_text":"Text","device_type":"string","base_bookable":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"base_location":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"content_profile":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}");
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display"
payload := strings.NewReader("{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/external_display.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.post(ExternalDisplay.fromJson({
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"language": "de",
"notice_text": "Text",
"name": "Beispiel",
"device_type": "string",
"device_id": "42",
"previous_secret_valid_until": "2026-10-15T09:30:00+02:00",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"base_location": {
"id": 42,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel",
"image_url": "https://vynst.de"
},
"content_profile": "string"
}Liefert ein einzelnes ExternalDisplay-Objekt.
GET/api/event/external_display/{identifier}
Pfad-Parameter
identifierPflichtstring |
Antworten
200Liefert ein einzelnes ExternalDisplay-Objekt.ExternalDisplay
Felder anzeigen (22)
idintegerPrimärschlüssel der externen Anzeige. Interne ID.
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
device_idstringÖffentliche Kennung des Geräts, übermittelt im Anfragepfad. Bewusst nicht das Geheimnis: Pfade landen in Zugriffsprotokollen, Proxy-Logs und Support-Screenshots. Eine ID dort zu behalten erlaubt, ein Gerät in einem Log zu identifizieren, ohne dass das Credential mitläuft.
previous_secret_valid_untilstring (date-time)Zeitpunkt, bis zu dem das bisherige Geheimnis des Displays noch akzeptiert wird.
base_bookableBaseBookable16Buchbares Objekt, das die Anzeige zeigt.
Felder anzeigen (49)
ticketSeatingPlanIdintegerID des Platzplans des Raums, auch für die öffentliche Serialisierung.
idintegerPrimärschlüssel der buchbaren Ressource. Interne ID.
tokenstringÖffentlicher Token der buchbaren Ressource. In Links anstelle der ID verwendet.
bookable_typestringArt der Buchungsressource, zum Beispiel Raum, Platz oder Fahrzeug.
floor_levelstringEtage, auf der das Buchbare liegt.
floor_sizeintegerGrundfläche in Quadratmetern.
pets_allowedbooleanHaustiere sind erlaubt.
barrier_freebooleanDer Buchungsgegenstand ist barrierefrei.
cargo_volumeintegerLadevolumen in Litern.
fuel_typestringKraftstoffart des Fahrzeugs.
seating_capacityintegerAnzahl der Plätze.
has_wait_listbooleanDer Buchungsgegenstand hat eine Warteliste, sobald er voll belegt ist.
booking_limitintegerMaximale Anzahl Buchungen.
billing_modestringWie Buchungen zu diesem Buchbaren abgerechnet werden: BILLING_MODE_UPFRONT (null = vorab, Rechnung zum Buchungszeitpunkt) oder BILLING_MODE_USAGE (kostenlose Reservierung, nachgelagerte Abrechnung anhand der realen Nutzungsdaten) Auch im Standard: Die Mitglieder-App zeigt "Nutzung erfassen" nur für nutzungsabgerechnete Buchbare an.
max_active_bookings_per_userintegerMaximale Anzahl aktiver (zukünftiger, nicht stornierter) Selbstbedienungsbuchungen, die eine Person gleichzeitig für dieses buchbare Objekt halten darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
max_advance_booking_hoursintegerMaximale Anzahl Stunden, die eine Selbstbedienungsbuchung in der Zukunft beginnen darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
inventory_managedbooleanAls Inventar erfasst (Inventar-Ausleihe): Die Geschäftsstelle übergibt den Eintrag und nimmt ihn zurück, mit Kaution und Erinnerungen. Wird nur verwendet, solange die Einstellung event_inventory_enabled aktiv ist.
inventory_depositnumber (float)Kaution pro Stück, die bei der Übergabe verlangt wird. Null = keine Kaution.
require_addressbooleanDie Adresse muss bei der Buchung eingegeben werden.
require_contactbooleanKontaktdaten müssen bei der Buchung eingegeben werden.
require_billingbooleanBeim Buchen müssen Abrechnungsdaten eingegeben werden.
require_booking_titlebooleanBeim Buchen muss ein Titel eingegeben werden.
allow_direct_billingbooleanrequire_agebooleanDas Alter muss bei der Buchung eingegeben werden.
counter_update_modestringWie die Nutzungszähler des Buchbaren aktualisiert werden.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
base_locationBaseLocation10Standort, an dem das Display aufgestellt ist.
Felder anzeigen (29)
idintegerPrimärschlüssel des Standorts. Interne ID.
tokenstringÖffentlicher Token des Standorts. In Links anstelle der ID verwendet.
location_typestringArt des Ortes, zum Beispiel Raum, Halle oder Außenbereich.
in_contact_centerbooleanDer Standort wird im Kontaktcenter angezeigt.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
is_ui_filterbooleanDiese Eigenschaft markiert eine Entität als Filter für das Frontend
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
last_seen_atstring (date-time)Letzter erfolgreicher Abruf durch das Gerät. Bewusst keine Logtabelle: Ein Display meldet sich alle paar Minuten, das sind etwa 288 Zeilen pro Gerät und Tag, und nur die letzte wird jemals gelesen.
battery_voltagenumber (float)Akkuspannung des Displays in Volt.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
battery_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass die Batterie unter dem Schwellenwert liegt. Wird zurückgesetzt, sobald ein Messwert wieder deutlich darüber liegt; so wird bei einer ersetzten Batterie die Warnung erneut scharfgeschaltet. Dies ist ebenso das Wartungskennzeichen des Displays wie eine Sendemarkierung: Es wird auch gesetzt, wenn kein Empfänger konfiguriert ist.
offline_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass das Display zu lange keine Rückmeldung gegeben hat. Wird beim nächsten Abruf des Geräts zurückgesetzt.
firmware_versionstringFirmware-Version des Displays.
rssiintegerSignalstärke des Displays in dBm.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/external_display/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://eure-instanz.iw-erp.de/api/event/external_display/42', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display/42")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display/42"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"language": "de",
"notice_text": "Text",
"name": "Beispiel",
"device_type": "string",
"device_id": "42",
"previous_secret_valid_until": "2026-10-15T09:30:00+02:00",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"base_location": {
"id": 42,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel",
"image_url": "https://vynst.de"
},
"content_profile": "string"
}Aktualisiert ein ExternalDisplay
PUT/api/event/external_display/{identifier}
Pfad-Parameter
identifierPflichtstring |
Request-Body application/json
dataExternalDisplay2Felder anzeigen (10)
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
base_bookableBaseBookable17Buchbares Objekt, das die Anzeige zeigt.
base_locationBaseLocation6Standort, an dem das Display aufgestellt ist.
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
Antworten
200ExternalDisplay aktualisierenExternalDisplay
Felder anzeigen (22)
idintegerPrimärschlüssel der externen Anzeige. Interne ID.
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
device_idstringÖffentliche Kennung des Geräts, übermittelt im Anfragepfad. Bewusst nicht das Geheimnis: Pfade landen in Zugriffsprotokollen, Proxy-Logs und Support-Screenshots. Eine ID dort zu behalten erlaubt, ein Gerät in einem Log zu identifizieren, ohne dass das Credential mitläuft.
previous_secret_valid_untilstring (date-time)Zeitpunkt, bis zu dem das bisherige Geheimnis des Displays noch akzeptiert wird.
base_bookableBaseBookable16Buchbares Objekt, das die Anzeige zeigt.
Felder anzeigen (49)
ticketSeatingPlanIdintegerID des Platzplans des Raums, auch für die öffentliche Serialisierung.
idintegerPrimärschlüssel der buchbaren Ressource. Interne ID.
tokenstringÖffentlicher Token der buchbaren Ressource. In Links anstelle der ID verwendet.
bookable_typestringArt der Buchungsressource, zum Beispiel Raum, Platz oder Fahrzeug.
floor_levelstringEtage, auf der das Buchbare liegt.
floor_sizeintegerGrundfläche in Quadratmetern.
pets_allowedbooleanHaustiere sind erlaubt.
barrier_freebooleanDer Buchungsgegenstand ist barrierefrei.
cargo_volumeintegerLadevolumen in Litern.
fuel_typestringKraftstoffart des Fahrzeugs.
seating_capacityintegerAnzahl der Plätze.
has_wait_listbooleanDer Buchungsgegenstand hat eine Warteliste, sobald er voll belegt ist.
booking_limitintegerMaximale Anzahl Buchungen.
billing_modestringWie Buchungen zu diesem Buchbaren abgerechnet werden: BILLING_MODE_UPFRONT (null = vorab, Rechnung zum Buchungszeitpunkt) oder BILLING_MODE_USAGE (kostenlose Reservierung, nachgelagerte Abrechnung anhand der realen Nutzungsdaten) Auch im Standard: Die Mitglieder-App zeigt "Nutzung erfassen" nur für nutzungsabgerechnete Buchbare an.
max_active_bookings_per_userintegerMaximale Anzahl aktiver (zukünftiger, nicht stornierter) Selbstbedienungsbuchungen, die eine Person gleichzeitig für dieses buchbare Objekt halten darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
max_advance_booking_hoursintegerMaximale Anzahl Stunden, die eine Selbstbedienungsbuchung in der Zukunft beginnen darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
inventory_managedbooleanAls Inventar erfasst (Inventar-Ausleihe): Die Geschäftsstelle übergibt den Eintrag und nimmt ihn zurück, mit Kaution und Erinnerungen. Wird nur verwendet, solange die Einstellung event_inventory_enabled aktiv ist.
inventory_depositnumber (float)Kaution pro Stück, die bei der Übergabe verlangt wird. Null = keine Kaution.
require_addressbooleanDie Adresse muss bei der Buchung eingegeben werden.
require_contactbooleanKontaktdaten müssen bei der Buchung eingegeben werden.
require_billingbooleanBeim Buchen müssen Abrechnungsdaten eingegeben werden.
require_booking_titlebooleanBeim Buchen muss ein Titel eingegeben werden.
allow_direct_billingbooleanrequire_agebooleanDas Alter muss bei der Buchung eingegeben werden.
counter_update_modestringWie die Nutzungszähler des Buchbaren aktualisiert werden.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
base_locationBaseLocation10Standort, an dem das Display aufgestellt ist.
Felder anzeigen (29)
idintegerPrimärschlüssel des Standorts. Interne ID.
tokenstringÖffentlicher Token des Standorts. In Links anstelle der ID verwendet.
location_typestringArt des Ortes, zum Beispiel Raum, Halle oder Außenbereich.
in_contact_centerbooleanDer Standort wird im Kontaktcenter angezeigt.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
is_ui_filterbooleanDiese Eigenschaft markiert eine Entität als Filter für das Frontend
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
last_seen_atstring (date-time)Letzter erfolgreicher Abruf durch das Gerät. Bewusst keine Logtabelle: Ein Display meldet sich alle paar Minuten, das sind etwa 288 Zeilen pro Gerät und Tag, und nur die letzte wird jemals gelesen.
battery_voltagenumber (float)Akkuspannung des Displays in Volt.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
battery_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass die Batterie unter dem Schwellenwert liegt. Wird zurückgesetzt, sobald ein Messwert wieder deutlich darüber liegt; so wird bei einer ersetzten Batterie die Warnung erneut scharfgeschaltet. Dies ist ebenso das Wartungskennzeichen des Displays wie eine Sendemarkierung: Es wird auch gesetzt, wenn kein Empfänger konfiguriert ist.
offline_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass das Display zu lange keine Rückmeldung gegeben hat. Wird beim nächsten Abruf des Geräts zurückgesetzt.
firmware_versionstringFirmware-Version des Displays.
rssiintegerSignalstärke des Displays in dBm.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request PUT \
--url https://eure-instanz.iw-erp.de/api/event/external_display/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
language: 'de',
notice_text: 'Text',
device_type: 'string',
base_bookable: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
base_location: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
content_profile: 'string'
}
})
};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display/42"
payload = { "data": {
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', 'https://eure-instanz.iw-erp.de/api/event/external_display/42', [
'body' => '{"data":{"language":"de","notice_text":"Text","device_type":"string","base_bookable":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"base_location":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"content_profile":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}");
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display/42")
.put(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display/42"
payload := strings.NewReader("{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/external_display.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.put(ExternalDisplay.fromJson({
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"language": "de",
"notice_text": "Text",
"name": "Beispiel",
"device_type": "string",
"device_id": "42",
"previous_secret_valid_until": "2026-10-15T09:30:00+02:00",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"base_location": {
"id": 42,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel",
"image_url": "https://vynst.de"
},
"content_profile": "string"
}Aktualisiert ein ExternalDisplay
PATCH/api/event/external_display/{identifier}
Pfad-Parameter
identifierPflichtstring |
Request-Body application/json
dataExternalDisplay2Felder anzeigen (10)
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
base_bookableBaseBookable17Buchbares Objekt, das die Anzeige zeigt.
base_locationBaseLocation6Standort, an dem das Display aufgestellt ist.
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
Antworten
200ExternalDisplay aktualisierenExternalDisplay
Felder anzeigen (22)
idintegerPrimärschlüssel der externen Anzeige. Interne ID.
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
device_idstringÖffentliche Kennung des Geräts, übermittelt im Anfragepfad. Bewusst nicht das Geheimnis: Pfade landen in Zugriffsprotokollen, Proxy-Logs und Support-Screenshots. Eine ID dort zu behalten erlaubt, ein Gerät in einem Log zu identifizieren, ohne dass das Credential mitläuft.
previous_secret_valid_untilstring (date-time)Zeitpunkt, bis zu dem das bisherige Geheimnis des Displays noch akzeptiert wird.
base_bookableBaseBookable16Buchbares Objekt, das die Anzeige zeigt.
Felder anzeigen (49)
ticketSeatingPlanIdintegerID des Platzplans des Raums, auch für die öffentliche Serialisierung.
idintegerPrimärschlüssel der buchbaren Ressource. Interne ID.
tokenstringÖffentlicher Token der buchbaren Ressource. In Links anstelle der ID verwendet.
bookable_typestringArt der Buchungsressource, zum Beispiel Raum, Platz oder Fahrzeug.
floor_levelstringEtage, auf der das Buchbare liegt.
floor_sizeintegerGrundfläche in Quadratmetern.
pets_allowedbooleanHaustiere sind erlaubt.
barrier_freebooleanDer Buchungsgegenstand ist barrierefrei.
cargo_volumeintegerLadevolumen in Litern.
fuel_typestringKraftstoffart des Fahrzeugs.
seating_capacityintegerAnzahl der Plätze.
has_wait_listbooleanDer Buchungsgegenstand hat eine Warteliste, sobald er voll belegt ist.
booking_limitintegerMaximale Anzahl Buchungen.
billing_modestringWie Buchungen zu diesem Buchbaren abgerechnet werden: BILLING_MODE_UPFRONT (null = vorab, Rechnung zum Buchungszeitpunkt) oder BILLING_MODE_USAGE (kostenlose Reservierung, nachgelagerte Abrechnung anhand der realen Nutzungsdaten) Auch im Standard: Die Mitglieder-App zeigt "Nutzung erfassen" nur für nutzungsabgerechnete Buchbare an.
max_active_bookings_per_userintegerMaximale Anzahl aktiver (zukünftiger, nicht stornierter) Selbstbedienungsbuchungen, die eine Person gleichzeitig für dieses buchbare Objekt halten darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
max_advance_booking_hoursintegerMaximale Anzahl Stunden, die eine Selbstbedienungsbuchung in der Zukunft beginnen darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
inventory_managedbooleanAls Inventar erfasst (Inventar-Ausleihe): Die Geschäftsstelle übergibt den Eintrag und nimmt ihn zurück, mit Kaution und Erinnerungen. Wird nur verwendet, solange die Einstellung event_inventory_enabled aktiv ist.
inventory_depositnumber (float)Kaution pro Stück, die bei der Übergabe verlangt wird. Null = keine Kaution.
require_addressbooleanDie Adresse muss bei der Buchung eingegeben werden.
require_contactbooleanKontaktdaten müssen bei der Buchung eingegeben werden.
require_billingbooleanBeim Buchen müssen Abrechnungsdaten eingegeben werden.
require_booking_titlebooleanBeim Buchen muss ein Titel eingegeben werden.
allow_direct_billingbooleanrequire_agebooleanDas Alter muss bei der Buchung eingegeben werden.
counter_update_modestringWie die Nutzungszähler des Buchbaren aktualisiert werden.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
base_locationBaseLocation10Standort, an dem das Display aufgestellt ist.
Felder anzeigen (29)
idintegerPrimärschlüssel des Standorts. Interne ID.
tokenstringÖffentlicher Token des Standorts. In Links anstelle der ID verwendet.
location_typestringArt des Ortes, zum Beispiel Raum, Halle oder Außenbereich.
in_contact_centerbooleanDer Standort wird im Kontaktcenter angezeigt.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
is_ui_filterbooleanDiese Eigenschaft markiert eine Entität als Filter für das Frontend
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
last_seen_atstring (date-time)Letzter erfolgreicher Abruf durch das Gerät. Bewusst keine Logtabelle: Ein Display meldet sich alle paar Minuten, das sind etwa 288 Zeilen pro Gerät und Tag, und nur die letzte wird jemals gelesen.
battery_voltagenumber (float)Akkuspannung des Displays in Volt.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
battery_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass die Batterie unter dem Schwellenwert liegt. Wird zurückgesetzt, sobald ein Messwert wieder deutlich darüber liegt; so wird bei einer ersetzten Batterie die Warnung erneut scharfgeschaltet. Dies ist ebenso das Wartungskennzeichen des Displays wie eine Sendemarkierung: Es wird auch gesetzt, wenn kein Empfänger konfiguriert ist.
offline_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass das Display zu lange keine Rückmeldung gegeben hat. Wird beim nächsten Abruf des Geräts zurückgesetzt.
firmware_versionstringFirmware-Version des Displays.
rssiintegerSignalstärke des Displays in dBm.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request PATCH \
--url https://eure-instanz.iw-erp.de/api/event/external_display/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
language: 'de',
notice_text: 'Text',
device_type: 'string',
base_bookable: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
base_location: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
content_profile: 'string'
}
})
};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display/42"
payload = { "data": {
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://eure-instanz.iw-erp.de/api/event/external_display/42', [
'body' => '{"data":{"language":"de","notice_text":"Text","device_type":"string","base_bookable":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"base_location":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"content_profile":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}");
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display/42")
.patch(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display/42"
payload := strings.NewReader("{\"data\":{\"language\":\"de\",\"notice_text\":\"Text\",\"device_type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"base_location\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"content_profile\":\"string\"}}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit package:http (kein Controller im Package iw_erp_api)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.patch(
Uri.parse('https://eure-instanz.iw-erp.de/api/event/external_display/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"language": "de",
"notice_text": "Text",
"device_type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"base_location": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"content_profile": "string"
}
}),
);
print(response.body);{
"id": 42,
"language": "de",
"notice_text": "Text",
"name": "Beispiel",
"device_type": "string",
"device_id": "42",
"previous_secret_valid_until": "2026-10-15T09:30:00+02:00",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"base_location": {
"id": 42,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel",
"image_url": "https://vynst.de"
},
"content_profile": "string"
}Löscht ein einzelnes ExternalDisplay
DELETE/api/event/external_display/{identifier}
Pfad-Parameter
identifierPflichtstring |
Antworten
200Löscht ein einzelnes ExternalDisplayExternalDisplay
Felder anzeigen (22)
idintegerPrimärschlüssel der externen Anzeige. Interne ID.
device_typestringArt des Geräts und damit der Treiber, der es darstellt. Derzeit gibt es nur den integrierten E-Paper-Renderer; eine Display-API eines Drittanbieters wird als zusätzlicher Typ plus zusätzlicher Treiber ergänzt, sonst nichts.
device_idstringÖffentliche Kennung des Geräts, übermittelt im Anfragepfad. Bewusst nicht das Geheimnis: Pfade landen in Zugriffsprotokollen, Proxy-Logs und Support-Screenshots. Eine ID dort zu behalten erlaubt, ein Gerät in einem Log zu identifizieren, ohne dass das Credential mitläuft.
previous_secret_valid_untilstring (date-time)Zeitpunkt, bis zu dem das bisherige Geheimnis des Displays noch akzeptiert wird.
base_bookableBaseBookable16Buchbares Objekt, das die Anzeige zeigt.
Felder anzeigen (49)
ticketSeatingPlanIdintegerID des Platzplans des Raums, auch für die öffentliche Serialisierung.
idintegerPrimärschlüssel der buchbaren Ressource. Interne ID.
tokenstringÖffentlicher Token der buchbaren Ressource. In Links anstelle der ID verwendet.
bookable_typestringArt der Buchungsressource, zum Beispiel Raum, Platz oder Fahrzeug.
floor_levelstringEtage, auf der das Buchbare liegt.
floor_sizeintegerGrundfläche in Quadratmetern.
pets_allowedbooleanHaustiere sind erlaubt.
barrier_freebooleanDer Buchungsgegenstand ist barrierefrei.
cargo_volumeintegerLadevolumen in Litern.
fuel_typestringKraftstoffart des Fahrzeugs.
seating_capacityintegerAnzahl der Plätze.
has_wait_listbooleanDer Buchungsgegenstand hat eine Warteliste, sobald er voll belegt ist.
booking_limitintegerMaximale Anzahl Buchungen.
billing_modestringWie Buchungen zu diesem Buchbaren abgerechnet werden: BILLING_MODE_UPFRONT (null = vorab, Rechnung zum Buchungszeitpunkt) oder BILLING_MODE_USAGE (kostenlose Reservierung, nachgelagerte Abrechnung anhand der realen Nutzungsdaten) Auch im Standard: Die Mitglieder-App zeigt "Nutzung erfassen" nur für nutzungsabgerechnete Buchbare an.
max_active_bookings_per_userintegerMaximale Anzahl aktiver (zukünftiger, nicht stornierter) Selbstbedienungsbuchungen, die eine Person gleichzeitig für dieses buchbare Objekt halten darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
max_advance_booking_hoursintegerMaximale Anzahl Stunden, die eine Selbstbedienungsbuchung in der Zukunft beginnen darf. Null = unbegrenzt. Admin-Buchungen sind nicht begrenzt.
inventory_managedbooleanAls Inventar erfasst (Inventar-Ausleihe): Die Geschäftsstelle übergibt den Eintrag und nimmt ihn zurück, mit Kaution und Erinnerungen. Wird nur verwendet, solange die Einstellung event_inventory_enabled aktiv ist.
inventory_depositnumber (float)Kaution pro Stück, die bei der Übergabe verlangt wird. Null = keine Kaution.
require_addressbooleanDie Adresse muss bei der Buchung eingegeben werden.
require_contactbooleanKontaktdaten müssen bei der Buchung eingegeben werden.
require_billingbooleanBeim Buchen müssen Abrechnungsdaten eingegeben werden.
require_booking_titlebooleanBeim Buchen muss ein Titel eingegeben werden.
allow_direct_billingbooleanrequire_agebooleanDas Alter muss bei der Buchung eingegeben werden.
counter_update_modestringWie die Nutzungszähler des Buchbaren aktualisiert werden.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
base_locationBaseLocation10Standort, an dem das Display aufgestellt ist.
Felder anzeigen (29)
idintegerPrimärschlüssel des Standorts. Interne ID.
tokenstringÖffentlicher Token des Standorts. In Links anstelle der ID verwendet.
location_typestringArt des Ortes, zum Beispiel Raum, Halle oder Außenbereich.
in_contact_centerbooleanDer Standort wird im Kontaktcenter angezeigt.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
addressstringAdresse als Text.
address_streetstringStraße der Adresse.
address_house_numberstringHausnummer der Adresse.
address_street_levelstringStraße und Hausnummer der Adresse.
address_costringCare-of-Zeile der Adresse.
address_citystringOrt der Adresse.
address_zipstringPostleitzahl der Adresse.
address_admin_level1stringErste Verwaltungsebene der Adresse, z. B. das Bundesland.
address_countrystringLändercode der Adresse.
address_full_countrystringVollständiger Name des Landes der Adresse.
address_geo_latstringBreitengrad der Adresse.
address_geo_lngstringLängengrad der Adresse.
address_external_provider_idstringFeld zur Speicherung der externen Anbieter-ID der Adresse, z. B. Google-Maps-PlaceID wie google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringHaupttelefonnummer.
main_faxstringHaupt-Faxnummer.
main_emailstringHaupt-E-Mail-Adresse.
websitestringWebsite-Adresse.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
short_identifierstringKurzkennung der Entität.
image_urlstringURL des Bildes des Datensatzes.
slug_identifierstringSlug, der in URLs der Entität verwendet wird.
is_ui_filterbooleanDiese Eigenschaft markiert eine Entität als Filter für das Frontend
content_profilestringWie viel dieses einzelne Schild anzeigen darf. Ein Türschild ist ein öffentlich sichtbarer Ausgabekanal: Dass der Renderer die Daten lesen darf, heißt nicht, dass das Schild sie anzeigen darf. Das Profil hängt am Display, nicht am Raum, weil derselbe Raum ein Flur-Schild und ein Schild für das Personal tragen kann.
languagestringSprache, in der alle Wörter auf diesem Rahmen dargestellt werden. Gehört zur Anzeige, nicht zur Installation: eine Foyertafel in einem zweisprachigen Gebäude kann Englisch verlangen, während die Türschilder dahinter Deutsch bleiben.
show_booking_qrbooleanEinen Buchungs-QR-Code anzeigen, wenn das Buchbare frei ist. Wird nur berücksichtigt, wenn die Buchungsart Selbstbedienungsbuchungen tatsächlich akzeptiert - ein Code, der ins Leere führt, ist schlechter als kein Code.
notice_textstringFreitext-Hinweis, als Fußzeile dargestellt.
refresh_secondsintegerBasiswert für den X-Refresh-After-Header in Sekunden. Der Renderer verkürzt ihn, wenn etwas früher passiert, und überschreitet ihn nie deutlich.
last_seen_atstring (date-time)Letzter erfolgreicher Abruf durch das Gerät. Bewusst keine Logtabelle: Ein Display meldet sich alle paar Minuten, das sind etwa 288 Zeilen pro Gerät und Tag, und nur die letzte wird jemals gelesen.
battery_voltagenumber (float)Akkuspannung des Displays in Volt.
battery_warn_voltagenumber (float)Akkuspannung, unterhalb der dieses Display als Akku-Wechsel nötig gilt. Je Anzeige, weil die Hardware um den Faktor zwei abweicht: Ein LiPo-Türschild liegt konstant bei etwa 3,5 V, ein OpenDisplay-Knopfzellen-Tag bei etwa 2,4 V. Leer bedeutet die installationsweite Vorgabe (event_external_display_battery_warn_voltage).
battery_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass die Batterie unter dem Schwellenwert liegt. Wird zurückgesetzt, sobald ein Messwert wieder deutlich darüber liegt; so wird bei einer ersetzten Batterie die Warnung erneut scharfgeschaltet. Dies ist ebenso das Wartungskennzeichen des Displays wie eine Sendemarkierung: Es wird auch gesetzt, wenn kein Empfänger konfiguriert ist.
offline_warning_sent_atstring (date-time)Wann der Health-Check festgestellt hat, dass das Display zu lange keine Rückmeldung gegeben hat. Wird beim nächsten Abruf des Geräts zurückgesetzt.
firmware_versionstringFirmware-Version des Displays.
rssiintegerSignalstärke des Displays in dBm.
namestringName der Einheit.
deletedbooleanDiese Eigenschaft markiert eine Entität als gelöscht / archiviert
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request DELETE \
--url https://eure-instanz.iw-erp.de/api/event/external_display/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'DELETE', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.delete(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://eure-instanz.iw-erp.de/api/event/external_display/42', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Delete,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display/42")
.delete(null)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display/42"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.delete('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"language": "de",
"notice_text": "Text",
"name": "Beispiel",
"device_type": "string",
"device_id": "42",
"previous_secret_valid_until": "2026-10-15T09:30:00+02:00",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"base_location": {
"id": 42,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel",
"image_url": "https://vynst.de"
},
"content_profile": "string"
}Liefert, was auf ein Gerät aufgespielt werden muss: dessen Abbild-URL und sein Geheimnis.
GET/api/event/external_display/{identifier}/credentials
Getrennt vom Detail-Endpunkt, damit das Geheimnis gezielt abgerufen wird und nur in einer einzigen Antwort erscheint, statt in jeder Liste mitzuwandern, die die Verwaltungsoberfläche lädt.
Pfad-Parameter
identifierPflichtstring |
Antworten
200Gerätezugangsdatenobject
Felder anzeigen (6)
device_idstringimage_urlstringsecretstringprevious_secretstringprevious_secret_valid_untilstringrefresh_secondsinteger
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/external_display/42/credentials \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display/42/credentials', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display/42/credentials"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://eure-instanz.iw-erp.de/api/event/external_display/42/credentials', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display/42/credentials"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display/42/credentials")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display/42/credentials"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.credentials('42');
if (result.success) {
print(result.data);
}{
"image_url": "https://vynst.de",
"device_id": "42",
"secret": "string",
"previous_secret": "string",
"previous_secret_valid_until": "string",
"refresh_seconds": 1
}Stellt ein neues Secret aus; das alte bleibt für eine Übergangszeit gültig.
POST/api/event/external_display/{identifier}/rotate_secret
Zwei Geheimnisse müssen gleichzeitig funktionieren: eine Rotation, die das Gerät nicht erreicht, ließe sonst ein totes Schild an einer Kundenwand zurück, und niemand bemerkt es, bis jemand daran vorbeigeht.
Pfad-Parameter
identifierPflichtstring |
Antworten
default
curl --request POST \
--url https://eure-instanz.iw-erp.de/api/event/external_display/42/rotate_secret \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display/42/rotate_secret', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display/42/rotate_secret"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://eure-instanz.iw-erp.de/api/event/external_display/42/rotate_secret', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display/42/rotate_secret"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display/42/rotate_secret")
.post(null)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display/42/rotate_secret"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.rotateSecret('42');
if (result.success) {
print(result.data);
}Stellt das aktuelle Bild als PNG für die Verwaltungsoberfläche dar.
GET/api/event/external_display/{identifier}/preview.png
Dieselben Pixel, die das Gerät erhält, vor dem Packen, sodass ein Administrator auf dem Bildschirm sieht, was an der Wand hängt.
Pfad-Parameter
identifierPflichtstring |
Query-Parameter
nowstring | Darstellung einer anderen Uhrzeit desselben Tages (HH:MM). |
Antworten
200Aktueller Frame
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/external_display/42/preview.png \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/external_display/42/preview.png', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/external_display/42/preview.png"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://eure-instanz.iw-erp.de/api/event/external_display/42/preview.png', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://eure-instanz.iw-erp.de/api/event/external_display/42/preview.png"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/external_display/42/preview.png")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eure-instanz.iw-erp.de/api/event/external_display/42/preview.png"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/external_display_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ExternalDisplayController.preview('42');
print(result);