自动模式设置

main
Lufaneng 6 months ago
parent 975eab89b2
commit 1d9471dfaf

@ -10,9 +10,17 @@ export struct ParameterSettings {
@State lgnLat: LgnLatData = new LgnLatData();
@State sunRiseSet: SunRiseSetData = new SunRiseSetData();
@State sunRiseTime: SunRiseTimeData = new SunRiseTimeData();
@State weekModes: number[] = [0, 0, 0, 0, 0, 0, 0]; // Sun-Sat
@State fullWeekModeData: number[] = []; // Store full config data to write back
private days: string[] = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
private displayIndices: number[] = [1, 2, 3, 4, 5, 6, 0]; // Display order: Mon-Sat, Sun
private modeOptions: string[] = ['模式1', '模式2', '模式3'];
private m9zService: M9zService = M9zService.getInstance();
aboutToAppear() {
if (this.deviceId) {
// initial load handled by onTabChange? No, initial index might be 0, this is 1. IF this is 1 initially?
@ -66,7 +74,24 @@ export struct ParameterSettings {
this.m9zService.getSunRiseTime({
onSuccess: (data: SunRiseTimeData): void => {
this.sunRiseTime = data;
this.isLoading = false;
// 4. Get Week Mode
this.m9zService.getWeekMode({
onSuccess: (data: number[]): void => {
console.info('WeeklyMode Raw Data:', JSON.stringify(data)); // Debug log
if (data && data.length >= 7) {
this.fullWeekModeData = data;
// Assume last 7 bytes are the week modes (Mon-Sun).
const startIndex = data.length - 7;
this.weekModes = data.slice(startIndex);
console.info('WeeklyMode extracted:', JSON.stringify(this.weekModes));
}
this.isLoading = false;
},
onError: (err: string): void => {
console.error('WeeklyMode Error:', err);
this.isLoading = false;
}
});
},
onError: (err: string): void => {
this.isLoading = false;
@ -134,6 +159,28 @@ export struct ParameterSettings {
});
}
setWeekMode() {
if (this.fullWeekModeData.length < 7) {
promptAction.showToast({ message: '未获取到完整配置,无法保存' });
return;
}
// Update full data with current week modes
const startIndex = this.fullWeekModeData.length - 7;
for (let i = 0; i < 7; i++) {
this.fullWeekModeData[startIndex + i] = this.weekModes[i];
}
console.info('WeeklyMode Saving:', JSON.stringify(this.fullWeekModeData));
this.m9zService.setWeekMode(this.fullWeekModeData, {
onSuccess: (val: boolean): void => { promptAction.showToast({ message: '周模式保存成功' }); },
onError: (err: string): void => { promptAction.showToast({ message: '保存失败: ' + err }); }
});
}
build() {
Stack() {
Scroll() {
@ -209,6 +256,44 @@ export struct ParameterSettings {
.backgroundColor('rgba(20, 38, 81, 0.95)')
.borderRadius(8)
.margin({bottom: 15})
.margin({bottom: 15})
.width('100%')
// 周运行模式设置
Column() {
Text('周运行模式设置').fontSize(16).fontWeight(FontWeight.Bold).fontColor('#22fdc8').width('100%').margin({bottom: 10})
ForEach(this.displayIndices, (dataIndex: number) => {
Row() {
Text(this.days[dataIndex]).fontColor('#eaf6fc').width(50)
Select([
{ value: '模式1' },
{ value: '模式2' },
{ value: '模式3' }
])
.selected(this.weekModes[dataIndex])
.value(this.modeOptions[this.weekModes[dataIndex]])
.font({ size: 14 })
.fontColor('#fff')
.selectedOptionFont({ size: 14 })
.optionFont({ size: 14 })
.menuBackgroundColor('#2d3a51')
.onSelect((idx: number) => {
this.weekModes[dataIndex] = idx;
})
.backgroundColor('#333')
.height(30)
}.width('100%').margin({bottom: 5}).justifyContent(FlexAlign.Start)
})
Row() {
Button('保存').fontSize(12).onClick(() => this.setWeekMode())
}.margin({top: 10})
}
.padding(10)
.backgroundColor('rgba(20, 38, 81, 0.95)')
.borderRadius(8)
.margin({bottom: 15})
.width('100%')
// 重启

@ -91,7 +91,7 @@ export class ControlTask {
}
// 定义联合类型以避免使用 any
export type ServiceData = boolean | number | Date | ManualData | LgnLatData | SunRiseSetData | SunRiseTimeData | TaskProgram | DeviceStatus;
export type ServiceData = boolean | number | number[] | Date | ManualData | LgnLatData | SunRiseSetData | SunRiseTimeData | TaskProgram | DeviceStatus;
export interface Callback<T> {
onSuccess: (data: T) => void;
@ -378,6 +378,8 @@ export class M9zService {
return this.parseLgnLat(data);
case M9zCmd.SunRiseSet: // 0x06
return this.parseSunRiseSet(data);
case M9zCmd.DeviceConfig: // 0x11
return data; // Return raw number[] for week mode
case M9zCmd.StartTask:
case M9zCmd.MiddleTask:
case M9zCmd.StopTask:
@ -604,6 +606,16 @@ export class M9zService {
this.sendFrame(this.buildM9zCommand(M9zCmd.Mode, CMD_WRITE, 0x00, [mode]));
}
public getWeekMode(cb: Callback<number[]>): void {
this.registerCallback(M9zCmd.DeviceConfig, cb);
this.sendFrame(this.buildM9zCommand(M9zCmd.DeviceConfig, CMD_READ, 0x00, []));
}
public setWeekMode(modes: number[], cb: Callback<boolean>): void {
this.registerCallback(M9zCmd.DeviceConfig, cb);
this.sendFrame(this.buildM9zCommand(M9zCmd.DeviceConfig, CMD_WRITE, 0x00, modes));
}
public restartDevice(cb: Callback<boolean>): void {
this.registerCallback(M9zCmd.Restart, cb);
this.sendFrame(this.buildM9zCommand(M9zCmd.Restart, CMD_WRITE, 0x00, []));

Loading…
Cancel
Save