Recogida de resultado desde stdio
Publicado: Lun Dic 17, 2018 4:22 pm
Buenas a todos. A ver si me podeis ayudar con un temilla al que le llevo dando vueltas un tiempo y no consigo solucionarlo.
Tengo una cerradura xiaomi Sherlock M1 que controla la puerta principal. Dado que la conexión es bluetooth y no se puede enlazar con HA, monté (copie la idea de otro foro) un móvil Android conectado a la Raspberry y a través de ADB (Android Debugging bridge) y un shell_command, puedo pasarle órdenes al móvil y de esa manera abre o cierra la puerta.
El problema que tengo es que para leer si ha podido abrir o no la puerta, utilizo el siguiente comand line switch:
- platform: command_line
switches:
door:
friendly_name: Door Lock
command_on: adb shell "input keyevent 26&&input tap 420 897&&input swipe 277 760 108 760"
command_off: adb shell "input keyevent 26&&input tap 420 897&&input swipe 277 760 446 760"
command_state: /bin/bash -c "adb shell cat /storage/emulated/0/Android/data/com.xiaomi.smarthome/files/SherlockLog/$(date +%Y%m%d.log)|grep mOperateCommandType|tail -1| grep -oP '(?<=mOperateCommandType:).*?(?=\r)'"
value_template: '{{ value == "Lock" }}'
En command-state me viene el valor "Lock" o "Unlock" que es el estado actual de la puerta, así que es lo que utilizo para ver si ha ido bien o no.
Sin embargo, al hacerlo así está constantemente (cada pocos segundos) calculando el estado y, por lo tanto, consultando y leyendo el estado del .log del móvil Android.
Quería cambiarlo por algo que me permitiera (un shell_command??) leer el resultado bajo demanda, pero no consigo ejecutar la parte del que hay dentro del command_state y recuperar el valor que devuelve por stdio.
Alguna sugerencia?
Muchas gracias por adelantado
Jesús.
Tengo una cerradura xiaomi Sherlock M1 que controla la puerta principal. Dado que la conexión es bluetooth y no se puede enlazar con HA, monté (copie la idea de otro foro) un móvil Android conectado a la Raspberry y a través de ADB (Android Debugging bridge) y un shell_command, puedo pasarle órdenes al móvil y de esa manera abre o cierra la puerta.
El problema que tengo es que para leer si ha podido abrir o no la puerta, utilizo el siguiente comand line switch:
- platform: command_line
switches:
door:
friendly_name: Door Lock
command_on: adb shell "input keyevent 26&&input tap 420 897&&input swipe 277 760 108 760"
command_off: adb shell "input keyevent 26&&input tap 420 897&&input swipe 277 760 446 760"
command_state: /bin/bash -c "adb shell cat /storage/emulated/0/Android/data/com.xiaomi.smarthome/files/SherlockLog/$(date +%Y%m%d.log)|grep mOperateCommandType|tail -1| grep -oP '(?<=mOperateCommandType:).*?(?=\r)'"
value_template: '{{ value == "Lock" }}'
En command-state me viene el valor "Lock" o "Unlock" que es el estado actual de la puerta, así que es lo que utilizo para ver si ha ido bien o no.
Sin embargo, al hacerlo así está constantemente (cada pocos segundos) calculando el estado y, por lo tanto, consultando y leyendo el estado del .log del móvil Android.
Quería cambiarlo por algo que me permitiera (un shell_command??) leer el resultado bajo demanda, pero no consigo ejecutar la parte del que hay dentro del command_state y recuperar el valor que devuelve por stdio.
Alguna sugerencia?
Muchas gracias por adelantado
Jesús.