Превращаем дисковый телефон в цифрового помощника с использованием Google Assistant и Raspberry Pi

63 6

Я пытался установить G-помощника в Raspberry Pi3. У меня вопрос в следующей ссылке

https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/configure-audio

Частичный текст из приведенной выше ссылки

# Record a short audio clip. If you get an error, go to step 2.$ arecord --format=S16_LE --duration=5 --rate=16k --file-type=raw out.raw

Как и ожидалось, на этом этапе я получил ошибку. Поэтому я попробовал Step2 создать новый файл (.asoundrc) со всей информацией об оборудовании. Затем я попытался следовать

speaker-test -t wav

Но я получил следующую ошибку (если я переименую.asoundrc, я не вижу эту ошибку, но я не могу ее записать)

speaker-test 1.0.28  Playback device is defaultStream parameters are 48000Hz, S16_LE, 1 channelsWAV file(s)ALSA lib conf.c:1697:(snd_config_load1) toplevel:9:17:Unexpected charALSA lib conf.c:3417:(config_file_open) /home/pi/.asoundrc may be old or corrupted: consider to remove or fix itALSA lib conf.c:3339:(snd_config_hooks_call) function snd_config_hook_load returned error: Invalid argumentALSA lib conf.c:3788:(snd_config_update_r) hooks failed, removing configurationPlayback open error: -22,Invalid argument

Как я могу это исправить? Благодарю!

1 Решение 77

Это происходит, если ваш.asoundrc не имеет правильной структуры. Предупреждение. Если вы используете регулятор громкости rpi gui (desktop) для изменения входов, он изменит для вас.asoundrc, нарушив ALSA для помощника Google. Тебе придется пойти и исправить это. Инструкции на веб-сайте google верны.

Чтобы исправить это, удалите новые созданные записи. Затем вверху найдите строку «Тип hw». Он был подкожно изменен… вам придется изменить его на «тип асимметрии», чтобы он соответствовал настройке конфигурации google.

Я оставляю вход/выход для гей (настольного) тома, установленного на аналог, и не прикасаюсь к нему, как только я начинаю использовать помощник Google, чтобы он не поехал и снова начал работать с.asoundrc.

Я использую гарнитуру Logitech USB, у которой есть как микрофон, так и динамик (я не использую внешний динамик). Поэтому, учитывая, что мой аудиовход и выход идут на гарнитуру, мой.asoundrc выглядит следующим образом:

pcm.!default {  type asym  capture.pcm "mic"  playback.pcm "speaker"}pcm.mic {  type plug  slave {    pcm "hw:1,0"  }}pcm.speaker {  type plug  slave {    pcm "hw:1,0"  }}

Наконец, если вы перезагрузите свой Pi, вам придется сбросить исходный путь для вспомогательного двоичного файла, иначе он не сможет найти команду, которая запускает демо-версию помощника. Сделайте это, набрав «source env/bin/activate». Затем вы можете запустить его снова, набрав «google-assistant-demo»,

Удачи!

45

Да, я видел эту ошибку — странно после того, как все работает нормально, я никогда не думал, что файл.asoundrc был бы поврежден.

Invalid value card arecord: main: 722: ошибка открытия звука: нет такого файла или каталога

Я подтверждаю, что Xeneck Stoher говорит о том, что Rasbian gui volume/audio in/out выбрал ваш файл ~.asoundrc, заменив его исправленным, и запись/воспроизведение теперь работают нормально.

Ваш ответ

Голосовые помощники быстро стали обычным явлением. Во многих домах есть Alexa или Google Home, которые контролируют все, от освещения до медиа и даже хронометража.

Технология, на которой работают эти устройства, доступна — по крайней мере частично — каждому. Google Assistant SDK позволяет использовать службу на своих устройствах. Из этого туториала Вы узнаете, как настроить Google Assistant на вашем Raspberry Pi и как голосовой активировать светодиод через контакты GPIO.

Оборудование, необходимое для Raspberry Pi Home Assistant

image

Тебе понадобится:

  1. Raspberry Pi со свежей установкой Raspbian на SD-карту
  2. USB веб-камера или микрофон.
  3. Внешний динамик.
  4. Схема из учебника по светодиодам Pi (необязательно)
  5. Браузер вошел в вашу учетную запись Google.

Примечание . Оборудование для этого урока может несколько отличаться. Я использовал запасную веб-камеру USB исключительно для ее микрофона. Любая совместимая веб-камера или микрофон должны работать хорошо, и существует обширный список Pi-совместимых устройств, чтобы помочь.

Кроме того, я использую 3,5 мм выход для аудио. HDMI и другие источники вывода также будут работать, хотя для этого потребуется изменить настройки звука ниже.

Подключите веб-камеру USB и динамик и настройте светодиодную цепь, если вы ее используете.

Настройка звука

Этот учебник может следовать непосредственно на Pi или через соединение SSH с Pi.

Оба способа начинаются в терминале, чтобы проверить настройки звука. Используйте команды arecord -l и aplay -l для просмотра списка доступных устройств.

image

На изображении выше показана веб-камера USB в виде карты 1 и устройства 0 . Запишите номера карт и устройств для выхода на микрофон и динамик.

Теперь, убедившись, что вы находитесь в каталоге / home / pi , создайте новый файл и откройте его в nano:

sudo nano .asoundrc

Содержимое этого каталога будет отличаться в зависимости от того, какие номера карт и устройств вы используете. Здесь вы можете выбрать выход HDMI, а не 3,5 мм, если хотите.

Когда вы ввели свою версию кода выше, нажмите Ctrl + X, чтобы сохранить и выйти.

Проверьте свои настройки, записав и воспроизведя короткий клип:

Необязательный шаг: если вы хотите изменить входную громкость вашего микрофона, откройте alsamixer и нажмите F6 для переключения между устройствами.

Это оно! Звук настроен.

Создание проекта Google

Откройте браузер Pi, или, если вы подключены через SSH, откройте браузер локально. Перейдите к консоли действий Google и нажмите « Новый проект» .

Это может занять несколько минут. Когда закончите, оставьте окно активным и откройте новую вкладку — мы скоро к этому подойдем.

Включение Google Assistant API

Есть несколько онлайн-настроек, которые вам нужно будет сделать, чтобы продолжить. Перейдите на веб-сайт API Google Assistant и нажмите « Включить» .

Проект также требует разрешения деятельности. Перейдите на панель управления действиями и убедитесь, что включены следующие действия:

  • Активность в Интернете и приложениях (включая флажок Chrome History)
  • Информация об устройстве
  • Голосовая и звуковая активность

Теперь вы можете перейти к регистрации устройства.

Регистрация вашего Raspberry Pi

Вернувшись в консоль действий, выберите Регистрация устройства на левой панели. Под Product создайте легко запоминающееся имя для вашего устройства. Имя производителя не имеет значения (но должно быть там), и выберите « Авто» для типа устройства.

Нажмите Зарегистрировать модель и на следующем экране нажмите Загрузить учетные данные OAuth 2.0 . Это загрузит файл JSON на ваш компьютер. Если вы не знакомы с файлами JSON, не беспокойтесь, но изучите, как использовать JSON стоит делать на будущее!

Официальное руководство Google рекомендует переместить файл в / home / pi , поэтому откройте файловый менеджер и сделайте это сейчас.

Дополнительный шаг для пользователей SSH:

Если вы используете SSH, вы скачаете файл JSON на свой локальный компьютер вместо Pi. Чтобы передать его, откройте отдельное окно терминала без SSH-соединения. Из этого окна скопируйте секретный файл JSON клиента с помощью этой команды:

scp ~/Downloads/client_secret_client-id.json pi@raspberry-pi-ip-address:/home/pi/

Замените «raspberry-pi-ip-address» на IP-адрес вашего Pi, и не забывайте двоеточие перед путем. Если вы загрузили файл JSON в другое место, измените локальный путь, чтобы отразить это. Введите пароль при появлении запроса, и файл будет скопирован в домашнюю директорию Pi.

Вернитесь к терминалу SSH и перейдите к / home / pi . Введите ls -l, чтобы получить список файлов в каталоге. Вы должны увидеть переданный секретный файл JSON клиента.

Установка SDK

Google рекомендует работать в виртуальной среде Python. Создайте новую виртуальную среду с именем env .

Если вы никогда не делали этого раньше, этот учебник поможет вам научиться использовать виртуальные среды Python .

Установите последние версии Pip, Setuptools и Wheel и активируйте свою виртуальную среду:

env/bin/python -m pip install --upgrade pip setuptools wheel source env/bin/activate

У Google Assistant есть некоторые зависимости, которые вы должны установить в виртуальной среде.

sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev

Наконец, установите Google Assistant SDK, примеры и инструмент OAuth.

python -m pip install --upgrade google-assistant-library python -m pip install --upgrade google-assistant-sdk[samples] python -m pip install --upgrade google-auth-oauthlib[tool]

Это все, что нужно, чтобы начать работу. Если какая-либо из установок не удалась, тщательно проверьте орфографию и расстояние.

Аутентификация Raspberry Pi

Используйте google-auth-oauthlib [инструмент] с загруженным ранее файлом JSON с учетными данными для аутентификации вашего Raspberry Pi.

google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype  --scope https://www.googleapis.com/auth/gcm  --save --headless --client-secrets /home/pi/YOUR_CLIENT_SECRET_ID.json

Вам необходимо заменить YOUR_CLIENT_SECRET_ID на загруженный файл, поэтому сначала стоит скопировать имя файла. Этот идентификатор клиента должен быть правильным. Не меняйте имя файла!

Вы должны получить сообщение со ссылкой с просьбой вставить код авторизации.

При нажатии на ссылку открывается браузер. Вам будет предложено включить устройство в вашей учетной записи Google. Скопируйте следующий код авторизации и вставьте его обратно в окно терминала.

Вы должны получить подтверждение в виде Credentials Saved: / home / pi… , означающее, что Pi успешно авторизован с вашей учетной записью Google.

Тестирование

Теперь, когда все готово, пришло время протестировать ваш Pi Google Assistant. Запустите помощника с помощью этой команды:

googlesamples-assistant-hotword --project-id my-dev-project --device-model-id my-model

Вам нужно будет заменить my-dev-project на ваш ID проекта (находится под зубчатым колесом «Настройки» консоли действий). Ваш идентификатор модели устройства указан в разделе «Регистрация устройства» консоли действий.

Попробуйте! Скажите «ОК Google» и задайте вопрос. Вы можете увидеть вывод программы в терминале, услышав ответ:

Это оно! Теперь на вашем Raspberry Pi работает помощник Google. Обратите внимание, что если громкость звука немного мала, вы можете изменить его, сказав: «Привет, Google, увеличь громкость до 80%».

Бонус: Голосовая активация GPIO

Можно управлять светом с помощью Arduino и Siri , но есть более простой способ. Если вы настроили светодиод, вы можете использовать Google Assistant, чтобы управлять им своим голосом.

Настройка Google Assistant для работы с выводами GPIO относительно проста, но требует некоторых дополнительных шагов. Перейдите в Консоль действий Google и найдите свое устройство в разделе Регистрация устройства. Нажмите на нее и откройте меню черт:

Включите черту OnOff и нажмите Сохранить.

Теперь, убедившись, что вы находитесь в виртуальной среде env , клонируйте версию SDK на свой Pi с помощью git:

git clone https://github.com/googlesamples/assistant-sdk-python

Поскольку это виртуальная среда, вам нужно установить RPi.GPIO, прежде чем двигаться дальше.

pip install rpi.gpio

Теперь перейдите к папке, содержащей скрипт hotword.py .

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library

Модификация скрипта

Вам нужно будет добавить несколько строк в скрипт hotword.py, поэтому откройте его в редакторе nano:

nano hotword.py

Под утверждением импорта добавьте свой собственный для RPi.GPIO.

import RPi.GPIO as GPIO

Ищите метод process_event . В строке 66 удалите или закомментируйте оператор печати и добавьте оператор if для управления светодиодом.

#print('Do command', command, 'with params', str(params)) if command == "action.devices.commands.OnOff": if params['on']: print('---------------') print('Led turned on') print('---------------') GPIO.output(18, GPIO.HIGH) else: print('---------------') print('Led turned off') print('---------------') GPIO.output(18, GPIO.LOW)

Эта логика управляет светодиодом, но пока он не настроен на вывод. Установите его в функции main () до вызова метода process_event.

GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)

Теперь вывод GPIO настроен на вывод и инициализируется в низком состоянии. Сохранить и выйти. Вы можете запустить ваш измененный скрипт, передавая номер идентификатора модели (находится в консоли действий) в качестве аргумента.

python hotword.py --device-model-id YOUR-MODEL-ID-HERE

Вывод терминала такой же, как и раньше, и помощник будет работать как стандарт. Однако теперь, когда вы говорите «ОК, Google, включите», вы увидите новый вывод:

Примечание. Приведенное выше изображение было обрезано, на нем показаны только помощник, который услышал запрос, и оператор печати, добавленный в сценарий.

Вы должны увидеть, что ваш светодиод тоже горит!

Ваш собственный DIY Raspberry Pi Google Home Assistant

Этот проект является хорошим введением в использование сервисов Google API. Теперь, когда у вас есть устройство Google Assistant, попробуйте некоторые из лучших командкомандам мы рассмотрели некоторые замечательные мини-игры

Я ни разу не параноик и никогда не переживал, что мой аккаунт в соцсети взломают злодеи и прочтут всю ту ахинею, которую я пишу друзьям. Но подключение «мозгов» умного дома к облаку, будь то китайское или американское, да хоть русское- это выше моего пофигизма. С другой стороны, сейчас на рынке много доступных предложений по автоматизации, которые достойны внимания, но работают через облака. К примеру, Xiaomi. В этой статье я покажу, как организовать работу в локальной сети устройств Zigbee от разных производителей без подключения к непонятным облакам Начинаем, как всегда, с постановки задачи: устройства Zigbee должны работать с Home Assistant локально без доступа к облаку производителя. Изначально важно понимать, что все производители используют единый стандарт беспроводной передачи данных, поэтому устройство одного производителя может спокойно подключаться к сети Zigbee и обмениваться данными с другими устройствами разных производителей. Все ограничения, как правило, прописываются в шлюзах, приложениях и облаках — тут уж кто на что горазд. Поэтому задача сводится к созданию своего zigbee шлюза. Для Zigbee-устройств используется в основном 3 вида чипов компании TI (есть и другие, но эти наиболее популярны): cc2530 — дешевый и проверенный чип с 8Кб памяти cc2531 — такой же дешевый и проверенный чип с 8Кб памяти, но имеющий контроллер USB на борту cc2538 — с процессором Cortex-M3 и 32Кб памяти В целом семейство чипов cc253x привлекательно своей низкой ценой. Поэтому большинство китайских устройств сделано именно на них. Плавно мы подошли к тому, что можно сделать устройство с чипом cc253x и с помощью него слушать/ посылать в эфир команды по протоколу zigbee. И такие устройства, конечно, есть. Самый популярный вариант Zigbee-стика с подключением в USB порт реализован на чипе cc2531. Его преимущество в том что он продается в готовом для эксплуатации виде (нужно только прошить прошивку). Выглядит так: Стоит такой стик порядка 350 рублей (без доставки) Ссылка на Aliexpress Следующий шаг — объяснить чипу, что в этой жизни он будет шлюзом сети Zigbee, другими словами прошить устройство с помощью программатора CC Debugger. Выглядит он так: Стоит такой порядка 370 рублей (без доставки) Ссылка на Aliexpress Прошивка zigbee стика Прошивать будем прошивку с популярного проекта zigbee2mqtt.io Суть заключается в том, что стик, являясь координатором сети Zigbee будет пересылать сообщения из zigbee сети в MQTT и обратно. Стик поддерживает работу одновременно до 25 конечных устройств. Для бОльшего количества потребуется устройство с ролью ретранслятор. Как правило, это устройство, включающееся в розетку. На момент написания статьи поддерживается 785 устройств от 140 различных производителей!Ссылка на страницу с перечнем устройств Процесс прошивки (на ОС Windows): — Скачиваем с сайта TI программное обеспечение SmartRF Flash programmer (НЕ v2). Предварительно попросят зарегистрировать бесплатный аккаунт — Устанавливаем CC debugger driver — Соединяем CC debugger —> Downloader cable CC2531 —> CC2531 USB стик — Вставляем CC2531 USB стик в порт компьютера — Вставляем CC debugger в порт компьютера — Если лампочка на CC debugger горит красным — нажмите кнопку reset. Лампочка должна гореть зеленым. — Скачиваем прошивку CC2531_coordinator_firmware — Запускаем SmartRF Flash Programmer, устанавливаем настройки, как на картинке и нажимаем «Perform actions». Проверьте, что файл выбран с расширением .hex! Поздравляю, с железной частью мы закончили.Настраиваем сервер MQTT. Если он у вас настроен, то это шаг можно пропустить. Я использую аддон hassio, который называется Mosquitto broker. Для его установки переходим на вкладку Supervisor на закладку ADD-ON STORE и выбираем этот аддон из списка Настройки брокера описаны на вкладке Documenation. В целом mqtt будет вполне корректно работать с дефолтовыми настройками. После настройки необходимо запустить аддон. Если в логах нет ошибок, то переходим в Настройки -> Люди -> Пользователи (Configuration -> Users) и создаем нового пользователя mqtt. Переходим в Настройки -> Интеграции (Configuration -> Integrations), выбираем интеграцию MQTT и ставим галочку «Добавлять новые объекты». Это включит автоматическое добавление mqtt устройств в Home Assistant Подробнее тутУстанавливаем и настраиваем Zigbee2mqtt Для этого подключаем стик к серверу умного дома Home Assistant. Я использую версию Hassio на Raspberry PI3 Устанавливаем аддон zigbee2mqtt GitHub. Для этого переходим на вкладку Supervisor на закладку ADD-ON STORE и добавляем новый репозиторий и устанавливаем аддон Для корректной работы аддона необходимо определить путь к нашему свистку. Заходим в закладку System и нажимаем кнопку Hardware. У меня он находится по адресу /dev/ttyACM1. Предварительно настоятельно советую отключить остальные устройства из usb для чистоты эксперимента. Теперь необходимо настроить аддон zigbee2mqtt. Для этого переходим на вкладку Configuration аддона. Я настраивал секции mqtt (подключение к серверу mqtt) и serial (путь к стику). Запускаем аддон и переходим на вкладку Log. Проверяем, что аддон запускается без ошибок Создаем объекты в Home assistant для подключения устройств Zigbee. В файле Configuration.yaml добавляем код В файл automations.yaml добавляем код Добавляем на основной экран (Lovelace) объекты » Allow devices to join «, Time remaining, и Bridge state. Теперь для запуска режима подключения нового устройства достаточно перевести переключатель Allow devices to join в положение «Включено»Подключение устройств Zigbee к шлюзу cc2531 Сделаем подключение на примере Xiaomi Aqara Window Door Sensor — Включаем Allow devices to join в Home Assistant. Шлюз включит режим сопряжения устройств на 10 минут — Открываем лог аддона ZigBee2MQTT — Нажимаем кнопку сопряжения на Aqara Window Door Sensor где-то на 3 сек. Синий огонек начнет мигать. — Ждем появления записей об подключении в логе аддона ZigBee2MQTT В итоге у вас появляется устройство binary_sensor.<номер>_contact В интерфейсе у меня датчик контролирует открытие окна. Выглядит следующим образом:

Аналогично подключаются и другие устройства Zigbee, указанные в списке поддерживаемых устройствВ итоге, решение поддерживает локальное подключение zigbee устройств от порядка 140 производителей без подключения к интернету и не подконтрольным облакам. В заключение нельзя не упомянуть об еще одной возможности интеграции Zigbee устройств в Home Assistant — ZHA. Это библиотека Python с открытым исходным кодом, реализующая стек Zigbee. На момент написания статьи библиотека поддерживает семейство стиков CC253х экспериментальном режиме. К достоинству этого решения можно отнести отсутствие моста zigbee-mqtt, но, судя по отзывам на форумам, решение еще относительно сырое. Планирую его попробовать на тестовом стенде.

Вот и пришел заказанный Raspberry Pi 4B, начинаю потихоньку разбираться и переносить все с Mi Home на Home Assistant.

Существует несколько вариантов установки Home Assistant:

  1. Установка HassOS;
  2. Установка Raspbian и разворачивание системы в Docker-контейнере.

Первый способ самый простой, а во втором мы, помимо HA, сможем использовать Raspberry Pi для чего-то еще. На данный момент я выбрал первый вариант установки и если он чем-то не устроит в будущем, то установлю все на Raspbian.

Как установить Home Assistant на Raspberry Pi 4

Каких-то сложностей в установке возникнуть не должно, инструкция есть на официальном сайте и она достаточно простая, но на всякий случай я распишу весь процесс.

  1. Первым делом скачиваем образ системы для вашего устройства с официального сайта и распаковываем его в любую папку.
  2. Далее скачиваем и устанавливаем программу balenaEtcher. Она используется для записи HassOS на MicroSD карту. Запускаем, выбираем наш образ, карту памяти, нажимаем Flash и ожидаем завершения записи.
  3. Подключаем Raspberry к сети с помощью Ethernet кабеля, вставляем карту памяти и подаем питание. Если же планируется использовать Wi-Fi подключение, то:
    1. Берем USB флешку и форматируем ее в FAT32, в качестве имени тома пишем CONFIG
    2. На флешке создаем папку network, а в папке – текстовый файл с именем my-network и удаляем его расширение (.txt).
    3. Далее открываем созданный файл с помощью NotePad++ или WordPad и прописываем туда следующий код:
  1. Вместо “Название-Wi-Fi” и “Пароль-Wi-Fi” прописываем данные вашего Wi-Fi соединения. Сохраняем.
  2. Вставляем в Raspberry MicroSD карту, подключаем USB флешку и подаем питание.
  3. Ждем около 20 минут и подключаемся с помощью браузера к Home Assistant по адресу homeassistant.local:8123
  1. Все готово. Если вы использовали USB флешку, то ее можно вытащить.

Первоначальная настройка

Home Assistant установлен, осталось только выполнить небольшую первоначальную настройку.

Первое, что предлагается сделать – создать аккаунт администратора системы. Вводим имя, логин и пароль, после чего нажимаем “Создать учетную запись”.

В следующем окне задаем имя дома, выбираем расположение с помощью кнопки “Заполнить” или вручную, часовой пояс и систему мер.

Далее будет предложено добавить обнаруженные совместимые устройства. Это можно сделать как сразу, так и отложить на потом. У меня определился шлюз и роутер, причем шлюз почему-то 2 раза, а вот умные лампы автоматически не обнаружились.

Это было последнее окно первоначальной настройки, так что нажимаем “готово” и попадаем на главную страницу умного дома в Home Assistant.

Ссылки на другие уроки по настройке Home Assistant.

Процесс установки Home Assistant на Raspberry Pi 3, а именно Hass.io — готового решения на базе ResinOS и Docker.

Нам нужно:

  • Raspberry Pi 3 model B +
  • Micro SD карта. Class 10. Лучше, чтобы объем был побольше.
  • Скачанный образ Hass.io для Raspberry Pi 3
  • Скачанный Etcher для записи образа на SD карту

Распаковываем образ, записываем на SD карточку, вставляем в малину и ждем. Пока ждем нам нужно узнать ip адрес нашей raspberry у роутера. У меня это статический 192.168.1.101:8123

Заходим по адресу 192.168.1.101:8123 и если ничего не происходит, значит Hassio настраивается для первого запуска. У меня даже пинга не было первые пару минут.

Как только появляется вот такая страничка:

image

Значит все уже почти настроено.

После завершения установки вы увидите пользовательский интерфейс Home Assistant:

image

Далее, первое расширение, которое мы установим это HASS Configurator. С его помощью мы можем редактировать конфигурацию Home Assistnt через веб-интерфейс.

Переходим в Hassio>Addons> ищем «Configurator» и жмем «Install». По завершении установки пользовательский интерфейс перейдет на страницу дополнительных сведений для конфигуратора. Здесь мы можем изменять наш Home Assistnt

Добавим конфигуратор в меню слева: В конфигураторе жмем на папку вверху, выбираем файл configuration.yaml и добавим в самый низ строчки: <?prettify linenums=true </p>

Теперь необходимо перезапустить Home Assistant. Но чтобы наш файл конфигурации не содержал ошибок, переходим на вкладку «Настройки» в меню слева, затем «General» и «Check Config»

Если ошибок нет, можно перезапустить Home Assistant. Кнопка чуть ниже. У меня перезапуск занимает около одной минуты

После перезапуска слева появится наша ссылка на конфигуратор.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий