Collegamenti flotta
Un link di flotta è un URL Player che inserisci in un gestore dispositivi, come un’app kiosk nella console Google Admin. Ogni dispositivo che lo apre diventa il proprio schermo in questo progetto, senza codice di associazione. Un’organizzazione può avere al massimo 50 link di flotta in tutti i suoi progetti.
Ogni nuovo schermo riceve i tag, i campi e la playlist del link, e un’etichetta dal dispositivo: prima l’ID asset dell’amministratore, poi la posizione, altrimenti la prossima etichetta predefinita. Un dispositivo mantiene il proprio schermo tra ricariche e riavvii. Dopo un ripristino o una reinstallazione, un dispositivo che segnala il seriale o DUID di uno schermo creato da un collegamento di flotta di questo progetto recupera quello schermo invece di crearne un altro, una volta che la sua vecchia chiave è rimasta inattiva per dieci minuti. screen show restituisce fleet_link_id per uno schermo creato da un collegamento di flotta, e --human stampa Created by fleet link: flk_…. L’id resta anche dopo l’eliminazione del collegamento.
Un link può terminare all’ora che scegli: --expires-at gli impedisce di creare e recuperare schermi da quel momento, come fa un link disattivato, e un dispositivo che lo apre mostra il proprio codice di abbinamento. Gli schermi che ha creato continuano a riprodurre. fleet-links show --android-provisioning stampa il payload che esegue il provisioning di un dispositivo Android ripristinato come proprietario del dispositivo; vedi Proprietario del dispositivo Android con codice QR.
L’URL, https://play.screenrig.ai/player/#fleet=srfl_…, è una credenziale che crea schermi. Dallo solo al gestore dispositivi. Il segreto viaggia nel frammento URL, che i browser non inviano mai al server. Una credenziale di sola lettura riceve data.url vuoto con url_redacted: true, e l’output umano dice URL: withheld from a Read only credential. Altrimenti l’output umano stampa l’URL sotto un’etichetta Sensitive fleet link URL, e fleet-links list --human non lo stampa mai. Il CLI verifica un URL restituito prima di stamparlo: HTTPS, percorso /player/ e segreto solo in #fleet=. Trattiene un URL che fallisce il controllo, con l’avviso fleet_link_url_withheld, e tiene le risposte fleet link fuori dal suo log operativo.
| Codice problema | Esci | Significato |
|---|---|---|
fleet_link_limit_reached | 5 | L’organizzazione ha già 50 link di flotta. Non è stato creato nulla. Elimina prima uno. |
invalid_request | 8 | Un campo è stato rifiutato, come un --playlist-id che non nomina alcuna playlist in questo progetto. error.next è playlist list per una playlist sconosciuta. |
not_found | 4 | Nessun link fleet ha questo ID nel progetto. |
revision_conflict | 6 | La revisione --expect-rev era obsoleta. Esegui fleet-links show, poi riprova. |
fleet_link_secret_unavailable | 3 | fleet-links show --android-provisioning non ha ricevuto alcun URL utilizzabile, come per una credenziale di sola lettura. Un accesso Manage lo riceve. |
fleet-links create#
Crea un collegamento flotta e ricevi il suo URL Player.
fleet-links create --name NAME [--tag TAG]... [--field NAME=VALUE]... [--playlist-id ID] [--max-screens N]
[--expires-at TIME] [--disabled]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
--name NAME | string | sì | nessuno | Il nome del link, da 1 a 80 caratteri senza caratteri di controllo. |
--tag TAG | string | no | nessun tag | Un tag per ogni nuovo schermo, da 1 a 32 lettere o cifre. Ripetilo o elenca i tag separati da virgola; massimo 16. |
--field NAME=VALUE | string | no | nessun campo | Un campo per ogni nuovo schermo, che le schede leggono come {screen.field.NAME}. NAME è di 1–32 lettere minuscole, cifre o trattini bassi e VALUE di 1–200 caratteri. Ripetilo; al massimo 32. |
--playlist-id ID | string | no | nessuno | La playlist pl_ assegnata a ogni nuovo schermo. |
--max-screens N | integer | no | nessun limite | Il massimo numero di schermi che il link crea, da 1 a 10000. |
--expires-at TIME | string | no | mai | Quando il link smette di creare e recuperare schermi: un orario RFC 3339 con secondi e fuso, come 2026-12-31T23:59:59Z. Un orario già trascorso fa scadere subito il link. |
--disabled | boolean | no | spento | Crealo disabilitato. Non crea schermi fino a fleet-links update --enable. |
screenrig fleet-links create --name "Lobby displays" --tag Lobby --tag Floor2 --playlist-id pl_01EXAMPLEPLAYLIST000000screenrig fleet-links create --name "Trade show" --field booth=A12 --expires-at 2026-12-31T23:59:59ZLa busta è il link della flotta con il suo URL Player in data.url. Inserisci quell’URL nel gestore dispositivi. Dopo una creazione interrotta o ambigua, riesegui lo stesso comando entro 24 ore: riutilizza la chiave di idempotenza salvata e il server restituisce lo stesso link invece di crearne un altro.
fleet-links list#
Elenca i link della flotta di questo progetto, dal più vecchio
fleet-links listscreenrig fleet-links listUna credenziale di sola lettura riceve ogni data.items[].url vuoto con url_redacted: true. --human stampa ID, LABEL, ENABLED, SCREENS, TAGS e LAST_USED, aggiunge EXPIRES finché un link elencato ha una scadenza e contrassegna con (expired) quello che l’ha superata, e non stampa mai l’URL. SCREENS è il numero di schermi creati dal link, o creati/massimo con --max-screens; i recuperi non sono conteggiati.
fleet-links show#
Ispeziona un link flotta e ricevi il suo URL Player.
fleet-links show <id> [--android-provisioning]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
<id> | string | sì | nessuno | L’ID link flotta flk_. |
--android-provisioning | boolean | no | spento | Stampa il JSON di provisioning come proprietario del dispositivo Android di questo link al posto dei suoi dettagli, da codificare come codice QR per un dispositivo ripristinato. Contiene il segreto del link, quindi serve un accesso Manage. |
screenrig fleet-links show flk_01EXAMPLELINK0000screenrig fleet-links show flk_01EXAMPLELINK0000 --android-provisioningscreens_created conta gli schermi creati dal link, e last_used_at è l’ultima volta che ne ha creato o recuperato uno. expires_at è presente quando il link ha una scadenza, e l’output leggibile la contrassegna con (expired) una volta trascorsa.
Con --android-provisioning, data.id e data.provisioning sostituiscono i dettagli del link. Il JSON contiene il segreto del link: mostra il suo codice QR solo alla persona presente al dispositivo. Una credenziale di sola lettura non riceve alcun URL da cui costruirlo e ottiene fleet_link_secret_unavailable (uscita 3). Proprietario del dispositivo Android con codice QR elenca il payload.
fleet-links update#
Modifica ciò che un link fleet fornisce agli schermi che crea da ora in poi.
fleet-links update <id> [--name NAME] [--enable | --disable] [--tag TAG]... [--clear-tags]
[--field NAME=VALUE]... [--clear-fields]
[--playlist-id ID | --clear-playlist] [--max-screens N | --clear-max-screens]
[--expires-at TIME | --clear-expires-at] [--expect-rev REVISION]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
<id> | string | sì | nessuno | L’ID link flotta flk_. |
--name NAME | string | almeno una modifica | invariato | Da 1 a 80 caratteri. |
--enable | boolean | almeno una modifica | spento | Il link crea e recupera di nuovo schermi. |
--disable | boolean | almeno una modifica | spento | Il link non crea né recupera schermi; un dispositivo che lo apre mostra invece il suo codice di associazione. |
--tag TAG | string | almeno una modifica | invariato | Sostituisce l’intero set di tag. Ripetilo, o elenca i tag separati da virgola; massimo 16. |
--clear-tags | boolean | almeno una modifica | spento | I nuovi schermi non ricevono tag. |
--field NAME=VALUE | string | almeno una modifica | invariato | Sostituisce l’intero insieme di campi, come in fleet-links create. Ripetilo; al massimo 32. |
--clear-fields | boolean | almeno una modifica | spento | I nuovi schermi non ricevono campi. |
--playlist-id ID | string | almeno una modifica | invariato | La playlist pl_ per i nuovi schermi. |
--clear-playlist | boolean | almeno una modifica | spento | I nuovi schermi non ricevono playlist. |
--max-screens N | integer | almeno una modifica | invariato | Il massimo numero di schermi che il link crea in totale, da 1 a 10000. |
--clear-max-screens | boolean | almeno una modifica | spento | Rimuovi il limite. |
--expires-at TIME | string | almeno una modifica | invariato | Imposta o sposta la scadenza: un orario RFC 3339 con secondi e fuso. Un orario già trascorso fa scadere subito il link. |
--clear-expires-at | boolean | almeno una modifica | spento | Rimuove la scadenza; il link non scade mai. |
--expect-rev REVISION | string | no | nessuno | Precondizione opzionale di revisione. |
screenrig fleet-links update flk_01EXAMPLELINK0000 --playlist-id pl_01EXAMPLEPLAYLIST000000update modifica solo i campi passati, e solo per gli schermi che il link crea da ora in poi. Gli schermi già creati mantengono tag, playlist e etichetta. Un link scaduto si comporta come uno disattivato finché la sua scadenza non viene spostata o rimossa. L’URL resta invariato; usa rotate per sostituirlo.
fleet-links rotate#
Sostituisci l’URL di un link fleet e ricevi quello nuovo.
fleet-links rotate <id> [--expect-rev REVISION]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
<id> | string | sì | nessuno | L’ID link flotta flk_. |
--expect-rev REVISION | string | no | nessuno | Precondizione opzionale di revisione. |
screenrig fleet-links rotate flk_01EXAMPLELINK0000La busta contiene il nuovo URL in data.url. Il vecchio URL smette di funzionare immediatamente: un dispositivo che lo apre mostra il suo codice di associazione. Gli schermi che hanno già creato il link continuano a riprodurlo, perché un Player associato non presenta mai più il link. Inserisci il nuovo URL nel gestore dispositivi. Dopo una rotazione interrotta o ambigua, riesegui lo stesso comando: riutilizza la chiave di idempotenza salvata e il server restituisce la rotazione già avvenuta invece di ruotare di nuovo.
fleet-links delete#
Elimina un link flotta. Il suo URL smette di funzionare immediatamente e gli schermi creati restano.
fleet-links delete <id> [--expect-rev REVISION]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
<id> | string | sì | nessuno | L’ID link flotta flk_. |
--expect-rev REVISION | string | no | nessuno | Precondizione opzionale di revisione. |
screenrig fleet-links delete flk_01EXAMPLELINK0000Gli schermi creati dal link mantengono le loro playlist e tag.
Migrate
migrate sposta nel progetto i media, le playlist, i layout, le programmazioni e gli schermi della tua precedente piattaforma di signage. Viene eseguito nella CLI sul tuo computer: la chiave della piattaforma viene letta da un --credentials FILE di righe NAME=VALUE, va solo a quella piattaforma e non viene mai memorizzata, stampata, registrata nel log né inviata a screenRIG, che vede soltanto normali scritture di media, playlist, collegamenti alla flotta, campagne e schermi. migrate vendors elenca le piattaforme che legge, e l’alternativa files legge una cartella o un .zip di media da qualsiasi altra piattaforma.
Esegui i passaggi in ordine: migrate vendors (che cosa accetta una piattaforma), migrate scan (leggi l’account e riporta che cosa può e non può essere trasferito; non richiede alcun accesso a screenRIG), migrate apply --dry-run (il piano), migrate apply (richiede l’accesso Manage), poi migrate pair per ogni schermo.
--dir DIR è la directory di migrazione, ./screenrig-migration-VENDOR per impostazione predefinita, creata con permessi 0700. Contiene scan.json (la scansione e il suo report), map.json (quale oggetto è diventato ogni vecchio elemento, legato a questo URL API, progetto, fornitore e account di origine) e staging/ (i download in corso). apply e pair usano l’unica directory screenrig-migration-* nella directory di lavoro, oppure accettano --dir; in una directory se ne esegue uno alla volta.
| Codice problema | Esci | Significato |
|---|---|---|
migration_dir_mismatch | 2 | La directory è stata creata per un altro progetto, URL API, fornitore o account di origine. Usa un altro --dir. |
vendor_refused | 3 | La piattaforma ha rifiutato la chiave. Crea una chiave di sola lettura (migrate vendors VENDOR mostra come), correggi il file --credentials ed esegui di nuovo lo stesso comando. |
vendor_not_found | 4 | La piattaforma ha risposto 404. Di solito --url è sbagliato. |
vendor_rate_limited | 7 | La piattaforma sta limitando la frequenza delle richieste della chiave. Esegui di nuovo il comando più tardi. |
vendor_file_gone | 8 | L’indirizzo di un file media è scaduto o è protetto. Eseguire di nuovo migrate scan lo aggiorna, e --files fornisce un file che continua a fallire. |
vendor_file_stalled | 8 | Un download di media non riceve più dati. Esegui di nuovo apply. |
vendor_bad_response | 9 | La piattaforma ha inviato una risposta che la CLI non può usare. |
vendor_unavailable | 9 o 10 | Non è stato possibile raggiungere la piattaforma, oppure continua a fallire. |
migrate vendors#
Elenca le piattaforme che migrate legge, che cosa accetta ciascuna e come creare la sua chiave di sola lettura.
migrate vendors [VENDOR]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
VENDOR | string | no | ogni piattaforma | L’id di una piattaforma. Un id che non elenca è usage_error (exit 2) e indica gli id esistenti. |
screenrig migrate vendors
screenrig migrate vendors filesFunziona offline e non richiede alcun accesso. data.vendors contiene, per ogni piattaforma, id e name; inputs, con i flags che accetta (ciascuno con flag e required, e values per una regione) e le righe credentials che il suo file chiave contiene (name, secret, required e help); connect, i passaggi per creare una chiave di sola lettura; maps, ciò che viene trasferito; skips, ciò che non viene trasferito; docs; e example, un comando migrate scan funzionante. Le piattaforme sono ordinate per id con files per ultimo. files accetta una cartella o un .zip e un fuso orario facoltativo, e non richiede alcuna chiave.
migrate scan#
Leggi un account di signage e riporta che cosa può e che cosa non può essere trasferito. Scrive scan.json e non invia nulla a screenRIG.
migrate scan --from VENDOR [--url ADDRESS] [--region REGION] [--timezone ZONE] [--files PATH]
[--credentials FILE] [--dir DIR]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
--from VENDOR | string | sì | nessuno | La piattaforma da leggere: un id da migrate vendors, oppure files. |
--url ADDRESS | string | per piattaforma | nessuno | L’indirizzo di una piattaforma self-hosted. |
--region REGION | string | per piattaforma | nessuno | La regione di un account ospitato, per una piattaforma che ha regioni. |
--timezone ZONE | string | no | nessuno | Un nome di fuso orario IANA come America/Toronto, impostato su ogni schermo la cui vecchia piattaforma non ne indica nessuno. Senza di esso uno schermo segue la zona che il suo Player riporta. |
--files PATH | path | per piattaforma | nessuno | Una cartella o un .zip. Con --from files contiene i media; con un’altra piattaforma contiene gli originali che l’API di quella piattaforma non può fornire, abbinati ai suoi media in base al nome file. |
--credentials FILE | path | per piattaforma | nessuno | Il file chiave: righe NAME=VALUE con i nomi che migrate vendors VENDOR elenca. Le righe vuote e i commenti # vengono ignorati, e un valore può stare tra una coppia di virgolette. Un nome obbligatorio mancante nel file è usage_error (exit 2) che lo nomina. |
--dir DIR | path | no | ./screenrig-migration-VENDOR | La directory di migrazione. |
screenrig migrate scan --from files --files ./signage-media
screenrig migrate scan --from files --files ./signage-media.zip --dir ./old-signage --timezone America/TorontoUn’opzione che la piattaforma non accetta, o una necessaria che manca, è usage_error (exit 2) e indica che cosa accetta la piattaforma. Nessuna opzione accetta la chiave stessa. Una nuova scansione sostituisce scan.json e conserva map.json, e termina con 0 quando si completa, anche se alcuni elementi non possono essere trasferiti.
data è il report: vendor, label, scanned_at, found e importable (conteggi di media, playlists, layouts, schedules, groups e screens), not_imported (ciascuno con kind, source_id, name, un reason e di solito un passaggio next), lossy (ciascuno con kind, source_id, name e il change che avviene lungo il percorso), notes, dir e scan_file. Un file che la piattaforma fornisce viene scaricato in apply. Un file che non fornisce, o che fornisce solo come copia ricodificata, viene abbinato per nome in --files; senza corrispondenza, o con più corrispondenze, si trova in not_imported o lossy con il passaggio che lo risolve.
--from files non richiede alcuna chiave. Legge ogni file immagine, video e audio in base al contenuto, non all’estensione. Un playlists.csv facoltativo nella radice ha le colonne playlist, file (un percorso o un nome file univoco), duration (secondi) e order; senza di esso ogni cartella che contiene media diventa una playlist in ordine naturale dei nomi file, e i file nella radice ne formano una che prende il nome della cartella o dello zip. Un screens.csv facoltativo ha name, group (più valori separati da ;), playlist e timezone, e ogni riga diventa uno schermo in attesa con i suoi gruppi come tag. Gli altri file e le voci zip cifrate sono in not_imported. Una scansione files non ha programmazioni: creale con campaign create quando le playlist esistono.
migrate apply#
Importa ciò che la scansione ha trovato: media, playlist e layout, schermi in attesa e campagne. Si può rieseguire senza rischi.
migrate apply [--dir DIR] [--dry-run] [--only KINDS] [--folder ID] [--canvas WIDTHxHEIGHT]
[--credentials FILE] [--concurrency N] [--no-transcode]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
--dir DIR | path | no | l’unica directory ./screenrig-migration-* | La directory di migrazione che contiene scan.json. |
--dry-run | boolean | no | spento | Leggi il progetto e stampa il piano. Non scrive nulla e non richiede alcuna chiave. |
--only KINDS | string | no | tutti e quattro | Separati da virgola, ciascuno al massimo una volta: media, playlists, screens, schedules. |
--folder ID | string | no | una nuova cartella chiamata Imported from più il nome della piattaforma | Una cartella media esistente (mfd_…) per i media importati. |
--canvas WIDTHxHEIGHT | string | no | 1920x1080 | Il canvas delle playlist semplici, con ogni lato di almeno 16 pixel. Un layout mantiene le proprie dimensioni. |
--credentials FILE | path | no | nessuno | Il file chiave, letto solo quando un file media viene scaricato dalla piattaforma. |
--concurrency N | integer | no | 4 | Media importati contemporaneamente, da 1 a 8. |
--no-transcode | boolean | no | spento | Carica i byte sorgente senza modificarli, come fa media upload. |
screenrig migrate apply --dry-run
screenrig migrate apply --dir ./screenrig-migration-files
screenrig migrate apply --only media,playlists --concurrency 2apply importa in quest’ordine: i media in una cartella, le playlist e i layout, uno schermo in attesa per ogni vecchio schermo e una campagna per ogni programmazione che le campagne sanno esprimere. Rilegge la piattaforma solo per scaricare i file media. Una playlist ha una pagina per elemento: immagini e video riempiono il canvas, un indirizzo web diventa una pagina iframe, l’audio diventa la traccia audio e una playlist annidata viene inclusa direttamente. Un layout diventa una playlist sul proprio canvas con una pagina per ogni elemento della sua zona principale. Una programmazione che si ripete per mese, anno, ora o minuto, o in un giorno della settimana numerato del mese, non può diventare una campagna: scan la elenca in not_imported.
--dry-run legge solo il progetto e risponde con data.plan (per media, playlists, layouts, screens e schedules: i conteggi create, reuse, recreate, waiting e fail), data.items, data.bytes da scaricare, i conteggi data.placeholders e data.project, i collegamenti alla flotta e le campagne in uso rispetto ai massimi di 50 e 100. L’avanzamento va su stderr come righe JSON (migrate_progress con phase, done e total), oppure come testo con --human. Una nuova esecuzione riutilizza ciò che esiste ancora, ricrea ciò che hai eliminato e non modifica mai ciò che ha creato. Un’esecuzione reale risponde con data.applied (gli stessi conteggi), data.waiting (elementi che attendono un media o una playlist non importati, ciascuno con un reason), data.failed, data.placeholders (una voce per ogni vecchio schermo con i suoi source_id, name e state: linked, unlinked, paired, finished o waiting), data.tags e data.folder_id.
Un gruppo diventa un tag composto da lettere e cifre, numerato quando coincide con un tag che porta un altro schermo. Una campagna ha come destinazione i tag dei gruppi e degli schermi che la sua programmazione nomina, con le sue date, i suoi giorni, le sue ore e la sua priorità. Una campagna legge le sue date e le sue ore nel fuso orario proprio di ogni schermo e richiede una playlist predefinita (no_default_playlist): scan segnala gli schermi che ne sono privi, e screen assign la imposta dopo l’associazione.
Uno schermo in attesa è un collegamento alla flotta di un solo schermo che porta il vecchio nome, i gruppi come tag e la playlist. Un’organizzazione ha al massimo 50 collegamenti alla flotta in tutti i suoi progetti; gli altri sono unlinked in data.placeholders e attendono un codice Player (migrate pair). Un Player che apre un collegamento diventa uno schermo, ed eseguire di nuovo apply gli assegna il vecchio nome e il fuso orario ed elimina il collegamento. apply non stampa mai l’URL di un collegamento alla flotta: fleet-links show sì.
Un elemento che fallisce conserva ok true con data.failed (ciascuno con key, name, code, status e detail) e l’avviso migration_items_failed; gli elementi che ne dipendono restano in attesa, e il codice di uscita segue lo stato dell’ultimo errore. Un file media che fallisce da solo (un indirizzo scaduto, una risposta che non è un file, un download che non riceve più dati) fallisce solo quel media; per un indirizzo scaduto esegui di nuovo migrate scan. Un rifiuto che si ripeterebbe per ogni elemento (quota_exceeded, campaign_limit_reached, insufficient_access, pending_review, la piattaforma che rifiuta la chiave, una connessione persa) termina l’esecuzione con data.stopped (code, detail e next) e con il codice di uscita di quel problema. Correggi la causa ed esegui di nuovo lo stesso comando: riprende da dove si era fermato.
migrate pair#
Associa un codice Player a uno schermo in attesa, con il suo vecchio nome, la playlist, il fuso orario e i tag.
migrate pair <CODE...> --screen ID_OR_NAME [--dir DIR]| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
<CODE...> | string | sì | nessuno | Il codice mostrato dal Player, come ABC 234: sei caratteri tratti da 23456789ABCDEFGHJKMNPQRSTUVWXYZ, in maiuscolo o minuscolo. Spazi e trattini tra di essi vengono ignorati, quindi non servono virgolette. |
--screen ID_OR_NAME | string | sì | nessuno | Lo schermo in attesa: il suo id di origine o il suo vecchio nome esatto. Un nome condiviso da due schermi ne elenca gli id. |
--dir DIR | path | no | l’unica directory ./screenrig-migration-* | La directory di migrazione. |
screenrig migrate pair ABC 234 --screen "Front desk"
screenrig migrate pair ABC234 --screen 3 --dir ./old-signageEsegui prima migrate apply: l’associazione richiede la mappa e la playlist che ha creato. pair rivendica il codice per lo schermo con il suo vecchio nome, imposta la sua playlist, il fuso orario e il campo migrated_from, imposta i suoi tag, elimina il collegamento dello schermo in attesa e registra il risultato. data contiene source_id, name, screen_id, steps (paired, updated, tagged, link deleted, recorded), next e, quando questa esecuzione ha rivendicato il codice, public_url. Ogni passaggio viene registrato man mano che si compie, quindi una nuova esecuzione completa ciò che un pair interrotto ha lasciato. Uno schermo già associato è resource_conflict (exit 5) che lo nomina. Il Player completa l’associazione al successivo contatto con il servizio; screen show riporta poi state active.