El dispositivo para la emisión de cookies "Cook 3000"



Hola a todos! Trabajo para una compañía que desarrolla equipos para monitorear plataformas petroleras, granjas mineras, grupos electrógenos diesel y otras cosas aburridas. Pero esta vez automatizamos algo más. Entonces, conozca: "Cook 3000" - el aparato para emitir cookies a los mejores empleados.

El dispositivo es una construcción hecha de PVC y algunas partes:
Una espiral con una unidad (sirve para suministrar productos), una pantalla, un aceptador de monedas y el cerebro de toda la estructura: controlador Wiren Board 6.




Haga clic para ampliar la imagen. Haga clic para ampliar la imagen.
Haga clic para ampliar la imagen. Haga clic para ampliar la imagen.

Pantalla


Como pantalla para WB6, uso el módulo de pantalla Nextion (NEXTION MEJORADA NX4832K035).

El módulo está equipado con un procesador AVR. Tiene una pantalla TFT de 3.5 '' con una resolución de 480 * 320, 32Mb de memoria interna, 1024 bytes de EEPROM, 8192 bytes de RAM.

Este dispositivo almacena y muestra gráficos, anima elementos de la interfaz y procesa clics. Solo los códigos de eventos se transmiten al controlador a través de UART, lo que facilita la configuración de interfaces de complejidad variable.

Para cargar las configuraciones y gráficos necesarios en el módulo de pantalla, se proporciona un editor visual de las interfaces del Editor Nextion. Puede descargarlo en el sitio web oficial de itead.

Haga clic para ampliar la imagen.

Al crear un nuevo proyecto, debe especificar el modelo, la posición de la pantalla y la codificación de caracteres. Para la visualización correcta del alfabeto cirílico, seleccione iso-8859-5.

Haga clic para ampliar la imagen. Haga clic para ampliar la imagen.

A la izquierda hay una barra de herramientas. Aquí puede encontrar los elementos más necesarios para crear una interfaz.

Haga clic para ampliar la imagen.

Hagamos clic en el botón. Aparecerá un botón condicional en el cuadro de edición. Estíralo, edita el texto y el título. Para mostrar texto, debe agregar una fuente. Utilizaremos la herramienta Font Creator en la pestaña de herramientas. En el campo "Evento", debe escribir el código que se reproducirá en los eventos.

Por ejemplo, si escribe imprimir "botón presionado \ r" en la pestaña "Evento de prensa táctil", luego, cuando hace clic en el botón, el dispositivo enviará a UART: botón presionado y el carácter de salto de línea.

Haga clic para ampliar la imagen.

Se pueden encontrar descripciones y ejemplos de códigos en la documentación de la pantalla. Para la depuración, puede usar la función Depuración. Esta ventana le permite probar todas las funciones del firmware antes de completar la pantalla.

Haga clic para ampliar la imagen.

Si todo está en orden, puede conectar la pantalla a la computadora a través del adaptador USB / UART y completar el firmware haciendo clic en el botón "Cargar".

Haga clic para ampliar la imagen.
Pero, ¿cómo nos hacemos amigos con WB6?
Puede conectar la pantalla a través del mismo adaptador USB \ UART a uno de los puertos USB del controlador o directamente a una de las ranuras de expansión en la placa del controlador.
Estamos interesados ​​en los pines TX, RX, 5V y GND.

Haga clic para ampliar la imagen.

Después de conectar la pantalla al controlador, recibiremos los datos del evento directamente en el puerto serie.

Para responder de alguna manera a estos eventos, escribamos un pequeño script que enviará todos los datos sobre los eventos al tema MQTT. Primero, cree un archivo en la carpeta raíz del controlador y llámelo serial.sh

serial.sh
#!/bin/bash #  /dev/ttyMOD3 stty -F /dev/ttyMOD3 ospeed 9600 ispeed 9600 raw clocal -parenb -echo cs8 CR="$(echo -e '\r')" exec 4<> /dev/ttyMOD3 cat <&4 | while : do IFS="$CR" read -r line case "$line" in quit*) break ;; *) if [[ -n "$line" ]]; then echo $line #    MQTT mosquitto_pub -t /devices/screen/controls/raw/meta/type -r -m text mosquitto_pub -t /devices/screen/controls/raw/on -r -m "$line" fi ;; esac done 


Si hizo todo correctamente, luego de ejecutar el script cuando hace clic en el botón, en la interfaz web del controlador verá un tema con los datos que envía el módulo de pantalla.

En los controladores de la Junta Wiren, se proporciona un sistema de reglas : wb-rules . Las reglas se crean a través de una interfaz web y se escriben en un lenguaje simple similar a Javascript.

En la interfaz web de WB6, vaya a la pestaña Scripts y cree un nuevo script haciendo clic en el botón "Nuevo ...", asígnele el nombre "screen_button.js" u otra cosa. A continuación, escribiremos una regla: al cambiar la pantalla / tema sin procesar (es a él a quien le enviamos datos desde la pantalla), se producirán ciertas acciones. En este caso, cuando haga clic en la pantalla, veremos el mensaje "Botón presionado" en la ventana de depuración de la interfaz web:

screen_button.js
 defineVirtualDevice("screen", { //    title: "nextion screen", cells: { raw: { type: "text", value: "" }, } }); defineRule("screen_button", { whenChanged: "screen/raw", then: function(newValue, devName, cellName) { log(newValue); if (newValue == "button pressed") { //     «button pressed» log(" "); //     . } else if (newValue == "button released") { log("  "); } dev["screen"]["raw"] = ""; // . } }); 


Genial Para procesar los clics en la pantalla, descubrimos. Ahora hablemos sobre cómo controlamos la pantalla con WB6. Por ejemplo, cambie el texto del botón. La pantalla acepta comandos UART. Se puede encontrar una lista y una descripción de los comandos en la documentación de la pantalla.

Para determinar el final del comando, la pantalla espera tres caracteres especiales (\ xff \ xff \ xff). Para simplificar la tarea en el futuro: cree un script en la carpeta raíz bash. Llamémoslo text.sh:

text.sh
 #!/bin/bash TEXT=""; UNIT=""; while [ -n "$1" ] do case "$1" in -a) UNIT=$2;; -b) TEXT=$2;; esac shift done echo -en "$UNIT.txt=\"$TEXT\"\xff\xff\xff" > /dev/ttyMOD3 exit 0 



Ahora, para cambiar el texto del botón, solo necesitamos llamar al script con los argumentos:
bash /mnt/data/root/text.sh -a b0 -b 'Some Text'
Donde b0 es el nombre del botón en la pantalla y Some Text es el texto deseado.

Un ejemplo del uso del motor de reglas WB6:

 var txt1 = "some text"; runShellCommand("bash /mnt/data/root/text.sh -a b0 -b '" + txt1+ "'"); 


Del mismo modo, puede cambiar la página que se muestra actualmente en la pantalla, el texto de varios elementos, variables y otros parámetros. No pintaré aquí toda la funcionalidad del módulo de pantalla. La información ya escrita arriba es bastante suficiente para nuestro proyecto.

Aceptador de monedas


Como aceptador de monedas, utilizo la versión china, que se encuentra en las extensiones de Aliexpress por 400 rublos.

Con la conexión, todo es simple. + 12v y una salida de pulso para conectarse al módulo de extensión de contacto seco WBE2-DI-DR-3 . Además, para determinar la moneda, solo necesitamos contar los impulsos. Para hacer esto, cree un nuevo script en el motor de reglas:

money.js
 var timeout_ms = 1 * 200; var timer_id = null; var timerTime = Date.now(); var timerLast = 0; var countMoney = 0; defineRule("money", { whenChanged: "wb-gpio/MOD1_IN2", then: function(newValue, devName, cellName) { if (newValue) { timerLast = Date.now() if ((timerLast - timerTime) >= 500) { // ? timerTime = Date.now(); countMoney = 1; } else { timerTime = Date.now(); //     countMoney++; } if (timer_id) { clearTimeout(timer_id); } timer_id = setTimeout(function() { //       if (countMoney == 5) { log("10 ") } else if (countMoney == 4) { log("5 ") } else if (countMoney == 3) { log("2 ") } else if (countMoney == 2) { log("1 ") } timer_id = null; }, timeout_ms); } } }); 


Regla bastante simple. Quizás no sea el más preciso.

Bitrix24


Ahora, probablemente el más interesante. Tratemos de descubrir cómo traducir la frase "Bien hecho. Toma una galleta de un estante. Nuestra empresa utiliza el sistema Bitrix24 como CRM. La idea es que por cada tarea completada (Tarea) en el bitrix, el empleado reciba algunos puntos electrónicos. Estos mismos puntos se pueden usar como moneda para nuestro dispositivo. Veamos cómo conectarse a Bitrix24 y monitorear el éxito de los empleados.

Haga clic para ampliar la imagen.

Utilizaremos bitrix24-python-sdk como base.
Instale el SDK en el controlador con el comando
pip install bitrix24-python-sdk

A continuación, cree un script de Python en la carpeta raíz, llámelo bitrix.py:

bitrix.py
 #!/usr/bin/python3 import pprint from bitrix24 import bitrix24 import sys import subprocess b24_webhook_key = 'some_key' #   ,    . b24_webhook_user = 1 # ID  -    . b24_domain = 'some_domain' #  . page = 1 user_id = [16, 10, 6, 55, 8, 14, 67, 20] #  ,     ord_status = 5 # 5 -   order_list = 0 total_orders = 0 bx24 = bitrix24.Bitrix24(b24_domain, webhook_key=b24_webhook_key, webhook_user=b24_webhook_user) def get_order_list_len(_user_id): result_ = bx24.call( 'task.item.list', {'ORDER': {'DEADLINE': 'desc'}}, {'FILTER': {'RESPONSIBLE_ID': _user_id,'REAL_STATUS': ord_status}}, {'PARAMS': {'NAV_PARAMS': {'nPageSize': 50, 'iNumPage': page}}} ) if result_: return (len(result_['result'])) for user in user_id: while True: order_list = get_order_list_len(user) total_orders = total_orders + order_list page = page + 1 if(order_list < 50): subprocess.call("mosquitto_pub -t /devices/%s/controls/orders_finished/on -r -m %s" % (user, total_orders), shell=True) #    MQTT. page = 1 total_orders = 0 break 


Este script solicita todas las tareas completadas de una lista dada de usuarios, las considera y envía el número a los temas en mqtt. A continuación, solo podemos comparar la cantidad obtenida con los valores anteriores y, si los datos nuevos son más, agregar puntos al empleado por el trabajo realizado.

Bluetooth


Para escanear dispositivos BLE utilizo Bluez. El programa ya está instalado en el controlador. Para escanear dispositivos flexibles, solo ingrese algunos comandos en la consola:

 hciconfig hci0 up hcitool lescan --duplicates 

Sin embargo, esto no es suficiente para nosotros. Es recomendable ver el nivel de señal. Para hacer esto, instale la utilidad hcidump adicional:

 apt-get install bluez-hcidump 

Y complementa nuestro equipo:

 hciconfig hci0 up hcitool lescan --duplicates | hcidump -a | grep -E 'bdaddr|RSSI' 

En la salida obtenemos direcciones MAC y dispositivos RSSI bluetooth (ble) cercanos.

Haga clic para ampliar la imagen.

Estas dos líneas pueden estar bellamente envueltas en un script bash y la salida enviada a MQTT.
La segunda forma es el script aioblescan
Requiere Python 3 para funcionar, preferiblemente 3.5. La ventaja de este script es que puede monitorear direcciones MAC específicas, y no todos los relojes inteligentes y teléfonos inteligentes pasan por la ventana. La salida del script también se redirige a MQTT, para la conveniencia de trabajar con el motor de reglas.

Haga clic para ampliar la imagen.

Ahora sabemos cómo interactuar con WB6 usando el módulo de pantalla, podemos contar monedas, monitorear el éxito de los empleados en Bitrix, escanear dispositivos flexibles y su nivel de señal. Queda por recopilar esto en un montón y prescribir algún tipo de lógica. No pintaré todos los guiones para este proyecto. Todo estará disponible en el enlace en el dominio público. Quizás uno de ustedes encuentre una aplicación más útil e inteligente para esto.

Vivienda


El cuerpo está hecho de PVC espumado de 10 mm. Tal plástico se vende en láminas. Moderadamente suave Puede cortar con una sierra para metales o con un cuchillo de oficina regular en una regla.

Haga clic para ampliar la imagen.

Como cierre, se utilizó un juego de piezas metálicas para niños "Constructor" y tornillos cortos autorroscantes. En este kit, se necesitaba casi todo para armar la caja.

Haga clic para ampliar la imagen.

Conducir


La espiral y el disco se compraron en la aplicación B \ U de la tienda en línea. piezas para máquinas expendedoras. Alimentado por una fuente de alimentación de 24v. Se conecta a través del relé del módulo de expansión WBE2-DO-R6C-1 .

Haga clic para ampliar la imagen. Haga clic para ampliar la imagen. Haga clic para ampliar la imagen.

Funcional


Funcionalmente similar a una máquina expendedora normal. Regala cookies por dinero y no solo.


Cuando se inicia el dispositivo, la pantalla muestra una pantalla de bienvenida con un logotipo, luego se voltea a la pantalla principal, donde se nos ofrece comprar cookies o jugar un juego.

El juego para el usuario es gratuito, pero puede establecer un pequeño precio para la motivación. Las reglas son simples. El jugador se ofrece para resolver tres problemas simples. Si da tres respuestas correctas, recibe un premio en forma de cookies. Quizás esto es todo lo que necesita saber sobre este artículo. Volvamos al menú principal y haga clic en "Comprar cookies".

A continuación, el sistema le pedirá que seleccione un método de pago. Al elegir el método de pago "Por dinero", aparece una ventana en la pantalla con el precio y la cantidad pagada, que aumenta cuando deposita dinero en el aceptador de monedas.

Tan pronto como la cantidad sea suficiente para realizar una compra, el dispositivo cerrará automáticamente esta ventana y entregará los productos.

Pero, como dije antes, también se proporciona otra moneda: estos son puntos recibidos por el éxito de los empleados en el sistema Bitrix24. Si un empleado cierra una tarea asignada a él, se le otorgan puntos. Además, se pueden otorgar puntos al jefe para obtener resultados particularmente buenos.

Haga clic para ampliar la imagen.Haga clic para ampliar la imagen.
Haga clic para ampliar la imagen.Haga clic para ampliar la imagen.

Para pagar los puntos, el empleado debe seleccionar el elemento "Comprar por puntos". Luego, el dispositivo intentará determinar quién está parado frente a él. Para hacer esto, escanea los dispositivos Bluetooth a su alrededor y si ve la dirección MAC del dispositivo que pertenece al empleado e ingresa a la base de datos, así como el nivel de señal es lo suficientemente potente como para asumir que está parado cerca, los datos sobre el estado de la cuenta del empleado aparecerán en la pantalla, su nombre y oferta para pagar cookies con puntos.

Si el sistema no pudo determinar un solo dispositivo familiar, emitirá una advertencia y le ofrecerá seleccionar su nombre de la lista y luego ingresar su código PIN.

En el caso de una entrada correcta, se abre la misma ventana con datos sobre el estado de la cuenta de usuario y el costo del producto. Cuando se confirma una compra, la cantidad requerida de puntos se debita de la cuenta del usuario y el dispositivo emite las mercancías.

Eso es todo Este proyecto fue creado exclusivamente con fines educativos y para mostrar que las aplicaciones del controlador Wiren Board están limitadas solo por la imaginación. Todos los archivos y scripts se pueden encontrar en el enlace .

Source: https://habr.com/ru/post/es420831/


All Articles