Browse Source

Merge from 'v1.6.0': Fixed night mode for rgbw bulbs

Nils Bernhardt 8 years ago
parent
commit
b488c03b1e

+ 17 - 4
lib/MiLight/RgbwPacketFormatter.cpp

@@ -86,10 +86,23 @@ void RgbwPacketFormatter::updateColorWhite() {
 }
 
 void RgbwPacketFormatter::enableNightMode() {
-  uint8_t button = STATUS_COMMAND(ON, groupId);
-
-  command(button, 0);
-  command(button | 0x10, 0);
+  if (groupId == 0) {
+    //Serial.print("Sending RGBW_ALL_NIGHT... Group ");
+    command(RGBW_ALL_NIGHT, 0);
+  } else if (groupId == 1) {
+    //Serial.print("Sending RGBW_GROUP_1_NIGHT... Group ");
+    command(RGBW_GROUP_1_NIGHT, 0);
+  } else if (groupId == 2) {
+    //Serial.print("Sending RGBW_GROUP_2_NIGHT... Group ");
+    command(RGBW_GROUP_2_NIGHT, 0);
+  } else if (groupId == 3) {
+    //Serial.print("Sending RGBW_GROUP_3_NIGHT... Group ");
+    command(RGBW_GROUP_3_NIGHT, 0);
+  } else if (groupId == 4) {
+    //Serial.print("Sending RGBW_GROUP_4_NIGHT... Group ");
+    command(RGBW_GROUP_4_NIGHT, 0);
+  }
+  //Serial.println(groupId);
 }
 
 BulbId RgbwPacketFormatter::parsePacket(const uint8_t* packet, JsonObject& result, GroupStateStore* stateStore) {

+ 7 - 0
lib/MiLight/RgbwPacketFormatter.h

@@ -34,6 +34,13 @@ 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
+  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

+ 63 - 1
lib/Udp/V5MiLightUdpServer.cpp

@@ -19,12 +19,29 @@ void V5MiLightUdpServer::handleCommand(uint8_t command, uint8_t commandArg) {
     client->prepare(&FUT096Config, deviceId, groupId);
     client->updateStatus(status);
 
+    // Just some debugging stuff
+    //Serial.print("MiLight-RGBW Command received: Device ");
+    //Serial.print(deviceId);
+    //Serial.print(" - Group ");
+    //Serial.print(groupId);
+    //Serial.print(" - Command ");
+    //Serial.println(command);
+
     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();
+
+    // Just some debugging stuff
+    //Serial.print("MiLight-RGBW SetToWhite command received: Device ");
+    //Serial.print(deviceId);
+    //Serial.print(" - Group ");
+    //Serial.print(groupId);
+    //Serial.print(" - Command ");
+    //Serial.println(command);
+
     this->lastGroup = groupId;
   } else {
     client->prepare(&FUT096Config, deviceId, lastGroup);
@@ -64,6 +81,51 @@ void V5MiLightUdpServer::handleCommand(uint8_t command, uint8_t commandArg) {
         );
         break;
 
+      case UDP_RGBW_GROUP_ALL_NIGHT:
+        // Just some debugging stuff
+        //Serial.print("MiLight-RGBW: GROUP_ALL_NIGHT received! Device ");
+        //Serial.print(deviceId);
+        //Serial.print(" - Group ");
+        //Serial.println(lastGroup);
+        client->enableNightMode();
+        break;
+
+      case UDP_RGBW_GROUP_1_NIGHT:
+        // Just some debugging stuff
+        //Serial.print("MiLight-RGBW: GROUP_1_NIGHT received! Device ");
+        //Serial.print(deviceId);
+        //Serial.print(" - Group ");
+        //Serial.println(lastGroup);
+        client->enableNightMode();
+        break;
+
+      case UDP_RGBW_GROUP_2_NIGHT:
+        // Just some debugging stuff
+        //Serial.print("MiLight-RGBW: GROUP_2_NIGHT received! Device ");
+        //Serial.print(deviceId);
+        //Serial.print(" - Group ");
+        //Serial.println(lastGroup);
+        client->enableNightMode();
+        break;
+
+      case UDP_RGBW_GROUP_3_NIGHT:
+        // Just some debugging stuff
+        //Serial.print("MiLight-RGBW: GROUP_3_NIGHT received! Device ");
+        //Serial.print(deviceId);
+        //Serial.print(" - Group ");
+        //Serial.println(lastGroup);
+        client->enableNightMode();
+        break;
+
+      case UDP_RGBW_GROUP_4_NIGHT:
+        // Just some debugging stuff
+        //Serial.print("MiLight-RGBW: GROUP_4_NIGHT received! Device ");
+        //Serial.print(deviceId);
+        //Serial.print(" - Group ");
+        //Serial.println(lastGroup);
+        client->enableNightMode();
+        break;
+
       default:
         handled = false;
     }

+ 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
 };

+ 1 - 1
platformio.ini

@@ -13,7 +13,7 @@ board_f_cpu = 160000000L
 lib_deps_builtin =
   SPI
 lib_deps_external =
-  sidoh/RF24
+  sidoh/RF24#remove_progmem
   WiFiManager
   ArduinoJson
   PubSubClient