Skip to content

Commit d482301

Browse files
committed
Change from select component to number component (select contains a bug when decreasing)
1 parent cc26c45 commit d482301

File tree

2 files changed

+46
-89
lines changed

2 files changed

+46
-89
lines changed

firmware/conf.d/bambu_ams.yaml

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
1-
select:
1+
number:
22
- platform: template
33
name: "Number of AMS units"
44
id: ams_units
55
optimistic: false
66
restore_value: true
77
icon: mdi:printer-3d-nozzle
8-
options:
9-
- "1"
10-
- "2"
11-
- "3"
12-
- "4"
13-
initial_option: "1"
8+
min_value: 1
9+
max_value: 4
10+
step: 1
11+
initial_value: 1
12+
mode: box
1413
set_action:
1514
then:
1615
- lambda: |-
1716
if (id(bambu_model).state == "A1Mini" || id(bambu_model).state == "A1") {
18-
id(ams_units).publish_state("1");
17+
id(ams_units).publish_state(1);
1918
} else {
2019
id(ams_units).publish_state(x);
2120
}
2221
on_value:
2322
then:
2423
- lambda: |-
25-
ESP_LOGD("AMS", "AMS units set: %s", x.c_str());
24+
ESP_LOGD("AMS", "Number of AMS units set: %d", (int)x);
2625
web_server:
2726
sorting_group_id: sorting_group_printer_settings
2827
sorting_weight: 100
@@ -33,28 +32,27 @@ select:
3332
optimistic: false
3433
restore_value: true
3534
icon: mdi:printer-3d-nozzle
36-
options:
37-
- "0"
38-
- "1"
39-
- "2"
40-
- "3"
41-
- "4"
42-
initial_option: "1"
35+
min_value: 0
36+
max_value: 4
37+
step: 1
38+
initial_value: 1
39+
mode: box
4340
set_action:
4441
then:
4542
- lambda: |-
4643
if (id(bambu_model).state == "A1Mini" || id(bambu_model).state == "A1") {
47-
id(ams_number).publish_state("1");
44+
id(ams_number).publish_state(1);
4845
} else {
49-
if (x == "0") {
50-
id(slot_number).publish_state("1");
46+
if (x > id(ams_units).state) {
47+
id(ams_number).publish_state(id(ams_units).state);
48+
} else {
49+
id(ams_number).publish_state(x);
5150
}
52-
id(ams_number).publish_state(x);
5351
}
5452
on_value:
5553
then:
5654
- lambda: |-
57-
ESP_LOGD("AMS", "AMS selected: %s", x.c_str());
55+
ESP_LOGD("AMS", "AMS selected: %d", (int)x);
5856
web_server:
5957
sorting_group_id: sorting_group_ams
6058

@@ -64,27 +62,22 @@ select:
6462
optimistic: false
6563
restore_value: true
6664
icon: mdi:printer-3d-nozzle
67-
options:
68-
- "1"
69-
- "2"
70-
- "3"
71-
- "4"
72-
initial_option: "1"
65+
min_value: 1
66+
max_value: 4
67+
step: 1
68+
initial_value: 1
69+
mode: box
7370
set_action:
7471
then:
7572
- lambda: |-
76-
if (id(ams_number).state == "0") {
77-
// Only force to 1 if manually selecting through UI, not from encoder
78-
if (x != id(slot_number).state) {
79-
id(slot_number).publish_state("1");
80-
ESP_LOGD("AMS", "Forcing slot to 1 because AMS is 0");
81-
}
73+
if (id(ams_number).state == 0) {
74+
id(slot_number).publish_state(1);
8275
} else {
8376
id(slot_number).publish_state(x);
8477
}
8578
on_value:
8679
then:
8780
- lambda: |-
88-
ESP_LOGD("AMS", "Slot selected: %s", x.c_str());
81+
ESP_LOGD("AMS", "Slot selected: %d", (int)x);
8982
web_server:
9083
sorting_group_id: sorting_group_ams

firmware/conf.d/pn532_rfid-manual-ams.yaml

Lines changed: 19 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ script:
1313
- id: update_leds
1414
then:
1515
- lambda: |-
16-
auto ams_index = id(ams_number).active_index();
17-
auto slot_index = id(slot_number).active_index();
18-
for (int i = 0; i < ams_index.value() * slot_index.value(); i++) {
16+
for (int i = 0; i < id(ams_units).state * 4; i++) {
1917
if (i == id(selected_slot)) {
2018
id(set_led_blue).execute(i);
2119
} else {
@@ -43,9 +41,9 @@ script:
4341
uint16_t ams_id = 255; // Default to external AMS
4442
uint16_t tray_id = 254; // Default to external tray
4543
46-
if (id(ams_number).active_index().value() > 0) {
47-
ams_id = id(ams_number).active_index().value();
48-
tray_id = id(slot_number).active_index().value();
44+
if (id(ams_number).state > 0) {
45+
ams_id = id(ams_number).state - 1;
46+
tray_id = id(slot_number).state - 1;
4947
}
5048
5149
return bambulabs::generate_mqtt_payload(payload_data, ams_id, tray_id);
@@ -69,66 +67,32 @@ sensor:
6967
on_clockwise:
7068
then:
7169
- lambda: |-
72-
if(id(ams_number).state == "0") {
73-
id(ams_number).publish_state("1");
74-
} else if (id(slot_number).state == "4") {
70+
if(id(ams_number).state == 0) {
71+
id(ams_number).publish_state(1);
72+
} else if (id(slot_number).state == 4) {
7573
if (id(ams_number).state == id(ams_units).state) {
76-
id(ams_number).publish_state("0");
74+
id(ams_number).publish_state(0);
7775
} else {
78-
auto cur_index = id(ams_number).active_index().value();
79-
auto option = id(ams_number).at(cur_index + 1).value();
80-
id(ams_number).publish_state(option.c_str());
76+
id(ams_number).publish_state(id(ams_number).state + 1);
8177
}
82-
id(slot_number).publish_state("1");
78+
id(slot_number).publish_state(1);
8379
} else {
84-
// Increment the slot directly using the current state value
85-
int current_slot = std::stoi(id(slot_number).state);
86-
int next_slot = current_slot + 1;
87-
// Make sure it stays in valid range
88-
if (next_slot > 4) next_slot = 4;
89-
id(slot_number).publish_state(std::to_string(next_slot).c_str());
90-
91-
// Debugging output
92-
ESP_LOGD("Encoder", "Incrementing slot from %d to %d", current_slot, next_slot);
93-
}
94-
// Force state and UI update
95-
if (id(slot_number).state == "3" || id(slot_number).state == "4") {
96-
// This bypasses normal mechanisms to force the UI update
97-
id(slot_number).state = id(slot_number).state;
98-
id(slot_number).publish_state(id(slot_number).state);
80+
id(slot_number).publish_state(id(slot_number).state + 1);
9981
}
10082
- script.execute: update_leds
10183
on_anticlockwise:
10284
then:
10385
- lambda: |-
104-
if (id(ams_number).state == "0") {
105-
// If at AMS 0, go to max AMS and max slot
106-
id(ams_number).publish_state(id(ams_units).state.c_str());
107-
id(slot_number).publish_state("4");
108-
} else if (id(slot_number).state == "1") {
109-
// If at slot 1, go to previous AMS and max slot
110-
auto cur_ams = id(ams_number).state;
111-
if (cur_ams == "1") {
112-
// If at AMS 1, go to AMS 0
113-
id(ams_number).publish_state("0");
114-
id(slot_number).publish_state("1");
115-
} else {
116-
// Otherwise, go to previous AMS and max slot
117-
int prev_ams = std::stoi(cur_ams) - 1;
118-
id(ams_number).publish_state(std::to_string(prev_ams).c_str());
119-
id(slot_number).publish_state("4");
120-
}
86+
if(id(ams_number).state == 0) {
87+
id(ams_number).publish_state(id(ams_units).state);
88+
id(slot_number).publish_state(4);
89+
} else if (id(slot_number).state == 1) {
90+
id(ams_number).publish_state(id(ams_number).state - 1);
91+
id(slot_number).publish_state(4);
12192
} else {
122-
// Just decrement the slot - but do it directly using the current state value
123-
int current_slot = std::stoi(id(slot_number).state);
124-
int prev_slot = current_slot - 1;
125-
// Make sure it stays in valid range
126-
if (prev_slot < 1) prev_slot = 1;
127-
id(slot_number).publish_state(std::to_string(prev_slot).c_str());
128-
129-
// Debugging output
130-
ESP_LOGD("Encoder", "Decrementing slot from %d to %d", current_slot, prev_slot);
93+
id(slot_number).publish_state(id(slot_number).state - 1);
13194
}
95+
13296
- script.execute: update_leds
13397

13498
binary_sensor:

0 commit comments

Comments
 (0)