diff --git a/.github/workflows/test_release.yml b/.github/workflows/test_release.yml
index db5d88b8b..8f1be2863 100644
--- a/.github/workflows/test_release.yml
+++ b/.github/workflows/test_release.yml
@@ -13,12 +13,15 @@ jobs:
steps:
- uses: actions/checkout@v4
+ - name: Enable Corepack
+ run: corepack enable
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- - uses: actions/setup-node@v4
+ - name: Use Node.js 20.x
+ uses: actions/setup-node@v4
with:
- node-version: '20'
+ node-version: '20.x'
- name: Get EMS-ESP source code and version
id: build_info
diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md
index c1b48dafa..91643bf5e 100644
--- a/CHANGELOG_LATEST.md
+++ b/CHANGELOG_LATEST.md
@@ -22,6 +22,7 @@
- timeout for remote thermostat emulation [#1680](https://github.com/emsesp/EMS-ESP32/discussions/1680), [#1774](https://github.com/emsesp/EMS-ESP32/issues/1774)
- CR120 thermostat as own model() [#1779](https://github.com/emsesp/EMS-ESP32/discussions/1779)
- Modules - external linkable module library [#1778](https://github.com/emsesp/EMS-ESP32/issues/1778)
+- Scheduler onChange and Conditions [#1806](https://github.com/emsesp/EMS-ESP32/issues/1806)
- make remote control timeout editable [#1774](https://github.com/emsesp/EMS-ESP32/issues/1774)
## Fixed
diff --git a/interface/src/project/Scheduler.tsx b/interface/src/project/Scheduler.tsx
index 7389c0e5c..1262f0030 100644
--- a/interface/src/project/Scheduler.tsx
+++ b/interface/src/project/Scheduler.tsx
@@ -87,7 +87,7 @@ const Scheduler: FC = () => {
const schedule_theme = useTheme({
Table: `
- --data-table-library_grid-template-columns: 36px 324px 50px 192px repeat(1, minmax(100px, 1fr)) 160px;
+ --data-table-library_grid-template-columns: 36px 210px 100px 192px repeat(1, minmax(100px, 1fr)) 160px;
`,
BaseRow: `
font-size: 14px;
@@ -198,7 +198,7 @@ const Scheduler: FC = () => {
active: false,
deleted: false,
flags: 0,
- time: '12:00',
+ time: '',
cmd: '',
value: '',
name: ''
@@ -216,11 +216,21 @@ const Scheduler: FC = () => {
= ScheduleFlag.SCHEDULE_TIMER && si.flags !== flag
+ ? 'gray'
+ : (si.flags & flag) === flag
+ ? 'primary'
+ : 'grey'
+ }
>
{flag === ScheduleFlag.SCHEDULE_TIMER
? LL.TIMER(0)
- : dow[Math.log(flag) / Math.log(2)]}
+ : flag === ScheduleFlag.SCHEDULE_ONCHANGE
+ ? 'OnChange'
+ : flag === ScheduleFlag.SCHEDULE_CONDITION
+ ? 'Condition'
+ : dow[Math.log(flag) / Math.log(2)]}
@@ -245,7 +255,7 @@ const Scheduler: FC = () => {
{LL.SCHEDULE(0)}
- {LL.TIME(0)}
+ {LL.TIME(0)}/Cond.
{LL.COMMAND(0)}
{LL.VALUE(0)}
{LL.NAME(0)}
@@ -268,16 +278,25 @@ const Scheduler: FC = () => {
)}
|
-
+
- {dayBox(si, ScheduleFlag.SCHEDULE_MON)}
- {dayBox(si, ScheduleFlag.SCHEDULE_TUE)}
- {dayBox(si, ScheduleFlag.SCHEDULE_WED)}
- {dayBox(si, ScheduleFlag.SCHEDULE_THU)}
- {dayBox(si, ScheduleFlag.SCHEDULE_FRI)}
- {dayBox(si, ScheduleFlag.SCHEDULE_SAT)}
- {dayBox(si, ScheduleFlag.SCHEDULE_SUN)}
- {dayBox(si, ScheduleFlag.SCHEDULE_TIMER)}
+ {si.flags < ScheduleFlag.SCHEDULE_TIMER ? (
+ <>
+ {dayBox(si, ScheduleFlag.SCHEDULE_MON)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_TUE)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_WED)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_THU)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_FRI)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_SAT)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_SUN)}
+ >
+ ) : (
+ <>
+ {dayBox(si, ScheduleFlag.SCHEDULE_TIMER)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_ONCHANGE)}
+ {dayBox(si, ScheduleFlag.SCHEDULE_CONDITION)}
+ >
+ )}
|
{si.time} |
@@ -341,7 +360,7 @@ const Scheduler: FC = () => {
}
variant="outlined"
- color="secondary"
+ color="primary"
onClick={addScheduleItem}
>
{LL.ADD(0)}
diff --git a/interface/src/project/SchedulerDialog.tsx b/interface/src/project/SchedulerDialog.tsx
index ab803e84a..324eba784 100644
--- a/interface/src/project/SchedulerDialog.tsx
+++ b/interface/src/project/SchedulerDialog.tsx
@@ -91,10 +91,10 @@ const SchedulerDialog = ({
const getFlagString = (f: number) => {
const new_flags: string[] = [];
- if ((f & 1) === 1) {
+ if ((f & 129) === 1) {
new_flags.push('1');
}
- if ((f & 2) === 2) {
+ if ((f & 130) === 2) {
new_flags.push('2');
}
if ((f & 4) === 4) {
@@ -112,26 +112,45 @@ const SchedulerDialog = ({
if ((f & 64) === 64) {
new_flags.push('64');
}
- if ((f & 128) === 128) {
+ if ((f & 131) === 128) {
new_flags.push('128');
}
+ if ((f & 131) === 129) {
+ new_flags.push('129');
+ }
+ if ((f & 131) === 130) {
+ new_flags.push('130');
+ }
return new_flags;
};
+ const isTimer = editItem.flags === ScheduleFlag.SCHEDULE_TIMER;
+ const isCondition = editItem.flags === ScheduleFlag.SCHEDULE_CONDITION;
+ const isOnChange = editItem.flags === ScheduleFlag.SCHEDULE_ONCHANGE;
+
const showFlag = (si: ScheduleItem, flag: number) => (
{flag === ScheduleFlag.SCHEDULE_TIMER
? LL.TIMER(0)
- : dow[Math.log(flag) / Math.log(2)]}
+ : flag === ScheduleFlag.SCHEDULE_ONCHANGE
+ ? 'On Change'
+ : flag === ScheduleFlag.SCHEDULE_CONDITION
+ ? 'Condition'
+ : dow[Math.log(flag) / Math.log(2)]}
);
- const isTimer = editItem.flags === ScheduleFlag.SCHEDULE_TIMER;
-
return (