.agents/skills/pi/SKILL.md

117 lines
2.6 KiB
Markdown

---
name: pi
description: Interact with the raspberry pi sandbox - capture images, analyze scenes, transfer files, run commands. Use when working with the pi, camera, or servos.
user_invocable: true
arg_hint: "capture | analyze | look | send <file> | get <file> | exec <cmd>"
---
# /pi
Raspberry Pi 3B+ sandbox toolkit. The pi is at 10.0.0.11 (user: pi).
SSH key auth is set up - use regular ssh/scp/rsync via Bash, no need for ssh-mcp.
## connection
```bash
PI="pi@10.0.0.11"
ssh $PI '<command>'
scp $PI:<remote> <local>
scp <local> $PI:<remote>
rsync -avz $PI:<remote_dir>/ <local_dir>/
```
## hardware
- USB camera at /dev/video0
- Pan servo: GPIO 17, Tilt servo: GPIO 18, Trigger: GPIO 27
- Servos NOT currently wired up
- pigpiod must be started before servo use: `sudo systemctl start pigpiod`
## commands
### /pi capture [width] [height]
Take a photo and save locally.
```bash
ssh pi@10.0.0.11 'python3 ~/pi-sandbox/tools/capture.py 640 480' | base64 -d > ~/pi-sandbox/latest.jpg
```
Or for full resolution, capture on pi then scp:
```bash
ssh pi@10.0.0.11 'python3 -c "
import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640); cap.set(4, 480)
_, f = cap.read()
cap.release()
cv2.imwrite(\"/tmp/cap.jpg\", f)
"'
scp pi@10.0.0.11:/tmp/cap.jpg ~/pi-sandbox/latest.jpg
```
Then use Read tool on ~/pi-sandbox/latest.jpg to view it.
### /pi analyze
Quick scene analysis - brightness, contrast, edge density, saturation.
```bash
ssh pi@10.0.0.11 'python3 ~/pi-sandbox/tools/analyze.py 640'
```
### /pi look
Capture + analyze + view. Combines capture and analyze.
### /pi send <local_file> <remote_dest>
Send a file TO the pi:
```bash
scp <local_file> pi@10.0.0.11:<remote_dest>
```
Or for directories:
```bash
rsync -avz <local_dir>/ pi@10.0.0.11:<remote_dir>/
```
### /pi get <remote_file> [local_dest]
Get a file FROM the pi:
```bash
scp pi@10.0.0.11:<remote_file> <local_dest>
```
### /pi exec <command>
Run something on the pi:
```bash
ssh pi@10.0.0.11 '<command>'
```
## helper scripts on pi
- `~/pi-sandbox/tools/capture.py [w] [h]` - capture photo, output base64
- `~/pi-sandbox/tools/analyze.py [w]` - capture + opencv stats (text output)
- `~/pi-sandbox/sentry.py` - motion detection, saves to ~/pi-sandbox/captures/
## constraints
- camera runs ~4fps at 640x480 on the pi 3b+
- opencv 3.2 (uses 3-value findContours return)
- tflite-runtime 2.5.0 available
## project files
- pi: `~/pi-sandbox/` - main workspace
- pi: `~/pi-sandbox/tools/` - helper scripts
- pi: `~/pi-sandbox/captures/` - motion detection captures
- pi: `~/cat-deterrent/` - old cat deterrent code (has detector.py, servo.py)
- local: `~/pi-sandbox/` - local workspace + received files