Minor tweaks

-add fontConv
-make rolloPos display current position of (first) selected rollo
-usability enhancements and fixes
-increase max. number of Rollos
-TODO: ADD METHOD TO SAVE DESIRED LOWER END POSITION
This commit is contained in:
2025-11-17 20:55:11 +01:00
parent b487cd1e2e
commit 20601a7ecd
12 changed files with 5602 additions and 21 deletions
+5546
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+32 -9
View File
@@ -1,4 +1,5 @@
#include "tahoma.h"
#include "settings.h"
extern constexpr char Tahoma::serverURL[];
extern Tahoma::rolloCommand_t Tahoma::movement[];
Tahoma::Tahoma(void) {}
@@ -10,7 +11,8 @@ uint8_t Tahoma::getMyDevices(bool _force_update) {
if (!numDevs || _force_update) {
HTTPClient http; // Create an HTTP client object
String url = serverURL;
url += "?action=myactors"; // Construct the URL to fetch all devices
url += "?action=myactors&filter=";
url += Settings::prefs.hostname; // Construct the URL to fetch all devices
http.begin(url); // Initialize the HTTP connection
int httpCode = http.GET(); // Send the GET request and get the response code
if (httpCode > 0) { // Check if the request was successful
@@ -27,6 +29,7 @@ uint8_t Tahoma::getMyDevices(bool _force_update) {
doc[i]["name"]
.as<String>(); // Get the device URL from the JSON response
devicelist[i].index = doc[i]["id"];
devicelist[i].selected = false;
numDevs++;
}
}
@@ -42,25 +45,38 @@ uint8_t Tahoma::getMyDevices(bool _force_update) {
return numDevs;
}
bool Tahoma::isDeviceSelected(uint8_t deviceIndex) {
return devicelist[deviceIndex].selected;
}
Tahoma::rolloCommand_t Tahoma::getPos(int8_t deviceIndex) {
rolloCommand_t pos = {0};
if (deviceIndex == -1)
deviceIndex = currentDevIndex;
if(deviceIndex < 0){
for(uint8_t i=0; i<numDevs;i++){
if(devicelist[i].selected){
deviceIndex = i;
break;
}
}
}
if (deviceIndex < numDevs) {
HTTPClient http; // Create an HTTP client object
String url = serverURL;
url += "?action=pos&device=" +
String(devicelist[deviceIndex]
.index); // Construct the URL to fetch all devices
Serial.println(url);
Serial.println(url);
http.begin(url); // Initialize the HTTP connection
int httpCode = http.GET(); // Send the GET request and get the response code
if (httpCode > 0) { // Check if the request was successful
JsonDocument doc; // Create a JSON document to parse the response
String response = http.getString(); // Get the response as a string
if (!deserializeJson(doc, response)) { // Check if the JSON was decoded wthout error
if (!deserializeJson(
doc, response)) { // Check if the JSON was decoded wthout error
Serial.println("doc has content");
pos.rotation = doc["rotation"].as<uint8_t>(); // Get the device URL from the JSON response
pos.rotation =
doc["rotation"]
.as<uint8_t>(); // Get the device URL from the JSON response
pos.position = doc["position"].as<uint8_t>();
Serial.println(pos.rotation);
Serial.println(pos.position);
@@ -136,6 +152,14 @@ uint8_t Tahoma::sendMove(uint8_t deviceIndex, uint8_t position,
return ret;
}
void Tahoma::moveSelected(uint8_t position, uint8_t rotation) {
for (uint8_t i = 0; i < numDevs; i++) {
if (devicelist[i].selected) {
sendMove(i, position, rotation);
}
}
}
uint8_t Tahoma::sendfinalRot(uint8_t deviceIndex) {
uint8_t ret = 0;
HTTPClient http; // Create an HTTP client object
@@ -159,13 +183,12 @@ uint8_t Tahoma::sendfinalRot(uint8_t deviceIndex) {
return ret;
}
void Tahoma::setCurrentDev(uint8_t i) {
void Tahoma::selectDev(uint8_t i,bool _select) {
if (i <= numDevs) {
currentDevIndex = i;
devicelist[i].selected = _select;
}
}
uint8_t Tahoma::getCurrentDev() { return currentDevIndex; }
void Tahoma::loop(void) {
for (uint8_t i = 0; i < numDevs; i++) {
+5 -4
View File
@@ -7,7 +7,7 @@
#include <HTTPClient.h>
#include <Ticker.h>
#include <ArduinoJson.h> // Include the ArduinoJson library for JSON parsing
#define MAX_NUM_DEVICES 5 // Maximum number of devices to fetch
#define MAX_NUM_DEVICES 11 // Maximum number of devices to fetch
class Tahoma {
public:
@@ -22,6 +22,7 @@ typedef union {
typedef struct {
String name; // Device name
uint16_t index; // Device URL
bool selected;
} device_t;
// Constructor with hostname and token
// Initializes the Tahoma object with the provided hostname and token
@@ -33,14 +34,14 @@ typedef union {
rolloCommand_t getPos(int8_t deviceIndex=-1);
uint8_t sendMove(uint8_t deviceIndex, uint8_t position, uint8_t rotation);
uint8_t sendfinalRot(uint8_t deviceIndex);
void setCurrentDev(uint8_t i);
uint8_t getCurrentDev();
void moveSelected(uint8_t position, uint8_t rotation);
void selectDev(uint8_t i, bool _selected);
bool isDeviceSelected(uint8_t deviceIndex);
void loop(void);
device_t devicelist[MAX_NUM_DEVICES];
uint8_t numDevs{0};
static rolloCommand_t movement[MAX_NUM_DEVICES];
private:
uint8_t currentDevIndex{0};
bool checkMovement(uint8_t deviceIndex);
static constexpr char serverURL[]{"http://nas.local/smart/ajax/tahoma.php"}; // Hostname of the Tahoma system
Ticker movementCheckTicker;
+3 -1
View File
@@ -494,6 +494,8 @@ void showRolloPosScreen(lv_event_t *e) {
Tahoma::rolloCommand_t pos = tahoma.getPos();
lv_slider_set_value(objects.rolloPos, pos.position, LV_ANIM_OFF);
lv_arc_set_value(objects.rolloRot, pos.rotation * 9);
lv_obj_send_event(objects.rolloRot,LV_EVENT_VALUE_CHANGED,NULL);
lv_obj_send_event(objects.rolloPos,LV_EVENT_VALUE_CHANGED,NULL);
}
objects.debugScr = NULL;
objects.mainScr = NULL;
@@ -573,7 +575,7 @@ void setRolloListText(void) {
} else {
txt = "Rollos wählen";
}
lv_obj_set_style_anim_duration(objects.selDevicesLbl, 70*(lv_text_get_width(txt.c_str(),txt.length(),&symbol_font_12,0)-100), LV_PART_MAIN);
lv_obj_set_style_anim_duration(objects.selDevicesLbl, 50*(lv_text_get_width(txt.c_str(),txt.length(),&symbol_font_12,0)), LV_PART_MAIN);
lv_label_set_text(objects.selDevicesLbl, txt.c_str());
}
+9 -7
View File
@@ -216,15 +216,17 @@ void create_screen_menu() {
void rolloCheckbox_add(const char *txt, void *_tahomaDevice, bool _checked) {
lv_obj_t *obj = lv_checkbox_create(objects.deviceDropdown);
lv_obj_set_size(obj, LV_SIZE_CONTENT, 25);
lv_obj_set_style_min_width(obj,lv_pct(95),LV_PART_MAIN);
lv_checkbox_set_text(obj, txt);
lv_obj_set_user_data(obj, _tahomaDevice);
lv_obj_set_style_bg_image_src(obj, SYM_CHECK,
LV_PART_INDICATOR | LV_STATE_CHECKED);
lv_obj_set_style_border_color(obj, lv_color_hex(0xff5D636E),
lv_obj_set_style_border_color(obj, lv_color_hex(0xff000000),
LV_PART_INDICATOR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(obj, lv_palette_darken(LV_PALETTE_GREEN, 3),
LV_PART_INDICATOR | LV_STATE_CHECKED);
lv_obj_set_style_text_font(obj,&symbol_font_12,LV_STATE_DEFAULT);
lv_obj_set_style_text_font(obj,&symbol_font_16,LV_STATE_DEFAULT| LV_PART_INDICATOR);
if (_checked)
lv_obj_add_state(obj, LV_STATE_CHECKED);
lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE);
@@ -268,7 +270,7 @@ void create_screen_rollos() {
}*/
{ // rolloChooser BTN
lv_obj_t *obj = lv_btn_create(parent_obj);
lv_obj_set_size(obj, 130, 30);
lv_obj_set_size(obj, 130, 35);
lv_obj_set_pos(obj, 55, 20);
lv_obj_set_style_bg_color(obj, lv_color_hex(0xff2f3237),
LV_PART_MAIN | LV_STATE_DEFAULT);
@@ -296,7 +298,7 @@ label scrolls back to the initial position*/
{ // UP BTN
lv_obj_t *obj = lv_btn_create(parent_obj);
lv_obj_set_size(obj, 120, 60);
lv_obj_align(obj, LV_ALIGN_CENTER, 0, -15);
lv_obj_align(obj, LV_ALIGN_CENTER, 0, -18);
lv_obj_set_style_bg_color(obj, lv_color_hex(0xff2f3237),
LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_add_event_cb(obj, moveRolloUp, LV_EVENT_RELEASED, NULL);
@@ -313,7 +315,7 @@ label scrolls back to the initial position*/
{ // DOWN BTN
lv_obj_t *obj = lv_btn_create(parent_obj);
lv_obj_set_size(obj, 120, 60);
lv_obj_align(obj, LV_ALIGN_CENTER, 0, 55);
lv_obj_align(obj, LV_ALIGN_CENTER, 0, 52);
lv_obj_set_style_bg_color(obj, lv_color_hex(0xff2f3237),
LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_add_event_cb(obj, moveRolloDown, LV_EVENT_RELEASED, NULL);
@@ -623,9 +625,9 @@ void create_screen_rolloPos() {
{
lv_obj_t *obj = lv_label_create(parent_obj);
objects.debugTxt = obj;
lv_obj_align(obj, LV_ALIGN_CENTER, 0, -85);
lv_obj_align(obj, LV_ALIGN_CENTER, 0, -87);
lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_label_set_text(obj, "Gewählte Rollos manuell positionieren");
lv_label_set_text(obj, "Gewählte Rollos\nmanuell positionieren");
lv_obj_set_style_text_align(obj, LV_TEXT_ALIGN_CENTER,
LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(obj, &symbol_font_12,
+7
View File
@@ -0,0 +1,7 @@
bootstrap-icons.woff
63001-63004,62219-62221,62611,61829-61832,62719,62711,63478,62925-62930
montserrat-regulat.ttf
0x20-0x80,0xB0, 0xB7,0xA7,0xA9,0xB0-0xB3,0xB5,0xBC-0xBE
äöüÄÖÜ
MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf
0xe406,0xf15f,0xea35,0xea99,0xf205,0xf4c4,0xf8ca,0xe798,0xe2cd,0xefd8,0xf157,0xf172,0xf176,0xec0f,0xe818,0xe166,0xe286,0xec1f,0xec12,0xe8c7,0xe764,0xebcc,0xe86c,0xe5ca,0xe8b5,0xe15a,0xf6b9,0xea9a,0xe8b8,0xf418,0xf16f,0xe4ca,0xe4d9,0xef16,0xef10,0xe648,0xf0b0,0xf537,0xf16a,0xf166,0xf16b,0xe585,0xe846,0xf6d7,0xf6d8,0xf8bb,0xf164,0xe2cb,0xf10b,0xe5c5,0xe5c7,0xe5df,0xe5de,0xe984,0xef7d,0xe986,0xe941,0xe313,0xe314,0xe315,0xe316,0xeac3,0xead0,0xeac9,0xeacf,0xe145,0xe5cd,0xe872
Binary file not shown.