Zdalne sterowanie Raspberry Pi za pomocą PiControl

PiCockpit PiControl to potężna funkcja, która pozwala zdalnie sterować Raspberry Pi z dowolnej przeglądarki internetowej, po prostu klikając przyciski.
Zobaczysz stan i dane wyjściowe polecenia.
Nowe polecenia można dodawać po prostu edytując plik JSON na Raspberry Pi.
W tym artykule pokażemy, jak to zrobić i podamy kilka pomysłów na to, co można zbudować za pomocą PiControl!
Jak to wygląda?
Zauważysz, że domyślnie trzy polecenia są dołączone i natychmiast dostępne dla twojego Raspberry Pi: wyłącz, zrestartuj, zaktualizuj klienta.

Co mogę zrobić z Raspberry Pi i PiControl?
Oto kilka rzeczy, które można z nim zbudować. Te pomysły będą wymagały pewnych badań i być może wiedzy z zakresu kodowania i/lub sprzętu z Twojej strony; W każdym razie PiCockpit's PiControl pomoże Ci w łatwej w użyciu części projektu dotyczącej interfejsu sieciowego i zaoszczędzi Ci mnóstwo czasu, aby to wszystko działało przez Internet 🙂
- zrobić zdjęcie za pomocą modułu kamery Raspberry Pi i wysłać je pocztą
- uruchomić serwer Minecraft Raspberry Pi i zatrzymać go również
- Odtwarzaj wideo za pomocą omxplayer (możesz również ustawić nieskończoną pętlę dla wideo i zatrzymać pętlę wideo, jeśli chcesz przełączyć się na inne wideo)
- stworzyć łatwe sterowanie kamerą do animacji poklatkowej, używając modułu kamery Raspberry Pi
- budzenie lokalnego komputera w tej samej sieci co Raspberry Pi za pomocą funkcji Wake on LAN
- odtwarzać dźwięk (na przykład jako psikus na Halloween)
- otworzyć bramę - np. garażową, wydając odpowiednie polecenia sterujące poprzez Z-Wave, itp.
- uruchomić usługę SSH na Raspberry Pi i zamknąć ją - podejście "puknij, aby otworzyć" dla lepszego bezpieczeństwa
- sterowanie modelami pociągów
- włączanie i wyłączanie relais (wymaga dwóch przycisków, lub może być wykonane za pomocą przycisku "toggle")
- sterowanie telewizorem (przełączanie kanałów, zmiana głośności, ...) za pomocą diody IR LED, na przykład w celu symulowania aktywności podczas podróży
- Uruchom rakietę z interfejsu sieciowego
Opublikujemy instrukcje krok po kroku dla niektórych z tych pomysłów na projekty, aby ułatwić rozpoczęcie pracy z PiControl i zdalne sterowanie Raspberry Pi.
Jak mogę dodać dodatkowe przyciski zdalnego sterowania dla Raspberry Pi za pomocą PiControl?
Możesz łatwo i bezpiecznie zdefiniować własne komendy, po prostu edytując pliki JSON na swoim Raspberry Pi. Jest to zrobione ze względów bezpieczeństwa - mogłem napisać PiCockpit w sposób, który pozwalałby na dodawanie komend z poziomu interfejsu WWW, ale jeśli ktoś znałby hasło do PiCockpit, mógłby stworzyć dowolną komendę. Dlatego proszę postępować zgodnie z tymi prostymi instrukcjami, aby utworzyć nowy plik JSON na swoim Pi.
Uwaga: te instrukcje są celowo utrzymane w sposób, który użytkownicy, którzy nie mają doświadczenia z wierszem poleceń mogą podążać. Jeśli wiesz jak używać wiersza poleceń, może okazać się, że łatwiej / szybciej jest po prostu utworzyć plik i edytować go za pomocą nano.
Najpierw należy otworzyć przeglądarkę plików w trybie superużytkownika (ten krok zabezpiecza pliki konfiguracyjne PiCockpit PiControl przed jakimkolwiek użytkownikiem lub aplikacją, która chciałaby je zmanipulować). Kliknij na Raspberry Pi OS Menu, a następnie kliknij polecenie "Run ...":

Uruchom pcmanfm jako root (sudo pcmanfm) wpisując "sudo pcmanfm" (bez cudzysłowów) w oknie dialogowym, które się otworzy, i kliknięcie przycisku OK:

Otworzy się nowe okno z zawartością katalogu /home/pi:

Uwaga: powinieneś zobaczyć tę ikonę, tuż pod menu "Plik". Wskazuje ona, że używasz pcmanfm jako użytkownik root, i dlatego powinieneś być bardzo ostrożny (ponieważ root może edytować / usuwać / przenosić każdy plik! nawet pliki, które są krytyczne dla normalnego działania systemu).

Bez obaw, dotkniemy tu tylko tych plików, których potrzebujesz 🙂
Otwórz następujący katalog na swoim Raspberry Pi:
/etc/picockpit-client/apps/com.picockpit/picontrol/modules

Wskazówka: możesz również skopiować i wkleić ścieżkę, którą podałem powyżej, i nacisnąć klawisz enter, aby przejść do katalogu.
Pomocne wskazówki Raspi Berry dotyczące Raspberry Pi
Kliknij prawym przyciskiem myszy na pustym obszarze obok istniejących plików i wybierz "Nowy plik...".

Nazwij nowy plik ssh-server.json:


Teraz musisz kliknąć prawym przyciskiem myszy nowy plik, aby wyświetlić menu kontekstowe. Wybierz "Geany":


Możesz teraz zobaczyć nowy plik, który właśnie utworzyliśmy. W tej chwili jest on jednak pusty.
Utwórzmy dwa nowe polecenia, jedno do wyłączenia usługi serwera SSH, a drugie do jej uruchomienia. W polu tekstowym wyświetlonym przez Geany wpisz następujące informacje:
{
"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"]
}
}
}

W tym momencie powinniśmy zapisać plik. Można to zrobić z menu Plik Geany, na przykład wybierając Zapisz. (Lub użyj Ctrl + S):

W tym momencie nasze nowe polecenia nie pojawiły się jeszcze w interfejsie internetowym. W tym momencie konieczne będzie ponowne uruchomienie picockpit-client. Kliknij polecenie "Uruchom ..." w menu Raspberry Pi OS i wpisz "sudo service picockpit-client restart" w oknie przed kliknięciem na OK:

Teraz spójrz na interfejs sieciowy PiControl:


Jeśli wszystko wpisałeś poprawnie, nowe komendy pojawią się. Jeśli popełniłeś błąd w swoim pliku JSON (np. zapomniałeś o nawiasie klamrowym), PiCockpit po prostu zignoruje "zepsuty" plik.
Możesz teraz wypróbować polecenia. Jeśli klikniesz na przycisk SSH SERVER OFF, zostaniesz zapytany, czy naprawdę chcesz uruchomić polecenie. Kliknij na ssh server off również tutaj, aby faktycznie uruchomić polecenie (lub kliknij cancel, jeśli nie chcesz).

PiCockpit uruchomi teraz polecenie, zobaczysz informacje o postępie - a po zakończeniu działania zobaczysz następujący wskaźnik sukcesu:

Jeśli spróbujesz teraz połączyć się z Pi za pomocą SSH, połączenie zostanie odrzucone:

Uruchom z powrotem serwer SSH klikając "SSH SERVER ON". Teraz połączenie będzie znów możliwe.
Gratulacje! Właśnie utworzyłeś swój własny zestaw poleceń, które możesz uruchamiać z poziomu interfejsu WWW.
Pozostań na stronie podczas wykonywania poleceń - status zostanie wyczyszczony, jeśli przejdziesz dalej. Aby określić, czy serwer SSH jest uruchomiony, można zbudować test PiDoctor - PiControl jest po prostu do wykonywania zdalnych działań na Pi.
Pomocne wskazówki Raspi Berry dotyczące Raspberry Pi (i PiCockpit)
Pamiętaj, aby zrestartować picockpit-client po dodaniu nowych komend lub aktualizacji komend. Możesz również usunąć polecenia, których nie chcesz mieć, na przykład jeśli chcesz usunąć możliwość wyłączenia Raspberry Pi zdalnie.
Objaśnienie składni polecenia zdalnego
Plik ten konfiguruje nowy moduł dla PiControl. Ma on składnię .JSON, proszę upewnić się, że otwierasz i kończysz nawiasami klamrowymi w poprawny sposób, tak jak jest to przedstawione w moim przykładzie.
Jest tam head, który konfiguruje sam moduł, oraz komendy (w części "commands"). Mają one kilka wspólnych wpisów:
nazwa
Wpisy "name" są nazwami czytelnymi dla człowieka, które są wyświetlane w interfejsie sieciowym.
ikona
Wpisy "icon" są opcjonalne, aby udekorować swoje przyciski i moduł. Są to nazwy ikon Material Design, na przykład "mdi-ssh".
Możesz sprawdzić pełna lista ikon Material Design tutaj. Po prostu skopiuj nazwę ikony (łącznie z mdi- na początku).
Pomocne wskazówki Raspi Berry dotyczące Raspberry Pi (i PiCockpit)
opis
Wpisy "description" są opcjonalne i pozwalają dodać nieco więcej informacji do polecenia lub modułu.
uchwyt
Wpis "handle" jest jawny dla modułu i musi być unikalny wśród modułów. W przypadku komend, uchwyt jest niejawny. "ssh-stop" i "ssh-start" to dwa uchwyty, których użyłem dla poleceń w moim przykładzie.
Możesz wybrać cokolwiek jako uchwyt, pod warunkiem, że nie zawiera znaków "/", "+", "$", "*". Zalecam trzymanie się podstawowych znaków ASCII pisanych małą literą, oraz używanie "-". Uchwyt to. wymagane.
Twój plik może, nawiasem mówiąc, mieć inną nazwę niż uchwyt - zachęcam do używania co najmniej pokrewnych nazw dla nazwy pliku i uchwytu, dzięki czemu łatwo zidentyfikujesz plik modułu .JSON na swoim dysku twardym.
Pomocne wskazówki Raspi Berry dotyczące Raspberry Pi (i PiCockpit)
Polecenia trafiają do "polecenia", a także posiadają dodatkowe możliwości konfiguracji:
potwierdź
Jeśli "potwierdzić" i ustawiona na true, interfejs PiControl wyświetli okno dialogowe potwierdzenia przed faktycznym uruchomieniem polecenia. Jest to przydatne, aby upewnić się, że "niebezpieczne" polecenia nie zostaną wykonane przez przypadkowe dotknięcie lub kliknięcie.
użytkownik
Jeśli "użytkownik" jest obecne, polecenie zostanie uruchomione jako ten konkretny użytkownik (jako źródło w naszym przykładzie, aby upewnić się, że mamy wystarczające uprawnienia).
PiControl będzie uruchamiał komendy jako użytkownik "pi" domyślnie. Możesz również ustawić ją na innych użytkowników z mniejszymi uprawnieniami niż "pi“.
Jeśli próbujesz uruchamiać komendy GPIO lub odtwarzać filmy za pomocą omxplayera, być może będziesz musiał dać swojemu nowemu użytkownikowi dodatkowe możliwości. Użytkownik pi domyślnie posiada te wymagane uprawnienia. Zazwyczaj te uprawnienia są ustawiane poprzez dodanie użytkownika do specjalnej grupy.
Pomocne wskazówki Raspi Berry dotyczące Raspberry Pi (i PiCockpit)
polecenie
To jest rzeczywiste polecenie, które należy uruchomić na Raspberry Pi. Zwróć uwagę, że musisz zastąpić spacje w poleceniu w porównaniu do tego, jak uruchomiłbyś je w wierszu poleceń. Na przykład,
service ssh start
powinno być zapisane jako:
["service", "ssh", "start"].
PiControl obsługuje również łańcuchowanie sekwencji poleceń (np. zwykła sekwencja apt-get update, apt-get upgrade). Sprawdź core.json, aby zobaczyć przykład, jak to jest zrobione.
Pomocne wskazówki Raspi Berry dotyczące Raspberry Pi (i PiCockpit)
Wnioski: PiControl dla Twoich potrzeb w zakresie zdalnego sterowania Raspberry Pi
Używając PiCockpit i PiControl, naprawdę łatwo jest dodać dowolne zdalne polecenie, które chcesz uruchomić na swoim Raspi, i być w stanie kontrolować Pi z interfejsu internetowego. Aby to zadziałało, Raspberry Pi potrzebuje tylko połączenia z Internetem - nie musisz być w tej samej sieci.
Co chciałbyś zbudować używając PiCockpit i PiControl? Skomentuj poniżej, a ja postaram się pomóc Ci w realizacji Twojego projektu 🙂

Z wielką mocą wiąże się wielka odpowiedzialność - uważaj na to, komu dajesz dostęp do interfejsu PiCockpit, chroń swoje hasło i klucze API. Upewnij się również, że "chronisz" niebezpieczne polecenia, jak omówiono powyżej, aby nie zostały wykonane przez przypadkowe kliknięcie.
Pomocne wskazówki Raspi Berry dotyczące Raspberry Pi (i PiCockpit)
witam!
Chcę uruchomić następującą komendę z przyciskiem picontrol: cd /home/pi/Sensoren ; python3 SCRIPT.py
Zrobiłem to zgodnie z opisem i mogę nacisnąć przycisk, ale komenda nie jest wykonywana, a także proces nie może zostać zatrzymany.
Jakieś rady?
Dzięki
należy pamiętać, że picontrol nie jest powłoką - wszystkie polecenia wykonywane są niezależnie. należy używać ścieżek bezwzględnych (cd - change directory - jest bezużyteczne w kontekście picontrol).
Uruchomienie skryptu python działa dobrze, przykład:
"command": ["python3", "/home/pi/do_something.pyc"].
Ale mam problemy, jeśli skrypt później uruchamia aplikację z GUI jak Chromium lub jeśli Chromium jest uruchamiany bezpośrednio:
"command": ["chromium-browser"] skutkuje "Unable to open X display. ".
Jak uruchomić skrypty lub aplikacje, które wymagają wyświetlacza X?
Pisałem o tym nieco więcej tutaj:
https://pi3g.com/2020/05/19/chromium-exit-code-5/
Zasadniczo musisz powiedzieć aplikacji, który wyświetlacz X ma być używany.
W przypadku Chromium odbywa się to za pomocą flagi
chromium-browser -display=:0 -kiosk https://picockpit.com
Uwaga, -kiosk uruchamia przeglądarkę w trybie kiosku. Po prostu wrzucam to jako dodatkową informację.
Uwaga II: to są dwa myślniki dla parametrów - WordPress zmienia je na pojedynczy długi myślnik, jak sądzę.
W przypadku innych aplikacji trzeba będzie sprawdzić. Często odbywa się to poprzez ustawienie zmiennej środowiskowej.
Ewentualnie dla PiCockpit trzeba by napisać skrypt bash, który ustawia zmienną i uruchamia aplikację.
A następnie uruchom skrypt bash.
Jeśli masz jakieś sukcesy z tym, proszę podzielić się z nami.
Max
Zobacz również te dwa linki, aby dowiedzieć się więcej o przełącznikach wiersza poleceń dla Chromium:
http://peter.sh/experiments/chromium-command-line-switches/
https://www.chromium.org/developers/how-tos/run-chromium-with-flags
Cześć, właśnie skonfigurowałem polecenie przy użyciu waszego oprogramowania i infrastruktury i jest super! Dziękuję bardzo za to proste i łatwe w użyciu oprogramowanie. Chciałem trochę porady, jeśli jesteś wolny. Zasadniczo, mam mój Pi skonfigurować obudzić mój pc z uśpienia, a twoje oprogramowanie pozwalające prosty interfejs sieciowy, aby obudzić pc z polecenia etherwake działa, jednak chciałbym szybszy sposób wykonywania tego jednego polecenia natychmiast. Czy uważasz, że jest jakiś sposób, aby to możliwe? Obecnie, aby po prostu obudzić mój komputer, muszę się zalogować, a następnie przejść do mojego polecenia, a następnie wybrać przycisk w wyskakującym okienku, ale jeśli było api lub skrót do w zasadzie uruchomienia polecenia jednym kliknięciem, to byłoby pomocne. Tak czy inaczej, dziękuję bardzo za to. Bardzo niesamowite 🙂
Dzięki za sugestię funkcji, już ją dodałem. Planujemy zrobić wake on lan app jakiś czas, może to może być trochę bardziej wygodne.
Hallo,
w jaki sposób można ich zum Beispiel Abfragen wie (Do you want to continue? [Y/n]) über das Script mit "Y" bestätigen?
Vielen Dank!
Hallo Herr Hager,
das ist eine sehr gute Frage! Niektóre programy komandosów, jak np. apt-get, mają już zintegrowane -assume-yes Opcja, która pozwala na pracę w trybie nieinteraktywnym. Jest to szczególnie przydatne w skryptach, które nie wymagają obsługi ręcznej. Alternatywą jest klasyczny Unix 'tak' Programm mit Sie das selbe Ergebnis erzielen können. Beispielsweise mit:
yes | sudo apt upgrade
Niezależnie od konkretnego przypadku zastosowania, każdy z tych dwóch sposobów może zapewnić dobre rozwiązanie. W takim razie możesz nas jeszcze raz zaprosić do współpracy!
Witam, czy można użyć terminala RPi z picockpitu?
jeszcze nie, planowane w przyszłym wydaniu. (stan na 19.4.2023)
Nie wszystkie ikony z wymienionej strony są dostępne / działają.
Jak używać nowszych ikon niż wersja 4.9.95, na przykład 'mdi-lamps-outline' ?
jesteśmy w trakcie aktualizacji kodu frontend. Podzielę się twoim komentarzem z naszym deweloperem, być może będą mogli przyjrzeć się temu przed następną aktualizacją, aby doprowadzić ikony do najnowszej wersji.
Cześć, zaktualizowaliśmy frontend, co oznacza, że teraz możesz używać wszystkich ikon do najnowszej wersji Material Design Icons. W przyszłości będziemy również aktualizować wersję czcionki.
[...] KLIKNIJ TUTAJ: Dowiedz się jak możesz skonfigurować własne komendy w PiControl. [...]
[...] Wszystkie narzędzia administracyjne, które pomagają kontrolować Pi, działają. Obejmuje to aplikacje GPIO, PiControl, PiDoctor i PiStats. Może skonfigurować nową 64-bitową instalację z łatwym sposobem przełączania serwera SSH? Albo uruchamianie i zatrzymywanie skonfigurowanego centrum multimedialnego? Wysyłanie wiadomości WoL? Dobre wprowadzenie do możliwości oferowanych przez nasze oprogramowanie można znaleźć tutaj. [...]
apt-get -just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PAKIET: $1 ZAINSTALOWANY: $2 DOSTĘPNY: $3\n"}
Powyższe polecenie działa dobrze z SSH, ale PiControl ma problem i zgłasza:
(100) E: Opcja wiersza poleceń "n" [z -ne] nie jest rozumiana w połączeniu z innymi opcjami.
Myślę, że poprawnie uciekłem z mojego JSON, ponieważ wyświetlana komenda w PiControl jest taka sama, jak ta, którą uciekłem i rozdzieliłem spacje na oddzielne ciągi.
JSON:
{
"name": "Polecenia aktualizacji CISO",
"icon": "mdi-update",
"uchwyt": "CISO",
"description": "CISO zainstaluj wszystkie aktualizacje",
"polecenia": {
"ciso-updates": {
"name": "CISO Updates",
"icon": "mdi-server-minus",
"description": "Aktualizuje listę wszystkich pakietów w repozytorium i aktualizuje wszystkie zainstalowane pakiety",
"Potwierdź": prawda,
"user": "root",
"polecenie": [
[
"apt-get",
"aktualizacja"
],
[
"apt-get",
"aktualizacja",
"-y"
],
[
"apt-get",
"-just-print",
"aktualizacja",
"2>&1",
“|”,
"perl",
"-ne",
"'if",
“(/Inst\\s([\\w,\\-,\\d,\\.,~,:,\\+]+)\\s\\[([\\w,\\-,\\d,\\.,~,:,\\+]+)\\]\\s\\(([\\w,\\-,\\d,\\.,~,:,\\+]+)\\)?”,
"/i)",
"{print",
"PAKIET:",
“$1”,
"INSTALLED:",
“$2”,
"DOSTĘPNE:",
"$3\\n\"}"
]
]
}
}
}
Hallo,
ich versuche die Ersten Schritte mit picockpit. leider gelingt es mir keine Anwendung über die Fernsteuerung zuöffnen. z.B. chromium-browser, dillo, geany
Po wejściu do terminala można bezpośrednio uruchomić aplikacje
"geany": {
"name": "EditorG",
"icon": "mdi-application-edit-outline",
"description": "Edytor tekstu",
"Potwierdź": prawda,
"notermination": true,
"user": "root",
"polecenie": ["geany"].
},