Abra el proyecto de cliente MQTT en Delphi. Continuaci贸n
El comienzo estaba aqu铆: el protocolo MQTT y el proyecto abierto del cliente MQTT en DelphiEl proyecto del cliente MQTT en Delphi se complement贸 con un panel para monitorear el flujo de informaci贸n desde Internet de las cosas en tiempo real y un generador de publicaciones peri贸dicas para probar los corredores MQTT. Se adopt贸 el formato JSON para transmitir informaci贸n, ya que es el est谩ndar para los servicios de Internet.Y tambi茅n vea lo que IBM Bluemix puede ofrecernos para organizar el monitoreo remoto y administrar cosas en Internet.Que hay de nuevo
Despu茅s de que la versi贸n anterior del cliente tuvo la oportunidad de recibir, enviar y suscribirse a paquetes MQTT, fue el turno de implementar la generaci贸n de flujo de mensajes para probar el funcionamiento de los corredores MQTT. Otra tarea era determinar la estructura del cuerpo del mensaje. Aqu铆, se utiliz贸 un m茅todo para estructurar la informaci贸n utilizada en el servicio IBM Bluemix IoTF para ayudar. Incluso si la estructuraci贸n aplicada all铆 no es ideal, hay razones para adherirse a tales reglas por un tiempo, porque IBM es una marca muy autorizada.La estructura en este contexto es c贸mo se codifica la informaci贸n en cada paquete y en qu茅 composici贸n se transmite. Es necesario decidir si transferimos por una variable o por grupos, si es por grupos, c贸mo separar las variables entre s铆, c贸mo distinguir entre variables, metadatos, etc., c贸mo comparar variables con su descripci贸n o nombres, y si en todos los casos las variables deben ir acompa帽adas de nombres o 铆ndices suficientes y etc. El protocolo MQTT no regula este problema de ninguna manera, excepto que los datos de texto est谩n codificados en formato UTF8, que en principio tampoco es malo, ya que le permite llamar temas en ruso.Los gigantes de Internet han elegido el formato JSON para resolver el problema de la estructuraci贸n, aunque MQTT habr铆a transferido silenciosamente tanto XML como ASN.1 en cualquier codificaci贸n y otros formatos. JSON, por cierto, tiene varias especificaciones de compresi贸n, si hay quejas sobre la redundancia del formato de texto.Generaci贸n de tr谩fico MQTT
Entonces, ahora nuestro cliente puede enviar paquetes que contienen datos de texto en formato JSON y codificados en UTF8. Para ello, tiene una pesta帽a "Publicaci贸n peri贸dica". Publicar en la jerga MQTT simplemente significa enviar un paquete de datos a otros nodos en la red IoT.
En la captura de pantalla, cada l铆nea de la tabla corresponde a un mensaje espec铆fico. Todos los mensajes en este ejemplo tienen el mismo tema. Aqu铆 la pol铆tica es la siguiente: cuantos menos temas diferentes, menos carga tiene el corredor para analizar, buscar y guardar estos temas. Los temas se seleccionan en el formato en que son aceptados por el servicio IBM Bluemix IoTF. La columna Carga 煤til contiene el cuerpo del mensaje. Se presenta en formato JSON, pero en una variable est谩 permitido usar el especificador de formato de acuerdo con las reglas para la funci贸n de formato del lenguaje Delphi. En este caso, se utiliza el especificador% g. En su lugar, se sustituir谩 el valor de la variable generada de acuerdo con las reglas especificadas en las columnas: Tiempo de espera (el per铆odo de env铆o del mensaje), Funci贸n (solo hay una opci贸n entre la variable aleatoria y la funci贸n seno), Min, Max (el valor m铆nimo y m谩ximo del valor generado),Periodo (periodo de la funci贸n seno, especificado en el n煤mero de muestras), Offs (desplazamiento del argumento de la funci贸n seno, especificado por el n煤mero de muestras). Las columnas QoS y Retener especifican los atributos del paquete MQTT. El campo Habilitado indica si este mensaje se activar谩 cuando se haga clic en el bot贸n "Inicio". El bot贸n "Inicio" se activa solo despu茅s de establecer una conexi贸n con el corredor.Importante! El servicio IBM Bluemix IoTF es muy sensible a la sintaxis y se desconecta de inmediato si el tema de alguna manera no se ajusta al formato.En la parte inferior del formulario est谩n los registros: general, el registro de los mensajes de publicaci贸n enviados y el registro de los mensajes de publicaci贸n recibidos. Los registros se pueden borrar o deshabilitar. La prohibici贸n de registro acelera la generaci贸n de paquetes y la recepci贸n de paquetes.Visualizaci贸n de datos desde nodos IoT
Debe comenzar con una suscripci贸n a los datos si no se suscribieron permanentemente en la sesi贸n anterior de la sesi贸n de comunicaci贸n, de lo contrario, el agente no enviar谩 nada.En la pesta帽a "Suscripci贸n por lista", debe registrar los temas que queremos recibir del corredor. En este caso, se escribe un tema con el valor de qu茅 mensajes ser谩n enviados por el generador.Si el campo Suscribir est谩 marcado, el tema se suscribir谩 despu茅s de hacer clic en el bot贸n "Suscribir". Si el valor del campo Suscribir no est谩 marcado, la suscripci贸n se cancelar谩 de este tema cuando haga clic en el bot贸n "Suscribir". Nuevamente, la operaci贸n de suscripci贸n est谩 disponible solo despu茅s de establecer una conexi贸n con el intermediario.Incluso antes de suscribirse, puede escribir en la tabla de componentes visuales aquellas variables que queremos observar en tiempo real. Para hacer esto, haga clic en el bot贸n "Tabla".
La columna "Nombre de variable" contiene el mismo nombre de variable (clave en terminolog铆a JSON) que el registrado en el mensaje en formato JSON. El campo "T铆tulo de variable" contiene el nombre de la variable que se muestra en el componente visual. La columna "Clase de widget" establece el tipo de componente visual. Aqu铆 puede seleccionar cualquier escala, inscripci贸n de estilo LCD / LED o gr谩fico.Despu茅s de editar la tabla, haga clic en el bot贸n Widgets y organice los componentes visuales en el formulario. Al principio, todos los componentes estar谩n en una pila en la esquina superior izquierda. Debe arrastrarlos y colocarlos en el formulario en la configuraci贸n deseada. La ubicaci贸n de los componentes se recuerda y reproduce despu茅s de la pr贸xima apertura del formulario. El estilo de acoplamiento de componentes sigue el estilo de IDE RAD Studio o MS Visual Studio.
Si se establece y se suscribe una conexi贸n con el intermediario, en el caso de mensajes con las variables correspondientes, sus valores se reflejar谩n inmediatamente en la ventana de componentes visuales.El programa guarda todas las configuraciones y registros en archivos JSON en el disco, que pueden editarse manualmente.El repositorio contiene la versi贸n del programa con la configuraci贸n preparada y guardada en archivos JSON listos para probar usando el agente Mosquitto incluido localmente.El agente, listo para su lanzamiento, se encuentra en el repositorio en el archivo Mosquitto_broker_projs.zip en el directorio Mosquitto_1_4_5_bin. Debe ejecutar el archivo Run_mosquitto.cmd.Acerca del an谩lisis JSON
El programa utiliza un analizador JSON de terceros del proyecto https://github.com/hgourvest/superobject A pesar de que RAD Studio XE8 tiene un analizador JSON incorporado, el superrobject parec铆a m谩s interesante y m谩s poderoso en t茅rminos de capacidades. Cuando llega un mensaje, el programa cliente MQTT analiza el cuerpo del mensaje y selecciona pares clave-valor individuales en 茅l. Si se encuentra una matriz, entonces se ignora porque los objetos en la matriz no tienen nombres, y no hay ning煤n mecanismo (en este programa) para asociarlos con ninguna variable con nombre en el cliente. Los objetos nombrados restantes se escanean en profundidad de forma recursiva hasta que se recuperen todos los pares clave-valor. La clave ser谩 el nombre de la variable, el programa intentar谩 convertir los valores a un n煤mero de coma flotante; si falla, el n煤mero es igual a cero.Probar la aplicaci贸n IBM IoT Real-Time Insights
Esta aplicaci贸n es la segunda de dos aplicaciones pr谩cticas ofrecidas por IBM para IoT. Primero, la Fundaci贸n Internet de las Cosas se discuti贸 en un art铆culo anterior. Hay varias aplicaciones de demostraci贸n m谩s para IoT en el cat谩logo de IBM, pero requieren la implementaci贸n y el lanzamiento de un c贸digo personalizado en el servidor, que incluye autom谩ticamente un contador de pagos.Pero volvamos a IoT Real-Time Insights. Entramos en su cuenta. Como siempre, seleccione la regi贸n sur de EE. UU. Haga clic en el men煤 superior Cat谩logo. Bajamos al fondo observando muchos servicios y aplicaciones diferentes de IBM. Vemos:
Haga clic en IoT Real-Time Insights. Esta aplicaci贸n le permite observar y administrar directamente los dispositivos, ya que no funcionar谩, a menos que los dispositivos tengan otros canales de comunicaci贸n que no sean MQTT.Al crear la aplicaci贸n: campo, deje Dejar sin consolidar. No creamos aplicaciones adicionales, porque IBM inmediatamente comienza a contar dinero para ellas. Plan de campo: dejar Lite. Entonces todo ser谩 gratis para nosotros.
Antes de eso, el servicio de Internet of Things Foundation ya deber铆a haberse creado y activado, y al menos un dispositivo en nombre del cual nuestro cliente MQTT enviar谩 paquetes ya se ha creado en 茅l. Esto fue descrito en un art铆culo anterior.
En la p谩gina de inicio de la aplicaci贸n IoT Real-Time Insights, comenzamos inmediatamente conectando una fuente de datos, y este ser谩 el servicio de Internet of Things Foundation que creamos anteriormente. Necesitamos saber su nombre en clave (ID de la organizaci贸n), clave API y token de autenticaci贸n. Si no lo sabemos, regrese a la Internet of Things Foundation y cree lo que no sabemos.Despu茅s de conectarse, en la pesta帽a Dispositivos, se deben mostrar todos los dispositivos registrados por nosotros. En este caso, solo hay uno.
Entonces necesita configurar esquemas de mensajes. Haga clic en Administrar esquemas y en el signo m谩s Agregar nuevo esquema de mensaje. As铆 es como puede comprender la configuraci贸n para descifrar mensajes del dispositivo.
Aqu铆 hay un ejemplo de tal configuraci贸n para las variables T, L1, L2, L3.
La variable L1, por ejemplo, cuando la edici贸n estaba representada por dicha ventana.
Una vez configurados los esquemas, puede configurar an谩lisis. Es decir de hecho, las reglas para enviar mensajes a receptores de mensajes externos. Lo m谩s econ贸mico es enviar un correo electr贸nico.As铆 es como se ve la regla para enviar correos electr贸nicos si la variable T excede 24:
Pero llega un mensaje de correo electr贸nico de este tipo:
Pero el punto central de la aplicaci贸n son los paneles. Puede haber muchos paneles. Los paneles consisten en componentes visuales que muestran los valores de las variables creadas en la pesta帽a Administrar esquemas en tiempo real. La captura de pantalla siguiente muestra un ejemplo de un tablero para mostrar 4 variables: T, L1, L2, L3. Los paquetes con valores variables fueron generados por nuestro cliente MQTT. La variable T se gener贸 como un n煤mero aleatorio, L1, L2, L3 en funci贸n del seno.
Impresiones de IBM IoT Real-Time Insights.
Hasta ahora, la aplicaci贸n es muy cruda. Se abren ventanas y cuadros de di谩logo con largas demoras. El generador de paneles tiene una funcionalidad limitada, para movimientos simples o cambiar el tama帽o necesita pasar por varios cuadros de di谩logo. Los componentes del panel en s铆 mismos no tienen propiedades editables. Lo mismo se aplica a los gr谩ficos. Los gr谩ficos no tienen historial y se borran al menor cambio de tama帽o de la ventana. El correo electr贸nico no es estable y puede retrasarse mucho tiempo.Pero a煤n as铆, este es un servicio gratuito, disponible aqu铆 y ahora, y si el dispositivo puede publicar mensajes en un formato JSON adecuado, entonces debe tener en cuenta dicha aplicaci贸n de IBM.El proyecto del cliente MQTT todav铆a est谩 en su lugar anterior: https://github.com/Indemsys/Delphi_MQTT_mosquittoSource: https://habr.com/ru/post/es388343/
All Articles