IP Camera Skill
Control IP cameras via RTSP (snapshots, recording) and ONVIF (PTZ, presets, discovery).
Tested with TP-Link Tapo/Vigi. Works with Hikvision, Dahua, Reolink, Amcrest, Axis, and other ONVIF Profile S/T cameras.
Setup
bash skills/ipcam/install.sh
Then either discover cameras automatically or configure manually:
# Auto-discover and add
ptz.py discover --add
# Or edit config
nano ~/.config/ipcam/config.json
Config Format
{
"default": "front-door",
"cameras": {
"front-door": {
"ip": "192.168.1.100",
"username": "admin",
"password": "secret",
"rtsp_port": 554,
"onvif_port": 2020,
"rtsp_main_path": "stream1",
"rtsp_sub_path": "stream2"
}
}
}
onvif_port: 2020 (TP-Link), 80 (Hikvision/Dahua), 8000, 8080rtsp_main_path/rtsp_sub_path: auto-detect withptz.py stream-uri --save- Env overrides:
CAM_IP,CAM_USER,CAM_PASS,CAM_RTSP_PORT,CAM_ONVIF_PORT
Usage
RTSP (camera.sh)
camera.sh snapshot # capture frame
camera.sh --cam cam2 snapshot /tmp/cam.jpg # specific camera
camera.sh record 15 # record 15s clip
camera.sh stream-url sub # print sub-stream URL
camera.sh info # test connectivity
camera.sh list-cameras # list configured cameras
PTZ (ptz.py)
ptz.py status # current position
ptz.py move left # pan left (speed 0.5, 0.5s)
ptz.py move zoomin 0.8 1.0 # zoom in, speed 0.8, 1s
ptz.py goto 0.5 -0.2 0.0 # absolute pan/tilt/zoom
ptz.py home # home position
ptz.py stop # stop movement
ptz.py preset list # list presets
ptz.py preset goto 1 # go to preset 1
ptz.py preset set 2 "Door" # save current pos as preset
Discovery & Stream URI
ptz.py discover # scan network for ONVIF cameras
ptz.py discover --add # scan and add to config
ptz.py stream-uri # query RTSP paths from ONVIF
ptz.py stream-uri --save # save paths to config
Multi-camera: use --cam <name> with any command.
Directions
left, right, up, down, zoomin, zoomout, upleft, upright, downleft, downright
Troubleshooting
- RTSP fails: Check IP/port/firewall. Use
ptz.py stream-urito verify paths. Camera may limit concurrent RTSP connections (try closing other viewers). - ONVIF fails: Verify ONVIF port and that ONVIF is enabled in camera web UI. Try common ports: 2020, 80, 8000, 8080.
- No cameras found: Ensure same subnet, ONVIF enabled, UDP multicast not blocked.
- PTZ not working: Not all cameras support PTZ. Check ONVIF Profile S support.
- Auth error: Check username/password. Special characters are URL-encoded automatically.