#Flow – Detener el salva pantallas utilizando botones Flic, procesos con @microsoftflow, @powershell y mucho mas ! (gracias @ShortcutLabs)

Buenas !

Llevar adelante un Centro de Innovación es una experiencia que es 50% de problemas y 50% de diversión. En estos momentos estamos actualizando nuestro IC en Toronto, y esto significa que tenemos muchas nuevas screens (entre otras cosas) y esto también supone un desafío al momento de pensar en ahorro de energía.

Por suerte, las TVs se apagan automáticamente cuando no hay signal. El desafío era comprender como enviar signal desde dispositivos con Windows 10, y claro, antes de llegar a este punto, pasamos por la experiencia del Screen Saver.

Hay soluciones completas y complejas para manejar estos escenarios de Digital Signage. En nuestro caso, la idea era ver de hacer algo utilizando parte de la tecnologia que conocemos para solucionar este escenario.  @ChloeCondon escribió un par de tweets donde menciono a los Flic buttons, y se me ocurrió que era el momento de probarlos. Inicialmente pensé en este proceso

  • Clic en un botón Flic
  • El boton lanza un MS Flow
  • MS Flow apaga el screen saver

Parece muy simple, ademas la conexion entre MS Flow y Flic esta disponible en Preview! podemos suscribir los eventos clic, doble clic y hold como triggers de Microsoft Flow.

F1 settings for a button

El siguiente paso es crear un Flow para procesar el evento del botón. De alguna manera tengo que procesar el trigger de MS Flow para detener el screen saver en un ordenador con Windows 10. Una forma casi natural de trabajar con MSFlow es crear un archivo en el ordenador con Windows 10. Inicialmente hice algunas pruebas con Microsoft Flow Gateways, que parece ser la herramienta ideal para compartir información entre origenes de datos on premises y MS Flows en el cloud.

Sobre un MS Flow en blanco, agregue el trigger de Flic button. Las settings del trigger permiten elegir el botón y el tipo de acción para la suscripción.

01 microsoft flow flic button trigger02 microsoft flow flic button settings

Llego el momento de configurar Gateways. Y, básicamente, no fue de mi agrado. Path en modo hard-code, lo mismo para guardar credenciales, algo no me parecía una buena idea. Este fue el momento de salir a correr un poco para tener nuevas ideas.

03 microsoft flow gateway file system configuration

Por suerte, ya tenemos un sistema de archivos distribuido, que es seguro y bastante potente. Tambien tengo la suerte de que el mismo esta funcionando en todos los ordenadores de demo de Windows 10: OneDrive. Y como bonus, OneDrive tiene muchos triggers y acciones para trabajar con Microsoft Flow!

Llego el momento de actualizar mi escenario

  • Clic en un botón Flic
  • Lanzar un MS Flow
  • MS Flow crea un archivo en OneDrive
  • De alguna manera esto deshabilita el screen saver

El MS Flow es mas bien simple

04 microsoft flow flic button trigger and save a OneDrive file

Un par de apuntes.

La expresión convertTimeZone() esta pensada para poder tener nombres de archivos unicos para cada nuevo archivo:

convertTimeZone(utcnow(),’UTC’,’W. Europe Standard Time’,’yyyy MM dd HH mm ss’)

El contenido del archivo no es importante (por ahora). He aquí un ejemplo de archivos creados con este Flow.

onedrive files created by flic clic

Esto va tomando forma. Despues de presionar el boton Flic, en pocos segundos, OneDrive sincroniza el nuevo archivo en todos los ordenadores con Windows 10. Es el momento de crear un File System Watcher para detectar los cambios y detener el screen saver. Como era de esperar, mi primera idea fue crear una .Net Core Console App para hacer esto, sin embargo recorde que mis amigos IT Pro hacen magia con PowerShell.

Una busqueda en internet me llevo a leer el siguiente post de Jessica Cook: Flow of the Week: Local code execution, donde cierra un escenario muy parecido al que comento en este post.  Ella si ha utilizado gateways, y yo me dedique a modificar un poco su PS Script:

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "<Folder to Watch>"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true 
$action = {
Start-Process "taskkill /f /im bubbles.scr"
} 
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}

Listo! Una vez agregado el PowerShell script al inicio de Windows, los ordenadores de demo, ya estan en modo “sync to stop screen saver”. Y es presionar el boton y ver como se deshabilitan los screen savers!

El proceso

  • Clic en un botón Flic
  • Lanzar un MS Flow
  • MS Flow crea un archivo en OneDrive
  • PS Script para detectar nuevos archivos en un directorio
  • Cuando se detecta un archivo, se detiene el proceso del Screen Saver

Hay mucho margen de mejora, como por ejemplo detener el screen saver, en lugar de matar el proceso del mismo. He intentado con SendKeys y moviendo el mouse con PS, pero lo unico que me ha funcionado es el kill process!

Importante tambien es recordar que esto no es realtime, algunas veces tarda 1 segundo y otras 10 segundos. Lo importante es que funciona y es una buena historia para contar en el IC.

Happy coding!

Saludos @ Toronto

El Bruno

References

Advertisements