Added Hyperion support on UDP port 19446
This commit is contained in:
parent
3afb499930
commit
ce1ba3bc2c
@ -33,7 +33,7 @@
|
||||
#include "WS2812FX.h"
|
||||
|
||||
//version in format yymmddb (b = daily build)
|
||||
#define VERSION 1805061
|
||||
#define VERSION 1805181
|
||||
const String versionString = "0.6.5";
|
||||
|
||||
//AP and OTA default passwords (change them!)
|
||||
@ -92,7 +92,7 @@ bool receiveNotifications = true, receiveNotificationBrightness = true, receiveN
|
||||
byte briMultiplier = 100;
|
||||
byte nightlightDelayMins = 60;
|
||||
bool nightlightFade = true;
|
||||
uint16_t udpPort = 21324;
|
||||
uint16_t udpPort = 21324, udpRgbPort = 19446;
|
||||
byte effectDefault = 0;
|
||||
byte effectSpeedDefault = 75;
|
||||
byte effectIntensityDefault = 128;
|
||||
@ -158,20 +158,20 @@ byte notificationSentCallMode = 0;
|
||||
bool notificationTwoRequired = false;
|
||||
bool nightlightActive = false;
|
||||
bool nightlightActiveOld = false;
|
||||
uint32_t nightlightDelayMs;
|
||||
byte briNlT;
|
||||
uint32_t nightlightDelayMs = 10;
|
||||
byte briNlT = 0;
|
||||
byte effectCurrent = 0;
|
||||
byte effectSpeed = 75;
|
||||
byte effectIntensity = 128;
|
||||
bool onlyAP = false;
|
||||
bool udpConnected = false;
|
||||
bool udpConnected = false, udpRgbConnected = false;
|
||||
String cssCol[]={"","","","","",""};
|
||||
String cssFont="Verdana";
|
||||
String cssColorString="";
|
||||
//NTP stuff
|
||||
bool ntpConnected = false;
|
||||
byte currentTimezone = 0;
|
||||
time_t local;
|
||||
time_t local = 0;
|
||||
int utcOffsetSecs = 0;
|
||||
|
||||
//hue
|
||||
@ -217,10 +217,10 @@ bool presetApplyBri = true, presetApplyCol = true, presetApplyFx = true;
|
||||
uint32_t arlsTimeoutMillis = 2500;
|
||||
bool arlsTimeout = false;
|
||||
bool receiveDirect = true, enableRealtimeUI = false;
|
||||
unsigned long arlsTimeoutTime;
|
||||
unsigned long arlsTimeoutTime = 0;
|
||||
byte auxTime = 0;
|
||||
unsigned long auxStartTime;
|
||||
bool auxActive, auxActiveBefore;
|
||||
unsigned long auxStartTime = 0;
|
||||
bool auxActive = false, auxActiveBefore = false;
|
||||
bool showWelcomePage = false;
|
||||
|
||||
bool useGammaCorrectionBri = false;
|
||||
@ -245,7 +245,7 @@ ESP8266WebServer server(80);
|
||||
#endif
|
||||
HTTPClient hueClient;
|
||||
ESP8266HTTPUpdateServer httpUpdater;
|
||||
WiFiUDP notifierUdp;//, rgbUdp;
|
||||
WiFiUDP notifierUdp, rgbUdp;
|
||||
WiFiUDP ntpUdp;
|
||||
IPAddress ntpServerIP;
|
||||
unsigned int ntpLocalPort = 2390;
|
||||
|
@ -13,7 +13,7 @@ void handleSerial()
|
||||
strip.setMode(0);
|
||||
}
|
||||
arlsTimeout = true;
|
||||
arlsTimeoutTime = millis() + 4900;
|
||||
arlsTimeoutTime = millis() + 5200;
|
||||
delay(1);
|
||||
byte hi = Serial.read();
|
||||
byte ledc = Serial.read();
|
||||
|
@ -43,7 +43,7 @@ void wledInit()
|
||||
if (udpPort > 0 && udpPort != ntpLocalPort && WiFi.status() == WL_CONNECTED)
|
||||
{
|
||||
udpConnected = notifierUdp.begin(udpPort);
|
||||
//if (udpConnected && udpRgbPort != udpPort) udpRgbConnected = rgbUdp.begin(udpRgbPort);
|
||||
if (udpConnected && udpRgbPort != udpPort) udpRgbConnected = rgbUdp.begin(udpRgbPort);
|
||||
}
|
||||
if (ntpEnabled && WiFi.status() == WL_CONNECTED)
|
||||
ntpConnected = ntpUdp.begin(ntpLocalPort);
|
||||
|
@ -50,14 +50,58 @@ void notify(byte callMode, bool followUp=false)
|
||||
notificationTwoRequired = (followUp)? false:notifyTwice;
|
||||
}
|
||||
|
||||
void arlsLock(uint32_t timeoutMs)
|
||||
{
|
||||
if (!arlsTimeout){
|
||||
strip.setRange(0, ledCount-1, 0);
|
||||
strip.setMode(0);
|
||||
}
|
||||
arlsTimeout = true;
|
||||
arlsTimeoutTime = millis() + timeoutMs;
|
||||
}
|
||||
|
||||
void handleNotifications()
|
||||
{
|
||||
//send second notification if enabled
|
||||
if(udpConnected && notificationTwoRequired && millis()-notificationSentTime > 250){
|
||||
notify(notificationSentCallMode,true);
|
||||
}
|
||||
|
||||
|
||||
//unlock strip when realtime UDP times out
|
||||
if (arlsTimeout && millis() > arlsTimeoutTime)
|
||||
{
|
||||
strip.unlockAll();
|
||||
if (bri == 0) strip.setBrightness(0);
|
||||
arlsTimeout = false;
|
||||
strip.setMode(effectCurrent);
|
||||
}
|
||||
|
||||
//receive UDP notifications
|
||||
if(udpConnected && (receiveNotifications || receiveDirect)){
|
||||
uint16_t packetSize = notifierUdp.parsePacket();
|
||||
|
||||
//hyperion / raw RGB
|
||||
if (!packetSize && receiveDirect && udpRgbConnected) {
|
||||
packetSize = rgbUdp.parsePacket();
|
||||
if (packetSize > 1026 || packetSize < 3) return;
|
||||
byte udpIn[packetSize];
|
||||
rgbUdp.read(udpIn, packetSize);
|
||||
arlsLock(5200);
|
||||
uint16_t id = 0;
|
||||
for (uint16_t i = 0; i < packetSize -2; i += 3)
|
||||
{
|
||||
if (useGammaCorrectionRGB)
|
||||
{
|
||||
strip.setPixelColor(id, gamma8[udpIn[i]], gamma8[udpIn[i+1]], gamma8[udpIn[i+2]]);
|
||||
} else {
|
||||
strip.setPixelColor(id, udpIn[i], udpIn[i+1], udpIn[i+2]);
|
||||
}
|
||||
id++; if (id >= ledCount) break;
|
||||
}
|
||||
strip.show();
|
||||
return;
|
||||
}
|
||||
|
||||
if (packetSize > 1026) return;
|
||||
if(packetSize && notifierUdp.remoteIP() != WiFi.localIP()) //don't process broadcasts we send ourselves
|
||||
{
|
||||
@ -107,23 +151,18 @@ void handleNotifications()
|
||||
if (receiveNotificationBrightness) bri = udpIn[2];
|
||||
colorUpdated(3);
|
||||
}
|
||||
} else if (udpIn[0] > 0 && udpIn[0] < 4) //1 warls //2 drgb //3 drgbw
|
||||
} else if (udpIn[0] > 0 && udpIn[0] < 4 && receiveDirect) //1 warls //2 drgb //3 drgbw
|
||||
{
|
||||
if (packetSize > 1) {
|
||||
if (udpIn[1] == 0)
|
||||
{
|
||||
arlsTimeout = false;
|
||||
} else {
|
||||
if (!arlsTimeout){
|
||||
strip.setRange(0, ledCount-1, 0);
|
||||
strip.setMode(0);
|
||||
}
|
||||
arlsTimeout = true;
|
||||
arlsTimeoutTime = millis() + 1000*udpIn[1];
|
||||
arlsLock(udpIn[1]*1000);
|
||||
}
|
||||
if (udpIn[0] == 1) //warls
|
||||
{
|
||||
for (int i = 2; i < packetSize -3; i += 4)
|
||||
for (uint16_t i = 2; i < packetSize -3; i += 4)
|
||||
{
|
||||
if (udpIn[i] + arlsOffset < ledCount && udpIn[i] + arlsOffset >= 0)
|
||||
if (useGammaCorrectionRGB)
|
||||
@ -133,10 +172,10 @@ void handleNotifications()
|
||||
strip.setPixelColor(udpIn[i] + arlsOffset, udpIn[i+1], udpIn[i+2], udpIn[i+3]);
|
||||
}
|
||||
}
|
||||
} else if (udpIn[0] == 2 && receiveDirect) //drgb
|
||||
} else if (udpIn[0] == 2) //drgb
|
||||
{
|
||||
int id = 0;
|
||||
for (int i = 2; i < packetSize -2; i += 3)
|
||||
uint16_t id = 0;
|
||||
for (uint16_t i = 2; i < packetSize -2; i += 3)
|
||||
{
|
||||
if (useGammaCorrectionRGB)
|
||||
{
|
||||
@ -146,10 +185,10 @@ void handleNotifications()
|
||||
}
|
||||
id++; if (id >= ledCount) break;
|
||||
}
|
||||
} else if (udpIn[0] == 3 && receiveDirect) //drgbw
|
||||
} else if (udpIn[0] == 3) //drgbw
|
||||
{
|
||||
int id = 0;
|
||||
for (int i = 2; i < packetSize -3; i += 4)
|
||||
uint16_t id = 0;
|
||||
for (uint16_t i = 2; i < packetSize -3; i += 4)
|
||||
{
|
||||
if (useGammaCorrectionRGB)
|
||||
{
|
||||
@ -165,13 +204,6 @@ void handleNotifications()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (arlsTimeout && millis() > arlsTimeoutTime)
|
||||
{
|
||||
strip.unlockAll();
|
||||
if (bri == 0) strip.setBrightness(0);
|
||||
arlsTimeout = false;
|
||||
strip.setMode(effectCurrent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user