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

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

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

По умолчанию три команды включены и сразу доступны для вашего Raspi: ( выключение питания, перезагрузка, обновление клиента)

Основные команды для удаленного управления 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",
  "icon": "mdi-ssh",
  "handle": "ssh",
  "description": "Управление сервером SSH",
  "commands": {
    "ssh-stop": {
      "name": "SSH-сервер выключен",
      "icon": "mdi-server-minus",
      "description": "Выключает службу SSH",
      "подтвердить": true,
      "user": "root",
      "command": ["service", "ssh", "stop"].
    },
    "ssh-start": {
      "name": "SSH Server on",
      "icon": "mdi-server-plus",
      "description": "Запускает службу SSH",
      "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)

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

  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!

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