Dokumentation

Auslöser: CLI-Befehle

Bildschirme bei CAP-Notfallalarmen übernehmen und Overlays von Home Assistant oder jedem HTTP-Client zeigen: Auslöser erstellen, testen, rotieren.

Jeder Befehl läuft wie in der CLI-Referenz beschrieben: globale Flags, JSON-Ausgabe, Beendigungscodes, Revisionen und Wiederholungen.

CAP-Alarm-Auslöser

Ein Trigger ermöglicht es einem Notifikationssystem wie Everbridge, Rave, Alertus oder einem IPAWS-Relay, Bildschirme mit CAP 1.2-Warnungen zu übernehmen. Jeder Trigger hat seine eigene URL, Benutzername und Passwort, die Sie im sendenden System als dessen CAP-HTTP-POST-Ziel mit HTTP-Basic-Authentifizierung eingeben. Eine Organisation hat höchstens 20 Trigger über alle ihre Projekte.

Trigger gibt es in zwei Arten. Ein CAP-Trigger, hier beschrieben, nimmt die Meldungen eines Notfallsystems an. Ein Overlay-Trigger zeigt, was ein beliebiger Absender sendet, etwa Home Assistant, ein Sensor-Hub oder ein Alarmierungswerkzeug, als Streifen über dem Laufenden oder als Übernahme; triggers create --kind overlay legt einen an, und triggers update, triggers clear und triggers rotate-secret bedienen beide Arten, während triggers deliveries das Protokoll eines Overlay-Triggers liest.

Ein Trigger zielt auf ein Tag, das bei jedem Eintreffen einer Warnung aufgelöst wird, oder auf bis zu 500 Bildschirm-IDs. Jede Warnung wird zur Übernahme der eigenen Playlist des Triggers: eine Vollbildkarte in der Farbe ihrer Schwere, mit Ereignis, Überschrift, Beschreibung und Anweisung. Eine Übung fügt ein EXERCISE-Banner hinzu. Die Übernahme hält bis zum <expires> der Warnung, sonst bis zum Standard --for des Triggers (1 Minute bis 7 Tage, 1 Stunde, wenn nicht gesetzt), und niemals länger als 7 Tage. Ein Update zeichnet die Karte neu, und ein Abbruch oder AllClear gibt jeden Bildschirm zurück zu dem, was er vorher spielte. Eine neue Warnung ersetzt die angezeigte. Test-, System- und Entwurfsnachrichten, Ack- und Fehlermeldungen sowie abgelaufene Warnungen werden ignoriert, und ein wiederholter Absender und Bezeichner ist ein Duplikat. Ein Bildschirm benötigt eine Standard-Playlist, um übernommen zu werden; andere Bildschirme werden übersprungen.

Das Passwort, srtg_…, wird nur von triggers create und triggers rotate-secret angezeigt, mit der Warnung trigger_password_shown_once. Die CLI hält es aus ihrer Konfiguration, dem Betriebsprotokoll und dem Wiederherstellungszustand heraus. Die URL und der Benutzername sind nicht geheim.

ProblemcodeBeendenBedeutung
trigger_limit_reached5Die Organisation hat bereits 20 Trigger. Es wurde nichts erstellt. Bitte löschen Sie zuerst einen.
resource_conflict5triggers test oder triggers delete, während ein Alarm aktiv ist. next ist triggers clear.
not_found4Kein Trigger mit dieser ID im Projekt vorhanden.
revision_conflict6Die --expect-rev Revision war veraltet. Führen Sie triggers show aus und versuchen Sie es erneut.

triggers create#

Erstellen Sie einen Trigger und erhalten Sie dessen URL, Benutzernamen und Passwort.

triggers create --name NAME [--kind cap|overlay] (--tag TAG | --screen-id ID...) [--for DURATION] [--pull FILE]
    [--show bar|takeover] [--edge bottom|top] [--style FILE] [--map FILE] [--signing]
    [--verify VENDOR [--verify-secret-file FILE] [--verify-header NAME] [--verify-encoding hex|base64]
        [--verify-timestamp-header NAME] [--verify-tolerance SECONDS]]
    [--handshake VENDOR]
ParameterTypErforderlichStandardNotizen
--name NAMEstringjakeineDer Name des Triggers, 1 bis 80 Zeichen ohne Steuerzeichen.
--kind KINDcap oder overlayneincapcap nimmt die CAP-1.2-Meldungen eines Notfallsystems an. overlay nimmt wenige Worte von jedem Absender an und braucht --show.
--tag TAGstringeines von --tag oder --screen-idkeineJeder aktive Bildschirm mit diesem Tag, wenn ein Alarm eintrifft.
--screen-id IDstringeines von --tag oder --screen-idkeineEine scr_ Bildschirm-ID. Wiederholen Sie sie oder listen Sie IDs kommasepariert auf; maximal 500.
--for DURATIONDauernein1h (Overlay 10m)Wie lange eine Meldung ohne <expires> oder eine Overlay-Sendung ohne duration die Bildschirme hält, etwa 30m, 2h oder 1d; 1 Minute bis 7 Tage bei einem CAP-Trigger, 10 Sekunden bis 7 Tage bei einem Overlay-Trigger.
--pull FILEPfadneinkeineEin CAP-Trigger: ein JSON-Objekt aus einer Datei oder - für stdin, das außerdem die Plattform CAP-Alarmquellen für den Trigger lesen lässt. Seine Mitglieder sind die Parameter der cap-alert-Karte, unten aufgeführt.
--show SHOWbar oder takeovermit --kind overlaykeinebar zeichnet einen Streifen über das, was auf den Zielbildschirmen läuft. takeover spielt die Meldung vollbildlich ab.
--edge EDGEbottom oder topneinbottomDer Rand, den ein Streifen belegt. Nur mit --show bar.
--style FILEPfadneinkeineEin JSON-Objekt aus einer Datei oder aus - für die Standardeingabe mit dem Stil der Textkarte: theme, accent, background, backgroundColor, textColor und align. Höchstens 64 KiB.
--map FILEPfadneinkeineEine JSON-Vorlage aus einer Datei oder aus - für die Standardeingabe, die die Overlay-Meldung aus dem Body des Absenders baut; siehe Overlay-Trigger. Höchstens 64 KiB.
--signingFlagneinausAußerdem einen ScreenRig-Signature-Header bei jeder Sendung verlangen und das Signaturgeheimnis nur einmal ausgeben. Nicht mit --verify.
--verify VENDORstringneinkeineEin Overlay-Trigger: akzeptiert eine Zustellung mit der eigenen Signatur dieses Anbieters anstelle des srtg_-Passworts, das daneben weiter funktioniert. github, stripe, shopify, slack, linear, vercel, asana oder generic_hmac.
--verify-secret-file FILEPfadmit --verify, außer asanakeineDas Geheimnis des Anbieters, aus einer Datei oder - für stdin, nie als Argument: das Webhook-Secret, das GitHub, Stripe, Shopify, Slack, Linear oder Vercel anzeigt, oder das eines generic_hmac-Senders. asana nimmt keines: Sein Handshake liefert es.
--verify-header NAMEstringmit --verify generic_hmackeineDer Header, der die Signatur trägt.
--verify-encoding ENCODINGhex oder base64neinhexMit --verify generic_hmac: wie die Signatur geschrieben wird. Sie kann mit sha256= beginnen.
--verify-timestamp-header NAMEstringneinkeineMit --verify generic_hmac: ein Header, der die Unix-Zeit in Sekunden oder in Millisekunden mit 13 Ziffern trägt. Der signierte Text ist dann <timestamp>.<body>.
--verify-tolerance SECONDSintegernein300Mit --verify-timestamp-header: wie weit der Zeitstempel von der Uhr des Servers abweichen darf, 1 bis 86400.
--handshake VENDORstringneinkeineEin Overlay-Trigger: beantwortet die Einrichtungsanfrage von microsoft_graph, monday, trello oder azure_event_grid. Slack und Asana beantworten ihre über --verify.
screenrig triggers create --name "Campus alerts" --tag Campus
screenrig triggers create --name "Campus alerts" --tag Campus --pull pull.json
screenrig triggers create --name "Lobby sensors" --kind overlay --show bar --tag Lobby
screenrig triggers create --name "Doorbell" --kind overlay --show takeover --tag Lobby --for 30s
screenrig triggers create --name "Payments" --kind overlay --show bar --tag Lobby --verify stripe --verify-secret-file stripe.secret --map stripe-map.json
screenrig triggers create --name "Boards" --kind overlay --show bar --tag Lobby --handshake trello

Der Umschlag ist der Trigger mit data.url (https://api.screenrig.ai/api/triggers/<id>/cap oder .../overlay bei einem Overlay-Trigger), data.username (die Trigger-ID) und data.password. Tragen Sie sie jetzt im sendenden System ein; der Absender eines Overlay-Triggers braucht die URL und das Passwort (Authorization: Bearer). Mit --signing enthält der Umschlag auch data.signing_secret, nur einmal angezeigt, mit der Warnung trigger_signing_secret_shown_once. Wiederholen Sie nach einem unterbrochenen oder unklaren Anlegen binnen 24 Stunden denselben Befehl: Er verwendet den gespeicherten Idempotenzschlüssel erneut, und der Server liefert denselben Trigger und dasselbe Passwort, statt einen weiteren anzulegen.

--pull fügt Quellen hinzu, die die Plattform neben der geposteten URL liest, die weiterhin funktioniert. Das Objekt enthält sources (bis zu 5 http- oder https-URLs von CAP 1.0 bis 1.2 Warnungen oder ATOM/RSS-Indizes), publicAlerts, location (name, latitude, longitude und geocodes als [{name, value}]), minSeverity, maxSeverity, minUrgency, minCertainty, events, excludeEvents, senders, statuses, scopes, languages und areaUnknown; feeds get cap verwendet dieselben Filter wie Flags. location ist erforderlich, sofern nicht sources angegeben sind, und ohne sources werden die öffentlichen Feeds, die location abdecken, gelesen. Jede Quelle wird einmal pro Minute abgefragt. Die schwerwiegendste passende Warnung übernimmt die Bildschirme wie eine gepostete, und wenn die Quellen keine zeigen, endet eine gezogene Warnung; eine veraltete oder fehlerhafte Quelle beendet niemals eine Warnung. Zum Beispiel {"location": {"latitude": 49.25, "longitude": -123}, "minSeverity": "moderate"}.

Die Overlay-Optionen (--show, --edge, --style, --map, --signing, --verify mit den zugehörigen Optionen und --handshake) erfordern --kind overlay, und --pull erfordert einen CAP-Trigger. --style, --map und --verify-secret-file lesen jeweils eine Datei, und nur eine davon kann - (stdin) lesen.

--verify VENDOR lässt den Webhook eines Anbieters direkt an data.url senden: Eine Zustellung, die die gültige Signatur des Anbieters in dessen eigenem Header trägt, wird ohne data.password akzeptiert, das daneben weiter funktioniert. Das Geheimnis des Anbieters wird versiegelt gespeichert und nur als overlay.verify.secret zurückgelesen, mit set und seinen letzten vier Zeichen. asana nimmt kein Geheimnis: Sein Handshake liefert eines, und Ereignisse antworten bis dahin mit secret_pending. generic_hmac braucht --verify-header und nimmt --verify-encoding, --verify-timestamp-header und --verify-tolerance. --handshake VENDOR beantwortet die Einrichtungsanfrage dieses Anbieters, bevor Zugangsdaten verlangt werden; er ändert keinen Alarm, wird nie berechnet und erscheint in triggers deliveries als Ergebnis handshake. Die Anbieter, ihre Header und die bei jedem einzutragenden Einstellungen stehen unter Signaturen und Handshakes der Anbieter.

triggers list#

Trigger dieses Projekts und deren letzte Warnungen auflisten, älteste zuerst.

triggers list
screenrig triggers list

--human gibt ID, KIND, LABEL, TARGET, ALERT und LAST_RECEIVED aus; bei einem Overlay-Trigger sagt ALERT, was er zeichnet und wie viele Meldungen er hält. Eine Liste enthält nie ein Passwort oder ein Signaturgeheimnis.

triggers show#

Einen Trigger und seine letzte Warnung prüfen.

triggers show <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie trg_ Auslöser-ID.
screenrig triggers show trg_01EXAMPLETRIGGER00

data.alert ist die letzte Meldung: ihre CAP-Felder, state active oder ended (mit ended_reason cancelled, all_clear, cleared oder expired), until und screens mit targeted, taken_over, cleared, skipped, failed und pending. pending ist wahr, solange noch Bildschirme beschrieben werden, und fehlgeschlagene Bildschirme werden wiederholt. data.playlist_id ist die Alarm-Playlist des Triggers, und screen show meldet einen Alarm als Übernahme dieser Playlist. Bei einem Overlay-Trigger enthält data.overlay show, edge, enabled, signing, verify und handshake, solange sie gesetzt sind, card_id, alerts (die aktiven Meldungen, die neueste zuerst; die erste wird angezeigt), screens mit targeted, holding, taken_over, removed, edge_taken, skipped und failed sowie pending.

triggers test#

Zeigen Sie auf den Bildschirmen des Triggers eine 60-Sekunden-Übungswarnung an.

triggers test <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie trg_ Auslöser-ID.
screenrig triggers test trg_01EXAMPLETRIGGER00

Der Umschlag ist die Quittung: data.outcome shown und data.alert. Die Antwort kommt, bevor alle Bildschirme beschrieben sind; triggers show meldet die Zahlen. Ein Overlay-Trigger zeigt die Meldung screenrig-test (Etikett Test, Titel Test overlay) 60 Sekunden lang, und die Quittung ist die einer Sendung (data.alert_id, data.until, data.active). Beide Arten lehnen einen Test ab, solange eine Meldung angezeigt wird.

triggers update#

Einen Trigger ändern, ohne seine URL oder sein Geheimnis zu ändern.

triggers update <id> [--name NAME] [--tag TAG | --screen-id ID...] [--for DURATION] [--pull FILE | --no-pull]
    [--edge bottom|top] [--style FILE | --clear-style] [--map FILE | --clear-map] [--enable | --disable]
    [--signing | --no-signing]
    [--verify VENDOR [--verify-secret-file FILE] [--verify-header NAME] [--verify-encoding hex|base64]
        [--verify-timestamp-header NAME] [--verify-tolerance SECONDS] | --clear-verify]
    [--handshake VENDOR | --clear-handshake] [--expect-rev REVISION]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie trg_ Auslöser-ID.
--name NAMEstringneinUnverändertDen Trigger umbenennen.
--tag TAG, --screen-id IDstringneinUnverändertEin neues Ziel, wie bei triggers create.
--for DURATIONDauerneinUnverändertEine neue Haltedauer für Alarme, die kein Ende nennen: 1 Minute bis 7 Tage bei einem CAP-Trigger, 10 Sekunden bis 7 Tage bei einem Overlay-Trigger.
--pull FILE, --no-pullPfad, FlagneinUnverändertEin CAP-Trigger: seine CAP-Quellen ersetzen oder nicht mehr lesen.
--edge EDGEbottom oder topneinUnverändertEin Overlay-Streifen: an diesen Rand verschieben.
--style FILE, --clear-stylePfad, FlagneinUnverändertEin Overlay-Trigger: den ganzen Stil ersetzen oder entfernen.
--map FILE, --clear-mapPfad, FlagneinUnverändertEin Overlay-Trigger: die Vorlage ersetzen oder entfernen, sodass das gesendete Objekt die Meldung ist.
--enable, --disableFlagneinUnverändertEin Overlay-Trigger: Ein deaktivierter Trigger beantwortet jede Sendung mit dem 404, das ein falsches Geheimnis bekommt.
--signing, --no-signingFlagneinUnverändertEin Overlay-Trigger: die Signaturprüfung einschalten (das Signaturgeheimnis wird einmal ausgegeben) oder ausschalten. Nicht mit --verify.
--verify VENDORstringneinUnverändertEin Overlay-Trigger: ersetzt die Anbieterprüfung, wie bei triggers create. Ohne --verify-secret-file bleibt das gespeicherte Secret erhalten, wenn der Anbieter derselbe bleibt; ein anderer Anbieter braucht sein eigenes.
--verify-secret-file FILEPfadneinUnverändertMit --verify: das Geheimnis des Anbieters, aus einer Datei oder - für stdin.
--verify-header NAMEstringneinUnverändertMit --verify generic_hmac: der Header, der die Signatur trägt.
--verify-encoding ENCODINGhex oder base64neinUnverändertMit --verify generic_hmac: wie die Signatur geschrieben wird.
--verify-timestamp-header NAMEstringneinUnverändertMit --verify generic_hmac: ein Header, der die Unix-Zeit trägt.
--verify-tolerance SECONDSintegerneinUnverändertMit --verify-timestamp-header: wie weit der Zeitstempel von der Uhr des Servers abweichen darf, 1 bis 86400.
--clear-verifyFlagneinausEin Overlay-Trigger: akzeptiert die Signatur eines Anbieters nicht mehr und vergisst dessen Secret.
--handshake VENDORstringneinUnverändertEin Overlay-Trigger: beantwortet die Einrichtungsanfrage von microsoft_graph, monday, trello oder azure_event_grid.
--clear-handshakeFlagneinausEin Overlay-Trigger: beantwortet den Anbieter-Handshake nicht mehr.
--expect-rev REVISIONstringneinkeineOptionale Revisionsvoraussetzung.
screenrig triggers update trg_01EXAMPLETRIGGER00 --tag Lobby
screenrig triggers update trg_01EXAMPLETRIGGER00 --edge top --style style.json
screenrig triggers update trg_01EXAMPLETRIGGER00 --map map.json --signing
screenrig triggers update trg_01EXAMPLETRIGGER00 --verify github --verify-secret-file github.secret
screenrig triggers update trg_01EXAMPLETRIGGER00 --clear-verify

Mindestens eine Option außer --expect-rev ist erforderlich. Ein Streifen ordnet sich auf den neuen Zielbildschirmen und am neuen Rand neu ein; das neue Ziel eines Übernahme-Triggers gilt ab der nächsten beginnenden Meldung. Ein Trigger, der schon signiert, behält sein Signaturgeheimnis, wenn --signing wiederholt wird; triggers rotate-secret --signing ersetzt es. --clear-verify entfernt die Anbieterprüfung und vergisst deren Secret, und --clear-handshake beantwortet den Anbieter-Handshake nicht mehr. Wiederholen Sie nach einer unterbrochenen oder unklaren Aktualisierung denselben Befehl: Er verwendet den gespeicherten Idempotenzschlüssel erneut.

triggers deliveries#

Das Protokoll der Sendungen eines Overlay-Triggers lesen: warum jede angezeigt, ignoriert oder abgelehnt wurde.

triggers deliveries <id> [--limit N]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie trg_ Auslöser-ID.
--limit Nintegernein100Wie viele Zustellungen, die neuesten zuerst; 1 bis 100.
screenrig triggers deliveries trg_01EXAMPLETRIGGER00 --limit 20

data.items enthält die Zustellungen der letzten sieben Tage: at, outcome (shown, updated, unchanged, ended, ignored, refused, invalid oder handshake), reason für eine abgelehnte oder ungültige Zustellung (credentials, signature, signature_missing, signature_invalid, timestamp_missing, timestamp_stale, secret_pending, handshake_invalid, disabled, body, mapping, field, rate_limited oder internal), detail (das fehlerhafte Mitglied oder der fehlerhafte Zuordnungspfad), status, bytes, files (die Dateiteile einer Multipart-Zustellung, die ignoriert werden), alert_id und request_id. signature ist eine fehlgeschlagene ScreenRig-Signature; die übrigen Signatur-, Zeitstempel- und Handshake-Gründe sind die eines Anbieters, wie die Tabelle unter Signaturen und Handshakes der Anbieter erklärt. Das Protokoll speichert nie einen Body, einen Header oder Zugangsdaten. Ein falsches Secret, eine ungültige Signatur und ein deaktivierter Trigger geben dem Sender alle dasselbe 404, daher ist dieses Protokoll der Ort, an dem man liest, welches es war. Ein CAP-Trigger hat keine Zustellungen.

triggers clear#

Alarm des Triggers jetzt beenden.

triggers clear <id> [--alert-id ID]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie trg_ Auslöser-ID.
--alert-id IDstringneinkeineEin Overlay-Trigger: nur diese Meldung beenden. Ohne die Option enden alle Meldungen.
screenrig triggers clear trg_01EXAMPLETRIGGER00
screenrig triggers clear trg_01EXAMPLETRIGGER00 --alert-id front-door

Die Meldung endet mit ended_reason cleared, und ihre Bildschirme kehren zu dem zurück, was sie vorher spielten. Ein Bildschirm, dessen Übernahme seither etwas anderes ersetzt hat, bleibt unverändert. Ohne aktive Meldung ändert sich nichts. Bei einem Overlay-Trigger ändert das Beenden einer nicht aktiven Meldung nichts, und wenn die letzte Meldung endet, wird der Streifen gesenkt oder werden die Bildschirme der Übernahme zurückgegeben.

triggers rotate-secret#

Passwort eines Triggers ersetzen.

triggers rotate-secret <id> [--signing] [--expect-rev REVISION]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie trg_ Auslöser-ID.
--signingFlagneinausEin Overlay-Trigger, der signiert: das Signaturgeheimnis statt des Passworts ersetzen.
--expect-rev REVISIONstringneinkeineOptionale Revisionsvoraussetzung.
screenrig triggers rotate-secret trg_01EXAMPLETRIGGER00

Der Umschlag enthält das neue Passwort in data.password. Das alte Passwort funktioniert sofort nicht mehr; tragen Sie das neue im sendenden System ein. Mit --signing enthält der Umschlag stattdessen das neue data.signing_secret, nur einmal angezeigt; das alte funktioniert sofort nicht mehr, und ein Trigger, der nicht signiert, antwortet mit invalid_request. Führen Sie nach einer unterbrochenen oder mehrdeutigen Rotation denselben Befehl innerhalb von 24 Stunden erneut aus: Er verwendet den gespeicherten Idempotenzschlüssel, und der Server liefert die bereits erfolgte Rotation zurück, statt erneut zu rotieren.

triggers delete#

Einen Trigger löschen. Seine URL nimmt sofort keine Meldungen und Sendungen mehr an; die Streifen eines Overlay-Triggers verschwinden von seinen Bildschirmen, und seine Karte wird gelöscht. Ein Trigger, der eine Meldung zeigt, wird mit resource_conflict abgelehnt: Führen Sie zuerst triggers clear aus.

triggers delete <id> [--expect-rev REVISION]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie trg_ Auslöser-ID.
--expect-rev REVISIONstringneinkeineOptionale Revisionsvoraussetzung.
screenrig triggers delete trg_01EXAMPLETRIGGER00

Overlay-Trigger

Ein Overlay-Trigger zeigt, was ein externes System sendet. Home Assistant, ein Tür- oder Bewegungsmelder-Hub, ein Kamerasystem oder ein Alarmierungswerkzeug sendet mit einem HTTP-POST wenige Worte, und die Bildschirme des Triggers zeigen sie, bis sie ablaufen oder der Absender sie beendet. Er ist ein Trigger wie ein CAP-Trigger: triggers create --kind overlay legt ihn an, und er zählt zum selben Limit von 20 pro Organisation.

--show bar zeichnet einen Streifen über das, was auf jedem Zielbildschirm läuft, am unteren Rand oder mit --edge top am oberen. Der Streifen gleitet ein, wenn eine Meldung beginnt, und aus, wenn die letzte endet; Playlist, Seiten und Timing bleiben unverändert. Ein Bildschirm hält einen Streifen pro Rand: Ein Overlay-Trigger, dessen Rand auf einem Bildschirm schon ein anderer Overlay-Trigger belegt, erscheint dort nicht (triggers show zählt diese Bildschirme als edge_taken), und eine Seite mit eigenem Streifen mit Präsenz an diesem Rand behält ihn. Eine Eck- oder Chip-Karte an diesem Rand rückt über die Höhe des Streifens hinaus nach innen, ob er sichtbar ist oder nicht. Auf einer Werbeplatz-Seite und während einer Übernahme wird kein Streifen gezeichnet. --show takeover spielt die Meldung vollbildlich auf den Zielbildschirmen ab, die eine Standard-Playlist haben, von der ersten Meldung bis zum Ende der letzten. Ein Übernahme-Trigger ersetzt nie eine Übernahme, die schon auf einem Bildschirm läuft, etwa die eines Operators oder einer Notfallmeldung, und eine CAP-Meldung ersetzt ihn.

Ein Tag-Ziel wird aufgelöst, wenn eine Meldung beginnt; ein später mit dem Tag versehener Bildschirm erhält den Streifen mit der nächsten beginnenden Meldung. Bildschirme ohne Standard-Playlist überspringt eine Übernahme. Ein Bildschirm, der offline ist, holt beim Wiederverbinden auf.

Der Absender sendet JSON, ein Formular oder multipart/form-data (Dateiteile werden ignoriert) an data.url mit Authorization: Bearer SECRET oder mit HTTP Basic, die Trigger-ID als Benutzername und das Geheimnis als Passwort. Das Geheimnis steht nie in der URL. Eine Sendung hat diese Felder; ein unbekanntes Feld wird abgelehnt und benannt.

FeldTypNotizen
alert_idstringDie ID der Meldung, die der Absender wählt, 1 bis 200 Zeichen. Dieselbe ID aktualisiert diese Meldung, statt eine weitere zu stapeln. Ohne ID ist es eine einzelne Meldung namens default. Beim Beenden endet ohne ID jede Meldung.
labelstringEin kurzes Etikett über dem Titel: höchstens 40 Zeichen.
titlestringMaximal 120 Zeichen.
messagestringDer Haupttext: höchstens 400 Zeichen.
notestringEine ruhige Zeile am Fuß: höchstens 120 Zeichen.
durationZahl oder StringWie lange diese Sendung ihre Meldung ab jetzt hält: 10 bis 604800 Sekunden oder 10s, 5m, 2h, 1d oder until_cleared. Ohne Angabe gilt --for des Triggers (10 Minuten, wenn nicht festgelegt).
clearBoolean oder Stringtrue (oder yes, y, 1, x) beendet die Meldung; false (oder no, n, 0, leer) löst sie aus. Ein Beenden ignoriert die übrigen Felder.
statestringEin Zustandswort des Absenders. off, closed, clear, cleared, resolved, ok, normal, inactive und ended beenden in jeder Schreibweise die Meldung; jeder andere Zustand löst sie aus.

Ein Auslösen braucht mindestens eines von label, title, message und note. Längerer Text wird abgelehnt, ebenso duration außerhalb von 10 Sekunden bis 7 Tagen, beides mit invalid_request, das das Feld nennt. Jedes Auslösen oder Aktualisieren hält seine Meldung duration ab dieser Sendung; ein Bewegungsmelder, der alle paar Sekunden sendet, hält den Streifen oben, und er verschwindet duration nach der letzten Sendung. Ein Trigger zeigt seine neueste Meldung; endet sie, erscheint die davor wieder. Er hält zehn Meldungen, die elfte ersetzt die älteste. Eine Meldung endet etwa zehn Sekunden nach ihrer Zeit. Ein zweimal gesendetes Beenden beendet die Meldung nur einmal, und das Beenden einer nicht aktiven Meldung ändert nichts.

Die Antwort ist eine Quittung: outcome (shown, updated, unchanged, ended oder ignored), alert_id, until (null bei einem Alarm, der bis zum Löschen gehalten wird) und active, die Alarme, die der Trigger nach dem Post hält. Ein Idempotency-Key-Header von 8 bis 200 Zeichen beantwortet die Wiederholung eines Absenders 24 Stunden lang mit der ersten Quittung. Ein Trigger nimmt 120 Posts pro Minute an. Ein Post zählt nicht zum Limit für Agentenanfragen, und ein Löschen wird nie abgelehnt, sodass ein Alarm immer von den Bildschirmen genommen werden kann.

curl -X POST https://api.screenrig.ai/api/triggers/trg_01EXAMPLETRIGGER00/overlay \
  -H "Authorization: Bearer srtg_YOUR_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"alert_id":"front-door","title":"Front door","message":"The front door is open","duration":"10m"}'

Eine falsche Adresse, ein falsches Geheimnis, ein deaktivierter Trigger, eine fehlende oder falsche Signatur und jedes GET geben dasselbe 404 not_found; ein Absender oder die Linkvorschau erfährt so nichts darüber, was es war. triggers deliveries zeigt dem Projekt den Grund für die letzten sieben Tage, ohne den Body der Sendung. --style FILE legt theme, accent, background, backgroundColor, textColor und align der Textkarte fest; ein Trigger pro Aussehen.

--map FILE baut die Meldung aus dem Body, den ein Alarmierungswerkzeug sendet, mit der Vorlagensprache der Karten-Webhooks. Ein String mit {{body.title}} ist Text, ein String, der genau ein Platzhalter ist, behält seinen Typ, {"$text": "{{body.message}}", "$max": 400} kürzt Text, und ein Pfad beginnt mit body oder query. Diese Vorlage bildet eine Meldung eines Überwachungswerkzeugs ab und beendet sie, wenn ihr Status resolved ist:

{"alert_id": "{{body.groupKey}}", "title": "{{body.title}}", "message": {"$text": "{{body.message}}", "$max": 400}, "state": "{{body.status}}"}

--signing verlangt außerdem ScreenRig-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">, geschlüsselt mit data.signing_secret (whsec_…, nur einmal angezeigt), wobei t höchstens fünf Minuten von der Uhr des Servers abweichen darf. Ein Absender darf zwei v1-Werte mitsenden, während er das Geheimnis rotiert.

body='{"alert_id":"front-door","title":"Front door","message":"The front door is open"}'
t=$(date +%s)
sig=$(printf '%s.%s' "$t" "$body" | openssl dgst -sha256 -hmac "$SIGNING_SECRET" -hex | sed 's/^.* //')
curl -X POST "$URL" -H "Authorization: Bearer $SECRET" -H "ScreenRig-Signature: t=$t,v1=$sig" \
  -H "Content-Type: application/json" -d "$body"

Ein Alarmierungstool oder ein Anbieter, der seine eigenen Zustellungen signiert, kann seine Signatur anstelle des Secrets prüfen lassen, und sein Einrichtungs-Handshake wird beantwortet, wie bei Karten-Webhooks: triggers create und triggers update nehmen --verify VENDOR mit --verify-secret-file FILE und --handshake VENDOR an, und triggers update nimmt --clear-verify und --clear-handshake an, um jeweils eines zu entfernen. Die Anbieter, ihre Header und die generic_hmac-Optionen sind die dort aufgeführten. Eine Zustellung mit der gültigen Signatur des Anbieters wird ohne das srtg_-Passwort des Triggers akzeptiert, das daneben weiter funktioniert; --verify schließt --signing aus, und ein Handshake ändert keinen Alarm. triggers deliveries zeigt, warum eine Signatur fehlgeschlagen ist.

Ein rest_command von Home Assistant sendet an den Trigger. Das Geheimnis gehört in secrets.yaml; jede Automatisierung nennt die Meldung, die sie auslöst oder beendet:

# secrets.yaml
screenrig_lobby_overlay: "Bearer srtg_YOUR_SECRET"

# configuration.yaml
rest_command:
  screenrig_lobby:
    url: "https://api.screenrig.ai/api/triggers/trg_01EXAMPLETRIGGER00/overlay"
    method: post
    headers:
      Authorization: !secret screenrig_lobby_overlay
    content_type: "application/json"
    payload: >-
      {{ {"alert_id": alert_id | default(""), "title": title | default(""),
          "message": message | default(""), "duration": duration | default("10m"),
          "clear": clear | default(false)} | tojson }}

# automations.yaml
- alias: Front door open on the lobby screens
  triggers:
    - trigger: state
      entity_id: binary_sensor.front_door
      to: "on"
  actions:
    - action: rest_command.screenrig_lobby
      data: {alert_id: front-door, title: Front door, message: The front door is open, duration: until_cleared}
- alias: Front door closed
  triggers:
    - trigger: state
      entity_id: binary_sensor.front_door
      to: "off"
  actions:
    - action: rest_command.screenrig_lobby
      data: {alert_id: front-door, clear: true}
- alias: Driveway motion
  triggers:
    - trigger: state
      entity_id: binary_sensor.driveway_motion
      to: "on"
  actions:
    - action: rest_command.screenrig_lobby
      data: {alert_id: driveway, title: Driveway, message: Motion at the driveway, duration: 2m}

Zwei Dinge sorgen dafür, dass das funktioniert. Jede Bewegungssendung hält den Streifen 2 Minuten ab dieser Sendung; er bleibt, solange die Bewegung anhält, und verschwindet 2 Minuten nach dem letzten Ereignis. Und Home Assistant rendert die {{ }}-Vorlage vor dem Senden, sodass der Trigger schlichtes JSON erhält; die eigene --map-Vorlage des Triggers ist ein getrennter Schritt, der jede Sendung durch die Vorlage laufen lässt; lassen Sie --map daher bei einem Absender weg, der die Overlay-Felder bereits selbst sendet, wie Home Assistant hier, oder geben Sie diesem Absender einen eigenen Trigger.

Weitere Befehlsgruppen