K3. Código publicado y explicación básica del mismo
Bueno, pues a ver si ya termino esta trilogía
del Señor de los Anillos de "Hágase Usted mismo su propio navegador para moto con rueda wonder wheel de BMW"
, que ya va siendo hora.
A. Código y disclaimers
Llega la parte del código. Disculpadme pero tengo que apuntar
algunos "disclaimers" (descargo de responsabilidad)
- Como es algo que me he "fabricado" para uso personal (sin ningún tipo de valor comercial), el código es una chapuza (bueno, tampoco tanto ), aparte de que es un scripting curioso pero venido a menos. Al principio quería que fuese muy genérico y, a medida que voy ajustándolo a lo que quiero, pues lógicamente se pierde esa generalidad. En fin, que lamento si algo no está muy claro, pero todo me funciona.
- Veréis que hay perfiles y tareas con las palabras OLD, DEPRECATED... Son cosas que ya no uso o que son copia y mantengo porque antes lo hacía de una forma y ahora ya no. O porque he copiado para probar cosas. Se pueden quitar directamente.
- En el caso de TEST es porque a veces me permite hacer pruebas sin estar con la moto. Son útiles.
- Y no, no atiendo soporte a esto. Lo entrego tal cual, para que si alguien le vale como ejemplo o referencia para lo suyo propio, pues estupendo. O si le vale como prueba de concepto, pues lo mismo. En cualquier caso, esa es la intención. Y luego entretener al que le apetezca simplemente leerlo por encima.
- No se trata de dar una clase de Tasker o de sus comandos. Eso está fuera de este mensaje.
- De cuando era joven y programaba en inglés... veréis que muchos comentarios están en ese idioma. Son míos . También tengo el Tasker en inglés porque es también más fácil preguntar o encontrar código o soluciones en ese idioma.
- En Tasker yo tengo los siguientes "módulos" instalados: El propio Tasker, AutoInput, AutoNotification, Join, TouchSecure, SecureSettings y LocusTasker. En negrita los más importantes para mi uso. Recomiendo su pago (son 4 duros y son pago para siempre).
Vamos al tajo...
==>
Todo el código está disponible en el siguiente enlace. Hay 6 ficheros, correspondientes cada uno a lo que Tasker denomina "Proyecto" que yo lo considero "módulo" de mi proyecto. Cada uno de ellos se puede importar en Tasker individualmente, mirarlo, tocarlo y/o borrarlo en cualquier momento, sin afectar a ninguna otra cosa. Hay variables globales que se comparten entre los módulos.
Y en Tasker los tengo así:
Actualización 15/04/2024: Al parecer, un compañero me ha informado de que hay incidencias al importar los módulos uno a uno. El problema parece estar en el módulo de escenas (ahí se centralizan todas las escenas disponibles y el resto de los módulos las reutilizan y eso parece que dar error en la importación). Yo he publicado los distintos módulos por separado para poder importarlos y exportarlos como mejor le venga a cada uno pero no he hecho la prueba de importarlos porque no tengo otro sitio donde hacerlo y, lógicamente, no he tenido necesidad.
En primer lugar, probaría a importarlos en el siguiente orden:
- B.1. Moto (el sexto)
- B.2. MMLApp (el quinto)
- B.3. Locus (el cuarto)
- B.4. InetCnx (el tercero)
- B.5. System Management (el segundo)
- B.6. Scenes Management (el primero)
En todo caso, también he compartido un backup completo que tenía etiquetado v0.3 de mi tasker de la tablet. Recuperar el backup completo es muy fácil, rápido y sencillo. El problema es que si quien recupere ese backup completo en Tasker tiene cosas propias,
al recuperar el backup completo, machacará todo lo que se tenga previo en la instalación Tasker donde se recupere. Recuperar el backup completo no da error pero puede tener el problema indicado y, por tanto, hay que considerar bien hacerlo o no. Si no se tiene nada de importancia o no se tiene nada directamente, pues recuperar el backup no supone ningún problema. Si se tiene algo y se quiere guardar, conviene hacer un backup previo y, si se considera, exportar individualmente todos los módulos previos para poder importarlos cuando sea necesario.
=>
Enlace al fichero del backup completo.
(
por favor, tener cuidado y conocer bien lo que se hace; no me hago responsable; atender al "disclaimer" indicado arriba)
NOTA: Se puede programar con el entorno de tasker directamente en la tablet o en el dispositivo móvil Android que sea. Pero, si se trata de un Samsung, se puede abrir una
sesión de Samsung flow y mejora mucho el entorno de desarrollo porque se trabaja desde un pc. También con DEX se puede trabajar, pero no es con cable (es WiFi) y, por tanto, es más limitado. FLOW es buena opción.
Voy a ir en orden y explicando cada módulo.
B. Módulos
B.1. Moto (1)
Es el módulo principal porque este es el que inicia o termina todos los automatismos de Tasker. Se encarga de gestionar la conexión bluetooth a la tablet y automatizar todo lo necesario para empezar a usar la moto y los dispositivos, para ello está el perfil "Moto Cnx Auto" que se activa en el evento de conexión bluetooth del intercomunicador a la tablet y ejecuta en la conexión una tarea "Moto BT Init"
Esta tarea pone las variables de control principales, el volumen inicial, el modo sin batería de la tablet (no_battery_mode) y deshabilita parcialmente las notificaciones. También fuerza la rotación en apaisado, quita el filtro de protección de los ojos (ya hablamos de eso en el mensaje de la A5 para el vision booster) y ejecuta la tarea de inicialización del MML ("MML Init" del módulo "MMLApp")
Como se puede ver esta tarea y la de desconexión se controlan manualmente (variable BTMotoCnx) porque, por mi intercom (Packtalk Edge) y las dos conexiones que llevo activas (a la TFT y a la tablet), he observado que, a veces, el intercom, cuando se controla desde la TFT, desconecta puntualmente la tablet y eso me ejecutaba automáticamente las tareas de finalización de conexión asociadas en tasker ... y no era lo que quería. Así que ahora tengo una tarea que, cuando termino, puso su atajo en la pantalla y desconecto yo cuando quiero ("Moto BT Want Disc" que permite activar run perfil que ejecuta a su vez la tarea "Moto BT End" que es quien deshace todo lo preparado en "Moto BT Init").
B.2. MMLApp (2)
Este módulo es el corazón de la gestión de los 4 tipos de navegación y de la gestión de los intents de la rueda, tal y como se ha explicado en los anteriores mensajes. No voy a repetirlo aquí.
Lo fundamental está en el mensaje K2.
Los perfiles que gestionan los intents MML o eventos tasker son bastante auto-explicativos, teniendo en cuenta lo explicado en K2:
A partir de aquí, las tareas más importantes son las siguientes:
- MML End y MML Init que inicializan lo necesario para usar el MML en la tablet (escenas, variables globales, la app MML). Hay una función llamada "_MSC_ver" del módulo "System Management" que muestra una pequeña info de inicio, con una foto y un texto de Kardan (la que hay al principio del mensaje K1). Recomiendo cambiarla por la imagen y el texto que cada uno prefiera.
- wwapp_WWCycle que es la encarga de realizar el "ciclado" entre aplicaciones/ventanas en primer plano de la tablet al darle al (RIGHT). Conviene saber que está controlada parcialmente por la variable "DisableWheelLRTempNB" que es la variable que controla si estoy contestando al teléfono en la tablet (no en el TFT; puedo hacerlo en ambos sitios cuando tengo ambos en marcha). Actualiza la variable dque gestiona el ciclo de app (WWApp) y el movimiento que puede depender del modo de navegación ("WWAppMode").
- wwapp_WWMove que es la encargada de lanzar los movimientos en función de la app que corresponda (según el tipo de navegación 1 ó 4, según la app en primer plano activa, etc.). Esencialmente decidirá si tiene que mandar la interacción recibida (el intent) a la tarea del tipo GPS ("move_GPSApp") o del tipo música ("move_MusicGenApp"). Si hubiera más tipos, se podrían añadir aquí (se podría clonar la tarea "moveBaseApp" para particularizar a lo que se quiera controlar).
- move_GPSApp. Finalmente la interacción recibida (el intent) es para la app que hace de GPS y, entonces, en función del GPS que sea, lo ejecutará aquí. Zoom, Volumen, Next Way Point, Next Track.
- move_MusicGenApp. Subir y bajar volumen, siguiente y anterior pista de audio.
- Las
tareas MML(x) son específicas para inicializar todo lo necesario para cada tipo de navegación.
Mención especial para ejecutar las multiventanas, son las tareas:
MML1 Page1 Apps1-2 y
MML4 Page1 Apps1-2
Funcionan con el plugin de AutoInput buscando en la pantalla el icono de multi-ventana.
Aquí está la explicación que di hace un tiempo. Y este es el comando Tasker-AutoInput que lo ejecuta (p.e., en "MML1 Page1 Apps1-2").
En todas las tareas que requieren "tocar" la pantalla (con autoinput), está el código necesario para desbloquearla y volver a bloquearla automáticamente, para el caso de que la pantalla tenga el toque bloqueado (escena de bloqueo de
Screen Touch Block, para cuando llueve, por ejemplo).
...
B.3. Locus (3)
En este caso, las dos tareas más importantes son "
Locus Init BT PTJCAL" / "
Locus Init Default" y "
Locus Nav Nearest Track Point" / "
Locus Nav NTP Exe".
El primer par de tareas indica a Locus que se ponga en modo navegación para moto o la de por defecto (tengo varias configuraciones específicas para Locus cuando voy en moto... el dashboard específico con kilómetros, temperatura, etc. y la visualización del mapa así como de los tracks - comentado antes).
Las otras dos son las que me permiten resituar la navegación cuando me salgo de la ruta o quiero recentrar mi posición en el mapa.
B.4. InetCnx (4)
Aquí es donde se establecen tareas para gestionar las llamadas, en función esté en la moto o esté en casa (ver perfiles DefaultInPhoneCalls, IntercomInPhoneCalls, TFTInPhoneCalls).
Simplemente recordar que puedo responder las llamadas que puedo recibir (en la tablet y en el móvil-TFT están limitadas por la configuración de notificaciones que puedo recibir), bien en la tablet, bien en el TFT. Antes comunicaba uno y otra con join para saber dónde había respondido y así actuar en la tablet de una forma y otra. Pero cuando no hay internet, join no funciona bien para pasar esos mensajes y decidí simplificar de la forma que lo he dejado.
B.5. System Management (5)
Aquí hay funcionalidades intesantes de gestión del sistema. Es donde está lo necesario para:
- Gestión de la batería de la tablet (temperatura, información en pantalla y en audio)
- Bloqueo/Desbloqueo de pantalla, mantener pantalla desbloqueada.
- Alternar el modo oscuro (para circular por la noche) y claro (el que tengo por defecto). Puede hacerse automáticamente pero para asegurar ver la pantalla lo mejor posible, prefiero hacerlo así.
B.6. Scenes Management (6) (se llama Music pero es un nombre que no cambié en su momento)
Aquí están todas las escenas que tiene el sistema:
- Música =>
Music Scn
- Informativa (lock de la pantalla y TFT/GPS) =>
Info Scn
- Bloqueo del toque de pantalla =>
Screen Block Scene
Y todas las tareas que la controlan, así como dos tareas de inicialización y fin.
Finalmente esta es mi pantalla de inicio (no es muy bonita ni tiene muchos gráficos ni fotos jajaja pero me funciona para lo que necesito).
Alguno de los iconos son directamente atajos-widgets de Tasker a tareas específicas del sistema.
Pues, esencialmente, eso es todo. Creo que no olvido nada.
C. Anexo. Instalación de Tasker e info de MotoMediaLink
Hay que asegurar que Tasker (y sus plug-ins) tienen todos los permisos (son muchos) activos. Los más importantes son los de Administración (puede hacer todo, sobre todo tasker) y los de Accesibilidad. Recomiendo leer las indicaciones de Joao de Tasker.
tasker.joaoapps.com
Para dar todos los permisos de bajo nivel a Tasker (conectando el dispositivo a un PC), hay un programa exe que lo hace automáticamente:
tasker_permissions_portable.exe (buscar con google)
Y algunas otras cosas que verificar:
También
recomiendo leer todas las demos de MML que he tratado de explicar aquí
Pues nada, con esto creo que termino, por fin. Espero que a alguien le haya resultado de interés.
Un saludo.