Zum Inhalt springen
Anleitung

Eine Notfallmeldung an einem Standort zeigen

Eine vorbereitete Szene bis zu einer festen Uhrzeit auf alle Displays eines Standorts legen und mit einem Befehl vorzeitig beenden.

3 Min LesezeitStand 30. Okt. 2026Als Markdown
Für wen
Entwicklerinnen und Entwickler, die Alarm- oder Haustechnik anbinden oder ihrem Team einen Notfallknopf bauen
Voraussetzung
ein Schlüssel ak_… der Klasse Individuell mit location.list, fleet.player.list und schedule.update, und eine veröffentlichte Szene mit der Meldung
Ort
Kommandozeile
Auf dieser Seite

Am Ende legt ein Befehl eine vorbereitete Szene bis zu einer festen Uhrzeit auf alle Displays eines Standorts, und ein zweiter beendet sie vorzeitig. Das hilft bei einer kurzfristigen Schließung, einem Wasserschaden oder einer Räumung, wenn keine Zeit bleibt, sich durchs Portal zu klicken.

So funktioniert es

Eine Übersteuerung liegt über jedem Programm und endet zur angegebenen Zeit. Sie gilt immer für ein einzelnes Display. Das Skript liest deshalb die Displays des Standorts Seite für Seite und setzt die Übersteuerung auf jedem. Das Programm jedes Displays bleibt, wie es ist, und übernimmt wieder, sobald die Übersteuerung endet.

Spielen alle Displays des Standorts dasselbe Programm, erreicht ein einmaliger Programmpunkt alle mit einem Aufruf, siehe Eine Kampagne aus dem eigenen System einplanen. Im Notfall ist die Übersteuerung der schnellere Weg, weil sie die Programme nicht kennen muss.

Schritte

  1. Bereiten Sie die Szene vor und veröffentlichen Sie sie im Portal, etwa eine rote Seite mit „Heute geschlossen“ und einer Telefonnummer. Öffnen Sie sie: Die Adresse endet mit ihrer Kennung scn_…. Bereiten Sie sie vor, bevor Sie sie brauchen.

  2. Suchen Sie die Standort-Kennung mit GET /v1/locations:

    GET/v1/locations
    curl -sS "$SZENERA_API/v1/locations" \  -H "Authorization: Bearer $SZENERA_API_KEY" \  | jq -r '.locations[] | "\(.id)  \(.name)  \(.playerCount) displays"'
  3. Speichern Sie das Skript. Es nimmt Standort, Szene und Endzeit und schreibt für jedes Display den Antwortcode aus:

    PUT/v1/players
    #!/usr/bin/env bash# emergency.sh <loc_…> <scn_…> <Ende, etwa 2026-10-26T18:00:00+01:00>set -euo pipefaillocation="$1" scene="$2" until="$3"auth="Authorization: Bearer $SZENERA_API_KEY"body=$(jq -nc --arg scene "$scene" --arg until "$until" \  '{content: {kind: "scene", sceneId: $scene}, until: $until}') cursor=""while :; do  page=$(curl -sS -G "$SZENERA_API/v1/players" -H "$auth" \    --data-urlencode "locationId=$location" --data-urlencode "limit=100" \    ${cursor:+--data-urlencode "cursor=$cursor"})  for id in $(jq -r '.items[].id' <<<"$page"); do    curl -sS -o /dev/null -w "$id %{http_code}\n" -X PUT \      "$SZENERA_API/v1/players/$id/override" \      -H "$auth" -H "Content-Type: application/json" -d "$body"  done  cursor=$(jq -r '.nextCursor // empty' <<<"$page")  [ -z "$cursor" ] && breakdone
  4. Starten Sie es. Die Endzeit trägt ihren Versatz zur UTC und meint damit überall denselben Moment:

    Terminal
    ./emergency.sh loc_01KFB7QPW0LOCATION00000001 scn_01KJPX8NH0SZENE00000000009 2026-10-26T18:00:00+01:00
    ply_01KFB7QPW0PLAYER0000000001 200ply_01KFB7QPW0PLAYER0000000002 200
  5. Beenden Sie es vorzeitig mit derselben Schleife und DELETE statt PUT, ohne Rumpf. Jedes Display kehrt sofort zu seinem Programm zurück:

    DELETE/v1/players/ply_01KFB7QPW0PLAYER0000000001/override
    curl -sS -X DELETE "$SZENERA_API/v1/players/ply_01KFB7QPW0PLAYER0000000001/override" \  -H "Authorization: Bearer $SZENERA_API_KEY"

Ein einzelnes Display geht auch über die Kommandozeile: szenera player set-override <ply_…> --content=scene:<scn_…> --until=… und szenera player clear-override <ply_…>.

Ergebnis prüfen

  • Jede Zeile der Ausgabe endet auf 200.
  • GET /v1/players/{id}/program zeigt die Übersteuerung unter override, mit until und der Szene.
  • Im Portal zeigen die Displays des Standorts die Übersteuerung bis zur Endzeit.

Wenn etwas nicht klappt

Symptom Bedeutung Lösung
Die Ausgabe bleibt leer Dem Standort ist kein Display zugeordnet, oder die Kennung stimmt nicht. playerCount in GET /v1/locations prüfen.
422 für jedes Display Die Endzeit liegt in der Vergangenheit oder hat keinen Versatz. Eine künftige Zeit mit Versatz angeben, etwa +01:00.
422 Scene.Blocked Die Szene nutzt eine App, die Ihr Paket nicht mehr abdeckt. Die App aus der Szene nehmen oder eine Szene ohne sie verwenden.
422 Schedule.ContentNotFound Die Szenen-Kennung gibt es nicht. Die Kennung in der Portal-Adresse prüfen.
429 RateLimit.Exceeded Der Schlüssel hat seine Anfragen für das Zeitfenster aufgebraucht. Retry-After abwarten und das Skript erneut starten. Dieselbe Übersteuerung zweimal zu setzen schadet nicht.