diff --git a/lib/home-assistant-integration/src/ArduinoHADefines.h b/lib/home-assistant-integration/src/ArduinoHADefines.h index 186a0b5..0188002 100644 --- a/lib/home-assistant-integration/src/ArduinoHADefines.h +++ b/lib/home-assistant-integration/src/ArduinoHADefines.h @@ -4,7 +4,7 @@ //#define ARDUINOHA_DEBUG // These macros allow to exclude some parts of the library to save more resources. - #define EX_ARDUINOHA_BINARY_SENSOR + //#define EX_ARDUINOHA_BINARY_SENSOR //#define EX_ARDUINOHA_BUTTON #define EX_ARDUINOHA_CAMERA #define EX_ARDUINOHA_COVER diff --git a/src/Dictionary.cpp b/src/Dictionary.cpp new file mode 100644 index 0000000..d32ccc2 --- /dev/null +++ b/src/Dictionary.cpp @@ -0,0 +1,102 @@ +#include +#include "Dictionary.h" + +// MQTT +const char StatsTopic[] PROGMEM = {"stats"}; +const char ButtonLeftTopic[] PROGMEM = {"stats/buttonLeft"}; +const char ButtonSelectTopic[] PROGMEM = {"stats/buttonSelect"}; +const char ButtonRightTopic[] PROGMEM = {"stats/buttonRight"}; + +// Generic +const char State0[] PROGMEM = {"0"}; +const char State1[] PROGMEM = {"1"}; + +// HA +const char HAmanufacturer[] PROGMEM = {"Blueforcer"}; +const char HAmodel[] PROGMEM = {"AWTRIX Light"}; +const char HAmatID[] PROGMEM = {"%s_mat"}; +const char HAmatIcon[] PROGMEM = {"mdi:lightbulb"}; +const char HAmatName[] PROGMEM = {"Matrix"}; +const char HAbriID[] PROGMEM = {"%s_bri"}; +const char HAbriIcon[] PROGMEM = {"mdi:brightness-auto"}; +const char HAbriName[] PROGMEM = {"Brightness mode"}; +const char HAbriOptions[] PROGMEM = {"Manual;Auto"}; + +const char HAbtnaID[] PROGMEM = {"%s_btna"}; +const char HAbtnaIcon[] PROGMEM = {"mdi:bell-off"}; +const char HAbtnaName[] PROGMEM = {"Dismiss notification"}; + +const char HAbtnbID[] PROGMEM = {"%s_btnb"}; +const char HAbtnbIcon[] PROGMEM = {"mdi:arrow-right-bold"}; +const char HAbtnbName[] PROGMEM = {"Next app"}; + +const char HAbtncID[] PROGMEM = {"%s_btnc"}; +const char HAbtncIcon[] PROGMEM = {"mdi:arrow-left-bold"}; +const char HAbtncName[] PROGMEM = {"Previous app"}; + +const char HAappID[] PROGMEM = {"%s_app"}; +const char HAappIcon[] PROGMEM = {"mdi:apps"}; +const char HAappName[] PROGMEM = {"Current app"}; + +const char HAtempID[] PROGMEM = {"%s_temp"}; +const char HAtempIcon[] PROGMEM = {"mdi:thermometer"}; +const char HAtempName[] PROGMEM = {"Temperature"}; +const char HAtempClass[] PROGMEM = {"temperature"}; +const char HAtempUnit[] PROGMEM = {"°C"}; + +const char HAhumID[] PROGMEM = {"%s_hum"}; +const char HAhumIcon[] PROGMEM = {"mdi:water-percent"}; +const char HAhumName[] PROGMEM = {"Humidity"}; +const char HAhumClass[] PROGMEM = {"humidity"}; +const char HAhumUnit[] PROGMEM = {"%"}; + +const char HAbatID[] PROGMEM = {"%s_bat"}; +const char HAbatIcon[] PROGMEM = {"mdi:battery-90"}; +const char HAbatName[] PROGMEM = {"Battery"}; +const char HAbatClass[] PROGMEM = {"battery"}; +const char HAbatUnit[] PROGMEM = {"%"}; + +const char HAluxID[] PROGMEM = {"%s_lux"}; +const char HAluxIcon[] PROGMEM = {"mdi:sun-wireless"}; +const char HAluxName[] PROGMEM = {"Illuminance"}; +const char HAluxClass[] PROGMEM = {"illuminance"}; +const char HAluxUnit[] PROGMEM = {"lx"}; + +const char HAverID[] PROGMEM = {"%s_ver"}; +const char HAverName[] PROGMEM = {"Version"}; + +const char HAsigID[] PROGMEM = {"%s_sig"}; +const char HAsigIcon[] PROGMEM = {"mdi:sun-wireless"}; +const char HAsigName[] PROGMEM = {"WiFi strength"}; +const char HAsigClass[] PROGMEM = {"signal_strength"}; +const char HAsigUnit[] PROGMEM = {"dB"}; + +const char HAupID[] PROGMEM = {"%s_up"}; +const char HAupName[] PROGMEM = {"Uptime"}; +const char HAupClass[] PROGMEM = {"duration"}; + +const char HAbtnLID[] PROGMEM = {"%s_btnL"}; +const char HAbtnLName[] PROGMEM = {"Button left"}; + +const char HAbtnMID[] PROGMEM = {"%s_btnM"}; +const char HAbtnMName[] PROGMEM = {"Button select"}; + +const char HAbtnRID[] PROGMEM = {"%s_btnR"}; +const char HAbtnRName[] PROGMEM = {"Button right"}; + +const char HAramRID[] PROGMEM = {"%s_btnR"}; +const char HAramIcon[] PROGMEM = {"mdi:application-cog"}; +const char HAramName[] PROGMEM = {"Free ram"}; +const char HAramClass[] PROGMEM = {"data_size"}; +const char HAramUnit[] PROGMEM = {"B"}; + +// JSON properites +const char BatKey[] PROGMEM = {"bat"}; +const char BatRawKey[] PROGMEM = {"bat_raw"}; +const char LuxKey[] PROGMEM = {"lux"}; +const char LDRRawKey[] PROGMEM = {"ldr_raw"}; +const char BrightnessKey[] PROGMEM = {"bri"}; +const char TempKey[] PROGMEM = {"temp"}; +const char HumKey[] PROGMEM = {"hum"}; +const char UpTimeKey[] PROGMEM = {"uptime"}; +const char SignalStrengthKey[] PROGMEM = {"wifi_signal"}; diff --git a/src/Dictionary.h b/src/Dictionary.h new file mode 100644 index 0000000..143a69b --- /dev/null +++ b/src/Dictionary.h @@ -0,0 +1,104 @@ +#ifndef DICTIONARY_H +#define DICTIONARY_H + +// MQTT +extern const char StatsTopic[]; +extern const char ButtonLeftTopic[]; +extern const char ButtonSelectTopic[]; +extern const char ButtonRightTopic[]; + +// Generic +extern const char State0[]; +extern const char State1[]; + +// HA +extern const char HAmanufacturer[]; +extern const char HAmodel[]; +extern const char HAmatID[]; +extern const char HAmatIcon[]; +extern const char HAmatName[]; +extern const char HAbriID[]; +extern const char HAbriIcon[]; +extern const char HAbriName[]; +extern const char HAbriOptions[]; + +extern const char HAbtnaID[]; +extern const char HAbtnaIcon[]; +extern const char HAbtnaName[]; + +extern const char HAbtnbID[]; +extern const char HAbtnbIcon[]; +extern const char HAbtnbName[]; + +extern const char HAbtncID[]; +extern const char HAbtncIcon[]; +extern const char HAbtncName[]; + +extern const char HAappID[]; +extern const char HAappIcon[]; +extern const char HAappName[]; + +extern const char HAtempID[]; +extern const char HAtempIcon[]; +extern const char HAtempName[]; +extern const char HAtempClass[]; +extern const char HAtempUnit[]; + +extern const char HAhumID[]; +extern const char HAhumIcon[]; +extern const char HAhumName[]; +extern const char HAhumClass[]; +extern const char HAhumUnit[]; + +extern const char HAbatID[]; +extern const char HAbatIcon[]; +extern const char HAbatName[]; +extern const char HAbatClass[]; +extern const char HAbatUnit[]; + +extern const char HAluxID[]; +extern const char HAluxIcon[]; +extern const char HAluxName[]; +extern const char HAluxClass[]; +extern const char HAluxUnit[]; + +extern const char HAverID[]; +extern const char HAverName[]; + +extern const char HAsigID[]; +extern const char HAsigIcon[]; +extern const char HAsigName[]; +extern const char HAsigClass[]; +extern const char HAsigUnit[]; + +extern const char HAupID[]; +extern const char HAupName[]; +extern const char HAupClass[]; + +extern const char HAbtnLID[]; +extern const char HAbtnLName[]; + +extern const char HAbtnMID[]; +extern const char HAbtnMName[]; + +extern const char HAbtnRID[]; +extern const char HAbtnRName[]; + +extern const char HAramRID[]; +extern const char HAramIcon[]; +extern const char HAramName[]; +extern const char HAramClass[]; +extern const char HAramUnit[]; + +// JSON properites +extern const char BatKey[]; +extern const char BatRawKey[]; +extern const char LuxKey[]; +extern const char LDRRawKey[]; +extern const char BrightnessKey[]; +extern const char TempKey[]; +extern const char HumKey[]; +extern const char UpTimeKey[]; +extern const char SignalStrengthKey[]; + +#endif diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index eefb3f0..1e54928 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -260,6 +260,11 @@ void DisplayManager_::generateCustomPage(String name, String payload) CustomApp customApp; + if (customApps.find(name) != customApps.end()) + { + customApp = customApps[name]; + } + if (doc.containsKey("sound")) { customApp.sound = ("/" + doc["sound"].as() + ".txt"); @@ -308,21 +313,27 @@ void DisplayManager_::generateCustomPage(String name, String payload) if (doc.containsKey("icon")) { String iconFileName = String(doc["icon"].as()); - - if (LittleFS.exists("/ICONS/" + iconFileName + ".jpg")) + if (customApp.icon && String(customApp.icon.name()).startsWith(iconFileName)) { - customApp.isGif = false; - customApp.icon = LittleFS.open("/ICONS/" + iconFileName + ".jpg"); - } - else if (LittleFS.exists("/ICONS/" + iconFileName + ".gif")) - { - customApp.isGif = true; - customApp.icon = LittleFS.open("/ICONS/" + iconFileName + ".gif"); + } else { - fs::File nullPointer; - customApp.icon = nullPointer; + if (LittleFS.exists("/ICONS/" + iconFileName + ".jpg")) + { + customApp.isGif = false; + customApp.icon = LittleFS.open("/ICONS/" + iconFileName + ".jpg"); + } + else if (LittleFS.exists("/ICONS/" + iconFileName + ".gif")) + { + customApp.isGif = true; + customApp.icon = LittleFS.open("/ICONS/" + iconFileName + ".gif"); + } + else + { + fs::File nullPointer; + customApp.icon = nullPointer; + } } } else diff --git a/src/MQTTManager.cpp b/src/MQTTManager.cpp index 52a31da..1ce9665 100644 --- a/src/MQTTManager.cpp +++ b/src/MQTTManager.cpp @@ -5,6 +5,7 @@ #include #include #include +#include "Dictionary.h" unsigned long startTime; @@ -29,9 +30,11 @@ HASensor *humidity = nullptr; HASensor *illuminance = nullptr; HASensor *uptime = nullptr; HASensor *strength = nullptr; - HASensor *version = nullptr; HASensor *ram = nullptr; +HABinarySensor *btnleft = nullptr; +HABinarySensor *btnmid = nullptr; +HABinarySensor *btnright = nullptr; // The getter for the instantiated singleton instance MQTTManager_ &MQTTManager_::getInstance() @@ -212,14 +215,14 @@ void connect() } char matID[40], briID[40]; -char btnAID[40], btnBID[40], btnCID[40], appID[40], tempID[40], humID[40], luxID[40], verID[40], batID[40], ramID[40], upID[40], sigID[40]; +char btnAID[40], btnBID[40], btnCID[40], appID[40], tempID[40], humID[40], luxID[40], verID[40], batID[40], ramID[40], upID[40], sigID[40], btnLID[40], btnMID[40], btnRID[40]; void MQTTManager_::setup() { startTime = millis(); if (HA_DISCOVERY) { - Serial.println("Starting Homeassistant discorvery"); + Serial.println(F("Starting Homeassistant discorvery")); uint8_t mac[6]; WiFi.macAddress(mac); @@ -228,17 +231,17 @@ void MQTTManager_::setup() device.setUniqueId(mac, sizeof(mac)); device.setName(uniqueID); device.setSoftwareVersion(VERSION); - device.setManufacturer("Blueforcer"); - device.setModel("AWTRIX Light"); + device.setManufacturer(HAmanufacturer); + device.setModel(HAmodel); device.setAvailability(true); String uniqueIDWithSuffix; - sprintf(matID, "%s_mat", macStr); + sprintf(matID, HAmatID, macStr); Matrix = new HALight(matID, HALight::BrightnessFeature | HALight::RGBFeature); - Matrix->setIcon("mdi:lightbulb"); - Matrix->setName("Matrix"); + Matrix->setIcon(HAmatIcon); + Matrix->setName(HAmatName); Matrix->onStateCommand(onStateCommand); Matrix->onBrightnessCommand(onBrightnessCommand); Matrix->onRGBColorCommand(onRGBColorCommand); @@ -252,87 +255,99 @@ void MQTTManager_::setup() Matrix->setCurrentRGBColor(color); Matrix->setState(true, true); - sprintf(briID, "%s_bri", macStr); + sprintf(briID, HAbriID, macStr); BriMode = new HASelect(briID); - BriMode->setOptions("Manual;Auto"); // use semicolons as separator of options + BriMode->setOptions(HAbriOptions); // use semicolons as separator of options BriMode->onCommand(onSelectCommand); - BriMode->setIcon("mdi:brightness-auto"); // optional - BriMode->setName("Brightness mode"); // optional + BriMode->setIcon(HAbriIcon); // optional + BriMode->setName(HAbriName); // optional BriMode->setState(AUTO_BRIGHTNESS, true); - sprintf(btnAID, "%s_btna", macStr); + sprintf(btnAID, HAbtnaID, macStr); dismiss = new HAButton(btnAID); - dismiss->setIcon("mdi:bell-off"); - dismiss->setName("Dismiss notification"); + dismiss->setIcon(HAbtnaIcon); + dismiss->setName(HAbtnaName); - sprintf(btnBID, "%s_btnb", macStr); + sprintf(btnBID, HAbtnbID, macStr); nextApp = new HAButton(btnBID); - nextApp->setIcon("mdi:arrow-right-bold"); - nextApp->setName("Next app"); + nextApp->setIcon(HAbtnbIcon); + nextApp->setName(HAbtnbName); - sprintf(btnCID, "%s_btnc", macStr); + sprintf(btnCID, HAbtncID, macStr); prevApp = new HAButton(btnCID); - prevApp->setIcon("mdi:arrow-left-bold"); - prevApp->setName("Previous app"); + prevApp->setIcon(HAbtncIcon); + prevApp->setName(HAbtncName); dismiss->onCommand(onButtonCommand); nextApp->onCommand(onButtonCommand); prevApp->onCommand(onButtonCommand); - sprintf(appID, "%s_app", macStr); + sprintf(appID, HAappID, macStr); curApp = new HASensor(appID); - curApp->setIcon("mdi:apps"); - curApp->setName("Current app"); + curApp->setIcon(HAappIcon); + curApp->setName(HAappName); - sprintf(tempID, "%s_temp", macStr); + sprintf(tempID, HAtempID, macStr); temperature = new HASensor(tempID); - temperature->setIcon("mdi:thermometer"); - temperature->setName("Temperature"); - temperature->setDeviceClass("temperature"); - temperature->setUnitOfMeasurement("°C"); + temperature->setIcon(HAtempIcon); + temperature->setName(HAtempName); + temperature->setDeviceClass(HAtempClass); + temperature->setUnitOfMeasurement(HAtempUnit); - sprintf(humID, "%s_hum", macStr); + sprintf(humID, HAhumID, macStr); humidity = new HASensor(humID); - humidity->setIcon("mdi:water-percent"); - humidity->setName("Humidity"); - humidity->setDeviceClass("humidity"); - humidity->setUnitOfMeasurement("%"); + humidity->setIcon(HAhumIcon); + humidity->setName(HAhumName); + humidity->setDeviceClass(HAhumClass); + humidity->setUnitOfMeasurement(HAhumUnit); - sprintf(batID, "%s_bat", macStr); + sprintf(batID, HAbatID, macStr); battery = new HASensor(batID); - battery->setIcon("mdi:battery-90"); - battery->setName("Battery"); - battery->setDeviceClass("battery"); - battery->setUnitOfMeasurement("%"); + battery->setIcon(HAbatIcon); + battery->setName(HAbatName); + battery->setDeviceClass(HAbatClass); + battery->setUnitOfMeasurement(HAbatUnit); - sprintf(luxID, "%s_lux", macStr); + sprintf(luxID, HAluxID, macStr); illuminance = new HASensor(luxID); - illuminance->setIcon("mdi:sun-wireless"); - illuminance->setName("Illuminance"); - illuminance->setDeviceClass("illuminance"); - illuminance->setUnitOfMeasurement("lx"); + illuminance->setIcon(HAluxIcon); + illuminance->setName(HAluxName); + illuminance->setDeviceClass(HAluxClass); + illuminance->setUnitOfMeasurement(HAluxUnit); - sprintf(verID, "%s_ver", macStr); + sprintf(verID, HAverID, macStr); version = new HASensor(verID); - version->setName("Version"); + version->setName(HAverName); - sprintf(sigID, "%s_sig", macStr); + sprintf(sigID, HAsigID, macStr); strength = new HASensor(sigID); - strength->setName("WiFi strength"); - strength->setDeviceClass("signal_strength"); - strength->setUnitOfMeasurement("dB"); + strength->setName(HAsigName); + strength->setDeviceClass(HAsigClass); + strength->setUnitOfMeasurement(HAsigUnit); - sprintf(upID, "%s_up", macStr); + sprintf(upID, HAupID, macStr); uptime = new HASensor(upID); - uptime->setName("Uptime"); - uptime->setDeviceClass("duration"); + uptime->setName(HAupName); + uptime->setDeviceClass(HAupClass); - sprintf(ramID, "%s_ram", macStr); + sprintf(btnLID, HAbtnLID, macStr); + btnleft = new HABinarySensor(btnLID); + btnleft->setName(HAbtnLName); + + sprintf(btnMID, HAbtnMID, macStr); + btnmid = new HABinarySensor(btnMID); + btnmid->setName(HAbtnMName); + + sprintf(btnRID, HAbtnRID, macStr); + btnright = new HABinarySensor(btnRID); + btnright->setName(HAbtnRName); + + sprintf(ramID, HAramRID, macStr); ram = new HASensor(ramID); - ram->setDeviceClass("data_size"); - ram->setIcon("mdi:application-cog"); - ram->setName("Free ram"); - ram->setUnitOfMeasurement("B"); + ram->setDeviceClass(HAramClass); + ram->setIcon(HAramIcon); + ram->setName(HAramName); + ram->setUnitOfMeasurement(HAramUnit); } else { @@ -419,22 +434,55 @@ void MQTTManager_::sendStats() StaticJsonDocument<200> doc; char buffer[5]; - doc["bat"] = BATTERY_PERCENT; - doc["batraw"] = BATTERY_RAW; + doc[BatKey] = BATTERY_PERCENT; + doc[BatRawKey] = BATTERY_RAW; snprintf(buffer, 5, "%.0f", CURRENT_LUX); - doc["lux"] = buffer; - doc["ldrraw"] = LDR_RAW; - doc["bri"] = BRIGHTNESS; + doc[LuxKey] = buffer; + doc[LDRRawKey] = LDR_RAW; + doc[BrightnessKey] = BRIGHTNESS; snprintf(buffer, 5, "%.0f", CURRENT_TEMP); - doc["temp"] = buffer; + doc[TempKey] = buffer; snprintf(buffer, 5, "%.0f", CURRENT_HUM); - doc["hum"] = buffer; - doc["uptime"] = readUptime(); - doc["wifi"] = WiFi.RSSI(); + doc[HumKey] = buffer; + doc[UpTimeKey] = readUptime(); + doc[SignalStrengthKey] = WiFi.RSSI(); String jsonString; serializeJson(doc, jsonString); - char topic[50]; - strcpy(topic, MQTT_PREFIX.c_str()); - strcat(topic, "/stats"); - mqtt.publish(topic, jsonString.c_str()); + publish(StatsTopic, jsonString.c_str()); +} + +void MQTTManager_::sendButton(byte btn, bool state) +{ + static bool btn0State, btn1State, btn2State; + + switch (btn) + { + case 0: + if (btn0State != state) + { + btnleft->setState(state, false); + btn0State = state; + publish(ButtonLeftTopic, state ? State1 : State0); + } + break; + case 1: + if (btn1State != state) + { + btnmid->setState(state, false); + btn1State = state; + publish(ButtonSelectTopic, state ? State1 : State0); + } + + break; + case 2: + if (btn2State != state) + { + btnright->setState(state, false); + btn2State = state; + publish(ButtonRightTopic, state ? State1 : State0); + } + break; + default: + break; + } } diff --git a/src/MQTTManager.h b/src/MQTTManager.h index aa1a5c3..312ed7a 100644 --- a/src/MQTTManager.h +++ b/src/MQTTManager.h @@ -15,6 +15,7 @@ public: void publish(const char *topic, const char *payload); void setCurrentApp(String value); void sendStats(); + void sendButton(byte btn, bool state); }; extern MQTTManager_ &MQTTManager; diff --git a/src/PeripheryManager.cpp b/src/PeripheryManager.cpp index 4090edf..544024c 100644 --- a/src/PeripheryManager.cpp +++ b/src/PeripheryManager.cpp @@ -9,27 +9,26 @@ #include #include -#define SOUND_OFF false +#define SOUND_OFF true #ifdef ULANZI // Pinouts für das ULANZI-Environment - #define BATTERY_PIN 34 - #define BUZZER_PIN 15 - #define LDR_PIN 35 - #define BUTTON_UP_PIN 26 - #define BUTTON_DOWN_PIN 14 - #define BUTTON_SELECT_PIN 27 +#define BATTERY_PIN 34 +#define BUZZER_PIN 15 +#define LDR_PIN 35 +#define BUTTON_UP_PIN 26 +#define BUTTON_DOWN_PIN 14 +#define BUTTON_SELECT_PIN 27 #else // Pinouts für das WEMOS_D1_MINI32-Environment - #define BATTERY_PIN -1 - #define BUZZER_PIN -1 - #define LDR_PIN A0 - #define BUTTON_UP_PIN D0 - #define BUTTON_DOWN_PIN D4 - #define BUTTON_SELECT_PIN D8 +#define BATTERY_PIN -1 +#define BUZZER_PIN -1 +#define LDR_PIN A0 +#define BUTTON_UP_PIN D0 +#define BUTTON_DOWN_PIN D4 +#define BUTTON_SELECT_PIN D8 #endif - Adafruit_SHT31 sht31; EasyButton button_left(BUTTON_UP_PIN); EasyButton button_right(BUTTON_DOWN_PIN); @@ -58,8 +57,6 @@ float sampleSum = 0.0; float sampleAverage = 0.0; float brightnessPercent = 0.0; - - // The getter for the instantiated singleton instance PeripheryManager_ &PeripheryManager_::getInstance() { @@ -140,7 +137,7 @@ void fistStart() uint16_t ADCVALUE = analogRead(BATTERY_PIN); - BATTERY_PERCENT = min((int)map(ADCVALUE, 490, 660, 0, 100), 100); + BATTERY_PERCENT = min((int)map(ADCVALUE, 490, 690, 0, 100), 100); sht31.readBoth(&CURRENT_TEMP, &CURRENT_HUM); uint16_t LDRVALUE = analogRead(LDR_PIN); @@ -170,9 +167,10 @@ void PeripheryManager_::setup() void PeripheryManager_::tick() { - button_left.read(); - button_right.read(); - button_select.read(); + + MQTTManager.sendButton(0, button_left.read()); + MQTTManager.sendButton(1, button_select.read()); + MQTTManager.sendButton(2, button_right.read()); unsigned long currentMillis_BatTempHum = millis(); if (currentMillis_BatTempHum - previousMillis_BatTempHum >= interval_BatTempHum) @@ -212,8 +210,6 @@ void PeripheryManager_::tick() } } - - const int MIN_ALARM_INTERVAL = 60; // 1 Minute time_t lastAlarmTime = 0; diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index 2f2776e..f676a5a 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -63,7 +63,7 @@ void ServerManager_::setup() { WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS); } - IPAddress myIP = mws.startWiFi(150000, uniqueID, "12345678"); + IPAddress myIP = mws.startWiFi(10000, uniqueID, "12345678"); isConnected = !(myIP == IPAddress(192, 168, 4, 1)); Serial.println(myIP.toString()); @@ -117,7 +117,7 @@ void ServerManager_::tick() uint16_t stringToColor(const String &str) { - // Aufteilen des Strings in seine Bestandteile + int comma1 = str.indexOf(','); int comma2 = str.lastIndexOf(','); if (comma1 < 0 || comma2 < 0 || comma2 == comma1) @@ -129,36 +129,33 @@ uint16_t stringToColor(const String &str) String gStr = str.substring(comma1 + 1, comma2); String bStr = str.substring(comma2 + 1); - // Konvertieren der Werte von Strings zu Zahlen + int r = rStr.toInt(); int g = gStr.toInt(); int b = bStr.toInt(); - // Sicherheitsabfrage: Werte müssen zwischen 0 und 255 liegen + if (r < 0 || r > 255 || g < 0 || g > 255 || b < 0 || b > 255) { return 0xFFFF; } - // Konvertieren der Werte zu 5-6-5 Bitformat uint16_t color = ((r >> 3) << 11) | ((g >> 2) & 0x3F) << 5 | (b >> 3); return color; } String colorToString(uint16_t color) { - // Konvertieren der Farbwerte von 5-6-5 Bitformat zu 8 Bit + uint8_t r = (color >> 11) << 3; uint8_t g = ((color >> 5) & 0x3F) << 2; uint8_t b = (color & 0x1F) << 3; - // Sicherheitsabfrage: Werte müssen zwischen 0 und 255 liegen if (r > 255 || g > 255 || b > 255) { return "#FFFFFF"; } - // Konvertieren der Farbwerte zu Strings und Zusammenführen String rStr = String(r); String gStr = String(g); String bStr = String(b); @@ -202,4 +199,3 @@ void ServerManager_::loadSettings() Serial.println(F("Configuration file not exist")); return; } -