Sort2Light · HTTP API

Sort2Light API

Put Wall LED controller for EasyStorage WMS — HTTP/1.1 over Ethernet

Base URL: http://<device-ip>
Configuration panel: http://<device-ip>/ui;
Protocol: HTTP/1.1
Transport: Wired Ethernet (LAN)
FW: v33+
Overview
Sort2Light is a Put Wall controller used at the packing/sorting station. The operator has a cart with already-picked products (multi-line/multi-order batch). They scan each product — Sort2Light lights up the correct bin/shelf where to place it. When the last product for a bin arrives, the device signals to take all the products from bin/shelf and pack the order.

All requests are plain HTTP GET (or POST for config). No authentication required. The device IP is assigned by DHCP — visible on the device LCD. Responses are text/plain "OK" or application/json depending on endpoint. Timeout recommendation: 3 seconds per request.
Primary — Scan Event
GET /onscan?ProductNo=&TotalQuantity=&status=&storage= Main WMS trigger
Parameters
Parameter Type Required Description
ProductNo integer required How many products have already been placed into this bin/shelf (including current scan)
TotalQuantity integer required Total number of products that need to be placed into this bin/shelf to complete the order
status string required Order status: Picked, Verified, Cancelled
storage string optional Bin/location barcode (e.g. D-01). Omit or send null if no bin assigned.
LED Action Logic
ConditionLED ActionColor (default)
status = Cancelled cancelled — order cancelled, return products 🔴 Red blink → red
bin assigned + ProductNo < TotalQuantity location — put product into this bin ⚪ White blink → white
bin assigned + ProductNo = TotalQuantity lastproduct — last item for this bin, take & pack 🔵 Blue blink → blue
no bin + TotalQuantity = 1 single — single-item order, no bin needed 🟢 Green blink → green
no bin + ProductNo = TotalQuantity (multi) single_multipcs — last item, multi-qty, no bin 🟣 Navy blink → navy
no bin + ProductNo < TotalQuantity nolocation — no bin available yet 🟡 Yellow blink → yellow
Examples
# Put down to location D-01, 1st of 10 items → LOCATION (white)
GET http://192.168.1.100/onscan?ProductNo=1&TotalQuantity=10&status=Picked&storage=D-01
# Put down to location D-01, last item → LAST PRODUCT (blue)
GET http://192.168.1.100/onscan?ProductNo=10&TotalQuantity=10&status=Picked&storage=D-01
# Cancelled order → CANCELLED (red)
GET http://192.168.1.100/onscan?ProductNo=2&TotalQuantity=5&status=Cancelled&storage=A-01
# Single item, no location → SINGLE (green)
GET http://192.168.1.100/onscan?ProductNo=1&TotalQuantity=1&status=Picked
# Multiple items, no location avaiable, not last → NO LOCATION (yellow)
GET http://192.168.1.100/onscan?ProductNo=1&TotalQuantity=5&status=Picked&storage=null
Response
HTTP/1.1 200 OK
Content-Type: text/plain

OK
Note: The device clears all active LEDs before starting the new action. When lastproduct is triggered, the operator should take all items from the bin and pack the order — the bin is then free for the next order. Colors and blink patterns are configurable per action via POST /config or the web UI at /ui.
LED Control
GET /on?ids=&color= Turn on specific LEDs
ParameterTypeRequiredDescription
idsstringrequiredComma-separated LED indices, e.g. 1,2,3
colorstringoptionalColor name (default: white). See color list below.
GET http://192.168.1.100/on?ids=1,2,3&color=green
GET /off?ids= Turn off specific LEDs
ParameterTypeRequiredDescription
idsstringrequiredComma-separated LED indices
GET http://192.168.1.100/off?ids=1,2,3
GET /blink?ids=&c1=&c2=&c_end=&temp=&count= Blink specific LEDs
ParameterTypeRequiredDescription
idsstringrequiredComma-separated LED indices
c1stringoptionalBlink color 1 (default: white)
c2stringoptionalBlink color 2 (default: off)
c_endstringoptionalFinal color after blink ends (default: black/off)
tempintegeroptionalBlink speed in ms (default: 50)
countintegeroptionalNumber of blinks (default: 3)
GET http://192.168.1.100/blink?ids=5,6&c1=red&c2=black&c_end=red&temp=100&count=5
GET /stop Turn off all LEDs
GET http://192.168.1.100/stop
GET /find Run LED identification animation

Runs a scanning animation across all LEDs — useful for identifying which physical strip is connected. Same as pressing Button A on the device.

GET http://192.168.1.100/find
Status & Info
GET /status Device status JSON
Response
{
  "ip": "192.168.1.100",
  "leds": 28,
  "activeBlink": 3,
  "last": "LOCATION 4,5"
}
GET /version Firmware version
{
  "version": 33,
  "name": "Sort2Light v33"
}
Configuration
GET /ui Web configuration panel

Opens the built-in HTML configuration panel. Open in any browser on the same network. Allows setting LED count, controller name, storage→LED mappings, and action colors/timing.

# Open in browser: http://192.168.1.100/ui
GET /config Get current config JSON
{
  "ledcount": 28,
  "controller": "Kontr_A",
  "storages": { "D-01": "4,5", "D-02": "6,7,8" },
  "system": { "cancelled": "1", ... },
  "actions": { "location": { "c1":"white", "c2":"black", "c_end":"white", "tempo":75, "count":8 }, ... }
}
POST /config Save config JSON

POST body: raw JSON (same structure as GET /config response). Saved to persistent flash memory.

POST http://192.168.1.100/config Content-Type: application/json { "ledcount": 28, "controller": "Kontr_A", "storages": { "D-01": "4,5" }, ... }
GET /setleds?count= Set LED count
ParameterTypeRequiredDescription
countintegerrequiredNumber of LEDs on the strip (1–500)
GET http://192.168.1.100/setleds?count=30
GET /reset Clear all LEDs (same as /stop)
GET http://192.168.1.100/reset
GET /checkupdate Trigger OTA firmware check

Triggers an OTA firmware update check in the background. Returns immediately.

{"status":"checking"}
Available Colors
Color names are case-insensitive. Use in color=, c1=, c2=, c_end= parameters.
white red green blue yellow cyan purple orange black pink magenta lime teal navy aqua gold salmon violet turquoise coral sky indigo
Android Integration Notes
Important: The device communicates over wired LAN (ethernet) and WiFi (WLAN). The Android device must be on the same network (e.g. via the warehouse switch/router). Use standard HTTP GET requests — no special headers or authentication required. Recommended timeout: 3000ms.

Typical Put Wall flow: operator scans a product barcode → Android app calls /onscan → Sort2Light lights up the correct bin → operator places product → repeat.
// Android — Kotlin example (OkHttp) val url = "http://192.168.1.100/onscan?ProductNo=1&TotalQuantity=10&status=Picked&storage=D-01" val request = Request.Builder().url(url).build() val response = OkHttpClient().newCall(request).execute() // response.body?.string() == "OK"
Discovery: Device IP is visible on the LCD screen. Optionally use GET /status to verify connectivity before sending scan events. Device hostname: S2L-[chip-id].local (mDNS).