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

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

Что можно сделать с помощью 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 ...":

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

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

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

Не беспокойтесь, мы будем трогать только те файлы, которые вам нужны 🙂 .
Откройте следующую директорию на вашем Raspberry Pi:
/etc/picockpit-client/apps/com.picockpit/picontrol/modules

Совет: вы также можете скопировать и вставить путь, который я указал выше, и нажать клавишу ввода для перехода в каталог.
Полезные советы Raspi Berry по Raspberry Pi
щелкните правой кнопкой мыши в пустой области рядом с существующими файлами и выберите "Новый файл...".

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


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


Итак, теперь вы видите новый файл, который мы только что создали. Однако в данный момент он пуст.
Давайте создадим две новые команды, одну для выключения службы 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, выбрав пункт Сохранить. (Или используйте Ctrl + S):

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

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


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

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

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

Запустите обратно 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? Комментируйте ниже, и я постараюсь помочь вам с вашим проектом 🙂 .

С большой властью приходит и большая ответственность - будьте внимательны к тому, кому вы предоставляете доступ к интерфейсу PiCockpit, храните пароль и ключи API в безопасности. Также не забывайте "защищать" опасные команды, как говорилось выше, чтобы они не были выполнены при случайном нажатии на них.
Полезные советы Raspi Berry по Raspberry Pi (и PiCockpit)
Здравствуйте!
Я хочу запустить следующую команду с помощью кнопки picontrol: cd /home/pi/Sensoren ; python3 SCRIPT.py
Я сделал все, как описано, и я могу нажать кнопку, но команда не выполняется, а также процесс не может быть остановлен.
Посоветуйте что-нибудь?
Спасибо
помните, что picontrol не является оболочкой - все команды выполняются независимо. вы должны использовать абсолютные пути (cd - change directory - бесполезен в контексте picontrol).
Запуск сценария python работает нормально, например:
"command": ["python3", "/home/pi/do_something.pyc"].
Но у меня возникают проблемы, если скрипт позже запускает приложение с графическим интерфейсом, например Chromium, или если Chromium запускается напрямую:
"command": ["chromium-browser"] приводит к "Unable to open X display. ".
Как запустить сценарии или приложения, для которых требуется дисплей X?
Подробнее об этом я писал здесь:
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.
Если у вас есть какие-либо успехи в этом, пожалуйста, поделитесь с нами.
Макс
Также смотрите эти две ссылки для получения дополнительной информации о переключателях командной строки для Chromium:
http://peter.sh/experiments/chromium-command-line-switches/
https://www.chromium.org/developers/how-tos/run-chromium-with-flags
Привет, только что создал команду, используя ваше программное обеспечение и инфраструктуру, и это потрясающе! Большое спасибо за это простое и легкое в использовании программное обеспечение. Я хотел бы получить небольшой совет, если вы свободны. В принципе, у меня есть Pi, настроенный на пробуждение моего ПК от сна, и ваше программное обеспечение, позволяющее через простой веб-интерфейс пробудить ПК с помощью команды etherwake, работает, однако я хотел бы получить более быстрый способ немедленного выполнения этой одной команды. Как вы думаете, есть ли способ сделать это возможным? В настоящее время, чтобы просто разбудить компьютер, мне нужно войти в систему, затем перейти к команде и выбрать кнопку во всплывающем окне, но если бы существовал api или ярлык для выполнения команды в один клик, это было бы полезно. В любом случае, спасибо вам большое за это. Очень здорово 🙂
Спасибо за предложение о функции, я добавил ее. Мы планируем когда-нибудь сделать приложение wake on lan, возможно, это будет немного удобнее.
Привет,
как можно сделать так, чтобы при нажатии на "Y" сценарий (Вы хотите продолжить? [Y/n]) он становился лучше?
Спасибо!
Здравствуйте, герр Хагер,
это очень интересный вопрос! 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!
Здравствуйте, можете ли вы использовать терминал RPi из picockpit?
пока нет, планируется в будущем релизе. (по состоянию на 19.4.2023)
Не все иконки с указанного сайта доступны/работают.
Как использовать более новые иконки, чем в версии 4.9.95, например, 'mdi-lamps-outline'?
мы находимся в процессе обновления кода фронтенда. Я передам ваш комментарий нашему разработчику, возможно, они смогут рассмотреть этот вопрос до следующего обновления, чтобы привести иконки к самой последней версии.
Здравствуйте, мы обновили фронтенд, а это значит, что теперь вы можете использовать все иконки вплоть до самой новой версии Material Design Icons. Мы также будем обновлять версию шрифта в будущем.
[...] НАЖМИТЕ ЗДЕСЬ: Узнайте, как можно задать собственные команды в PiControl. [...]
[...] Все административные инструменты, помогающие управлять Pi, работают. К ним относятся приложения GPIO, PiControl, PiDoctor и PiStats. Может быть, настроить новую 64-разрядную систему с помощью простого способа переключения SSH-сервера? Или запустить и остановить медиацентр, который вы установили? Отправить сообщение WoL? Ознакомиться с возможностями нашего программного обеспечения можно здесь. [...]
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\"}''
]
]
}
}
}
Привет,
Я пробую сделать первые шаги с помощью 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"].
},