Удаленное управление Raspberry Pi с помощью PiControl

Управление Raspberry Pi Титульное изображение

PiControl в PiCockpit - это мощная функция, позволяющая удаленно управлять Raspberry Pi из любого web-браузера, просто нажимая на кнопки.

Вы увидите состояние и вывод команды.

Новые команды могут быть добавлены простым редактированием JSON-файла на вашем Raspberry Pi.

В этой статье мы покажем вам, как это сделать, и дадим несколько идей, что можно построить с помощью PiControl!

Как это выглядит?

Вы заметите, что по умолчанию для Raspberry Pi включены и сразу доступны три команды: выключение, перезагрузка, обновление клиента.

Основные команды для удаленного управления Pi с помощью веб-интерфейса - из любого браузера
На этом снимке экрана PiCockpit PiControl показано, как выглядят команды

Что можно сделать с помощью Raspberry Pi и PiControl?

Вот некоторые вещи, которые вы можете построить с его помощью. Эти идеи потребуют некоторых исследований и, возможно, знаний кодирования и/или аппаратного обеспечения с вашей стороны; в любом случае, PiCockpit's PiControl поможет вам с простой в использовании частью вашего проекта с веб-интерфейсом и сэкономит вам кучу времени, чтобы заставить это работать через Интернет 🙂 .

  • сделать снимок с помощью модуля камеры Raspberry Pi и получить его по почте
  • запустите ваш сервер Raspberry Pi Minecraft и остановите его также
  • Воспроизведение видео с помощью omxplayer (вы также можете установить бесконечный цикл для видео и остановить цикл, если хотите переключиться на другое видео)
  • создать простое управление камерой для анимации с остановкой движения, используя модуль камеры Raspberry Pi
  • пробуждение локального компьютера в той же сети, что и ваш Raspberry Pi, с помощью функции Wake on LAN
  • воспроизводить звук (например, в качестве розыгрыша на Хэллоуин)
  • открыть дверь - например, гаражные ворота, подав соответствующие команды управления через Z-Wave и т.д.
  • запустите службу SSH на вашем Raspberry Pi и выключите ее - подход "постучать, чтобы открыть" для повышения безопасности
  • управление моделями поездов
  • включение и выключение реле (для этого потребуется две кнопки, или это можно сделать с помощью кнопки "тумблер")
  • управлять телевизором (переключать каналы, изменять громкость, ...) с помощью ИК-светодиода, например, для имитации активности во время путешествия
  • Запуск ракеты из веб-интерфейса

Мы опубликуем пошаговые инструкции для некоторых из этих проектов, чтобы у вас было простое руководство для начала работы с PiControl и удаленного управления вашим Raspberry Pi.

Как добавить дополнительные кнопки дистанционного управления для Raspberry Pi с помощью PiControl?

Вы можете легко и безопасно определять свои собственные команды, просто редактируя JSON-файлы на вашем Raspberry Pi. Это сделано из соображений безопасности - я мог бы написать PiCockpit таким образом, чтобы вы могли добавлять команды из веб-интерфейса, но если кто-то узнает ваш пароль PiCockpit, он сможет создать любую команду по своему усмотрению. Поэтому, пожалуйста, следуйте этим простым инструкциям, чтобы создать новый JSON-файл на вашем Pi.

Примечание: эти инструкции намеренно составлены таким образом, чтобы их могли выполнить пользователи, не имеющие опыта работы с командной строкой. Если вы знаете, как использовать командную строку, вам может показаться проще/быстрее просто создать файл и отредактировать его с помощью nano.

Сначала вам нужно открыть браузер файлов в режиме суперпользователя (этот шаг обеспечивает безопасность конфигурационных файлов PiCockpit PiControl от любого пользователя или приложения, желающего их подделать). Нажмите на меню Raspberry Pi OS Menu, а здесь выберите команду "Run ...":

Меню ОС Raspberry Pi, показывающее команду run.
Меню ОС Raspberry Pi. Команда "Выполнить" находится в самом низу

Запустите pcmanfm от имени root (sudo pcmanfm), набрав "sudo pcmanfm" (без кавычек) в открывшемся диалоговом окне и нажмите OK:

Запуск командного диалога на Raspberry Pi OS
Команда run, подготавливающая запуск pcmanfm от имени root

Откроется новое окно, в котором будет показано содержимое каталога /home/pi:

Снимок экрана pcmanfm с правами суперпользователя
pcmanfm, файловый менеджер, запущенный от имени суперпользователя

Примечание: вы должны увидеть этот значок под меню "Файл". Это означает, что вы используете pcmanfm как пользователь root, и поэтому должны быть особенно осторожны (поскольку root может редактировать / удалять / перемещать любые файлы! даже файлы, которые являются критическими для нормальной работы системы).

Индикатор корневого режима

Не беспокойтесь, мы будем трогать только те файлы, которые вам нужны 🙂 .

Откройте следующую директорию на вашем Raspberry Pi:

/etc/picockpit-client/apps/com.picockpit/picontrol/modules

Показывает каталог конфигурации для PiControl PiCockpit. Обратите внимание, если у вас свежая установка PiCockpit, вы увидите только core.json. Остальные модули были созданы мной для тестовых и демонстрационных целей (эксперименты с дистанционным управлением).

Совет: вы также можете скопировать и вставить путь, который я указал выше, и нажать клавишу ввода для перехода в каталог.

Полезные советы Raspi Berry по Raspberry Pi

щелкните правой кнопкой мыши в пустой области рядом с существующими файлами и выберите "Новый файл...".

Создание нового файла в Raspbian OS
Меню ОС Raspberry Pi для создания нового файла правой кнопкой мыши

Назовите новый файл ssh-server.json:

В диалоговом окне появится запрос на ввод имени нового файла.
создание нового файла от имени пользователя root с помощью pcmanfm
ssh-server.json теперь создан в этой папке.

Теперь необходимо щелкнуть правой кнопкой мыши на новом файле, чтобы вызвать контекстное меню. Выберите пункт "Geany":

Контекстное меню, показывающее редактор программиста Geany на Raspberry Pi OS
Geany - это редактор, который можно использовать для редактирования файла
Снимок экрана редактора программирования Geany
Geany показывает файл ssh-server.json - в нем пока ничего нет.

Итак, теперь вы видите новый файл, который мы только что создали. Однако в данный момент он пуст.

Давайте создадим две новые команды, одну для выключения службы SSH-сервера, а другую для ее запуска. Введите следующее в текстовое поле, которое покажет вам Geany:

{
  "name": "SSH commands",
  "icon": "mdi-ssh",
  "handle": "ssh",
  "description": "Control the SSH server",
  "commands": {
    "ssh-stop": {
      "name": "SSH Server off",
      "icon": "mdi-server-minus",
      "description": "Shuts the SSH service down",
      "confirm": true,
      "user": "root",
      "command": ["service", "ssh", "stop"]
    },
    "ssh-start": {
      "name": "SSH Server on",
      "icon": "mdi-server-plus",
      "description": "Starts the SSH service",
      "user": "root",
      "command": ["service", "ssh", "start"]
    }
  }
}

Добавление текста в Geany. Обратите внимание на скобки, структуру документа и слова должны быть написаны правильно, чтобы все получилось.

На этом этапе мы должны сохранить файл. Это можно сделать, например, из меню файла Geany, выбрав пункт Сохранить. (Или используйте Ctrl + S):

Меню файлов Geany

На данный момент наши новые команды еще не появились в веб-интерфейсе. Для этого необходимо перезапустить picockpit-client. Выберите команду "Выполнить ..." в меню Raspberry Pi OS и введите "sudo service picockpit-client restart" в окне, прежде чем нажать кнопку OK:

перезапуск службы picockpit-client с помощью диалогового окна запуска
перезапуск службы из диалогового окна "Выполнить

Теперь посмотрите на веб-интерфейс PiControl:

Снимок экрана веб-интерфейса PiControl для дистанционного управления
Появилась новая кнопка для быстрого перехода к новым командам SSH
Новые команды (кнопки), которые мы добавили в веб-интерфейс для выполнения удаленных команд на Raspi!

Если вы все ввели правильно, появятся новые команды. Если вы допустили ошибку в файле JSON (например, забыли фигурную скобку), PiCockpit просто проигнорирует "испорченный" файл.

Теперь вы можете попробовать выполнить команды. Если вы нажмете на кнопку SSH SERVER OFF, вас спросят, действительно ли вы хотите выполнить эту команду. Нажмите кнопку ssh server off и здесь, чтобы действительно выполнить команду (или нажмите кнопку cancel, если вы не хотите ее выполнять).

Защита от выполнения опасных команд при случайном нажатии на них

Итак, теперь PiCockpit выполнит команду, вы увидите информацию о ходе выполнения, а по окончании выполнения увидите следующий индикатор успеха:

PiControl успешно запустил "service ssh stop" на вашем Pi.

Если вы попытаетесь подключиться к вашему Pi сейчас с помощью SSH, соединение будет отклонено:

PuTTYNG показывает фатальную ошибку.
Ошибка сети: отказ в подключении

Запустите обратно SSH-сервер, нажав кнопку "SSH SERVER ON". Теперь соединение снова будет возможно.

Поздравляем! Вы только что создали свой собственный набор команд, которые можно запускать из веб-интерфейса.

Оставайтесь на странице во время выполнения команд - в настоящее время статус будет очищен, если вы перейдете на другую страницу. Чтобы определить, запущен ли SSH-сервер, вы можете создать тест PiDoctor - PiControl просто предназначен для выполнения удаленных действий на вашем Pi.

Полезные советы Raspi Berry по Raspberry Pi (и PiCockpit)

Не забывайте перезапускать picockpit-client при добавлении новых команд или обновлении команд. Вы также можете удалить команды, которые вам не нужны, например, если вы хотите удалить возможность удаленного выключения Raspberry Pi.

Объяснение синтаксиса удаленной команды

Этот файл конфигурирует новый модуль для PiControl. Он имеет синтаксис .JSON, пожалуйста, убедитесь, что вы открываете и заканчиваете фигурными скобками правильным образом, как представлено в моем примере.

Есть голова, которая настраивает сам модуль, и команды (в части "commands"). Они имеют несколько общих записей:

имя

Записи "имя" - это человекочитаемые имена, которые отображаются в веб-интерфейсе.

икона

Записи "icon" являются необязательными для украшения ваших кнопок и модуля. Это имена значков Material Design, например, "mdi-ssh".

Вы можете проверить полный список иконок Material Design здесь. Просто скопируйте имя значка (включая mdi- в начале).

Полезные советы Raspi Berry по Raspberry Pi (и PiCockpit)

описание

Записи "description" являются необязательными и позволяют добавить немного больше информации о команде или модуле.

ручка

Запись "handle" является явной для модуля и должна быть уникальной среди модулей. В случае с командами handle является неявным. "ssh-stop" и "ssh-start" - это две ручки, которые я использовал для команд в моем примере.

Вы можете выбрать что угодно в качестве ручки, если она не включает символы "/", "+", "$", "*". Я рекомендую придерживаться основных символов ASCII в нижнем регистре и использовать "-". Ручка требуется.

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

Полезные советы Raspi Berry по Raspberry Pi (и PiCockpit)

Команды поступают в "команды" блок, и имеют дополнительные возможности конфигурации:

подтвердить

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

пользователь

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

PiControl будет выполнять команды от имени пользователя "pi" по умолчанию. Вы также можете установить его для других пользователей с меньшими привилегиями, чем "pi“.

Если вы пытаетесь выполнять команды GPIO или воспроизводить видео с помощью omxplayer, вам, возможно, придется предоставить новому пользователю дополнительные возможности. Пользователь pi имеет эти необходимые привилегии по умолчанию. Обычно эти привилегии устанавливаются путем добавления пользователя в специальную группу.

Полезные советы Raspi Berry по Raspberry Pi (и PiCockpit)

команда

Это фактическая команда, которую необходимо выполнить на Raspberry Pi. Обратите внимание, что пробелы в команде нужно заменить на те, которые вы бы запустили в командной строке. Например,

запуск службы ssh

следует записать как:

["service", "ssh", "start"].

PiControl также поддерживает цепочку последовательности команд (например, обычную последовательность apt-get update, apt-get upgrade). Посмотрите в core.json пример того, как это делается.

Полезные советы Raspi Berry по Raspberry Pi (и PiCockpit)

Заключение: PiControl для ваших потребностей в дистанционном управлении Raspberry Pi

Используя PiCockpit и PiControl, очень просто добавить любую удаленную команду, которую вы хотите запустить на вашем Raspi, и иметь возможность управлять вашим Pi через веб-интерфейс. Для работы Raspberry Pi необходимо только подключение к Интернету. вам не обязательно находиться в одной сети.

Что бы вы хотели построить, используя PiCockpit и PiControl? Комментируйте ниже, и я постараюсь помочь вам с вашим проектом 🙂 .

Снимок экрана PiControl, показывающий кнопки для удаленного управления omxplayer и управления браузером Chrome с помощью веб-интерфейса
Этот скриншот PiControl показывает пользовательский модуль, который я настроил: управление Chrome (Chromium), запуск видео в цикле с помощью omxplayer, показ видео с YouTube на Pi

С большой властью приходит и большая ответственность - будьте внимательны к тому, кому вы предоставляете доступ к интерфейсу PiCockpit, храните пароль и ключи API в безопасности. Также не забывайте "защищать" опасные команды, как говорилось выше, чтобы они не были выполнены при случайном нажатии на них.

Полезные советы Raspi Berry по Raspberry Pi (и PiCockpit)

19 комментариев

  1. Max Май 12, 2021 в 5:30 пп

    Здравствуйте!
    Я хочу запустить следующую команду с помощью кнопки picontrol: cd /home/pi/Sensoren ; python3 SCRIPT.py
    Я сделал все, как описано, и я могу нажать кнопку, но команда не выполняется, а также процесс не может быть остановлен.
    Посоветуйте что-нибудь?
    Спасибо

    • raspi berry Июль 1, 2021 в 5:22 пп

      помните, что picontrol не является оболочкой - все команды выполняются независимо. вы должны использовать абсолютные пути (cd - change directory - бесполезен в контексте picontrol).

  2. Alex Август 16, 2021 в 6:34 пп

    Запуск сценария python работает нормально, например:
    "command": ["python3", "/home/pi/do_something.pyc"].
    Но у меня возникают проблемы, если скрипт позже запускает приложение с графическим интерфейсом, например Chromium, или если Chromium запускается напрямую:
    "command": ["chromium-browser"] приводит к "Unable to open X display. ".

    Как запустить сценарии или приложения, для которых требуется дисплей X?

    • PiCaptain Август 19, 2021 в 5:08 пп

      Подробнее об этом я писал здесь:
      https://pi3g.com/2020/05/19/chromium-exit-code-5/

      В основном, вам нужно указать приложению, какой дисплей X использовать.
      В случае с Chromium это делается с помощью флага

      chromium-browser -display=:0 -kiosk https://picockpit.com

      обратите внимание, -kiosk запускает браузер в режиме киоска. Просто добавляю это в качестве дополнительной информации.
      Примечание II: это два тире для параметров - WordPress меняет их на одно длинное тире, как я полагаю.

      Для других приложений вам потребуется проверка. Часто это делается путем установки переменной окружения.
      Возможно, для PiCockpit вам потребуется написать сценарий bash, который устанавливает переменную, а затем запускает приложение.
      Затем запустите сценарий bash.

      Если у вас есть какие-либо успехи в этом, пожалуйста, поделитесь с нами.

      Макс

    • PiCaptain Август 19, 2021 в 5:11 пп

      Также смотрите эти две ссылки для получения дополнительной информации о переключателях командной строки для Chromium:

      http://peter.sh/experiments/chromium-command-line-switches/
      https://www.chromium.org/developers/how-tos/run-chromium-with-flags

  3. Sri Октябрь 13, 2021 в 1:23 пп

    Привет, только что создал команду, используя ваше программное обеспечение и инфраструктуру, и это потрясающе! Большое спасибо за это простое и легкое в использовании программное обеспечение. Я хотел бы получить небольшой совет, если вы свободны. В принципе, у меня есть Pi, настроенный на пробуждение моего ПК от сна, и ваше программное обеспечение, позволяющее через простой веб-интерфейс пробудить ПК с помощью команды etherwake, работает, однако я хотел бы получить более быстрый способ немедленного выполнения этой одной команды. Как вы думаете, есть ли способ сделать это возможным? В настоящее время, чтобы просто разбудить компьютер, мне нужно войти в систему, затем перейти к команде и выбрать кнопку во всплывающем окне, но если бы существовал api или ярлык для выполнения команды в один клик, это было бы полезно. В любом случае, спасибо вам большое за это. Очень здорово 🙂

    • PiCaptain Октябрь 23, 2021 в 1:41 пп

      Спасибо за предложение о функции, я добавил ее. Мы планируем когда-нибудь сделать приложение wake on lan, возможно, это будет немного удобнее.

  4. Hager Март 31, 2022 в 12:26 пп

    Привет,
    как можно сделать так, чтобы при нажатии на "Y" сценарий (Вы хотите продолжить? [Y/n]) он становился лучше?

    Спасибо!

    • Hanno Апрель 20, 2022 в 7:30 дп

      Здравствуйте, герр Хагер,

      это очень интересный вопрос! Einige Kommandozeilen Programme wie zum etwa apt-get haben eine bereits integrierte -assume-yes Опция, которая позволяет использовать ее в ничем не задействованном модусе. Das wird etwa gerne in Skripten ausgenutzt, die ohne Bestätigungen per Hand laufen sollen. Альтернативой может служить классический Unix 'да' Programm mit Sie das selbe Ergebnis erzielen können. Beispielsweise mit:
      yes | sudo apt upgrade
      В зависимости от моего конкретного случая использования вы можете предложить вам один из этих двух способов решения проблемы. Ansonsten können Sie uns gerne noch einmal schreiben!

  5. Jaka Март 30, 2023 в 7:32 дп

    Здравствуйте, можете ли вы использовать терминал RPi из picockpit?

    • raspi berry Апрель 19, 2023 в 7:48 пп

      пока нет, планируется в будущем релизе. (по состоянию на 19.4.2023)

  6. DGDodo Апрель 25, 2023 в 10:09 пп

    Не все иконки с указанного сайта доступны/работают.
    Как использовать более новые иконки, чем в версии 4.9.95, например, 'mdi-lamps-outline'?

    • PiCaptain Май 10, 2023 в 12:33 пп

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

    • PiCaptain Май 19, 2023 в 11:54 дп

      Здравствуйте, мы обновили фронтенд, а это значит, что теперь вы можете использовать все иконки вплоть до самой новой версии Material Design Icons. Мы также будем обновлять версию шрифта в будущем.

  7. [...] НАЖМИТЕ ЗДЕСЬ: Узнайте, как можно задать собственные команды в PiControl. [...]

  8. Expanding PiCockpit to 64 Bit Pi OS Август 28, 2023 в 9:32 дп

    [...] Все административные инструменты, помогающие управлять Pi, работают. К ним относятся приложения GPIO, PiControl, PiDoctor и PiStats. Может быть, настроить новую 64-разрядную систему с помощью простого способа переключения SSH-сервера? Или запустить и остановить медиацентр, который вы установили? Отправить сообщение WoL? Ознакомиться с возможностями нашего программного обеспечения можно здесь. [...]

  9. chris l Сентябрь 4, 2023 в 11:11 дп

    apt-get -just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "ПАКЕТ: $1 УСТАНОВЛЕН: $2 ДОСТУПЕН: $3\n"}'

    Приведенная выше команда прекрасно работает с SSH, но PiControl испытывает проблемы и сообщает об этом:
    (100) E: Опция командной строки 'n' [из -ne] не понимается в сочетании с другими опциями.

    Я считаю, что я правильно экранировал свой JSON, поскольку отображаемая команда в PiControl - это та же самая команда, которую я экранировал и разделил пробелами на отдельные строки.

    JSON:
    {
    "name": "Команды обновления CISO",
    "icon": "mdi-update",
    "handle": "CISO",
    "описание": "CISO установить все обновления",
    "commands": {
    "ciso-updates": {
    "name": "CISO Updates",
    "icon": "mdi-server-minus",
    "description": "Обновляет список всех пакетов в репозитории и обновляет все установленные пакеты",
    "подтвердить": true,
    "user": "root",
    "command": [
    [
    "apt-get",
    "обновление"
    ],
    [
    "apt-get",
    "обновление",
    "-y"
    ],
    [
    "apt-get",
    "-just-print",
    "обновление",
    "2>&1",
    “|”,
    "perl",
    "-ne",
    "'if",
    “(/Inst\\s([\\w,\\-,\\d,\\.,~,:,\\+]+)\\s\\[([\\w,\\-,\\d,\\.,~,:,\\+]+)\\]\\s\\(([\\w,\\-,\\d,\\.,~,:,\\+]+)\\)?”,
    "/i)",
    "{print},
    "\"PACKAGE:",
    “$1”,
    "INSTALLED:",
    “$2”,
    "AVAILABLE:",
    "$3\\n\"}''
    ]
    ]
    }
    }
    }

  10. Bruchpilot Октябрь 8, 2023 в 12:28 пп

    Привет,
    Я пробую сделать первые шаги с помощью picockpit. но мне кажется, что это не тот случай, когда можно обойтись без Fernsteuerung zu öffnen. z.B. chromium-browser, dillo, geany
    При использовании Eingabe на терминале можно напрямую подключить Anwendungen

    "geany": {
    "name": "EditorG",
    "icon": "mdi-application-edit-outline",
    "description": "Текстовый редактор",
    "подтвердить": true,
    "notermination": true,
    "user": "root",
    "command": ["geany"].
    },

Комментировать