Saltar al contenido

Señales ​

Una señal es un mensaje que has nombrado y guardado: un mensaje OSC, un datagrama UDP sin procesar, una solicitud HTTP o una publicación MQTT, con su destino. La construyes una vez —en la pantalla Señales, o guardando lo que acabas de enviar desde otra pantalla— y la vuelves a enviar cuando la necesitas, byte por byte idéntica.

La biblioteca es un archivo JSON que puedes leer, editar a mano, copiar a otra máquina o guardar junto a un proyecto. La pantalla Señales la muestra como un árbol de carpetas a la izquierda y los campos de la señal seleccionada a la derecha.

Qué puede enviar una señal ​

Elige el tipo en Transporte. Cada tipo tiene sus propios campos:

TransporteCamposQué sale
OSCHost:puerto de destino, Dirección OSC, ArgumentosUn mensaje OSC a un IP:port o host:port, desde un puerto UDP nuevo. Consulta OSC para los tipos de argumento.
UDP (sin formato)Host:puerto de destino, Tipo (Texto o Bytes hex), Carga útilUn datagrama con exactamente estos bytes. El texto va tal cual, sin terminador; el hex es pares de dígitos como de ad be ef (se permiten espacios y un prefijo 0x).
HTTPMétodo, URL, Tiempo de espera (ms), Encabezados, Autenticación, CuerpoUna solicitud HTTP. Consulta HTTP.
MQTTHost:puerto del bróker, Tema, QoS, retain, Carga útilUna publicación. Consulta MQTT.

Toda señal tiene además un Nombre, un Carpeta y una Nota: qué debería provocar y qué tiene que coincidir en el otro extremo.

Los destinos de las señales OSC y UDP son IP:port o host:port (por ejemplo 127.0.0.1:9000); un nombre de host se resuelve cada vez que se envía la señal. El bróker de una señal MQTT es host:port; sin puerto, es 1883.

Cuando cambias el tipo de una señal, su mensaje vuelve a empezar desde los valores predeterminados de ese tipo. Solo se conserva el destino, y solo entre OSC y UDP (sin formato), donde el destino significa lo mismo.

Enviar una señal ​

Para enviar una señal desde la pantalla Señales, haz cualquiera de estas cosas:

  • Selecciónala y pulsa Enviar.
  • Pulsa Ctrl+Enter mientras trabajas en sus campos.
  • Haz doble clic sobre ella en el árbol.

Cada envío escribe una línea en la consola: qué fue a dónde, los bytes enviados o, para HTTP, el estado y el tiempo que tardó. Un fallo (una conexión rechazada, un host al que no se llega) es una línea roja con el motivo. La hora del último envío se muestra junto a los botones.

Una señal sale por los mismos comandos que las pantallas de su protocolo, así que el Inspector la lista bajo la herramienta que la envió, y el otro extremo no puede distinguirla de una que hayas escrito tú.

Cómo se envía cada tipo:

TipoCómo sale
OSCComo la pantalla OSC envía un mensaje.
UDP (sin formato)Un datagrama al destino.
HTTPComo la pantalla HTTP envía una solicitud, con su tarro de cookies mientras Conservar cookies esté activado allí. Una conexión rechazada o un tiempo de espera cuenta como fallo, no como estado.
MQTTMientras la pantalla MQTT está conectada al bróker de la señal, por esa conexión, con su id de cliente y sus credenciales. Si no —sin conexión, o conectada a otro bróker—, Signal Lab se conecta al bróker de la señal para esta única publicación, con un id de cliente propio, sin nombre de usuario y con una sesión limpia, y luego se desconecta.

Una conexión es al bróker de la señal cuando el host es el mismo, sin distinguir mayúsculas, y el puerto es el mismo, entendiendo 1883 para un bróker escrito sin puerto. Los nombres no se resuelven: localhost y 127.0.0.1 son dos brókeres distintos aquí, así que una señal que nombra uno no se envía por una conexión hecha al otro.

TIP

Una señal MQTT no guarda ninguna contraseña. Para publicar en un bróker que pida una, conéctate antes a ese bróker en la pantalla MQTT; la señal entonces viaja por esa conexión.

Enviar desde cualquier pantalla ​

Pulsa Ctrl+K en cualquier pantalla para abrir la paleta, escribe unas letras del nombre, la carpeta, el destino o el mensaje de una señal y pulsa Enter. La paleta se cierra y la señal se envía; sigues en la pantalla que estabas viendo.

TeclaQué hace
Ctrl+KAbre la paleta, o la cierra.
↑ ↓Mueve la elección.
EnterEnvía la señal elegida.
EscCierra la paleta sin enviar.

La paleta lista como máximo 12 señales: las 12 primeras de la biblioteca mientras no hayas escrito nada, y luego las 12 primeras que coincidan. Un clic en una fila la envía; un clic fuera cierra la paleta.

Crear señales ​

En la pantalla Señales ​

  1. Elige la carpeta a la que pertenece la señal (consulta carpeta actual).
  2. Pulsa Nueva señal. Aparece en esa carpeta, seleccionada, una señal OSC nueva a 127.0.0.1:9000 con la dirección /hello.
  3. Cambia Nombre, Transporte y los campos del mensaje.

Cada cambio se guarda solo; no hay botón de guardar en esta pantalla. Mientras no se puede leer el archivo de la biblioteca, no se guarda nada y los campos son de solo lectura (consulta El archivo de la biblioteca).

Duplicar coloca una copia justo después de la señal seleccionada, con su nombre seguido de ·. Eliminar vuelve a preguntar (¿Eliminar?): el segundo clic la quita del archivo. Su carpeta se queda, aunque ahora esté vacía.

Desde las pantallas HTTP, OSC y MQTT ​

La parte de envío de tres pantallas —Solicitud en HTTP, Emisor en OSC, Publicar en MQTT— puede guardar lo que enviaría como una señal.

  1. Prepara el mensaje y envíalo hasta que haga lo que quieres.
  2. Pulsa Guardar… (o Ctrl+S en esa parte de la pantalla). Se abre el diálogo Guardar en la biblioteca.
  3. Revisa Nombre: se sugiere a partir de lo que se está enviando.
  4. Elige o escribe un Carpeta. Se rellena con la carpeta que usaste la última vez; una ruta como Venue/Stage que aún no existe se crea.
  5. Pulsa Guardar.

A partir de entonces la pantalla queda vinculada a esa señal. Una etiqueta junto a los botones indica dónde vive (❖ Folder / Name); haz clic en ella para ver la señal en la pantalla Señales.

VesSignificaQué puedes hacer
✓ Guardada (atenuado)La biblioteca contiene exactamente lo que enviaría la pantalla.Nada que guardar.
Guardar, y modificada en la etiquetaEl mensaje de la pantalla difiere de la señal.Guardar o Ctrl+S escribe el mensaje de la pantalla en esa señal; su nombre, carpeta y nota se quedan.
Guardar como…—Abre el diálogo otra vez, relleno con el nombre y la carpeta de la señal, y guarda una señal nueva. La pantalla queda entonces vinculada a la nueva.

La comparación mira el mensaje, no cómo está escrito: el orden de las claves JSON y los últimos dígitos de un float OSC más allá de la precisión de 32 bits no cuentan como cambio.

Las pantallas HTTP y OSC conservan el vínculo cuando Signal Lab se reinicia; la pantalla MQTT lo conserva hasta que cierras la aplicación.

WARNING

Una señal HTTP guarda su Autenticación —nombre de usuario y contraseña, o token— en el archivo de la biblioteca como texto sin cifrar. Cualquiera que pueda leer el archivo puede leerlos.

Abrir una señal en su pantalla ​

Una señal HTTP, OSC o MQTT seleccionada tiene un botón que la abre en la pantalla de su protocolo (HTTP, OSC o MQTT). Los campos de la pantalla se rellenan con la señal y la pantalla queda vinculada a ella, como arriba: edita allí, envía y luego Guardar. Una señal UDP sin procesar no tiene pantalla propia.

Desde una trama o un tema ​

  • En el Inspector, selecciona una trama y pulsa Guardar como señal. Un datagrama se convierte en una señal UDP sin procesar con los bytes exactos de esa trama; una publicación MQTT se convierte en una señal MQTT con el mismo bróker, tema, QoS, indicador de retención y carga útil. Las demás tramas no se pueden guardar.
  • En la pantalla MQTT, selecciona un tema y pulsa Guardar como señal. Obtienes una señal MQTT que publica el último valor del tema, con su QoS y su indicador de retención, en el bróker al que estás conectado.

Ambas van a la carpeta Capturadas y se nombran a partir de lo capturado.

En un experimento ​

Cuando añades un nodo a un experimento, el menú Agregar nodo también lista tus señales en Señales guardadas. Elegir una añade un nodo OSC, HTTP, MQTT o UDP con el mismo mensaje. Una señal UDP sin procesar con carga útil en hex no se ofrece: el nodo UDP envía texto. Consulta Nodos.

Carpetas ​

Una carpeta es una ruta de nombres unidos por /: API/Auth es la carpeta Auth dentro de API. El campo Carpeta de una señal contiene la ruta de su carpeta; vacío significa el nivel superior (nivel superior). Los nombres se recortan y las partes vacías se descartan al salir del campo, así que API / Auth/ se convierte en API/Auth.

Las carpetas se ordenan por nombre, con los números en orden numérico (Cue 2 antes de Cue 10); las señales se quedan en el orden del archivo. Cada carpeta muestra cuántas señales contiene, incluidas sus subcarpetas. Una carpeta vacía se conserva hasta que la quites.

La carpeta actual ​

La carpeta en la que hiciste clic por última vez, o la carpeta de la señal que seleccionaste, es la actual: Nueva señal y Nueva carpeta ponen las cosas allí. Una etiqueta sobre el árbol la nombra; haz clic en la etiqueta para volver al nivel superior.

Trabajar con carpetas ​

ParaHaz esto
Crear una carpetaPulsa + Nueva carpeta. Se crea dentro de la carpeta actual, se llama Nueva carpeta (con un número detrás cuando ese nombre ya existe) y puedes renombrarla enseguida.
Abrir o cerrar una carpetaHaz clic en ella, o pulsa → / ← mientras tiene el foco. Signal Lab recuerda qué carpetas están cerradas.
Abrirlas o cerrarlas todasLos botones ⊞ y ⊟ sobre el árbol (Abrir todas las carpetas, Cerrar todas las carpetas).
Renombrar una carpetaPulsa ✎ (Cambiar nombre de la carpeta) o F2 sobre ella, escribe y pulsa Enter; Esc cancela.
Mover una señal o una carpetaArrástrala a una carpeta, o al espacio vacío del árbol para el nivel superior.
Mover una señal escribiendoCambia su campo Carpeta.
Quitar una carpetaPulsa × (Quitar carpeta) y luego ¿Quitar?, o pulsa Delete dos veces sobre ella.

Un cambio de nombre nunca fusiona dos carpetas: un nombre con /, o uno que ya tiene una carpeta hermana, se rechaza, y la consola lo indica. Una carpeta no se puede arrastrar dentro de sí misma ni dentro de una carpeta que está dentro de ella. Arrastrar una carpeta a una carpeta que ya tiene una del mismo nombre fusiona las dos.

Quitar una carpeta quita solo la carpeta: sus señales y subcarpetas suben un nivel. No se borra nada.

Encontrar una señal ​

Escribe en Filtrar por nombre, carpeta o destino sobre el árbol. Coincide con el nombre, la carpeta, la nota, el destino y el mensaje. Mientras filtras, todas las carpetas con una coincidencia están abiertas y las demás se ocultan.

El conjunto inicial ​

La primera vez que Signal Lab no encuentra ningún archivo de biblioteca, escribe nueve ejemplos, cada uno sobre algo que es fácil hacer mal. Sus nombres y notas se escriben en el idioma que tenga la interfaz en ese momento; a partir de ahí son tuyos para cambiarlos. Todos apuntan a este equipo.

CarpetaSeñalEnvía
OSCValor de fader/fader/1 con el float 0.75 a 127.0.0.1:9000
OSCTodos los tipos de argumento/types con int -7, float 1.5, string hi, bool true, int64 4294967296, double 0.125 y nil
OSCIdentificador y valor/tag con los strings reader-1 y 04a1b2c3
OSCDisparador sin argumentos/cue/go sin argumentos
MQTTPublicar un valor1 a lab/example/value en 127.0.0.1:1883, QoS 0
MQTTDefinir un valor retenidonight a lab/example/config, QoS 1, retenido
MQTTBorrar un valor retenidoUna carga útil retenida vacía a lab/example/config, QoS 1
HTTP¿Está activo el servicio?GET http://127.0.0.1:8080/, tiempo de espera 4000 ms
Sin formatoBytes UDP sin formatoLos bytes de ad be ef a 127.0.0.1:9000

Para recuperar el conjunto inicial, mueve o renombra signals.json y pulsa Recargar archivo: sin archivo allí, se vuelve a escribir.

El archivo de la biblioteca ​

La biblioteca es signals.json en la carpeta de datos: Documents/SignalLab en tu carpeta personal en un escritorio, o la carpeta de datos del servidor (consulta Archivos). Pasa el puntero por encima del recuento de señales bajo el árbol para ver la ruta completa.

  • Se guarda solo. Cada cambio se escribe 0,7 s después del último, el archivo entero de una vez, a través de un archivo temporal en la misma carpeta que luego ocupa el lugar del archivo: una escritura cortada a medias deja el archivo anterior. Mientras una escritura espera, el pie del árbol indica guardando…; luego guardado. Una escritura que aún espera se hace antes de que una actualización reinicie la aplicación.
  • Editado a mano. Signal Lab no se entera de que el archivo cambia por debajo. Después de editarlo, o de sustituirlo por uno de otra máquina, pulsa Recargar archivo. Recargar vuelve a leer el archivo y descarta un cambio que aún esperaba a escribirse.
  • Nunca se sustituye mientras está roto. Si el archivo no es JSON válido, o no es una biblioteca de señales, el árbol muestra el error con la ruta, la línea y la columna del archivo, y la consola dice lo mismo. El archivo se deja tal cual, y nada escribe la biblioteca hasta que vuelva a leerse: Nueva señal, renombrar, mover y quitar señales y carpetas, arrastrar, los campos de una señal, Guardar…, Guardar y Guardar como… en las pantallas HTTP, OSC y MQTT, y Guardar como señal en el Inspector y en la pantalla MQTT están todos desactivados, y su consejo dice qué está mal. Corrige el archivo, o quítalo, y pulsa Recargar archivo: en cuanto se lea, todo vuelve a funcionar.
  • Un archivo que se rompe mientras la aplicación funciona. Si editas el archivo y lo dejas ilegible y la aplicación guarda luego un cambio, el guardado se rechaza con el mismo error, el archivo se deja como lo dejaste y la aplicación deja de escribir hasta que lo corrijas y pulses Recargar archivo. Un archivo que editaste y dejaste válido se sustituye por la lista de la aplicación en su siguiente guardado, como arriba: recarga primero.

Un ejemplo breve del archivo:

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"]
}
ClaveQué
version2. Un archivo de versión 1 (anterior a las carpetas) se lee igual, sin carpetas vacías.
signals[].idSe forma a partir del nombre cuando se crea la señal (fader-value, fader-value-2, …) y nunca lo cambia un renombrado. signallab fire encuentra una señal por él.
signals[].groupLa ruta de la carpeta; "" es el nivel superior.
signals[].bodyEl mensaje. transport es osc, udp, http o mqtt; las demás claves son los campos de ese tipo.
foldersTodas las carpetas, para que se conserve una vacía. Se omite cuando no hay ninguna. Un group que ninguna entrada lista también es una carpeta.

Desde la línea de comandos ​

signallab fire envía una señal de una biblioteca, por los mismos comandos que la aplicación:

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

Encuentra la señal por su id primero, luego por su nombre, sin distinguir mayúsculas. Cuando varias señales tienen ese nombre, indica sus ids y no envía nada. Sin --library lee el propio signals.json de la aplicación; nunca escribe el archivo. Consulta La línea de comandos.