diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp
index eac6ea25a2..b2f6e23a2c 100644
--- a/wled00/cfg.cpp
+++ b/wled00/cfg.cpp
@@ -751,11 +751,15 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
CJSON(DMXStartLED,dmx[F("start-led")]);
JsonArray dmx_fixmap = dmx[F("fixmap")];
- for (int i = 0; i < dmx_fixmap.size(); i++) {
- if (i > 14) break;
+ for (int i = 0; i < MIN(dmx_fixmap.size(), MAX_CHANNELS_PER_FIXTURE); i++) {
CJSON(DMXFixtureMap[i],dmx_fixmap[i]);
}
+ JsonArray dmx_chsval = dmx[F("chsval")];
+ for (int i = 0; i < MIN(dmx_chsval.size(), MAX_CHANNELS_PER_FIXTURE); i++) {
+ CJSON(DMXChannelsValue[i],dmx_chsval[i]);
+ }
+
CJSON(e131ProxyUniverse, dmx[F("e131proxy")]);
#endif
@@ -1253,10 +1257,15 @@ void serializeConfig(JsonObject root) {
dmx[F("start-led")] = DMXStartLED;
JsonArray dmx_fixmap = dmx.createNestedArray(F("fixmap"));
- for (unsigned i = 0; i < 15; i++) {
+ for (unsigned i = 0; i < MAX_CHANNELS_PER_FIXTURE; i++) {
dmx_fixmap.add(DMXFixtureMap[i]);
}
+ JsonArray dmx_chsval = dmx.createNestedArray(F("chsval"));
+ for (unsigned i = 0; i < MAX_CHANNELS_PER_FIXTURE; i++) {
+ dmx_chsval.add(DMXChannelsValue[i]);
+ }
+
dmx[F("e131proxy")] = e131ProxyUniverse;
#endif
diff --git a/wled00/const.h b/wled00/const.h
index 1abf245396..704f15f75a 100644
--- a/wled00/const.h
+++ b/wled00/const.h
@@ -655,4 +655,8 @@ static_assert(WLED_MAX_BUSSES <= 32, "WLED_MAX_BUSSES exceeds hard limit");
#define IRAM_ATTR_YN IRAM_ATTR
#endif
+#ifdef WLED_ENABLE_DMX
+ #define MAX_CHANNELS_PER_FIXTURE 15
+#endif
+
#endif
diff --git a/wled00/data/settings_dmx.htm b/wled00/data/settings_dmx.htm
index 7458ec9fe7..837f6d3226 100644
--- a/wled00/data/settings_dmx.htm
+++ b/wled00/data/settings_dmx.htm
@@ -7,10 +7,20 @@