Deze handleiding gaat uit van Linux. Dit is geschreven op Linux Mint 22.2.

Om ontwikkeling van apps voorspoedig te laten lopen kan je configuraties toevoegen in PyCharm om de app snel uit te voeren en toch vanuit een IDE te werken. Dit betekent ook dat je de terminal output mooi in de IDE ziet en niet in een los terminal venster. Ik raad iedereen die een app wilt ontwikkelen voor de farm-ng amiga om deze handleiding eenmalig te volgen.

Op je eigen computer

Om de layout te testen van je app hoef je niet af te reizen naar de robot, want je kan je app lokaal ook runnen!

Rechtsboven in PyCharm kan je configuraties aanpassen:

Voeg een shell script toe:

En selecteer dan het entry.sh bash script:

En zo simpel is het! 😄

Op de farm-ng amiga

Dit vereist een bestaande verbinding met de robot!

Let op: dit hoofdstuk gaat uit dat je op het zelfde netwerk zit als de amiga, of dat je via Tailscale een verbinding hebt. Dat betekent dat je dus moet verbinden met het lokale ip adres of met het ip dat je in je tailscale status ziet. Bij het schrijven maakte ik gebruik van Tailscale. Om dit zelf op te zetten refereer ik naar Tailscale opzetten. Ook hoor je al met SSH verbonden te zijn geweest met de robot, anders werkt dit niet. Er wordt namelijk geen wachtwoord gebruikt in de configuratie.

Het is natuurlijk superhandig als we ook op de robot zelf kunnen testen! Het is kost ontzettend veel tijd om elke keer handmatig bestanden over te zetten, en dan wat bash scriptjes uit te voeren. Daarnaast wil je geen externe terminal gebruiken, maar natuurlijk de ingebouwde terminal in PyCharm. Daarom heb ik dit proces geautomatiseerd voor je. 😙

Om te kunnen zien wat je aan het doen bent raad ik je aan dit alleen te doen als je fysiek bij de robot bent, of als je een VNC verbinding hebt. Dit is zo opgezet en instructies staan op deze pagina. Dit is natuurlijk ook een vereiste, omdat je anders geen input kan uitoefenen op de GUI van je applicatie.

Verouderde naamgeving

De variabelen in dit script hebben allemaal “sftp” in de naam. Dit komt omdat er in een oudere versie gebruik gemaakt werd van lftp i.p.v. rsync. Dit mag je negeren en gewoon invullen.

Om te beginnen moet je een nieuw bestand in je project folder aanmaken genaamd install_remote.sh. Vervolgens zit je daar deze inhoud in:

#!/bin/bash
 
# Arg check if they did not read the docs :'(
if [ "$#" -ne 4 ]; then
    echo "Usage: $0 <SFTP_IP> <SFTP_USER> <DEST_PATH> <SOURCE_FOLDER>"
    exit 1
fi
 
# Variables from args
SFTP_IP="$1"
SFTP_USER="$2"
DEST_PATH="$3"
SOURCE_FOLDER="$4"
 
# Create dest folder on sftp endpoint
init_folder() {
  local dest_path="$1"
 
  ssh "$SFTP_USER@$SFTP_IP" <<EOF
    if [ -d "$dest_path" ]; then
        echo "App folder already exists. Will only upload 'newer' files."
    else
        echo "Creating app folder."
    fi
    mkdir -p "$dest_path"
    echo "Created app folder."
EOF
}
 
# Is installed on Amiga by default; only check locally.
install_rsync() {
  if dpkg -s rsync &>/dev/null; then
    echo 'rsync is installed'
  else
    echo 'rsync not installed. Will install.'
    sudo apt-get install rsync
  fi
}
 
upload_using_rsync() {
    echo 'Attempting upload to server using rsync.'
    local source_folder="$1"
    local dest_path="$2"
 
    rsync -avz --update "$source_folder/" "$SFTP_USER@$SFTP_IP:$dest_path"
}
 
# Function to execute install.sh on the SFTP server
execute_install_script() {
    echo 'Attempting install.sh execution.'
    local dest_path="$1"
 
    ssh "$SFTP_USER@$SFTP_IP" <<EOF
    cd "$dest_path" || { echo "Directory not found: $dest_path"; exit 1; }
    bash install.sh
EOF
}
 
execute_entry_script() {
    echo 'Attempting entry.sh execution.'
    local dest_path="$1"
 
    ssh "$SFTP_USER@$SFTP_IP" <<EOF
    cd "$dest_path" || { echo "Directory not found: $dest_path"; exit 1; }
    bash entry.sh
EOF
}
 
install_rsync
init_folder "$DEST_PATH"
upload_using_rsync "$SOURCE_FOLDER" "$DEST_PATH"
 
# If you want to force execute with a broken manifest you can uncomment the execute_entry_script and comment out the execute_install_script.
 
execute_install_script "$DEST_PATH"
#execute_entry_script "$DEST_PATH"

Top! Nu kan je net zoals bij de lokale entry.sh bovenaan de pagina een shell script toevoegen aan de configuratie. Echter is het nu belangrijk dat je onder Script Options de volgende waardes noteert:

<SFTP_IP> <SFTP_USER> <DEST_PATH> <SOURCE_FOLDER>

In mijn geval:

100.111.xxx.xxx farm-ng-user-xxx /mnt/managed_home/farm-ng-user-xxx/amiga-app-kivy-test /home/lincoln/Documents/CodingProjects/amiga-app-kivy-test

Dat ziet er zo uit:

Nu kan je de terminal gebruiken binnen PyCharm. 😄

Ik zie mijn app niet!

Oei! Je hebt je app geinstalleerd maar je ziet niks in de launcher op het dashboard. Wat nu? Kijk hier.