Шлюз использует хранилище для хранения конфигов, скриптов, звуков и прочих файлов. Может использовать как внутренняя флеш-память так и внешняя на SD-картах. Записывать также можно через сценарии, пример.
Хранилище использует префиксы для обозначения источника данных.
- /int - для внутренней файловой системы, его использование не обязательно
- /sd - для SD-карты
Поддерживается несколько файловых систем для хранилища:
- FAT - классическая файловая система
- LFS - надежная файловая система для микроконтроллеров LittleFS, не повреждается при неожиданных отключениях питания (доступна с версии 2022.03.29d4)
Для выбора файловой системы используется разметка указанная в файле разделов при прошивке устройства.
Для перехода на другую файловую систему необходимо сделать бэкап всех файлов и перепрошить устройство с нужным файлом разделов. При этом хранилище будет отформатировано.
Большая часть команд возвращает объект JSON:
При успехе:
{"success":true,"result":[]|{}}
При ошибке
{ "success": false }
Пути могут обозначаться:
- / или /int - внутренняя файловая система
- /sd - SD-карта
GET /api/storage?path=/
JSON result:
[
{ "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.txt
Запись в файл. Если файла не существует - он будет создан. Файл будет перезаписан!
POST /api/storage?path=/test.lua&plain=XXX
Возвращает
{"success":true|false}
Удаляет файл
DELETE /api/storage?path=/test.txt
Возвращает
{"success":true|false}
GET /api/storage/sd?action=mount
GET /api/storage/sd?action=umount
Возвращает
{ "success": true, "result": "mount|umount" }
Возвращает информацию о внутреннем хранилище и SD-карте
GET /api/storage/info
JSON result:
{
"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.lua
Возвращает
{"success":true|false}
GET /api/storage/mkdir?path=/int/mydir
Возвращает
{"success":true|false}
GET /api/storage/rmdir?path=/int/mydir
Возвращает
{"success":true|false}
Скрипты LUA
Во всех операциях с файлами под именем подразумевается путь:
- для int -
/file
или/int/file
- для SD -
/sd/file
Монтирует SD-карту
result = os.mountSD(mount)
-- mount - BOOL, примонтировать = true; размонтировать = false
-- result - BOOL, true - успех, false - что-то пошло не так
Проверяет наличие файла, возвращает true/false
result = os.fileExists(fileName)
-- fileName - STR, имя проверяемого файла
-- result - BOOL, true - успех, false - файл не найден
Возвращает размер файла
result = os.fileSize(fileName)
-- fileName - STR, имя проверяемого файла
-- result - INT, размер файла в байтах или NIL, если файл не найден
Удаляет файл
result = os.fileRemove(fileName)
-- fileName - STR, имя удаляемого файла
-- result - BOOL, true - успех, false - ошибка (например, нет файла)
Переименовывает файл
result = os.fileRename(old, new)
-- old - STR, старое имя переименовываемого файла
-- new - STR, новое имя переименовываемого файла
-- result - BOOL, true - успех, false - ошибка (например, нет файла)
Читает файл
result = os.fileRead(fileName)
-- fileName - STR, имя целевого файла
-- result - содержимое файла или NIL, если файл пустой или не найден
Записывает данные в файл:
result = os.fileWrite(fileName,data[, overwrite])
-- fileName - STR, имя целевого файла
-- data - STR, данные
-- overwrite - BOOL, перезаписать файл (true)
-- result - BOOL, true - успех, false - ошибка (например, нет файла)
-- Пример:
os.fileWrite("/int/!file.db","привет\n",true)
-- Для карты памяти необходимо использовать путь "/sd/file.txt"