Documentation

Déclencheurs : commandes CLI

Prenez le contrôle des écrans lors d’alertes CAP et affichez les superpositions de Home Assistant ou d’un capteur : créez, testez et renouvelez.

Chaque commande s’exécute comme décrit dans la référence CLI : drapeaux globaux, sortie JSON, codes de sortie, révisions et réessais.

Déclencheurs d’alerte CAP

Un déclencheur permet à un système de notification d’urgence, tel Everbridge, Rave, Alertus ou un relais IPAWS, de prendre le contrôle des écrans avec des alertes CAP 1.2. Chaque déclencheur a sa propre URL, nom d’utilisateur et mot de passe, que vous saisissez dans le système d’envoi comme destination HTTP POST CAP avec authentification HTTP Basic. Une organisation a au plus 20 déclencheurs, tous projets confondus.

Les déclencheurs sont de deux types. Un déclencheur CAP, décrit ici, reçoit les alertes d’un système d’urgence. Un déclencheur de superposition montre ce que n’importe quel expéditeur publie, comme Home Assistant, un concentrateur de détecteurs ou un outil d’alertes, en bande par-dessus ce qui est diffusé ou en prise de contrôle ; triggers create --kind overlay en crée un, et triggers update, triggers clear et triggers rotate-secret servent les deux types, tandis que triggers deliveries lit le journal d’un déclencheur de superposition.

Un déclencheur cible une étiquette, résolue à l’arrivée de chaque alerte, ou jusqu’à 500 identifiants d’écran. Chaque alerte devient une prise de contrôle de la playlist propre au déclencheur : une carte plein écran de la couleur de sa gravité, avec l’événement, le titre, la description et l’instruction. Un exercice ajoute une bannière EXERCISE. La prise de contrôle dure jusqu’à <expires> de l’alerte, sinon la valeur par défaut --for du déclencheur (1 minute à 7 jours, 1 heure sauf réglage), et jamais plus de 7 jours. Une mise à jour redessine la carte, et un annuler ou tout clair rend chaque écran à ce qu’il jouait avant. Une nouvelle alerte remplace celle affichée. Les messages Test, Système et Brouillon, les messages Ack et Erreur et les alertes expirées sont ignorés, et un expéditeur et identifiant répétés sont des doublons. Un écran a besoin d’une playlist par défaut pour être pris en charge ; les autres écrans sont ignorés.

Le mot de passe, srtg_…, est montré uniquement par triggers create et triggers rotate-secret, avec l’avertissement trigger_password_shown_once. Le CLI le garde hors de sa configuration, du journal d’opération et de l’état de récupération. L’URL et le nom d’utilisateur ne sont pas secrets.

Code de problèmeSortieSens
trigger_limit_reached5L’organisation a déjà 20 déclencheurs. Rien n’a été créé. Supprimez-en un d’abord.
resource_conflict5triggers test ou triggers delete pendant qu’une alerte est active. next est triggers clear.
not_found4Aucun déclencheur n’a cet ID dans le projet.
revision_conflict6La révision --expect-rev était périmée. Exécutez triggers show, puis réessayez.

triggers create#

Créer un déclencheur et recevoir son URL, nom d’utilisateur et mot de passe.

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]
ParamètreTypeRequisPar défautNotes
--name NAMEstringouiaucunLe nom du déclencheur, de 1 à 80 caractères sans caractères de contrôle.
--kind KINDcap ou overlaynoncapcap reçoit les alertes CAP 1.2 d’un système d’urgence. overlay reçoit quelques mots de n’importe quel expéditeur et exige --show.
--tag TAGstringl’un de --tag ou --screen-idaucunChaque écran actif avec cette étiquette à l’arrivée d’une alerte.
--screen-id IDstringl’un de --tag ou --screen-idaucunUn identifiant d’écran scr_. Répétez-le, ou listez les identifiants séparés par des virgules ; au maximum 500.
--for DURATIONduréenon1h (superposition 10m)Durée pendant laquelle une alerte sans <expires>, ou un envoi de superposition sans duration, retient les écrans, par exemple 30m, 2h ou 1d ; de 1 minute à 7 jours pour un déclencheur CAP, de 10 secondes à 7 jours pour un déclencheur de superposition.
--pull FILEcheminnonaucunUn déclencheur CAP : un objet JSON, depuis un fichier ou - pour stdin, qui fait aussi lire par la plateforme des sources d’alerte CAP pour le déclencheur. Ses membres sont les paramètres de la carte cap-alert, listés ci-dessous.
--show SHOWbar ou takeoveravec --kind overlayaucunbar affiche une bande par-dessus ce qui est diffusé sur les écrans ciblés. takeover diffuse l’alerte en plein écran.
--edge EDGEbottom ou topnonbottomLe bord qu’occupe une bande. Seulement avec --show bar.
--style FILEcheminnonaucunUn objet JSON, tiré d’un fichier ou de - pour l’entrée standard, qui décrit le style de la carte de texte : theme, accent, background, backgroundColor, textColor et align. 64 Kio au plus.
--map FILEcheminnonaucunUn gabarit JSON, tiré d’un fichier ou de - pour l’entrée standard, qui construit la publication de superposition à partir du corps qu’envoie l’expéditeur ; voir déclencheurs de superposition. 64 Kio au plus.
--signingdrapeaunondésactivéExiger aussi un en-tête ScreenRig-Signature sur chaque envoi, et afficher une seule fois le secret de signature. Pas avec --verify.
--verify VENDORstringnonaucunUn déclencheur de superposition : accepte un envoi qui porte la signature propre à ce fournisseur à la place du mot de passe srtg_, qui continue de fonctionner à côté. github, stripe, shopify, slack, linear, vercel, asana ou generic_hmac.
--verify-secret-file FILEcheminavec --verify, sauf asanaaucunLe secret du fournisseur, depuis un fichier ou - pour stdin, jamais en argument : le secret de webhook que montrent GitHub, Stripe, Shopify, Slack, Linear ou Vercel, ou celui d’un expéditeur generic_hmac. asana n’en prend aucun : sa poignée de main le livre.
--verify-header NAMEstringavec --verify generic_hmacaucunL’en-tête qui porte la signature.
--verify-encoding ENCODINGhex ou base64nonhexAvec --verify generic_hmac : comment la signature est écrite. Elle peut commencer par sha256=.
--verify-timestamp-header NAMEstringnonaucunAvec --verify generic_hmac : un en-tête qui porte l’heure Unix en secondes, ou en millisecondes sur 13 chiffres. Le texte signé est alors <timestamp>.<body>.
--verify-tolerance SECONDSintegernon300Avec --verify-timestamp-header : de combien l’horodatage peut s’écarter de l’horloge du serveur, de 1 à 86400.
--handshake VENDORstringnonaucunUn déclencheur de superposition : répond au défi de configuration de microsoft_graph, monday, trello ou azure_event_grid. Slack et Asana répondent au leur par --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

L’enveloppe est le déclencheur avec data.url (https://api.screenrig.ai/api/triggers/<id>/cap, ou .../overlay pour un déclencheur de superposition), data.username (l’identifiant du déclencheur) et data.password. Saisissez-les maintenant dans le système expéditeur ; l’expéditeur d’un déclencheur de superposition a besoin de l’URL et du mot de passe (Authorization: Bearer). Avec --signing, l’enveloppe contient aussi data.signing_secret, affiché une seule fois, avec l’avertissement trigger_signing_secret_shown_once. Après une création interrompue ou ambiguë, relancez la même commande dans les 24 heures : elle réutilise la clé d’idempotence enregistrée, et le serveur renvoie le même déclencheur et le même mot de passe au lieu d’en créer un autre.

--pull ajoute des sources que la plateforme lit en plus de l’URL publiée, qui continue de fonctionner. L’objet contient sources (jusqu’à 5 URL http ou https d’alertes CAP 1.0 à 1.2 ou d’index ATOM/RSS), publicAlerts, location (name, latitude, longitude, et geocodes comme [{name, value}]), minSeverity, maxSeverity, minUrgency, minCertainty, events, excludeEvents, senders, statuses, scopes, languages et areaUnknown ; feeds get cap utilise les mêmes filtres que les drapeaux. location est requis sauf si sources sont fournis, et sans sources les flux publics couvrant location sont lus. Chaque source est récupérée une fois par minute. L’alerte la plus grave correspondante prend les écrans comme une alerte publiée, et quand les sources n’en montrent aucune, une alerte tirée se termine ; une source périmée ou défaillante ne termine jamais une alerte. Par exemple {"location": {"latitude": 49.25, "longitude": -123}, "minSeverity": "moderate"}.

Les options de superposition (--show, --edge, --style, --map, --signing, --verify avec ses compagnes, et --handshake) exigent --kind overlay, et --pull exige un déclencheur CAP. --style, --map et --verify-secret-file lisent chacune un fichier, et une seule d’entre elles peut lire - (stdin).

--verify VENDOR permet au webhook d’un fournisseur de publier directement vers data.url : un envoi qui porte la signature valide du fournisseur dans son propre en-tête est accepté sans data.password, qui continue de fonctionner à côté. Le secret du fournisseur est stocké scellé et n’est relu que sous la forme overlay.verify.secret, avec set et ses quatre derniers caractères. asana ne prend aucun secret : sa poignée de main en livre un, et les événements répondent secret_pending d’ici là. generic_hmac exige --verify-header et accepte --verify-encoding, --verify-timestamp-header et --verify-tolerance. --handshake VENDOR répond au défi de configuration de ce fournisseur avant qu’un identifiant ne soit demandé ; elle ne change aucune alerte, n’est jamais facturée et apparaît dans triggers deliveries comme résultat handshake. Les fournisseurs, leurs en-têtes et les réglages à saisir chez chacun sont listés sous signatures et poignées de main des fournisseurs.

triggers list#

Lister les déclencheurs de ce projet et leurs dernières alertes, les plus anciens d’abord.

triggers list
screenrig triggers list

--human affiche ID, KIND, LABEL, TARGET, ALERT et LAST_RECEIVED ; pour un déclencheur de superposition, ALERT indique ce qu’il affiche et combien d’alertes il retient. Une liste ne contient jamais de mot de passe ni de secret de signature.

triggers show#

Inspecter un déclencheur et sa dernière alerte.

triggers show <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de déclencheur trg_.
screenrig triggers show trg_01EXAMPLETRIGGER00

data.alert est la dernière alerte : ses champs CAP, state active ou ended (avec ended_reason cancelled, all_clear, cleared ou expired), until, et screens avec targeted, taken_over, cleared, skipped, failed et pending. pending est vrai tant que des écrans sont en cours d’écriture, et les écrans en échec sont réessayés. data.playlist_id est la liste de lecture d’alerte du déclencheur, et screen show signale une alerte comme une prise de contrôle de celle-ci. Pour un déclencheur de superposition, data.overlay contient show, edge, enabled, signing, verify et handshake tant qu’ils sont définis, card_id, alerts (les alertes actives, la plus récente en premier ; la première s’affiche), screens avec targeted, holding, taken_over, removed, edge_taken, skipped et failed, et pending.

triggers test#

Afficher une alerte d’exercice de 60 secondes sur les écrans du déclencheur.

triggers test <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de déclencheur trg_.
screenrig triggers test trg_01EXAMPLETRIGGER00

L’enveloppe est le reçu : data.outcome shown et data.alert. La réponse arrive avant que tous les écrans soient écrits ; triggers show indique les totaux. Un déclencheur de superposition affiche l’alerte screenrig-test (étiquette Test, titre Test overlay) pendant 60 secondes, et le reçu est celui d’un envoi (data.alert_id, data.until, data.active). Les deux types refusent un essai tant qu’une alerte est affichée.

triggers update#

Modifier un déclencheur sans changer son URL ni son secret.

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]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de déclencheur trg_.
--name NAMEstringnoninchangéRenommer le déclencheur.
--tag TAG, --screen-id IDstringnoninchangéUne nouvelle cible, comme dans triggers create.
--for DURATIONduréenoninchangéUne nouvelle durée de maintien pour les alertes qui n’indiquent aucune fin : de 1 minute à 7 jours pour un déclencheur CAP, de 10 secondes à 7 jours pour un déclencheur de superposition.
--pull FILE, --no-pullchemin, optionnoninchangéUn déclencheur CAP : remplacer ses sources CAP ou cesser de les lire.
--edge EDGEbottom ou topnoninchangéUne bande de superposition : la déplacer vers ce bord.
--style FILE, --clear-stylechemin, optionnoninchangéUn déclencheur de superposition : remplacer tout le style ou le retirer.
--map FILE, --clear-mapchemin, optionnoninchangéUn déclencheur de superposition : remplacer le gabarit ou le retirer pour que l’objet envoyé soit la publication.
--enable, --disabledrapeaunoninchangéUn déclencheur de superposition : un déclencheur désactivé répond à chaque envoi par le 404 d’un mauvais secret.
--signing, --no-signingdrapeaunoninchangéUn déclencheur de superposition : activer la vérification de signature (le secret de signature s’affiche une seule fois) ou la désactiver. Pas avec --verify.
--verify VENDORstringnoninchangéUn déclencheur de superposition : remplace la vérification du fournisseur, comme dans triggers create. Sans --verify-secret-file, il garde le secret stocké quand le fournisseur reste le même ; un autre fournisseur exige le sien.
--verify-secret-file FILEcheminnoninchangéAvec --verify : le secret du fournisseur, depuis un fichier ou - pour stdin.
--verify-header NAMEstringnoninchangéAvec --verify generic_hmac : l’en-tête qui porte la signature.
--verify-encoding ENCODINGhex ou base64noninchangéAvec --verify generic_hmac : comment la signature est écrite.
--verify-timestamp-header NAMEstringnoninchangéAvec --verify generic_hmac : un en-tête qui porte l’heure Unix.
--verify-tolerance SECONDSintegernoninchangéAvec --verify-timestamp-header : de combien l’horodatage peut s’écarter de l’horloge du serveur, de 1 à 86400.
--clear-verifydrapeaunondésactivéUn déclencheur de superposition : cesse d’accepter la signature d’un fournisseur et oublie son secret.
--handshake VENDORstringnoninchangéUn déclencheur de superposition : répond au défi de configuration de microsoft_graph, monday, trello ou azure_event_grid.
--clear-handshakedrapeaunondésactivéUn déclencheur de superposition : cesse de répondre à la poignée de main du fournisseur.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision.
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

Au moins une option autre que --expect-rev est requise. Une bande se replace sur les nouveaux écrans cibles et le nouveau bord ; la nouvelle cible d’un déclencheur de prise de contrôle s’applique dès la prochaine alerte qui commence. Un déclencheur qui signe déjà garde son secret de signature quand --signing est répété ; triggers rotate-secret --signing le remplace. --clear-verify supprime la vérification du fournisseur et oublie son secret, et --clear-handshake cesse de répondre à la poignée de main du fournisseur. Après une mise à jour interrompue ou ambiguë, relancez la même commande : elle réutilise la clé d’idempotence enregistrée.

triggers deliveries#

Lire le journal des envois d’un déclencheur de superposition : pourquoi chacun a été affiché, ignoré ou refusé.

triggers deliveries <id> [--limit N]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de déclencheur trg_.
--limit Nintegernon100Nombre de livraisons, les plus récentes d’abord ; de 1 à 100.
screenrig triggers deliveries trg_01EXAMPLETRIGGER00 --limit 20

data.items contient les envois des sept derniers jours : at, outcome (shown, updated, unchanged, ended, ignored, refused, invalid ou handshake), reason pour un envoi refusé ou invalide (credentials, signature, signature_missing, signature_invalid, timestamp_missing, timestamp_stale, secret_pending, handshake_invalid, disabled, body, mapping, field, rate_limited ou internal), detail (le membre ou le chemin de mappage fautif), status, bytes, files (les parties fichier d’un envoi multipart, qui sont ignorées), alert_id et request_id. signature est un ScreenRig-Signature en échec ; les autres raisons de signature, d’horodatage et de poignée de main sont celles d’un fournisseur, comme l’explique le tableau sous signatures et poignées de main des fournisseurs. Le journal ne conserve jamais de corps, d’en-tête ni d’identifiant. Un mauvais secret, une mauvaise signature et un déclencheur désactivé donnent tous à l’expéditeur le même 404 : ce journal indique donc lequel c’était. Un déclencheur CAP n’a pas de livraisons.

triggers clear#

Terminer maintenant l’alerte du déclencheur.

triggers clear <id> [--alert-id ID]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de déclencheur trg_.
--alert-id IDstringnonaucunUn déclencheur de superposition : mettre fin à cette alerte seulement. Sans cette option, toutes les alertes prennent fin.
screenrig triggers clear trg_01EXAMPLETRIGGER00
screenrig triggers clear trg_01EXAMPLETRIGGER00 --alert-id front-door

L’alerte prend fin avec ended_reason cleared, et ses écrans retrouvent ce qu’ils diffusaient auparavant. Un écran dont une autre prise de contrôle a pris la place depuis est laissé tel quel. Sans alerte active, rien ne change. Sur un déclencheur de superposition, l’arrêt d’une alerte qui n’est pas active ne change rien, et la fin de la dernière alerte abaisse la bande ou rend leurs écrans à la prise de contrôle.

triggers rotate-secret#

Remplacer le mot de passe d’un déclencheur.

triggers rotate-secret <id> [--signing] [--expect-rev REVISION]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de déclencheur trg_.
--signingdrapeaunondésactivéUn déclencheur de superposition qui signe : remplacer le secret de signature plutôt que le mot de passe.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision.
screenrig triggers rotate-secret trg_01EXAMPLETRIGGER00

L’enveloppe contient le nouveau mot de passe dans data.password. L’ancien mot de passe cesse aussitôt de fonctionner : saisissez le nouveau dans le système expéditeur. Avec --signing, l’enveloppe contient plutôt le nouveau data.signing_secret, affiché une seule fois ; l’ancien cesse aussitôt de fonctionner, et un déclencheur qui ne signe pas répond invalid_request. Après une rotation interrompue ou ambiguë, relancez la même commande dans les 24 heures : elle réutilise la clé d’idempotence enregistrée, et le serveur renvoie la rotation déjà effectuée au lieu d’en refaire une.

triggers delete#

Supprimer un déclencheur. Son URL cesse aussitôt d’accepter alertes et envois ; les bandes d’un déclencheur de superposition quittent ses écrans et sa carte est supprimée. Un déclencheur qui affiche une alerte est refusé avec resource_conflict : lancez d’abord triggers clear.

triggers delete <id> [--expect-rev REVISION]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de déclencheur trg_.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision.
screenrig triggers delete trg_01EXAMPLETRIGGER00

Déclencheurs de superposition

Un déclencheur de superposition montre ce qu’un système externe publie. Home Assistant, un concentrateur de détecteurs de porte ou de mouvement, un système de caméras ou un outil d’alertes envoie quelques mots par une requête HTTP POST, et les écrans du déclencheur les affichent jusqu’à leur échéance ou jusqu’à ce que l’expéditeur y mette fin. C’est un déclencheur comme un déclencheur CAP : triggers create --kind overlay le crée, et il compte dans la même limite de 20 par organisation.

--show bar affiche une bande par-dessus ce qui est diffusé sur chaque écran ciblé, sur le bord inférieur ou, avec --edge top, sur le bord supérieur. La bande glisse à l’écran quand une alerte commence et en sort quand la dernière se termine ; la liste de lecture, ses pages et son rythme restent intacts. Un écran porte une bande par bord : une superposition dont le bord est déjà occupé sur un écran par une autre superposition n’y apparaît pas (triggers show compte ces écrans sous edge_taken), et une page qui a sa propre bande avec présence sur ce bord la conserve. Une carte de coin ou de pastille sur ce bord se déplace au-delà de la hauteur de la bande, qu’elle soit affichée ou non. Aucune bande n’est dessinée sur une page d’espace publicitaire ni pendant une prise de contrôle. --show takeover diffuse l’alerte en plein écran sur les écrans ciblés qui ont une liste de lecture par défaut, de la première alerte jusqu’à la fin de la dernière. Un déclencheur de prise de contrôle ne remplace jamais une prise de contrôle déjà en cours sur un écran, comme celle d’un opérateur ou d’une alerte d’urgence, et une alerte CAP la remplace.

Une cible par étiquette est résolue quand une alerte commence ; un écran étiqueté plus tard reçoit la bande à la prochaine alerte qui commence. Les écrans sans liste de lecture par défaut sont ignorés par une prise de contrôle. Un écran hors ligne se met à jour à sa reconnexion.

L’expéditeur publie du JSON, un formulaire ou multipart/form-data (les parties fichier sont ignorées) à data.url avec Authorization: Bearer SECRET, ou en HTTP Basic avec l’identifiant du déclencheur comme nom d’utilisateur et le secret comme mot de passe. Le secret ne figure jamais dans l’URL. Un envoi comporte les membres suivants ; un membre inconnu est refusé et nommé.

MembreTypeNotes
alert_idstringL’identifiant de l’alerte choisi par l’expéditeur, de 1 à 200 caractères. Le même identifiant met à jour cette alerte au lieu d’en empiler une autre. Sans identifiant, c’est une seule alerte nommée default. Pour un arrêt, sans identifiant, toutes les alertes prennent fin.
labelstringUne courte étiquette au-dessus du titre : au plus 40 caractères.
titlestringAu maximum 120 caractères.
messagestringLe texte principal : au plus 400 caractères.
notestringUne ligne discrète au bas : au plus 120 caractères.
durationnombre ou chaîneDurée pendant laquelle cet envoi retient son alerte, à partir de maintenant : de 10 à 604800 secondes, ou 10s, 5m, 2h, 1d, ou until_cleared. Sans valeur, c’est --for du déclencheur (10 minutes par défaut).
clearbooléen ou chaînetrue (ou yes, y, 1, x) met fin à l’alerte ; false (ou no, n, 0, vide) la déclenche. Un arrêt ignore les autres membres.
statestringUn mot d’état de l’expéditeur. off, closed, clear, cleared, resolved, ok, normal, inactive et ended, quelle que soit la casse, mettent fin à l’alerte ; tout autre état la déclenche.

Un déclenchement exige au moins un de label, title, message et note. Un texte plus long que sa limite est refusé, tout comme duration hors de 10 secondes à 7 jours, les deux avec invalid_request qui nomme le membre. Chaque déclenchement ou mise à jour retient son alerte pendant duration à partir de cet envoi : un détecteur de mouvement qui envoie toutes les quelques secondes garde la bande affichée, et elle disparaît duration après le dernier envoi. Un déclencheur affiche son alerte la plus récente ; quand elle prend fin, la précédente reparaît. Il retient dix alertes, et la onzième remplace la plus ancienne. Une alerte prend fin dans les dix secondes environ suivant son échéance. Un arrêt envoyé deux fois met fin à l’alerte une seule fois, et l’arrêt d’une alerte qui n’est pas active ne change rien.

La réponse est un reçu : outcome (shown, updated, unchanged, ended ou ignored), alert_id, until (nul pour une alerte maintenue jusqu’à sa levée) et active, les alertes que le déclencheur détient après l’envoi. Un en-tête Idempotency-Key de 8 à 200 caractères répond à la nouvelle tentative d’un expéditeur avec le premier reçu pendant 24 heures. Un déclencheur accepte 120 envois par minute. Un envoi ne compte pas dans le plafond de requêtes d’agent, et une levée n’est jamais refusée, de sorte qu’une alerte peut toujours être retirée des écrans.

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"}'

Une mauvaise adresse, un mauvais secret, un déclencheur désactivé, une signature absente ou mauvaise et tout GET donnent le même 404 not_found : l’expéditeur ou l’aperçu d’un lien n’apprend rien sur la cause. triggers deliveries montre au projet pourquoi, pour les sept derniers jours, sans corps d’envoi. --style FILE règle theme, accent, background, backgroundColor, textColor et align de la carte de texte ; utilisez un déclencheur par apparence.

--map FILE construit la publication à partir du corps qu’envoie un outil d’alertes, avec le langage de gabarits des webhooks de cartes. Une chaîne avec {{body.title}} est du texte, une chaîne qui est exactement un espace réservé garde son type, {"$text": "{{body.message}}", "$max": 400} coupe le texte, et un chemin commence par body ou query. Ce gabarit transforme une alerte d’un outil de surveillance et l’arrête lorsque son statut est resolved :

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

--signing exige aussi ScreenRig-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">, avec la clé data.signing_secret (whsec_…, affichée une seule fois), où t se situe à moins de cinq minutes de l’horloge du serveur. L’expéditeur peut envoyer deux valeurs v1 pendant qu’il fait la rotation du secret.

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"

Un outil d’alerte ou un fournisseur qui signe ses propres envois peut faire vérifier sa signature à la place du secret, et sa poignée de main de configuration peut recevoir une réponse, comme pour les webhooks de carte : triggers create et triggers update acceptent --verify VENDOR avec --verify-secret-file FILE, et --handshake VENDOR, et triggers update accepte --clear-verify et --clear-handshake pour supprimer chacun. Les fournisseurs, leurs en-têtes et les options generic_hmac sont ceux qui y sont listés. Un envoi qui porte la signature valide du fournisseur est accepté sans le mot de passe srtg_ du déclencheur, qui continue de fonctionner à côté ; --verify exclut --signing, et une poignée de main ne change aucune alerte. triggers deliveries montre pourquoi une signature a échoué.

Une commande rest_command de Home Assistant envoie au déclencheur. Gardez le secret dans secrets.yaml et donnez à chaque automatisation l’alerte qu’elle déclenche ou arrête :

# 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}

Deux faits expliquent le fonctionnement. Chaque envoi de mouvement retient la bande pendant 2 minutes à partir de cet envoi : elle reste tant que le mouvement continue et disparaît 2 minutes après le dernier événement. Et Home Assistant produit le gabarit {{ }} avant d’envoyer, de sorte que le déclencheur reçoit du JSON ordinaire ; le gabarit --map du déclencheur est une étape distincte qui fait passer chaque envoi par ce gabarit ; omettez donc --map pour un expéditeur qui envoie déjà les membres de la superposition, comme Home Assistant ici, ou donnez-lui son propre déclencheur.

Autres groupes de commandes