Documentation

Liens de flotte : commandes CLI

Créez des liens de flotte pour vos gestionnaires d’appareils et migrez médias, listes de lecture, horaires et écrans d’une autre plateforme vers screenRIG.

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.

Migrate

migrate déplace dans le projet les médias, listes de lecture, dispositions, horaires et écrans de votre ancienne plateforme d’affichage. L’exécution a lieu dans le CLI sur votre machine : la clé de la plateforme est lue dans un --credentials FILE composé de lignes NAME=VALUE, n’est envoyée qu’à cette plateforme, et n’est jamais stockée, affichée, journalisée ni envoyée à screenRIG, qui voit des écritures ordinaires de médias, de listes de lecture, de liens de flotte, de campagnes et d’écrans. migrate vendors liste les plateformes lues, et le repli files lit un dossier ou un .zip de médias provenant de n’importe quelle autre plateforme.

Exécutez les étapes dans l’ordre : migrate vendors (ce qu’une plateforme accepte), migrate scan (lire le compte et indiquer ce qui peut et ne peut pas être transféré ; aucune connexion à screenRIG n’est requise), migrate apply --dry-run (le plan), migrate apply (exige l’accès Manage), puis migrate pair pour chaque afficheur.

--dir DIR est le répertoire de migration, ./screenrig-migration-VENDOR par défaut, créé avec le mode 0700. Il contient scan.json (le scan et son rapport), map.json (l’objet qu’est devenu chaque ancien élément, lié à cette URL d’API, à ce projet, à ce fournisseur et à ce compte source) et staging/ (téléchargements en cours). apply et pair utilisent l’unique répertoire screenrig-migration-* du répertoire de travail, ou acceptent --dir ; une seule de ces commandes s’exécute à la fois dans un répertoire.

Code de problèmeSortieSens
migration_dir_mismatch2Le répertoire a été créé pour un autre projet, une autre URL d’API, un autre fournisseur ou un autre compte source. Utilisez un autre --dir.
vendor_refused3La plateforme a refusé la clé. Créez une clé en lecture seule (migrate vendors VENDOR montre comment), corrigez le fichier --credentials et exécutez de nouveau la même commande.
vendor_not_found4La plateforme a répondu 404. --url est généralement erroné.
vendor_rate_limited7La plateforme limite le débit de la clé. Exécutez de nouveau la commande plus tard.
vendor_file_gone8L’adresse d’un fichier de médias a expiré ou est protégée. Exécuter migrate scan à nouveau l’actualise, et --files fournit un fichier qui échoue encore.
vendor_file_stalled8Un téléchargement de médias est devenu silencieux. Exécutez apply à nouveau.
vendor_bad_response9La plateforme a envoyé une réponse que le CLI ne peut pas utiliser.
vendor_unavailable9 ou 10La plateforme n’a pas pu être jointe ou a continué d’échouer.

migrate vendors#

Lister les plateformes que lit migrate, ce que chacune accepte et comment créer sa clé en lecture seule.

migrate vendors [VENDOR]
ParamètreTypeRequisPar défautNotes
VENDORstringnonchaque plateformeL’identifiant d’une plateforme. Un identifiant absent de la liste donne usage_error (sortie 2), qui nomme les identifiants existants.
screenrig migrate vendors
screenrig migrate vendors files

Fonctionne hors ligne et n’exige aucune connexion. data.vendors contient, pour chaque plateforme, son id et son name ; inputs, avec les flags qu’elle accepte (chacun avec flag et required, et values pour une région) et les lignes credentials que contient son fichier de clé (name, secret, required et help) ; connect, les étapes pour créer une clé en lecture seule ; maps, ce qui est transféré ; skips, ce qui ne l’est pas ; docs ; et example, une commande migrate scan fonctionnelle. Les plateformes sont triées par identifiant, avec files en dernier. files accepte un dossier ou .zip et un fuseau horaire facultatif, et n’exige aucune clé.

migrate scan#

Lire un compte d’affichage et indiquer ce qui peut et ne peut pas être transféré. Écrit scan.json et n’envoie rien à screenRIG.

migrate scan --from VENDOR [--url ADDRESS] [--region REGION] [--timezone ZONE] [--files PATH]
    [--credentials FILE] [--dir DIR]
ParamètreTypeRequisPar défautNotes
--from VENDORstringouiaucunLa plateforme à lire : un identifiant de migrate vendors, ou files.
--url ADDRESSstringpar plateformeaucunL’adresse d’une plateforme auto-hébergée.
--region REGIONstringpar plateformeaucunLa région d’un compte hébergé, pour une plateforme qui a des régions.
--timezone ZONEstringnonaucunUn nom de fuseau horaire IANA comme America/Toronto, à définir sur chaque écran dont l’ancienne plateforme n’en nomme aucun. Sans lui, un écran suit le fuseau que son Player rapporte.
--files PATHcheminpar plateformeaucunUn dossier ou .zip. Avec --from files, il contient les médias ; avec une autre plateforme, il contient les originaux que l’API de cette plateforme ne peut pas fournir, associés à ses médias par nom de fichier.
--credentials FILEcheminpar plateformeaucunLe fichier de clé : lignes NAME=VALUE avec les noms que liste migrate vendors VENDOR. Les lignes vides et les commentaires # sont ignorés, et une valeur peut être placée entre une paire de guillemets. Un nom obligatoire absent du fichier donne usage_error (sortie 2), qui le nomme.
--dir DIRcheminnon./screenrig-migration-VENDORLe répertoire de migration.
screenrig migrate scan --from files --files ./signage-media
screenrig migrate scan --from files --files ./signage-media.zip --dir ./old-signage --timezone America/Toronto

Un flag que la plateforme n’accepte pas, ou qu’elle exige et qui manque, donne usage_error (sortie 2), qui nomme ce que la plateforme accepte. Aucun flag ne reçoit la clé elle-même. Un nouveau scan remplace scan.json et conserve map.json, et se termine avec 0 quand il est terminé, même si certains éléments ne peuvent pas être transférés.

data est le rapport : vendor, label, scanned_at, found et importable (comptes de media, playlists, layouts, schedules, groups et screens), not_imported (chacun avec kind, source_id, name, un reason et généralement une étape next), lossy (chacun avec kind, source_id, name et le change qui se produit en chemin), notes, dir et scan_file. Un fichier que la plateforme fournit se télécharge lors de apply. Un fichier qu’elle ne fournit pas, ou qu’elle ne fournit que sous forme de copie réencodée, est associé par nom dans --files ; sans correspondance, ou avec plusieurs, il figure dans not_imported ou lossy avec l’étape qui le règle.

--from files n’exige aucune clé et lit chaque fichier image, vidéo et audio d’après son contenu, et non son extension. Un playlists.csv facultatif à la racine a les colonnes playlist, file (un chemin ou un nom de fichier unique), duration (secondes) et order ; sans lui, chaque dossier qui contient des médias devient une liste de lecture dans l’ordre naturel des noms de fichiers, et les fichiers à la racine en forment une nommée d’après le dossier ou le zip. Un screens.csv facultatif a name, group (plusieurs séparés par ;), playlist et timezone, et chaque ligne devient un écran en attente avec ses groupes comme étiquettes. Les autres fichiers et les entrées zip chiffrées figurent dans not_imported. Un scan files n’a aucun horaire : créez-les avec campaign create une fois les listes de lecture créées.

migrate apply#

Importer ce que le scan a trouvé : médias, listes de lecture et dispositions, écrans en attente et campagnes. Sans risque à relancer.

migrate apply [--dir DIR] [--dry-run] [--only KINDS] [--folder ID] [--canvas WIDTHxHEIGHT]
    [--credentials FILE] [--concurrency N] [--no-transcode]
ParamètreTypeRequisPar défautNotes
--dir DIRcheminnonl’unique répertoire ./screenrig-migration-*Le répertoire de migration qui contient scan.json.
--dry-runbooleannondésactivéLire le projet et afficher le plan. N’écrit rien et n’exige aucune clé.
--only KINDSstringnonles quatreSéparés par des virgules, chacun au plus une fois : media, playlists, screens, schedules.
--folder IDstringnonun nouveau dossier nommé Imported from et le nom de la plateformeUn dossier de médias existant (mfd_…) pour les médias importés.
--canvas WIDTHxHEIGHTstringnon1920x1080La toile des listes de lecture ordinaires, chaque côté d’au moins 16 pixels. Une disposition garde sa propre taille.
--credentials FILEcheminnonaucunLe fichier de clé, lu seulement quand un fichier de médias est téléchargé depuis la plateforme.
--concurrency Nintegernon4Nombre de médias importés simultanément, de 1 à 8.
--no-transcodebooleannondésactivéTéléversez les octets source sans modification, comme le fait media upload.
screenrig migrate apply --dry-run
screenrig migrate apply --dir ./screenrig-migration-files
screenrig migrate apply --only media,playlists --concurrency 2

apply importe dans l’ordre : les médias dans un seul dossier, les listes de lecture et les dispositions, un écran en attente par ancien écran, et une campagne par horaire que les campagnes peuvent exprimer. La plateforme n’est relue que pour télécharger les fichiers de médias. Une liste de lecture a une page par élément : les images et les vidéos remplissent la toile, une adresse web devient une page iframe, l’audio devient la bande sonore et une liste de lecture imbriquée est intégrée. Une disposition devient une liste de lecture sur sa propre toile, avec une page par élément de sa zone principale. Un horaire qui se répète par mois, par année, par heure ou par minute, ou un jour de semaine numéroté du mois, ne peut pas devenir une campagne : scan le liste dans not_imported.

--dry-run ne lit que le projet et répond data.plan (pour media, playlists, layouts, screens et schedules : les comptes create, reuse, recreate, waiting et fail), data.items, data.bytes à télécharger, les comptes data.placeholders et data.project, les liens de flotte et les campagnes utilisés par rapport à leurs maximums de 50 et 100. La progression va vers stderr sous forme de lignes JSON (migrate_progress avec phase, done et total), ou sous forme de texte avec --human. Une réexécution réutilise ce qui existe encore, refait tout ce que vous avez supprimé et ne modifie jamais ce qu’elle a créé. Une exécution réelle répond data.applied (les mêmes comptes), data.waiting (éléments qui attendent un média ou une liste de lecture non importée, chacun avec un reason), data.failed, data.placeholders (une entrée par ancien écran avec ses source_id, name et state : linked, unlinked, paired, finished ou waiting), data.tags et data.folder_id.

Un groupe devient une étiquette composée de lettres et de chiffres, numérotée lorsqu’elle entre en collision avec une étiquette qu’un autre écran porte. Une campagne cible les étiquettes des groupes et des écrans que nomme son horaire, avec ses dates, jours, heures et sa priorité. Une campagne lit ses dates et ses heures dans le fuseau horaire propre à chaque écran et exige une liste de lecture par défaut (no_default_playlist) : scan signale les écrans qui en sont dépourvus, et screen assign la définit après le jumelage.

Un écran en attente est un lien de flotte d’un seul écran qui porte l’ancien nom, les groupes comme étiquettes et la liste de lecture. Une organisation compte au plus 50 liens de flotte dans l’ensemble de ses projets ; les autres sont unlinked dans data.placeholders et attendent un code de Player (migrate pair). Un Player qui ouvre un lien devient un écran, et exécuter apply à nouveau lui donne l’ancien nom et le fuseau horaire et supprime le lien. apply n’affiche jamais l’URL d’un lien de flotte : fleet-links show le fait.

Un élément en échec conserve ok true avec data.failed (chacun avec key, name, code, status et detail) et l’avertissement migration_items_failed ; les éléments qui en dépendent attendent, et le code de sortie suit le statut du dernier échec. Un fichier de médias qui échoue seul (une adresse expirée, une réponse qui n’est pas un fichier, un téléchargement qui devient silencieux) n’échoue que pour ce média ; pour une adresse expirée, exécutez migrate scan à nouveau. Un refus qui se répéterait pour chaque élément (quota_exceeded, campaign_limit_reached, insufficient_access, pending_review, la plateforme qui refuse la clé, une connexion perdue) met fin à l’exécution avec data.stopped (code, detail et next) et le code de sortie de ce problème. Corrigez la cause et exécutez de nouveau la même commande : elle reprend là où elle s’est arrêtée.

migrate pair#

Jumeler un code de Player à un écran en attente, sous son ancien nom, avec sa liste de lecture, son fuseau horaire et ses étiquettes.

migrate pair <CODE...> --screen ID_OR_NAME [--dir DIR]
ParamètreTypeRequisPar défautNotes
<CODE...>stringouiaucunLe code qu’affiche le Player, comme ABC 234 : six caractères parmi 23456789ABCDEFGHJKMNPQRSTUVWXYZ, en majuscules ou en minuscules. Les espaces et les tirets entre eux sont ignorés, donc aucun guillemet n’est nécessaire.
--screen ID_OR_NAMEstringouiaucunL’écran en attente : son identifiant source ou son ancien nom exact. Un nom que deux écrans partagent liste leurs identifiants.
--dir DIRcheminnonl’unique répertoire ./screenrig-migration-*Le répertoire de migration.
screenrig migrate pair ABC 234 --screen "Front desk"
screenrig migrate pair ABC234 --screen 3 --dir ./old-signage

Exécutez d’abord migrate apply : le jumelage a besoin de la correspondance et de la liste de lecture créées par cette commande. pair réclame le code pour l’écran sous son ancien nom, définit sa liste de lecture, son fuseau horaire et son champ migrated_from, définit ses étiquettes, supprime le lien de l’écran en attente et enregistre le résultat. data contient source_id, name, screen_id, steps (paired, updated, tagged, link deleted, recorded), next et, quand cette exécution a réclamé le code, public_url. Chaque étape est enregistrée au fur et à mesure, de sorte qu’une réexécution termine ce qu’un jumelage interrompu a laissé. Un écran déjà jumelé donne resource_conflict (sortie 5), qui le nomme. Le Player termine le jumelage la prochaine fois qu’il contacte le service ; screen show rapporte alors state active.

Autres groupes de commandes