
Python CLI-обёртка для Flipper Zero
Flipper Zero — Python CLI-обёртка

Этот релиз приводит обёртку в соответствие с текущим CLI Flipper Zero
(проверено на реальном оборудовании, прошивка unlshd-089e):
info: flipper.info.device_info() / power_info() /
power_debug_info() (современные команды info device / info power).power info → info power: flipper.power.info() продолжает работать и теперь
под капотом читает info power. Добавлены flipper.power.otg_on()/otg_off().date: используйте flipper.date.datetime(); разбор был исправлен для текущего
формата вывода.KB, так и в KiB, read() теперь возвращает
полное многострочное содержимое файла, а карты exFAT / с пустой меткой разбираются
корректно (исправляет #21).NECext, Kaseikyo, RCA, Pioneer, … поддерживаются автоматически (исправляет #15).
Новый flipper.ir.protocols().debug → sysctl debug, subghz tx/rx получили обязательный
аргумент device, bt hci_info без изменений.scan, dump,
emulate, field, apdu, raw, mfu) с утилитами кэша ключей Mifare Classic
для каждого UID (import_nfc_keys, write_key_cache).ps (→ top), music_player, nfc detect.$ pip install pyflipper
unlshd-089e)from pyflipper import PyFlipper
# Локальный последовательный порт
flipper = PyFlipper(com="/dev/ttyACM0")
# ИЛИ
# Удалённый сервер serial2websocket
flipper = PyFlipper(ws="ws://192.168.1.5:1337")
# TCP
flipper = PyFlipper(tcp='192.168.89.222:22170')
# Информация (на текущей прошивке под капотом читает `info power`)
info = flipper.power.info()
# Выключение
flipper.power.off()
# Перезагрузка
flipper.power.reboot()
# Перезагрузка в режиме DFU
flipper.power.reboot2dfu()
# Включение/выключение вывода 5V OTG на пине GPIO
flipper.power.otg_on()
flipper.power.otg_off()
# Установка обновления из файла .fuf
flipper.update.install(fuf_file="/ext/update.fuf")
# Резервное копирование Flipper в файл .tar
flipper.update.backup(dest_tar_file="/ext/backup.tar")
# Восстановление Flipper из резервного .tar файла
flipper.update.restore(bak_tar_file="/ext/backup.tar")
# Список установленных приложений
apps = flipper.loader.list()
# Открыть приложение
flipper.loader.open(app_name="Clock")
# Получить дату Flipper (объект datetime)
date = flipper.date.datetime()
# Получить метку времени Flipper
timestamp = flipper.date.timestamp()
# Получить словарь информации об устройстве (текущая прошивка `info device`, ключи через точку)
device_info = flipper.info.device_info()
# Получить словарь информации о питании (текущая прошивка `info power`)
power_info = flipper.info.power_info()
# Расширенная отладочная информация о питании/датчике
power_debug = flipper.info.power_debug_info()
# Устаревшая команда `device_info` (ключи с подчёркиваниями, всё ещё поддерживается)
legacy_info = flipper.device_info.info()
# Получить словарь информации о куче
heap = flipper.free.info()
# Получить строку free_blocks
free_blocks = flipper.free.blocks()
# Получить информацию Bluetooth
bt_info = flipper.bt.info()
Совместимость прошивок. Эта библиотека теперь нацелена на текущий CLI Flipper Zero (прошивка 1.x, проверено на Unleashed
unlshd-089e). Некоторые устаревшие команды были удалены из официальной прошивки и поэтому больше не доступны:ps(заменён интерактивнымtop),music_playerиnfc detect(NFC теперь интерактивный подшелл).power infoперемещён вinfo power,debugперемещён вsysctl debug, аstorageтеперь сообщает размеры вKiB— всё обрабатывается прозрачно обёртками выше.
# Получить информацию о файловой системе хранилища
ext_info = flipper.storage.info(fs="/ext")
# Получить словарь содержимого /ext
ext_list = flipper.storage.list(path="/ext")
# Получить дерево каталогов /ext
ext_tree = flipper.storage.tree(path="/ext")
# Получить информацию о файле
file_info = flipper.storage.stat(file="/ext/foo/bar.txt")
# Создать каталог
flipper.storage.mkdir(new_dir="/ext/foo")
# Прочитать файл
plain_text = flipper.storage.read(file="/ext/foo/bar.txt")
# Удалить файл
flipper.storage.remove(file="/ext/foo/bar.txt")
# Скопировать файл
flipper.storage.copy(src="/ext/foo/source.txt", dest="/ext/bar/destination.txt")
# Переименовать файл
flipper.storage.rename(file="/ext/foo/bar.txt", new_file="/ext/foo/rab.txt")
# MD5-хеш файла
md5_hash = flipper.storage.md5(file="/ext/foo/bar.txt")
# Записать файл одним блоком
file = "/ext/bar.txt"
text = """There are many variations of passages of Lorem Ipsum available,
but the majority have suffered alteration in some form, by injected humour,
or randomised words which don't look even slightly believable.
If you are going to use a passage of Lorem Ipsum,
you need to be sure there isn't anything embarrassing hidden in the middle of text.
"""
flipper.storage.write.file(path=file, text=text)
# Записать файл с помощью слушателя
file = "/ext/foo.txt"
text_one = """There are many variations of passages of Lorem Ipsum available,
but the majority have suffered alteration in some form, by injected humour,
or randomised words which don't look even slightly believable.
If you are going to use a passage of Lorem Ipsum,
you need to be sure there isn't anything embarrassing hidden in the middle of text.
"""
flipper.storage.write.start(file)
time.sleep(2)
flipper.storage.write.send(text_one)
text_two = """All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as
necessary, making this the first true generator on the Internet.
It uses a dictionary of over 200 Latin words, combined with a handful of
model sentence structures, to generate Lorem Ipsum which looks reasonable.
The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
"""
flipper.storage.write.send(text_two)
time.sleep(3)
# Не забудьте остановить
flipper.storage.write.stop()
# Установить общий светодиод (r,b,g,bl)
flipper.led.set(led='r', value=255)
# Выключить синий светодиод
flipper.led.blue(value=0)
# Установить значение зелёного светодиода
flipper.led.green(value=175)
# Включить подсветку
flipper.led.backlight_on()
# Выключить подсветку
flipper.led.backlight_off()
# Выключить все светодиоды
flipper.led.off()
# Включить/выключить вибро (True или False)
flipper.vibro.set(True)