- Expose buttons to HA
- HA Switch to control the transition
- Icons are not reloaded if its the same as before

closes #26
This commit is contained in:
Stephan Mühl
2023-03-30 12:36:23 +02:00
committed by GitHub
12 changed files with 407 additions and 137 deletions

View File

@@ -11,4 +11,4 @@ To download an icon, simply enter the ID of a LaMetric or AWTRIX 2.0 icon in the
AWTRIX 2.0 icons can be found in the respective software. In a future update, non-AWTRIX 2.0 users will also get access to the database.
You can also create your own icon and place it in the "ICONS" folder via the web interface file browser.
The icon needs to be a GIF or JPEG with a resolution of 8x8.
The icon needs to be a GIF (.gif) or JPG (.jpg) with a resolution of 8x8.

View File

@@ -236,18 +236,6 @@ void MatrixDisplayUi::drawApp()
int16_t x, y, x1, y1;
switch (this->appAnimationDirection)
{
case SLIDE_LEFT:
x = -32 * progress;
y = 0;
x1 = x + 32;
y1 = 0;
break;
case SLIDE_RIGHT:
x = 32 * progress;
y = 0;
x1 = x - 32;
y1 = 0;
break;
case SLIDE_UP:
x = 0;
y = -8 * progress;

View File

@@ -41,9 +41,7 @@
enum AnimationDirection
{
SLIDE_UP,
SLIDE_DOWN,
SLIDE_LEFT,
SLIDE_RIGHT
SLIDE_DOWN
};
enum AppState
@@ -79,7 +77,7 @@ private:
FastLED_NeoMatrix *matrix;
// Values for the Apps
AnimationDirection appAnimationDirection = SLIDE_RIGHT;
AnimationDirection appAnimationDirection = SLIDE_DOWN;
int8_t lastTransitionDirection = 1;

View File

@@ -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

106
src/Dictionary.cpp Normal file
View File

@@ -0,0 +1,106 @@
#include <Arduino.h>
#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 HAtransID[] PROGMEM = {"%s_tra"};
const char HAtransName[] PROGMEM = {"Transition"};
const char HAtransIcon[] PROGMEM = {"mdi:swap-vertical"};
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_ram"};
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"};

108
src/Dictionary.h Normal file
View File

@@ -0,0 +1,108 @@
#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 HAtransID[];
extern const char HAtransName[];
extern const char HAtransIcon[];
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

View File

@@ -73,6 +73,7 @@ void DisplayManager_::MatrixState(bool on)
bool DisplayManager_::setAutoTransition(bool active)
{
if (ui.AppCount < 2)
{
ui.disablesetAutoTransition();
@@ -260,6 +261,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<String>() + ".txt");
@@ -308,21 +314,26 @@ void DisplayManager_::generateCustomPage(String name, String payload)
if (doc.containsKey("icon"))
{
String iconFileName = String(doc["icon"].as<String>());
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

View File

@@ -65,7 +65,7 @@ IPAddress gateway;
IPAddress subnet;
IPAddress primaryDNS;
IPAddress secondaryDNS;
const char *VERSION = "0.42";
const char *VERSION = "0.43";
String MQTT_HOST = "";
uint16_t MQTT_PORT = 1883;
String MQTT_USER;

View File

@@ -5,13 +5,14 @@
#include <ArduinoHA.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include "Dictionary.h"
unsigned long startTime;
WiFiClient espClient;
uint8_t lastBrightness;
HADevice device;
HAMqtt mqtt(espClient, device, 18);
HAMqtt mqtt(espClient, device, 19);
unsigned long reconnectTimer = 0;
const unsigned long reconnectInterval = 30000; // 30 Sekunden
@@ -21,7 +22,7 @@ HASelect *BriMode = nullptr;
HAButton *dismiss = nullptr;
HAButton *nextApp = nullptr;
HAButton *prevApp = nullptr;
HASwitch *transition = nullptr;
HASensor *curApp = nullptr;
HASensor *battery = nullptr;
HASensor *temperature = nullptr;
@@ -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()
@@ -59,6 +62,14 @@ void onButtonCommand(HAButton *sender)
}
}
void onSwitchCommand(bool state, HASwitch *sender)
{
AUTO_TRANSITION = state;
DisplayManager.setAutoTransition(state);
saveSettings();
sender->setState(state);
}
void onSelectCommand(int8_t index, HASelect *sender)
{
switch (index)
@@ -212,14 +223,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], transID[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 +239,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 +263,105 @@ 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(transID, HAtransID, macStr);
transition = new HASwitch(transID);
transition->setIcon(HAtransIcon);
transition->setName(HAtransName);
transition->onCommand(onSwitchCommand);
sprintf(appID, HAappID, macStr);
curApp = new HASensor(appID);
curApp->setIcon(HAappIcon);
curApp->setName(HAappName);
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);
curApp = new HASensor(appID);
curApp->setIcon("mdi:apps");
curApp->setName("Current app");
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
{
@@ -415,26 +444,63 @@ void MQTTManager_::sendStats()
ram->setValue(rambuffer);
uptime->setValue(readUptime());
version->setValue(VERSION);
transition->setState(AUTO_TRANSITION, false);
}
else
{
}
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;
}
}

View File

@@ -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;

View File

@@ -9,27 +9,26 @@
#include <LightDependentResistor.h>
#include <MenuManager.h>
#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;
@@ -229,7 +225,7 @@ void PeripheryManager_::checkAlarms()
DeserializationError error = deserializeJson(doc, file);
if (error)
{
Serial.println("Failed to read Alarm file");
Serial.println(F("Failed to read Alarm file"));
return;
}
JsonArray alarms = doc["alarms"];

View File

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