No description
  • Python 53%
  • JavaScript 47%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-07 12:14:46 +00:00
.gitignore Initial commit 2026-08-07 12:14:46 +00:00
package-lock.json Initial commit 2026-08-07 12:14:46 +00:00
package.json Initial commit 2026-08-07 12:14:46 +00:00
README.md Initial commit 2026-08-07 12:14:46 +00:00
technisat.js Initial commit 2026-08-07 12:14:46 +00:00
technisat.py Initial commit 2026-08-07 12:14:46 +00:00

TechniSat Digit ISIO S2 Controller

Node.js/Express HTTP API that controls the TechniSat Digit ISIO S2 via its UDP port 8090 protocol (TechniSat Connect / ConexusTS protocol). Channel switching and remote control button presses are delegated to a Python script.

Protocol

The receiver accepts XML packets over UDP port 8090. Example:

<rcuButtonRequest code="1" state="pressed"/>
<rcuButtonRequest code="1" state="released"/>

Channel switching works by sending digit key presses followed by OK — the same as using the physical remote.

Setup

npm install

Python 3 is required for technisat.py (no extra packages needed — uses stdlib only).

Running

# With a fixed device IP
TECHNISAT_IP=192.168.1.100 node server.js

# On a custom port
PORT=8080 TECHNISAT_IP=192.168.1.100 node server.js

API

All endpoints accept an optional ?ip=<device_ip> query parameter to override the default TECHNISAT_IP.

Method Path Description
GET / List endpoints
GET /channel/:number Switch to channel
POST /channel Switch to channel ({ "channel": 3 })
GET /key/:name Send a key press
GET /discover Broadcast device discovery
GET /info Request device information
GET /keepalive Send keep-alive
POST /text Send text input ({ "text": "hello", "enter": true })

Examples

# Switch to channel 3
curl http://localhost:3000/channel/3

# Press the RED button
curl http://localhost:3000/key/RED

# Switch channel with explicit IP
curl "http://localhost:3000/channel/7?ip=192.168.1.100"

# Volume up
curl http://localhost:3000/key/VOLUP

Available key names

0-9, OK, UP, DOWN, LEFT, RIGHT, MENU, BACK, EXIT, RED, GREEN, YELLOW, BLUE, EPG, INFO, STANDBY, MUTE, VOLUP, VOLDOWN, CHANUP, CHANDOWN, PLAYPAUSE, REWIND, STOP, WIND, RECORD, SUBTITLE, AUDIO, TEXT, ZOOM, OPTIONS, HOME, FAVORITES, ARCHIVE, MEDIA

Python script (standalone)

# Switch to channel 5
python3 technisat.py 192.168.1.100 channel 5

# Press the OK button
python3 technisat.py 192.168.1.100 key OK

# Discover devices on the network
python3 technisat.py 255.255.255.255 discover

# Get device info
python3 technisat.py 192.168.1.100 info

Proxmox deployment

Run on any LXC/VM that can reach the receiver's network. The server binds to 0.0.0.0 so it's reachable from other VMs or the host.

Using systemd:

[Unit]
Description=TechniSat Controller
After=network.target

[Service]
WorkingDirectory=/opt/technisat-controller
ExecStart=/usr/bin/node server.js
Environment=TECHNISAT_IP=192.168.1.100
Environment=PORT=3000
Restart=always

[Install]
WantedBy=multi-user.target