Skip to main content

Standalone projects

A standalone project runs on the AT1000, with no computer needed at run time. Each project has an isolated Linux environment called a container. Your application files live in the container's /workspace folder.

Use the AT1000-Interface desktop utility to create, edit, and manage projects. If you have not created one yet, follow Create a standalone project.

Running and stopping a project​

  1. Open AT1000-Interface and select your device.
  2. Open the Projects page.
  3. Choose how to start your project:
    • Run (normal) starts the application. Use this to run your project without an editing session.
    • Run (development) starts the container with SSH access for editing, but does not start the application automatically. Select Open in VS Code to edit /workspace and run your application from the terminal.

Starting another project stops the running project first. To run a project without a computer, select it in the front-panel project menu with the rotary knob, then press the knob.

To stop a project, select Stop in AT1000-Interface. The interface shows Stopping… and disables project actions until the stop finishes. Wait for the final state before taking another action.

From any front-panel screen, hold the knob for more than five seconds to stop the project and return to the menu. Stopping can take up to three additional seconds while the application cleans up. The menu returns only after the project has stopped successfully.

A user-requested stop leaves the project in the idle state, even if the device must force it to stop. An application that exits with an error shows error instead. Stopping an already-failed project does not clear its error state.

Handle shutdown in your application​

When a project stops, the AT1000 sends SIGINT, an interrupt signal, to the application's processes. They have three seconds to clean up before the device sends SIGKILL to force them to stop.

Handle SIGINT in your application so it can save essential results and release resources. In Python, use KeyboardInterrupt handling and finally blocks as appropriate. Keep cleanup within the three-second limit.

The same shutdown process applies when you select Stop, switch projects, or hold the front-panel knob to regain control. It also applies when a remote application takes control of the AT1000. The remote application receives control only after the project has stopped successfully.

USB devices in a project​

Standalone projects can access external USB devices connected to the AT1000, including devices plugged in after the project starts. Use the USB device's Linux, Python, or Node.js library inside the project.

The USB device needs Linux kernel support on the AT1000 and the appropriate libraries installed in the project. If your device needs an additional kernel driver, email Ikalogic support to request its installation on the AT1000. This access is local to the project: it does not expose the USB device to your computer over the network.

To turn USB port power on or off, use tester.power.usb(). Accessing a USB device and controlling its power are separate operations.

Projects created without USB support​

Updating firmware does not update existing containers

USB access is configured when a project container is created or imported. Updating firmware or restarting a container created without USB support does not enable it.

To add USB access while preserving your existing project:

  1. Create a replacement project with a different name. Keep the original project until you have verified the replacement.
  2. Copy your application files from the original project's /workspace folder into the replacement.
  3. Reinstall the dependencies your application needs.
  4. Run the replacement and check that the application can discover and communicate with the USB device.

Open network ports​

A network port identifies a service, such as a web dashboard, running in your project. To reach it from another computer, add a port mapping from the AT1000 to the container. Host is the port on the AT1000. Container is the port where your application accepts connections. For example, map host port 8000 to container port 5000 for a project web server. Then open http://AT1032S-<serial-number>.local:8000/ in your browser, replacing <serial-number> with your device's serial number.

  1. Open the Projects page in AT1000-Interface and select Ports for your project.
  2. Select Add port mapping.
  3. Enter the Host and Container ports, then choose Protocol (tcp for an HTTP server, or udp for a UDP service).
  4. Select Add mapping, then Save changes.

Changes apply immediately to a running project, or when it next starts. Use an available host port from 1 to 65535, excluding 22 and 8080, which the AT1000 reserves. Configure your service to listen on the container's network interface (for example, 0.0.0.0). A service that listens only on localhost cannot accept these connections.

Connect to the project over SSH​

Once the project is running in development mode, its container accepts SSH connections at AT1032S-<serial-number>.local. Connect on port 2222 with the dev user. Replace <serial-number> with your device's serial number, then run:

ssh -p 2222 dev@AT1032S-<serial-number>.local

View logs and troubleshoot​

The application does not start or shows an error​

Select View logs for the project in AT1000-Interface to read its application output. Check for startup errors, such as missing dependencies or application files.

If you selected Run (development), the application does not start automatically. Run it from the SSH terminal while editing, or select Run (normal) to use the project's normal startup command.

A network service in the project is unreachable​

Select Ports to check the project's port mappings. Check that a mapping exists for the service's port, and use the corresponding AT1000 host port when connecting.

Check View logs to see whether the application started its service successfully. A port-publication failure does not undo a successful project start or stop, so check the project state and port settings separately.