Aller au contenu

Signaux ​

Un signal est un message que vous avez nommé et conservé : un message OSC, un datagramme UDP brut, une requête HTTP ou une publication MQTT, avec sa cible. Vous le construisez une fois — sur l’écran Signaux, ou en enregistrant ce que vous venez d’envoyer depuis un autre écran — puis le renvoyez quand vous en avez besoin, octet pour octet à l’identique.

La bibliothèque est un fichier JSON que vous pouvez lire, modifier à la main, copier sur une autre machine ou versionner à côté d’un projet. L’écran Signaux l’affiche sous forme d’un arbre de dossiers à gauche et des champs du signal sélectionné à droite.

Ce qu’un signal peut envoyer ​

Choisissez le type dans Transport. Chaque type a ses propres champs :

TransportChampsCe qui part
OSCCible hôte:port, Adresse OSC, ArgumentsUn message OSC vers un IP:port ou host:port, depuis un port UDP neuf. Voir OSC pour les types d’arguments.
UDP (brut)Cible hôte:port, Type (Texte ou Octets hex), Charge utileUn datagramme avec exactement ces octets. Le texte part tel qu’écrit, sans terminateur ; l’hexadécimal est par paires de chiffres comme de ad be ef (les espaces et un préfixe 0x sont autorisés).
HTTPMéthode, URL, Délai d’attente (ms), En-têtes, Authentification, CorpsUne requête HTTP. Voir HTTP.
MQTTBroker hôte:port, Topic, QoS, retain, Charge utileUne publication. Voir MQTT.

Chaque signal a aussi un Nom, un Dossier et une Note — ce qu’il doit provoquer et ce qui doit correspondre à l’autre bout.

Les cibles des signaux OSC et UDP sont IP:port ou host:port (par exemple 127.0.0.1:9000) ; un nom d’hôte est résolu à chaque envoi du signal. Le broker d’un signal MQTT est host:port ; sans port, c’est 1883.

Quand vous changez le type d’un signal, son message repart des valeurs par défaut de ce type. Seule la cible est conservée, et seulement entre OSC et UDP (brut), où la cible signifie la même chose.

Envoyer un signal ​

Pour envoyer un signal depuis l’écran Signaux, faites l’une de ces choses :

  • Sélectionnez-le et appuyez sur Envoyer.
  • Appuyez sur Ctrl+Enter pendant que vous travaillez dans ses champs.
  • Double-cliquez dessus dans l’arbre.

Chaque envoi écrit une ligne dans la console : ce qui est parti et où, les octets envoyés, ou pour HTTP le statut et le temps pris. Un échec (une connexion refusée, un hôte injoignable) est une ligne rouge avec la raison. L’heure du dernier envoi s’affiche à côté des boutons.

Un signal part par les mêmes commandes que les écrans de son protocole : l’Inspecteur le liste donc sous l’outil qui l’a envoyé, et l’autre bout ne peut pas le distinguer d’un message que vous avez tapé.

Comment chaque type est envoyé :

TypeComment il part
OSCComme l’écran OSC envoie un message.
UDP (brut)Un datagramme vers la cible.
HTTPComme l’écran HTTP envoie une requête, avec son bocal à cookies tant que Conserver les cookies y est actif. Une connexion refusée ou un délai dépassé compte comme un échec, pas comme un statut.
MQTTTant que l’écran MQTT est connecté au broker du signal, sur cette connexion, avec son identifiant client et ses identifiants. Sinon — non connecté, ou connecté à un autre broker — Signal Lab se connecte au broker du signal pour cette seule publication, avec un identifiant client qui lui est propre, sans nom d’utilisateur et en session propre, puis se déconnecte.

Une connexion est celle du broker du signal quand l’hôte est le même, sans tenir compte de la casse, et que le port est le même, 1883 représentant un broker écrit sans port. Les noms ne sont pas résolus : localhost et 127.0.0.1 sont ici deux brokers différents, si bien qu’un signal qui nomme l’un n’est pas envoyé sur une connexion faite à l’autre.

TIP

Un signal MQTT ne stocke aucun mot de passe. Pour publier vers un broker qui en demande un, connectez-vous d’abord à ce broker sur l’écran MQTT ; le signal emprunte alors cette connexion.

Envoyer depuis n’importe quel écran ​

Appuyez sur Ctrl+K sur n’importe quel écran pour ouvrir la palette, tapez quelques lettres du nom, du dossier, de la cible ou du message d’un signal, puis appuyez sur Enter. La palette se ferme et le signal est envoyé ; vous restez sur l’écran que vous regardiez.

ToucheCe qu’elle fait
Ctrl+KOuvre la palette, ou la ferme.
↑ ↓Déplace le choix.
EnterEnvoie le signal choisi.
EscFerme la palette sans envoyer.

La palette liste au plus 12 signaux : les 12 premiers de la bibliothèque tant que vous n’avez rien tapé, puis les 12 premiers qui correspondent. Un clic sur une ligne l’envoie ; un clic à l’extérieur ferme la palette.

Créer des signaux ​

Sur l’écran Signaux ​

  1. Choisissez le dossier auquel le signal appartient (voir dossier courant).
  2. Appuyez sur Nouveau signal. Un nouveau signal OSC vers 127.0.0.1:9000, adresse /hello, apparaît dans ce dossier, sélectionné.
  3. Modifiez Nom, Transport et les champs du message.

Chaque modification s’enregistre d’elle-même ; il n’y a pas de bouton d’enregistrement sur cet écran. Tant que le fichier de bibliothèque ne peut pas être lu, rien n’est enregistré et les champs sont en lecture seule (voir Le fichier de la bibliothèque).

Dupliquer place une copie juste après le signal sélectionné, son nom suivi d’un ·. Supprimer demande une confirmation (Supprimer ?) : le second clic le retire du fichier. Son dossier reste, même s’il est désormais vide.

Depuis les écrans HTTP, OSC et MQTT ​

La partie d’envoi de trois écrans — Requête sur HTTP, Envoi sur OSC, Publication sur MQTT — peut conserver comme signal ce qu’elle enverrait.

  1. Préparez le message et envoyez-le jusqu’à ce qu’il fasse ce que vous voulez.
  2. Appuyez sur Enregistrer… (ou Ctrl+S dans cette partie de l’écran). La boîte de dialogue Enregistrer dans la bibliothèque s’ouvre.
  3. Vérifiez Nom : il est suggéré d’après ce qui est envoyé.
  4. Choisissez ou tapez un Dossier. Le dossier utilisé la dernière fois est prérempli ; un chemin tel que Venue/Stage qui n’existe pas encore est créé.
  5. Appuyez sur Enregistrer.

À partir de là, l’écran est lié à ce signal. Une pastille à côté des boutons indique où il vit (❖ Folder / Name) ; cliquez dessus pour voir le signal sur l’écran Signaux.

Vous voyezCela signifieCe que vous pouvez faire
✓ Enregistré (grisé)La bibliothèque contient exactement ce que l’écran enverrait.Rien à enregistrer.
Enregistrer, et modifié sur la pastilleLe message de l’écran diffère du signal.Enregistrer ou Ctrl+S écrit le message de l’écran dans ce signal ; son nom, son dossier et sa note restent.
Enregistrer sous…—Rouvre la boîte de dialogue, préremplie avec le nom et le dossier du signal, et enregistre un nouveau signal. L’écran est alors lié au nouveau.

La comparaison porte sur le message, pas sur la façon dont il est écrit : l’ordre des clés JSON et les derniers chiffres d’un flottant OSC au-delà de la précision 32 bits ne comptent pas comme un changement.

Les écrans HTTP et OSC conservent le lien quand Signal Lab redémarre ; l’écran MQTT le conserve jusqu’à ce que vous fermiez l’application.

WARNING

Un signal HTTP conserve son Authentification — nom d’utilisateur et mot de passe, ou jeton — dans le fichier de bibliothèque en texte clair. Quiconque peut lire le fichier peut les lire.

Ouvrir un signal dans son écran ​

Un signal HTTP, OSC ou MQTT sélectionné a un bouton qui l’ouvre dans l’écran de son protocole (HTTP, OSC ou MQTT). Les champs de l’écran sont remplis depuis le signal et l’écran y est lié, comme ci-dessus : modifiez sur place, envoyez, puis Enregistrer. Un signal UDP brut n’a pas d’écran propre.

Depuis une trame ou un topic ​

  • Dans l’Inspecteur, sélectionnez une trame et appuyez sur Enregistrer comme signal. Un datagramme devient un signal UDP brut avec les octets exacts de cette trame ; une publication MQTT devient un signal MQTT avec le même broker, topic, QoS, indicateur retain et charge utile. Les autres trames ne peuvent pas être enregistrées.
  • Sur l’écran MQTT, sélectionnez un topic et appuyez sur Enregistrer comme signal. Vous obtenez un signal MQTT qui publie la dernière valeur du topic, avec son QoS et son indicateur retain, vers le broker auquel vous êtes connecté.

Les deux vont dans le dossier Capturés et sont nommés d’après ce qui a été capturé.

Dans une expérience ​

Quand vous ajoutez un nœud à une expérience, le menu Ajouter un nœud liste aussi vos signaux sous Signaux enregistrés. En choisir un ajoute un nœud OSC, HTTP, MQTT ou UDP avec le même message. Un signal UDP brut avec une charge utile hexadécimale n’est pas proposé : le nœud UDP envoie du texte. Voir Nœuds.

Dossiers ​

Un dossier est un chemin de noms joints par / : API/Auth est le dossier Auth à l’intérieur de API. Le champ Dossier d’un signal contient le chemin de son dossier ; vide signifie le niveau supérieur (racine). Les noms sont détourés et les parties vides supprimées quand vous quittez le champ, si bien que API / Auth/ devient API/Auth.

Les dossiers sont triés par nom, les nombres dans l’ordre numérique (Cue 2 avant Cue 10) ; les signaux restent dans l’ordre du fichier. Chaque dossier affiche combien de signaux il contient, ses sous-dossiers compris. Un dossier vide est conservé jusqu’à ce que vous le retiriez.

Le dossier courant ​

Le dossier sur lequel vous avez cliqué en dernier, ou le dossier du signal que vous avez sélectionné, est le dossier courant : Nouveau signal et Nouveau dossier y placent les choses. Une pastille au-dessus de l’arbre le nomme ; cliquez sur la pastille pour revenir au niveau supérieur.

Travailler avec les dossiers ​

PourFaites ceci
Créer un dossierAppuyez sur + Nouveau dossier. Il est créé dans le dossier courant, nommé Nouveau dossier (avec un numéro après quand ce nom est pris), et vous le renommez aussitôt.
Ouvrir ou fermer un dossierCliquez dessus, ou appuyez sur → / ← tant qu’il a le focus. Signal Lab se souvient des dossiers fermés.
Les ouvrir ou les fermer tousLes boutons ⊞ et ⊟ au-dessus de l’arbre (Ouvrir tous les dossiers, Fermer tous les dossiers).
Renommer un dossierAppuyez sur ✎ (Renommer le dossier) ou F2 dessus, tapez, puis Enter ; Esc annule.
Déplacer un signal ou un dossierFaites-le glisser sur un dossier, ou sur un espace vide de l’arbre pour le niveau supérieur.
Déplacer un signal en tapantModifiez son champ Dossier.
Retirer un dossierAppuyez sur × (Supprimer le dossier) puis sur Supprimer ?, ou appuyez deux fois sur Delete dessus.

Un renommage ne fusionne jamais deux dossiers : un nom contenant /, ou déjà porté par un dossier voisin, est refusé, et la console le dit. Un dossier ne peut pas être glissé dans lui-même ni dans un dossier qu’il contient. Glisser un dossier dans un dossier qui en contient déjà un du même nom fusionne les deux.

Retirer un dossier ne retire que le dossier : ses signaux et sous-dossiers remontent d’un niveau. Rien n’est supprimé.

Trouver un signal ​

Tapez dans Filtrer par nom, dossier ou cible au-dessus de l’arbre. Cela correspond au nom, au dossier, à la note, à la cible et au message. Pendant que vous filtrez, chaque dossier contenant une correspondance est ouvert et les autres sont masqués.

Le jeu de départ ​

La première fois que Signal Lab ne trouve pas de fichier de bibliothèque, il écrit neuf exemples, chacun sur quelque chose qu’il est facile de rater. Leurs noms et leurs notes sont écrits dans la langue de l’interface à ce moment-là ; ensuite, ils sont à vous. Tous pointent vers cet ordinateur.

DossierSignalEnvoie
OSCValeur de fader/fader/1 avec le flottant 0.75 vers 127.0.0.1:9000
OSCTous les types d’argument/types avec int -7, flottant 1.5, chaîne hi, booléen true, int64 4294967296, double 0.125 et nil
OSCIdentifiant et valeur/tag avec les chaînes reader-1 et 04a1b2c3
OSCDéclencheur sans argument/cue/go sans argument
MQTTPublier une valeur1 vers lab/example/value sur 127.0.0.1:1883, QoS 0
MQTTDéfinir une valeur retenuenight vers lab/example/config, QoS 1, retenu
MQTTEffacer une valeur retenueUne charge utile retenue vide vers lab/example/config, QoS 1
HTTPLe service répond-il ?GET http://127.0.0.1:8080/, délai 4000 ms
BrutOctets UDP brutsLes octets de ad be ef vers 127.0.0.1:9000

Pour récupérer le jeu de départ, déplacez ou renommez signals.json et appuyez sur Recharger le fichier : sans fichier, il est réécrit.

Le fichier de la bibliothèque ​

La bibliothèque est signals.json dans le dossier de données : Documents/SignalLab dans votre dossier personnel sur un poste de bureau, ou le dossier de données du serveur (voir Fichiers). Survolez le compteur de signaux sous l’arbre pour voir le chemin complet.

  • Enregistré de lui-même. Chaque modification est écrite 0,7 s après la dernière, tout le fichier d’un coup, via un fichier temporaire dans le même dossier qui prend ensuite la place du fichier — une écriture interrompue laisse le fichier précédent. Tant qu’une écriture attend, le pied de l’arbre indique enregistrement… ; puis enregistré. Une écriture encore en attente est effectuée avant qu’une mise à jour ne redémarre l’application.
  • Modifié à la main. Signal Lab ne remarque pas quand le fichier change sous lui. Après l’avoir modifié, ou remplacé par celui d’une autre machine, appuyez sur Recharger le fichier. Le rechargement relit le fichier et abandonne une modification encore en attente d’écriture.
  • Jamais remplacé tant qu’il est cassé. Si le fichier n’est pas du JSON valide, ou pas une bibliothèque de signaux, l’arbre affiche l’erreur avec le chemin, la ligne et la colonne du fichier, et la console dit la même chose. Le fichier est laissé tel quel, et rien n’écrit la bibliothèque tant qu’elle ne se relit pas : Nouveau signal, renommer, déplacer et retirer des signaux et des dossiers, glisser, les champs d’un signal, Enregistrer…, Enregistrer et Enregistrer sous… sur les écrans HTTP, OSC et MQTT, et Enregistrer comme signal dans l’Inspecteur et sur l’écran MQTT sont tous désactivés, et leur infobulle dit ce qui ne va pas. Corrigez le fichier, ou retirez-le, et appuyez sur Recharger le fichier : une fois qu’il se lit, tout fonctionne de nouveau.
  • Un fichier qui casse pendant que l’application tourne. Si vous modifiez le fichier en quelque chose d’illisible et que l’application enregistre ensuite une modification, l’enregistrement est refusé avec la même erreur, le fichier est laissé tel que vous l’avez fait, et l’application cesse d’écrire jusqu’à ce que vous le corrigiez et appuyiez sur Recharger le fichier. Un fichier que vous avez modifié et laissé valide est remplacé par la liste de l’application à son prochain enregistrement, comme ci-dessus : rechargez d’abord.

Un court exemple du fichier :

json
{
  "version": 2,
  "signals": [
    {
      "id": "fader-value",
      "name": "Fader value",
      "group": "Venue/Stage",
      "note": "Main fader of desk A.",
      "body": {
        "transport": "osc",
        "target": "127.0.0.1:9000",
        "address": "/fader/1",
        "args": [{ "type": "float", "value": 0.75 }]
      }
    }
  ],
  "folders": ["Venue/Stage", "Venue/Empty for now"]
}
CléQuoi
version2. Un fichier de version 1 (avant les dossiers) se lit de la même façon, sans dossiers vides.
signals[].idFabriqué à partir du nom quand le signal est créé (fader-value, fader-value-2, …) et jamais changé par un renommage. signallab fire trouve un signal par lui.
signals[].groupLe chemin du dossier ; "" est le niveau supérieur.
signals[].bodyLe message. transport est osc, udp, http ou mqtt ; les autres clés sont les champs de ce type.
foldersChaque dossier, pour qu’un dossier vide soit conservé. Omis quand il n’y en a aucun. Un group qu’aucune entrée ne liste est un dossier aussi.

Depuis la ligne de commande ​

signallab fire envoie un signal d’une bibliothèque, par les mêmes commandes que l’application :

bash
signallab fire "Fader value"
signallab fire fader-value --library ./show/signals.json

Il trouve le signal par son identifiant d’abord, puis par son nom, sans tenir compte de la casse. Quand plusieurs signaux portent ce nom, il nomme leurs identifiants et n’envoie rien. Sans --library, il lit le signals.json de l’application ; il n’écrit jamais le fichier. Voir La ligne de commande.