
Wrapper de línea de comandos en Python para Flipper Zero
Envoltorio CLI de Python para Flipper Zero

Esta versión actualiza el envoltorio para alinearse con la CLI actual del Flipper Zero
(validado en hardware real, firmware unlshd-089e):
info: flipper.info.device_info() / power_info() /
power_debug_info() (los comandos modernos info device / info power).power info → info power: flipper.power.info() sigue funcionando y ahora
lee info power internamente. Se agregaron flipper.power.otg_on()/otg_off().date: use flipper.date.datetime(); se corrigió el análisis para el formato
de salida actual.KB como en KiB, read() ahora devuelve
el contenido completo del archivo con múltiples líneas, y las tarjetas exFAT / sin etiqueta se
analizan correctamente (corrige #21).NECext,
Kaseikyo, RCA, Pioneer, … son compatibles automáticamente (corrige #15). Nueva
función flipper.ir.protocols().debug → sysctl debug, subghz tx/rx obtuvo el argumento device
requerido, bt hci_info sin cambios.scan, dump,
emulate, field, apdu, raw, mfu) con ayudas de caché de claves Mifare Classic
por UID (import_nfc_keys, write_key_cache).ps (→ top), music_player, nfc detect.$ pip install pyflipper
unlshd-089e)from pyflipper import PyFlipper
# Puerto serie local
flipper = PyFlipper(com="/dev/ttyACM0")
# O
# Servidor remoto serial2websocket
flipper = PyFlipper(ws="ws://192.168.1.5:1337")
# TCP
flipper = PyFlipper(tcp='192.168.89.222:22170')
# Información (en el firmware actual esto lee `info power` internamente)
info = flipper.power.info()
# Apagar
flipper.power.off()
# Reiniciar
flipper.power.reboot()
# Reiniciar en modo DFU
flipper.power.reboot2dfu()
# Activar/desactivar el pin OTG de 5V en el encabezado GPIO
flipper.power.otg_on()
flipper.power.otg_off()
# Instalar actualización desde archivo .fuf
flipper.update.install(fuf_file="/ext/update.fuf")
# Hacer copia de seguridad del Flipper en archivo .tar
flipper.update.backup(dest_tar_file="/ext/backup.tar")
# Restaurar Flipper desde archivo .tar de copia de seguridad
flipper.update.restore(bak_tar_file="/ext/backup.tar")
# Listar aplicaciones instaladas
apps = flipper.loader.list()
# Abrir aplicación
flipper.loader.open(app_name="Clock")
# Obtener fecha del flipper (objeto datetime)
date = flipper.date.datetime()
# Obtener timestamp del flipper
timestamp = flipper.date.timestamp()
# Obtener diccionario de información del dispositivo (firmware actual `info device`, claves separadas por punto)
device_info = flipper.info.device_info()
# Obtener diccionario de información de energía (firmware actual `info power`)
power_info = flipper.info.power_info()
# Información extendida de depuración de energía/medidor
power_debug = flipper.info.power_debug_info()
# Comando `device_info` heredado (claves separadas por guión bajo, aún compatible)
legacy_info = flipper.device_info.info()
# Obtener diccionario de información del heap
heap = flipper.free.info()
# Obtener cadena free_blocks
free_blocks = flipper.free.blocks()
# Obtener información de Bluetooth
bt_info = flipper.bt.info()
Compatibilidad con firmware. Esta biblioteca ahora apunta a la CLI actual del Flipper Zero (firmware 1.x, verificado contra Unleashed
unlshd-089e). Algunos comandos heredados fueron eliminados del firmware oficial y por lo tanto ya no están disponibles:ps(reemplazado por eltopinteractivo),music_playerynfc detect(NFC ahora es un sub-shell interactivo).power infose movió ainfo power,debugse movió asysctl debug, ystorageahora reporta tamaños enKiB— todo manejado de forma transparente por los envoltorios anteriores.
# Obtener información del sistema de archivos de almacenamiento
ext_info = flipper.storage.info(fs="/ext")
# Obtener el diccionario de /ext del almacenamiento
ext_list = flipper.storage.list(path="/ext")
# Obtener el diccionario del árbol de /ext del almacenamiento
ext_tree = flipper.storage.tree(path="/ext")
# Obtener información de un archivo
file_info = flipper.storage.stat(file="/ext/foo/bar.txt")
# Crear directorio
flipper.storage.mkdir(new_dir="/ext/foo")
# Leer archivo
plain_text = flipper.storage.read(file="/ext/foo/bar.txt")
# Eliminar archivo
flipper.storage.remove(file="/ext/foo/bar.txt")
# Copiar archivo
flipper.storage.copy(src="/ext/foo/source.txt", dest="/ext/bar/destination.txt")
# Renombrar archivo
flipper.storage.rename(file="/ext/foo/bar.txt", new_file="/ext/foo/rab.txt")
# Hash MD5 de archivo
md5_hash = flipper.storage.md5(file="/ext/foo/bar.txt")
# Escribir archivo en un solo bloque
file = "/ext/bar.txt"
text = """Hay muchas variaciones de pasajes de Lorem Ipsum disponibles,
pero la mayoría han sufrido alteraciones de alguna forma, ya sea por humor inyectado,
o palabras aleatorias que no parecen ni siquiera ligeramente creíbles.
Si va a usar un pasaje de Lorem Ipsum,
debe asegurarse de que no haya nada vergonzoso escondido en medio del texto.
"""
flipper.storage.write.file(path=file, text=text)
# Escribir archivo usando un listener
file = "/ext/foo.txt"
text_one = """Hay muchas variaciones de pasajes de Lorem Ipsum disponibles,
pero la mayoría han sufrido alteraciones de alguna forma, ya sea por humor inyectado,
o palabras aleatorias que no parecen ni siquiera ligeramente creíbles.
Si va a usar un pasaje de Lorem Ipsum,
debe asegurarse de que no haya nada vergonzoso escondido en medio del texto.
"""
flipper.storage.write.start(file)
time.sleep(2)
flipper.storage.write.send(text_one)
text_two = """Todos los generadores de Lorem Ipsum en Internet tienden a repetir fragmentos predefinidos según sea necesario,
lo que lo convierte en el primer generador verdadero en Internet.
Utiliza un diccionario de más de 200 palabras latinas, combinado con un puñado de
estructuras de oraciones modelo, para generar Lorem Ipsum que parece razonable.
El Lorem Ipsum generado por lo tanto está siempre libre de repeticiones, humor inyectado o palabras no características, etc.
"""
flipper.storage.write.send(text_two)
time.sleep(3)
# No olvide detener
flipper.storage.write.stop()
# Establecer led genérico (r,b,g,bl)
flipper.led.set(led='r', value=255)
# Apagar led azul
flipper.led.blue(value=0)
# Establecer valor de led verde
flipper.led.green(value=175)