소스 검색

Merge pull request #139 from bombcheck/state_persistence

Fixed night-mode for RGBW-Bulbs
Chris Mullins 8 년 전
부모
커밋
ae248f18c8
4개의 변경된 파일27개의 추가작업 그리고 4개의 파일을 삭제
  1. 2 2
      lib/MiLight/RgbwPacketFormatter.cpp
  2. 8 0
      lib/MiLight/RgbwPacketFormatter.h
  3. 12 2
      lib/Udp/V5MiLightUdpServer.cpp
  4. 5 0
      lib/Udp/V5MiLightUdpServer.h

+ 2 - 2
lib/MiLight/RgbwPacketFormatter.cpp

@@ -86,9 +86,9 @@ void RgbwPacketFormatter::updateColorWhite() {
 }
 
 void RgbwPacketFormatter::enableNightMode() {
-  uint8_t button = STATUS_COMMAND(ON, groupId);
+  uint8_t button = STATUS_COMMAND(OFF, groupId);
 
-  command(button, 0);
+  //command(button, 0);
   command(button | 0x10, 0);
 }
 

+ 8 - 0
lib/MiLight/RgbwPacketFormatter.h

@@ -34,6 +34,14 @@ enum MiLightRgbwButton {
   RGBW_GROUP_3_MIN_LEVEL = 0x18,
   RGBW_GROUP_4_MAX_LEVEL = 0x19,
   RGBW_GROUP_4_MIN_LEVEL = 0x1A,
+
+  // Button codes for night mode. A long press on the corresponding OFF button
+  // Not actually needed/used.
+  RGBW_ALL_NIGHT = 0x12,
+  RGBW_GROUP_1_NIGHT = 0x14,
+  RGBW_GROUP_2_NIGHT = 0x16,
+  RGBW_GROUP_3_NIGHT = 0x18,
+  RGBW_GROUP_4_NIGHT = 0x1A,
 };
 
 #define RGBW_COMMAND_INDEX 5

+ 12 - 2
lib/Udp/V5MiLightUdpServer.cpp

@@ -21,12 +21,22 @@ void V5MiLightUdpServer::handleCommand(uint8_t command, uint8_t commandArg) {
 
     this->lastGroup = groupId;
   // Command set_white for RGBW
-  } else if (command >= UDP_RGBW_GROUP_ALL_WHITE && command <= UDP_RGBW_GROUP_4_WHITE) {
+ } else if (command == UDP_RGBW_GROUP_ALL_WHITE || command == UDP_RGBW_GROUP_1_WHITE || command == UDP_RGBW_GROUP_2_WHITE || command == UDP_RGBW_GROUP_3_WHITE || command == UDP_RGBW_GROUP_4_WHITE) {
     const uint8_t groupId = (command - UDP_RGBW_GROUP_ALL_WHITE)/2;
     client->prepare(&FUT096Config, deviceId, groupId);
     client->updateColorWhite();
+
     this->lastGroup = groupId;
-  } else {
+  // Set night_mode for RGBW
+ } else if (command == UDP_RGBW_GROUP_ALL_NIGHT || command == UDP_RGBW_GROUP_1_NIGHT || command == UDP_RGBW_GROUP_2_NIGHT || command == UDP_RGBW_GROUP_3_NIGHT || command == UDP_RGBW_GROUP_4_NIGHT) {
+    const uint8_t groupId = (command - UDP_RGBW_GROUP_1_NIGHT + 2)/2;
+    if (command == UDP_RGBW_GROUP_ALL_NIGHT) const uint8_t groupId = 0;
+
+    client->prepare(&FUT096Config, deviceId, groupId);
+    client->enableNightMode();
+
+    this->lastGroup = groupId;
+ } else {
     client->prepare(&FUT096Config, deviceId, lastGroup);
     bool handled = true;
 

+ 5 - 0
lib/Udp/V5MiLightUdpServer.h

@@ -44,6 +44,11 @@ enum MiLightUdpCommands {
   UDP_RGBW_GROUP_2_WHITE     = 0xC7,
   UDP_RGBW_GROUP_3_WHITE     = 0xC9,
   UDP_RGBW_GROUP_4_WHITE     = 0xCB,
+  UDP_RGBW_GROUP_ALL_NIGHT   = 0xC1,
+  UDP_RGBW_GROUP_1_NIGHT     = 0xC6,
+  UDP_RGBW_GROUP_2_NIGHT     = 0xC8,
+  UDP_RGBW_GROUP_3_NIGHT     = 0xCA,
+  UDP_RGBW_GROUP_4_NIGHT     = 0xCC,
   UDP_RGBW_BRIGHTNESS        = 0x4E,
   UDP_RGBW_COLOR             = 0x40
 };