139
правок
Строка 377: | Строка 377: | ||
- включать (яркость 50%) | - включать (яркость 50%) | ||
- останавливать и запускать автоматическую смену режима | - останавливать и запускать автоматическую смену режима | ||
==Виртуальное устройство в Wirenboard== | |||
Создадим виртуальное устройство нашей ленты в wirenboard: | |||
<syntaxhighlight lang="javascript"> | |||
defineVirtualDevice("ws2812b", { | |||
title: "ws2812b", | |||
cells: { | |||
enabled: { | |||
type: "switch", | |||
value: false, | |||
}, | |||
brightness: { | |||
type: "value", | |||
value: 50, | |||
}, | |||
hueLoop: { | |||
type: "switch", | |||
value: true, | |||
} | |||
} | |||
}) | |||
defineRule("ws2812b/enabled", { | |||
whenChanged: "ws2812b/enabled", | |||
then: function (newValue, devName, cellName) { | |||
if(newValue) { | |||
dev["ws2812b"]["brightness"] = 50 | |||
} else { | |||
dev["ws2812b"]["brightness"] = 0 | |||
} | |||
} | |||
}) | |||
</syntaxhighlight> | |||
подписываем на топики: | |||
<syntaxhighlight lang="c++"> | |||
void setupModbus() { | |||
pubSubClient.setServer(MODBUS_SERVER, MODBUS_PORT); | |||
pubSubClient.setCallback(modbusCallback); | |||
pubSubClient.subscribe("/devices/ws2812b/controls/brightness"); | |||
pubSubClient.subscribe("/devices/ws2812b/controls/hueLoop"); | |||
} | |||
</syntaxhighlight> | |||
теперь надо константу BRIGHTNESS переделать в переменную, а также ввести переменную hue_loop: | |||
<syntaxhighlight lang="c++"> | |||
uint8_t brightness = 50; | |||
bool hueLoop = true; | |||
void callback(char* topic, byte* payload, unsigned int length) { | |||
char payloadChar[sizeof(payload)]; | |||
Serial.print("Message arrived ["); | |||
Serial.print(topic); | |||
Serial.print("] "); | |||
for (int i = 0; i < length; i++) { | |||
Serial.print((char)payload[i]); | |||
payloadChar[i] = (char)payload[i]; | |||
} | |||
Serial.println(); | |||
String payloadStr = String(payloadChar); | |||
if (topic == "/devices/ws2812b/controls/brightness") { | |||
brightness = payloadStr.toInt(); | |||
} | |||
if (topic == "/devices/ws2812b/controls/hueLoop") { | |||
if(payloadChar == "true") { | |||
hueLoop = true; | |||
} else { | |||
hueLoop = false; | |||
} | |||
} | |||
} | |||
void ChangePalettePeriodically() { | |||
if(!hueLoop) { | |||
return; | |||
} | |||
... | |||
} | |||
</syntaxhighlight> |
правок