Set of Python Libraries to interact with LED Controller that uses Siwat's Light Control Protocol and Siwat's Remote Light Control Protocol
The Serial Line client works by utilizing multiple microcontroller unit connected using a line topology. This allows the entire network to be controlled using only one serial port on the host machine. The wiring for this method required 2 serial port on the controller one for in and one for out. for further information, please refer to the protocol specification.
Import and Initialization
from siwat_light_control_protocol.siwat_light_control_protocol import siwat_light_control_protocol
SERIAL_PORT = "COM3" # Change if neccessary
LED_MAP = [60,30,60]
leds = slcp(SERIAL_PORT,LED_MAP)
The Serial Star client works by connecting multiple controller to the same host computer directly to utilize multiple controller to create one continuous strand of light.
Import and Initialization
from siwat_light_control_protocol.siwat_light_control_protocol_multi_serial import siwat_light_control_protocol_multi_serial as slcp
SERIAL_PORTS = ["COM3","COM4","COM5"] # Change if neccessary
LED_MAP = [60,30,60]
leds = slcp(SERIAL_PORTS,LED_MAP)
The Serial remote client works on top of the MQTT protocol, by using JSON packet to transfer data between SLCP Remote Client and SLCP Server.
Import and Initialization
from siwat_remote_light_control_protocol_client.siwat_remote_light_control_protocol_client import siwat_remote_light_control_protocol_client as srlcp
MQTT_SERVER = "172.16.0.2"
MQTT_PORT = 1883
MQTT_USE_AUTH = True
LIGHT_ADDRESS = "/ledstrip"
MQTT_USERNAME = "username"
MQTT_PASSWORD = "password"
leds = srlcp(mqtt_server=MQTT_SERVER, mqtt_port=MQTT_PORT, light_address=LIGHT_ADDRESS,mqtt_use_auth=MQTT_USE_AUTH, mqtt_username=MQTT_USERNAME,mqtt_password=MQTT_PASSWORD)
Note
- Lights have to but put in Programming Mode (Program Effect) to allow programming from a remote client, this can be done by calling enter_programming_mode()
- mqtt_username and mqtt_password field are not required if mqtt_use_auth is False
- show() | Update the led with the programmed value
- set_led_at(index,r,g,b) | Program an led at index index with color r,g,b
- turn_off() | Turn off all of the leds
- rainbow() | Activate the controller's built-in rainbow effect (Not available on Remote Client as it desync the state)
- fill_led_with_color(r,g,b) | Set all of the led to color r,g,b
- fill_segment_with_color(segment_start,segment_stop,r,g,b) | Set all of the light, starting from segment_start to segment_stop to r,g,b
- enter_programming_mode() | Engage the Programming Functionality of the Controller (Only available on Remote Client)
Note
- 0<=r,g,b<=255
SLCP Server expose the control interface of the controller to MQTT. The sever can be started by executing
python -m siwat_remote_light_control_protocol_server
This must be done in a directory with config.json in it. config.json is a configuration file with the following structure
{
"MQTT_SERVER": "",
"MQTT_USE_AUTH": false,
"MQTT_USERNAME": "",
"MQTT_PASSWORD": "",
"MQTT_BASE_TOPIC": "/ledstrip/fixture1",
"FRAME_TIME": 0.1,
"SERIAL_PORTS_MAP": [
"COM1"
],
"LED_MAP": [
60
]
}
Note MQTT_BASE_TOPIC is the same as LIGHT_ADDRESS
TOPIC | PAYLOAD | Description
- MQTT_BASE_TOPIC/control/state | "on"/"off" | set the state of the led
- MQTT_BASE_TOPIC/control/brightness | 0-255 | set the brightness of the led
- MQTT_BASE_TOPIC/control/color | r,g,b | set the color of the light to r,g,b where 0<=r,g,b<=255
- MQTT_BASE_TOPIC/control/effect | effect_name | set the effect of the led
- MQTT_BASE_TOPIC/control/exit | any | exit the program
- MQTT_BASE_TOPIC/control/requeststate | resend all report
- MQTT_BASE_TOPIC/report/state | "on"/"off" | current state of the led
- MQTT_BASE_TOPIC/report/brightness | 0-255 | current brightness of the led
- MQTT_BASE_TOPIC/report/color | r,g,b | current color of the led in term of r,g,b where 0<=r,g,b<=255
- MQTT_BASE_TOPIC/report/effect | effect_name | current effect of the led
- MQTT_BASE_TOPIC/report/effectlist | effect1,effect2,effect3,... | comma-seperated list of effects
- MQTT_BASE_TOPIC/report/num_leds | num_leds | integer representing how much led chips the server are conencted to
MQTT_BASE_TOPIC/control/program | payload Where payload is a json array containing the following object
[index,[r,g,b]]
For Example, [0,[255,255,255]] will set the led at index 0 to r,g,b = 255,255,255
The payload that set the light at index 0,1,2 to red,green,blue respectively is then
[
[0,[255,0,0]]
[1,[0,255,0]]
[2,[0,0,255]]
]