Статья

Укрощение config.json в Homebridge

При настройке 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


Вернуться назад
Вернуться назад