14 ноября 2019, 17:50
При настройке Homebridge, редактирование config.json у многих вызывает сложности. Но это проще, чем кажется.
Данная статья содержит информацию для понимания структуры JSON и настройке файла config.json.
Для облегчения процесса, я рекомендую использовать редактор кода, например, Atom или Visual Studio Code.
Я использую редактор Atom с набором расширений для него:
- jsonlint – проверка ошибок в JSON;
- atom-beautify – автоматическое форматирование текста;
- bracket-colorizer – подсветка скобок.
Я подготовил пример простого файла config.json, где цветами выделены основные массивы его структуры:
- Коричневый - основной массив файла, обратите внимание на фигурные скобки {} сверху и снизу;
- Белый - массив Homebridge;
- Желтый - массив аксессуаров;
- Красный - аксессуар #1;
- Синий - аксессуар #2;
- Orange - массив платформ;
- Зеленый - платформа #1;
- Фиолетовый - платформа #2.
Аксессуар WeMo (красный цвет) находится внутри “родительского” массива Accessories (желтый цвет), который, в свою очередь, находится внутри основного “родительского” массива (коричневый цвет). Это называется «вложением» и каждый аксессуар или платформа будет вложен внутри соответствующего “родителя” (Accessories или Platforms).
Помните, у вас только один массив Accessories и один массив Platforms. В каждом из этих массивов могут быть разные аксессуары и платформы (как в файле примера), если Accessories или Platforms будут указаны более одного раза, то вы получите ошибку.
Редактируя свой JSON-файл, вы будете добавлять детали в разделы аксессуаров и платформ (желтый и оранжевый соответственно).
В файле примера есть две платформы: Hue (зеленая) и Lifx (фиолетовая). Платформа Hue находится над Lifx, каждая платформа выделена фигурными скобками и отделена запятой.
Это говорит системе, что в “родительском” массиве Platforms, который выделен квадратными скобками, находятся два подмассива. Заметьте, что после раздела платформы Lifx нет запятой.
Это обусловлено тем, что в массиве Platforms нет других подмассивов после фигурной скобки, поэтому система знает, что нужно перестать искать другую платформу. Приведу пример конфигурации с ошибкой:
"platforms": [
{
"platform" : "PhilipsHue",
"name" : "Hue"
},
{
"platform": "LifxLan",
"name": "Lifx",
"ignoredDevices" : ["xxxxxxxx", "yyyyyyyyy"]
},
]
Запятая после последней фигурной скобки вызовет ошибку.
Тут пригодится веб ресурс, который вы можете использовать для проверки файла на ошибки https://jsonlint.com, ту же функцию выполняет расширение jsonlint для Atom. Если вы вставите выше приведенный образец в https://jsonlint.com (включая неверную запятую), вы получите эту ошибку:
Error: Parse error on line 30:
... "yyyyyyyyy"]},]}
---------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got ']'
Это означает, что анализатор ожидал какие-либо данные после запятой, но вместо этого он получил закрытую квадратную скобку. Для правки ошибки найдите причины, по которым система будет ожидать больше данных. В данном случае мы говорим системе «после этой запятой у нас будет другой массив», что не соответствует истине.
То же правило касается структурирования данных внутри подмассивов. Посмотрите на раздел Hue (зеленый): запятые ставятся после каждой строки (подсказка, после первой строки есть только одна запятая).
{
"platform" : "PhilipsHue", <--- запятая
"name" : "Hue" <-- нет запятой
},
Здесь работает тот же принцип, что и выше, где нужно добавлять запятую после каждой строки, за исключением последней.
Посмотрите на раздел Lifx (фиолетовый), который имеет 3 строки и обратите внимание на строки с запятой.
{
"platform": "LifxLan", <--- запятая
"name": "Lifx", <--- запятая
"ignoredDevices" : ["xxxxxxxx", "yyyyyyyyy"] <-- нет запятой
}
На этом все. Пробуйте, изучайте, экспериментируйте и успехов вам в этом!
Очень полезная статья для начинающих. Теперь можно будет сослаться
Полезно, но поздно! Пришлось разбираться во всем методом тыка в свое время ))
Это точно))) Но на всякий случай добавлю в избранное!
Наверное эта статья одна из самых важных для нас начинающих! Спасибо огромное!!!
Блин, может написать плагин небольшой для HB чтобы автоматом форматировалось. Ну мучение сплошное.
Такой плагин уже есть — config-ui-x называется, но нужна поддержка со стороны плагинов, а их единицы пока.
На самом деле нет никакого мучения — смотри чтобы не было лишних запятых, а все скобки были парные, Atom очень сильно помогает в этом.
Ну можно было определить какие основные плагины нужны в нашем сообществе и допилить их. Почему бы и нет? Они же насколько я понимаю opensource
Кто будет этим заниматься? Сколько денег ты потратил на поддержку разработки плагинов и самого Homebridge?
Ну можно было определить какие основные плагины нужны в нашем сообществе и допилить их. Почему бы и нет? Они же насколько я понимаю opensource
https://jsoneditoronline.org/