Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added Support for Casalux LED CCT Panels #796

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
added active radio configs to settings
aeinstein committed Aug 19, 2023
commit 72f953f8335ad0c7874666b34e366ef972dbd3bd
4 changes: 2 additions & 2 deletions dist/index.html.gz.h

Large diffs are not rendered by default.

44 changes: 23 additions & 21 deletions lib/MiLight/CasaluxPacketFormatter.cpp
Original file line number Diff line number Diff line change
@@ -87,27 +87,12 @@ void CasaluxPacketFormatter::updateTemperature(uint8_t value) {
void CasaluxPacketFormatter::command(uint8_t command, uint8_t arg) {
pushPacket();
currentPacket[0] = command;
currentPacket[5] = groupToGroupId(arg);
}

void CasaluxPacketFormatter::updateStatus(MiLightStatus status, uint8_t groupId) {
if(status == ON) command(0x6F,0);
else command(0x60,0);
}

void CasaluxPacketFormatter::increaseTemperature() {
command(0x69, 0);
}

void CasaluxPacketFormatter::decreaseTemperature() {
command(0x6A, 0);
}

void CasaluxPacketFormatter::increaseBrightness() {
command(0x66, 0);
}

void CasaluxPacketFormatter::decreaseBrightness() {
command(0x65, 0);
if(status == ON) command(0x6F, groupId);
else command(0x60, groupId);
}


@@ -126,11 +111,11 @@ BulbId CasaluxPacketFormatter::parsePacket(const uint8_t* packet, JsonObject res

switch(command){
case 0x65:
result[GroupStateFieldNames::COMMAND] = MiLightCommandNames::LEVEL_DOWN;
result[GroupStateFieldNames::COMMAND] = "brightness_down";
break;

case 0x66:
result[GroupStateFieldNames::COMMAND] = MiLightCommandNames::LEVEL_UP;
result[GroupStateFieldNames::COMMAND] = "brightness_up";
break;

case 0x6A:
@@ -153,6 +138,23 @@ BulbId CasaluxPacketFormatter::parsePacket(const uint8_t* packet, JsonObject res
return bulbId;
}

void CasaluxPacketFormatter::increaseTemperature() {
command(0x69, 0);
}

void CasaluxPacketFormatter::decreaseTemperature() {
command(0x6A, 0);
}

void CasaluxPacketFormatter::increaseBrightness() {
command(0x66, 0);
}

void CasaluxPacketFormatter::decreaseBrightness() {
command(0x65, 0);
}


uint8_t CasaluxPacketFormatter::groupToGroupId(uint8_t group){
switch(group) {
case 1:
@@ -185,7 +187,7 @@ uint8_t CasaluxPacketFormatter::groupIdToGroup(uint8_t groupId){


void CasaluxPacketFormatter::format(uint8_t const* packet, char* buffer) {
buffer += sprintf_P(buffer, PSTR("Request type : %02X\n"), packet[0]) ;
buffer += sprintf_P(buffer, PSTR("CMD : %02X\n"), packet[0]) ;
buffer += sprintf_P(buffer, PSTR("Byte 2 (01) : %02X\n"), packet[1]);
buffer += sprintf_P(buffer, PSTR("Byte 3 (11) : %02X\n"), packet[2]);
buffer += sprintf_P(buffer, PSTR("Device ID : %02X%02X\n"), packet[3], packet[4]);
12 changes: 12 additions & 0 deletions lib/MiLight/RadioSwitchboard.cpp
Original file line number Diff line number Diff line change
@@ -6,6 +6,18 @@ RadioSwitchboard::RadioSwitchboard(
Settings& settings
) {
for (size_t i = 0; i < MiLightRadioConfig::NUM_CONFIGS; i++) {

// Use only active configs
if(settings.activeRadioConfigs.size() > 0) {
bool config_active = false;

for (uint8_t y : settings.activeRadioConfigs){
if(y == i) config_active = true;
}

if(!config_active) continue;
}

std::shared_ptr<MiLightRadio> radio = radioFactory->create(MiLightRadioConfig::ALL_CONFIGS[i]);
radio->begin();
radios.push_back(radio);
40 changes: 40 additions & 0 deletions lib/Settings/Settings.cpp
Original file line number Diff line number Diff line change
@@ -45,6 +45,14 @@ void Settings::updateDeviceIds(JsonArray arr) {
}
}

void Settings::updateActiveConfigs(JsonArray arr) {
this->activeRadioConfigs.clear();

for (size_t i = 0; i < arr.size(); ++i) {
this->activeRadioConfigs.push_back(arr[i]);
}
}

void Settings::updateGatewayConfigs(JsonArray arr) {
gatewayConfigs.clear();

@@ -112,6 +120,15 @@ void Settings::patch(JsonObject parsedSettings) {
rf24Channels = JsonHelpers::jsonArrToVector<RF24Channel, String>(arr, RF24ChannelHelpers::valueFromName);
}

if (parsedSettings.containsKey("active_radio_configs")) {
JsonArray arr = parsedSettings["active_radio_configs"];
updateActiveConfigs(arr);

for(uint8_t i = 0; i < this->activeRadioConfigs.size(); i++){
Serial.printf("load id: %d\n", this->activeRadioConfigs[i]);
}
}

if (parsedSettings.containsKey("rf24_listen_channel")) {
this->rf24ListenChannel = RF24ChannelHelpers::valueFromName(parsedSettings["rf24_listen_channel"]);
}
@@ -220,7 +237,21 @@ void Settings::load(Settings& settings) {

if (! error) {
JsonObject parsedSettings = json.as<JsonObject>();

// Ensure that there are valid configs before patch
if(!parsedSettings.containsKey("active_radio_configs")){
// First start use only sidoh's configs
Serial.printf("active_radio_configs not found, creating\n");
JsonArray configsArr = parsedSettings.createNestedArray("active_radio_configs");
configsArr.add(0);
configsArr.add(1);
configsArr.add(2);
configsArr.add(3);
configsArr.add(4);
}

settings.patch(parsedSettings);

} else {
Serial.print(F("Error parsing saved settings file: "));
Serial.println(error.c_str());
@@ -298,6 +329,15 @@ void Settings::serialize(Print& stream, const bool prettyPrint) {
JsonArray channelArr = root.createNestedArray("rf24_channels");
JsonHelpers::vectorToJsonArr<RF24Channel, String>(channelArr, rf24Channels, RF24ChannelHelpers::nameFromValue);

JsonArray configsArr = root.createNestedArray("active_radio_configs");
JsonHelpers::copyFrom<uint8_t>(configsArr, this->activeRadioConfigs);

for(uint8_t i = 0; i < this->activeRadioConfigs.size(); i++){
Serial.printf("save id: %d\n", this->activeRadioConfigs[i]);
}



JsonArray deviceIdsArr = root.createNestedArray("device_ids");
JsonHelpers::copyFrom<uint16_t>(deviceIdsArr, this->deviceIds);

2 changes: 2 additions & 0 deletions lib/Settings/Settings.h
Original file line number Diff line number Diff line change
@@ -143,6 +143,7 @@ class Settings {
String toJson(const bool prettyPrint = true);
void serialize(Print& stream, const bool prettyPrint = false);
void updateDeviceIds(JsonArray arr);
void updateActiveConfigs(JsonArray arr);
void updateGatewayConfigs(JsonArray arr);
void patch(JsonObject obj);
String mqttServer();
@@ -185,6 +186,7 @@ class Settings {
RF24PowerLevel rf24PowerLevel;
std::vector<uint16_t> deviceIds;
std::vector<RF24Channel> rf24Channels;
std::vector<uint8_t> activeRadioConfigs;
std::vector<GroupStateField> groupStateFields;
std::vector<std::shared_ptr<GatewayConfig>> gatewayConfigs;
RF24Channel rf24ListenChannel;
18 changes: 18 additions & 0 deletions web/src/js/script.js
Original file line number Diff line number Diff line change
@@ -226,6 +226,24 @@ var UI_FIELDS = [ {
'LT8900': 'PL1167/LT8900'
},
tab: "tab-radio"
}, {
tag: "active_radio_configs",
friendly: "Active Radio Configs",
help: "More active configs means more channel hopping",
type: "option_buttons",
settings: {
multiple: true,
},
options: {
'0': 'RGBW',
'1': 'CCT',
'2': 'Fut89, RGB+CCT',
'3': 'RGB',
'4': 'FUT020',
'5': 'Casalux',
'6': 'NLG'
},
tab: "tab-radio"
}, {
tag: "rf24_power_level",
friendly: "nRF24 Power Level",