To launch the tests:
./gradlew clean test
This repository is for the Lumia Stream SDK releases and documentation.
Developers can use the Lumia Stream SDK to extend and control the Lumia Stream desktop app, enabling them to control smart lights, MIDI, DMX, OSC, OBS, TTS and so much more to create a custom and unique lighting experience.
- The official Lumia Stream SDK for Java
- Installation
- Run the SDK
- Sample
- Run a mock server
- Events
- Control
- Lumia-SDK-Java
lumiastream's Java sdk
can easily be installed from maven central:
'com.lumiastream:lumiastream-websocket-sdk:0.1.0-SNAPSHOT'
We've also included an example for using the SDK.
To run the example head to examples
and you will see the LumiaExample.java
file there which can be run using JBang.
Make sure you replace your token with the token that you will find in Lumia Stream's settings. Here is how to find your API token
After you have your token and replaced it inside the LumiaExample.java
, you can now run:
jbang LumiaExample.java
This will pull in all the dependencies and run the example.
The following snippet shows a valid sdk example
final Lumia client = Lumia.getInstance(new ConnectionOptions().setHost("127.0.0.1")
.setPort(39231).setName("lumia-java-sdk").setToken("insert-token"));
final LumiaPackParam lumiaPackParam = new LumiaPackParam();
lumiaPackParam.setValue(LumiaAlertValue.TWITCH_FOLLOWER.getValue());
final LumiaSendPack lumiaSendPack = new LumiaSendPack(LumiaCommandType.ALERT,lumiaPackParam);
client.connect(true).future().onSuccess(connectedStatus -> {
System.out.println("WebSocket closed status: " + connectedStatus);
client.send(lumiaSendPack, data -> System.out.println("SEND: \n" + data.toJsonObject()));
}).onFailure(failureEvent -> failureEvent.printStackTrace());
Included in the SDK is a mock server that you can run to test things out without needing Lumia Stream
To run the server head to examples and you will see the test-server.js
file there.
Now run:
npm install
node test-server.js
This will send a few test events from the client as well as listen in on commands received from the client
Events are broadcast by Lumia Stream to each connected client when an action occurs inside Lumia Stream.
These events range from the app state being changed, raw chat messages, chat commands, alerts and much more.
An event message will contain at least the following base fields:
type
LumiaEventTypes: the type of event.origin
EventOrigins (optional): where the event originated from. i.e: twitch for exampledata
ILumiaEventStateBody | ILumiaEventChatCommandBody | ILumiaEventChatBody | ILumiaEventAlertBody | ILumiaEventStateBody (optional): the body of the event
Additional fields may be present in the event message depending on the event type.
States indicate the current status the Lumia Stream is in
Example Response:
{
"origin": null,
"type": "states",
"data": { "on": 1, "streamMode": 1, "fuze": 0 }
}
Lumia Stream has been prompted to trigger a command
Example Response:
{
"origin": "twitch",
"type": "command",
"data": { "username": "lumiastream", "command": "red" },
"raw": { "username": "lumiastream", "command": "red" }
}
A raw chat message that has been sent
Example Response (From Twitch):
{
"type": "chat",
"data": {
"channel": "#lumiastream",
"message": "Wow",
"username": "lumiastream",
"userId": "163366031",
"userColor": "#8A2BE2",
"userColorRgb": "138,43,226",
"platform": "twitch",
"badgesRaw": "broadcaster/1,subscriber/0",
"hasEmotes": false,
"emotes": "",
"rawMessageWithoutEmotes": "Wow",
"emotesRaw": "",
"user": {
"badge-info": [],
"badges": [],
"client-nonce": "",
"color": "#8A2BE2",
"display-name": "lumiastream",
"emotes": null,
"first-msg": false,
"flags": null,
"id": "188ebc3d-e6e2-4b36-a125-0c4f0c0f54fd",
"mod": false,
"room-id": "163366031",
"subscriber": true,
"turbo": false,
"user-id": "163366031",
"user-type": null,
"emotes-raw": null,
"badge-info-raw": "subscriber/21",
"badges-raw": "broadcaster/1,subscriber/0",
"username": "lumiastream",
"message-type": "chat",
"isSelf": false,
"vip": false,
"tier3": true,
"tier2": true,
"tier1": true,
"follower": false
}
}
}
A raw alert has been sent
Example Response (From Twitch Follow):
{
"origin": "twitch",
"type": "alert",
"event": "twitch-follower",
"data": { "userId": "12345", "username": "lumiastream" },
"raw": { "userId": "12345", "username": "lumiastream" }
}
You can control Lumia Stream as well through the SDK in a variety of ways.
You will have the ability to send a command, an alert, a chat bot message, tts, a direct color, as well as even triggering certain lights.
There are a few reasons why you may want to receive settings from Lumia Stream. These settings will include all of the lights that are connected to Lumia, the current state of the app, whether the user is premium or not and more
Example:
client.connect(true).future().onSuccess(connectedStatus -> {
System.out.println("WebSocket closed status: " + connectedStatus);
client.getInfo(data -> System.out.println("INFO: " + data.toJsonObject()));
}).onFailure(failureEvent -> failureEvent.printStackTrace());
The simplest way to use Lumia is first setting up a command inside of Lumia Stream and then recalling it with the SDK
Example:
final LumiaPackParam lumiaPackParam = new LumiaPackParam();
lumiaPackParam.setValue(LumiaAlertValue.TWITCH_FOLLOWER.getValue());
client.connect(true).future().onSuccess(connectedStatus -> {
System.out.println("WebSocket closed status: " + connectedStatus);
client.send(lumiaSendPack, data -> System.out.println("SEND: \n" + data.toJsonObject()));
}).onFailure(failureEvent -> failureEvent.printStackTrace());
Sending a color gives you the ability to set your lights to whatever color you choose along with the brightness and the duration. The duration is so that Lumia can revert back to defaul after the determined time
Example:
client.connect(true).future().onSuccess(connectedStatus -> {
System.out.println("WebSocket closed status: " + connectedStatus);
final MessageOptions messageOptions = new MessageOptions().setDuration(Duration.ofMillis(1000));
client.sendColor(new Rgb(255, 0, 0), 60, messageOptions, data ->
System.out.println("COLOR: " + data.toJsonObject()));
}).onFailure(failureEvent -> failureEvent.printStackTrace());
Using the same sendColor method you can also choose which lights receive the color change
Example:
client.connect(true).future().onSuccess(connectedStatus -> {
System.out.println("WebSocket closed status: " + connectedStatus);
final MessageOptions messageOptions = new MessageOptions().setDuration(Duration.ofMillis(1000));
client.sendColor(new Rgb(255, 0, 0), 60, messageOptions, data ->
System.out.println("COLOR: " + data.toJsonObject()));
}).onFailure(failureEvent -> failureEvent.printStackTrace());
Sending brightness alone will keep all of your lights at their current state while only updating the brightness value
Example:
client.sendBrightness(100, new MessageOptions(),
data -> System.out.println("BRIGHT: " + data.toJsonObject()));
Sending TTS messages will give you the ability to use Lumia's TTS by just caling the sendTts method
Example:
client.sendTts("This SDK is the best", 100, "",
data -> System.out.println("TTS: " + data.toJsonObject()));
Sending a Chat bot messages will allow you to send messages to chat through Lumia's Chat bot
Example:
client.sendChatBot(Platform.TWITCH, "This SDK is the best",
data -> System.out.println("CHAT: " + data.toJsonObject()));
Lumia Stream has been prompted to trigger a command
Example Response:
{
"origin": "twitch",
"type": "command",
"data": { "username": "lumiastream", "command": "red" },
"raw": { "username": "lumiastream", "command": "red" }
}
A raw chat message that has been sent
Example Response (From Twitch):
{
"type": "chat",
"data": {
"channel": "#lumiastream",
"message": "Wow",
"username": "lumiastream",
"userId": "163366031",
"userColor": "#8A2BE2",
"userColorRgb": "138,43,226",
"platform": "twitch",
"badgesRaw": "broadcaster/1,subscriber/0",
"hasEmotes": false,
"emotes": "",
"rawMessageWithoutEmotes": "Wow",
"emotesRaw": "",
"user": {
"badge-info": [],
"badges": [],
"client-nonce": "",
"color": "#8A2BE2",
"display-name": "lumiastream",
"emotes": null,
"first-msg": false,
"flags": null,
"id": "188ebc3d-e6e2-4b36-a125-0c4f0c0f54fd",
"mod": false,
"room-id": "163366031",
"subscriber": true,
"turbo": false,
"user-id": "163366031",
"user-type": null,
"emotes-raw": null,
"badge-info-raw": "subscriber/21",
"badges-raw": "broadcaster/1,subscriber/0",
"username": "lumiastream",
"message-type": "chat",
"isSelf": false,
"vip": false,
"tier3": true,
"tier2": true,
"tier1": true,
"follower": false
}
}
}
Send a mock alert
Example:
client.sendAlert(LumiaAlertValue.TWITCH_FOLLOWER,
data -> System.out.println("ALERT: " + data.toJsonObject()));
- Download the latest Lumia Stream SDK release
- Read the full API reference
- Run a mock server
- Browse some examples
Reach out to us on Discord to show off what you're working on, or to just lounge around and speak about ideas Link