Хранилище
Шлюз использует хранилище для хранения конфигов, скриптов, звуков и прочих файлов. Может использовать как внутренняя флеш-память так и внешняя на SD-картах. Записывать также можно через сценарии, пример.
Структура
Хранилище использует префиксы для обозначения источника данных.
- /int - для внутренней файловой системы, его использование не обязательно
- /sd - для SD-карты
Файловые системы
Поддерживается несколько файловых систем для хранилища:
- FAT - классическая файловая система
- LFS - надежная файловая система для микроконтроллеров LittleFS, не повреждается при неожиданных отключениях питания (доступна с версии 2022.03.29d4)
Для выбора файловой системы используется разметка указанная в файле разделов при прошивке устройства.
Для перехода на другую файловую систему необходимо сделать бэкап всех файлов и перепрошить устройство с нужным файлом разделов. При этом хранилище будет отформатировано.
HTTP API
Большая часть команд возвращает объект JSON:
При успехе:
{"success":true,"result":[]|{}}{"success":true,"result":[]|{}}При ошибке
{ "success": false }{ "success": false }Пути могут обозначаться:
- / или /int - внутренняя файловая система
- /sd - SD-карта
Получить список файлов
GET /api/storage?path=/GET /api/storage?path=/JSON result:
[
{ "name": "test.txt", "is_dir": false, "size": 8 },
{ "name": "testDir", "is_dir": true }
][
{ "name": "test.txt", "is_dir": false, "size": 8 },
{ "name": "testDir", "is_dir": true }
]name- имя файла или каталогаis_dir- true - каталог, false - файлsize- размер файла в байтах
Чтение содержимого файла
Возвращает содержимое файла
GET /api/storage?path=/sd/test.txtGET /api/storage?path=/sd/test.txtЗапись в файл
Запись в файл. Если файла не существует - он будет создан. Файл будет перезаписан!
POST /api/storage?path=/test.lua&plain=XXXPOST /api/storage?path=/test.lua&plain=XXXВозвращает
{"success":true|false}{"success":true|false}Удаление файла
Удаляет файл
DELETE /api/storage?path=/test.txtDELETE /api/storage?path=/test.txtВозвращает
{"success":true|false}{"success":true|false}Монтирование SD накопителя
GET /api/storage/sd?action=mount
GET /api/storage/sd?action=umountGET /api/storage/sd?action=mount
GET /api/storage/sd?action=umountВозвращает
{ "success": true, "result": "mount|umount" }{ "success": true, "result": "mount|umount" }Информация о хранилище
Возвращает информацию о внутреннем хранилище и SD-карте
GET /api/storage/infoGET /api/storage/infoJSON result:
{
"int": {
"fs": "LFS",
"total": 4194304,
"free": 4030464
},
"sd": {
"size": 30953963520,
"total": 30918311936,
"free": 30918262784,
"status": "SDHC"
}
}{
"int": {
"fs": "LFS",
"total": 4194304,
"free": 4030464
},
"sd": {
"size": 30953963520,
"total": 30918311936,
"free": 30918262784,
"status": "SDHC"
}
}- int - внутренний накопитель
- fs - файловая система
- total - размер флэш в байтах
- free - свободно байт
- sd - SD-карта
- status - тип карты
- size - размер карты в байтах
- total - размер раздела в байтах
- free - свободно байт
Переименование файлов
GET /api/storage/rename?old=/file1.lua&new=/file2.luaGET /api/storage/rename?old=/file1.lua&new=/file2.luaВозвращает
{"success":true|false}{"success":true|false}Создать директорию
GET /api/storage/mkdir?path=/int/mydirGET /api/storage/mkdir?path=/int/mydirВозвращает
{"success":true|false}{"success":true|false}Удалить директорию
GET /api/storage/rmdir?path=/int/mydirGET /api/storage/rmdir?path=/int/mydirВозвращает
{"success":true|false}{"success":true|false}Скрипты LUA
Во всех операциях с файлами под именем подразумевается путь:
- для int -
/fileили/int/file - для SD -
/sd/file
os.mountSD()
Монтирует SD-карту
result = os.mountSD(mount)
-- mount - BOOL, примонтировать = true; размонтировать = false
-- result - BOOL, true - успех, false - что-то пошло не такresult = os.mountSD(mount)
-- mount - BOOL, примонтировать = true; размонтировать = false
-- result - BOOL, true - успех, false - что-то пошло не такos.fileExists()
Проверяет наличие файла, возвращает true/false
result = os.fileExists(fileName)
-- fileName - STR, имя проверяемого файла
-- result - BOOL, true - успех, false - файл не найденresult = os.fileExists(fileName)
-- fileName - STR, имя проверяемого файла
-- result - BOOL, true - успех, false - файл не найденos.fileSize()
Возвращает размер файла
result = os.fileSize(fileName)
-- fileName - STR, имя проверяемого файла
-- result - INT, размер файла в байтах или NIL, если файл не найденresult = os.fileSize(fileName)
-- fileName - STR, имя проверяемого файла
-- result - INT, размер файла в байтах или NIL, если файл не найденos.fileRemove()
Удаляет файл
result = os.fileRemove(fileName)
-- fileName - STR, имя удаляемого файла
-- result - BOOL, true - успех, false - ошибка (например, нет файла)result = os.fileRemove(fileName)
-- fileName - STR, имя удаляемого файла
-- result - BOOL, true - успех, false - ошибка (например, нет файла)os.fileRename()
Переименовывает файл
result = os.fileRename(old, new)
-- old - STR, старое имя переименовываемого файла
-- new - STR, новое имя переименовываемого файла
-- result - BOOL, true - успех, false - ошибка (например, нет файла)result = os.fileRename(old, new)
-- old - STR, старое имя переименовываемого файла
-- new - STR, новое имя переименовываемого файла
-- result - BOOL, true - успех, false - ошибка (например, нет файла)os.fileRead()
Читает файл
result = os.fileRead(fileName)
-- fileName - STR, имя целевого файла
-- result - содержимое файла или NIL, если файл пустой или не найденresult = os.fileRead(fileName)
-- fileName - STR, имя целевого файла
-- result - содержимое файла или NIL, если файл пустой или не найденos.fileWrite()
Записывает данные в файл:
result = os.fileWrite(fileName,data[, append])
-- fileName - STR, имя целевого файла
-- data - STR, данные
-- append - BOOL, дописать файл (true)
-- result - BOOL, true - успех, false - ошибка (например, нет файла)
-- Пример:
os.fileWrite("/int/!file.db","привет\n",true)
-- Для карты памяти необходимо использовать путь "/sd/file.txt"result = os.fileWrite(fileName,data[, append])
-- fileName - STR, имя целевого файла
-- data - STR, данные
-- append - BOOL, дописать файл (true)
-- result - BOOL, true - успех, false - ошибка (например, нет файла)
-- Пример:
os.fileWrite("/int/!file.db","привет\n",true)
-- Для карты памяти необходимо использовать путь "/sd/file.txt"