sprinklers3/app/script/sprinklers.ts

89 lines
1.8 KiB
TypeScript
Raw Normal View History

import { observable, IObservableArray } from "mobx";
export class Section {
@observable
2017-05-06 15:39:25 -06:00
public name: string = "";
@observable
2017-05-06 15:39:25 -06:00
public state: boolean = false;
}
2017-05-06 15:39:25 -06:00
export interface ITimeOfDay {
hour: number;
minute: number;
second: number;
millisecond: number;
}
2017-05-06 15:39:25 -06:00
export enum Weekday {
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,
}
2017-05-06 15:39:25 -06:00
export class Schedule {
public times: ITimeOfDay[] = [];
public weekdays: Weekday[] = [];
public from?: Date = null;
public to?: Date = null;
}
export class Duration {
public static fromSeconds(seconds: number): Duration {
return new Duration(Math.floor(seconds / 60), seconds % 60);
}
public minutes: number = 0;
public seconds: number = 0;
constructor(minutes: number, seconds: number) {
this.minutes = minutes;
this.seconds = seconds;
}
public toSeconds(): number {
return this.minutes * 60 + this.seconds;
}
}
2017-05-06 15:39:25 -06:00
export interface IProgramItem {
// the section number
section: number;
// duration of the run
duration: Duration;
}
2017-05-03 23:00:10 -06:00
export class Program {
@observable
2017-05-06 15:39:25 -06:00
public name: string = "";
@observable
2017-05-06 15:39:25 -06:00
public enabled: boolean = false;
@observable
2017-05-06 15:39:25 -06:00
public schedule: Schedule = new Schedule();
@observable
2017-05-06 15:39:25 -06:00
public sequence: IProgramItem[] = [];
2017-05-03 23:00:10 -06:00
@observable
2017-05-06 15:39:25 -06:00
public running: boolean = false;
}
export abstract class SprinklersDevice {
@observable
2017-05-06 15:39:25 -06:00
public connected: boolean = false;
@observable
public sections: IObservableArray<Section> = [] as IObservableArray<Section>;
@observable
public programs: IObservableArray<Program> = [] as IObservableArray<Program>;
abstract get id(): string;
}
2017-05-06 15:39:25 -06:00
export interface ISprinklersApi {
start();
2017-05-06 15:39:25 -06:00
getDevice(id: string): SprinklersDevice;
2017-05-06 15:39:25 -06:00
removeDevice(id: string);
}