开关分为即时开关和定时开关。即时开关支持即时开,即时关,即时反转。
插座的定时开关支持x秒之后每隔y秒总共执行z次定时器。而一次定时器支持执行两次开关,如9点开,10点关。第二次的开关动作依据第一次开关动作产生,如第一次开关动作是开,第二次开关动作则是关,第一次开关动作是关,第二次是开,第一次是反转,第二次也是反转。
发送数据格式:
typedef struct _cs_onoff{
int64_t carry; //延时时间,应为正数,表示定时器从现在开始carry秒后开始执行第一次
int32_t count; //执行次数,负数为无限次
uint32_t interval; //执行间隔,单位秒
int32_t number; //定时器编号,目前支持0-7共8个定时器。如果是负数,系统会选择第一个没有使用的定时器。
int32_t onoff; //0关,1开,2反转
uint32_t week; //每一位表示一个星期的一天,星期1是(1<<(1-1)),星期4是(1<<(4-1)) ,星期天是(1<<(7-1))
uint32_t onoffnumber; //第几个开关,目前只支持一个,所有设置为0
uint32_t lasttime; //持续时间,单位秒,比如我要1点开,2点关,持续时间是3600
int8_t mark[32]; //备注信息
uint32_t disable; //0设置定时器,必须正确的填充定时器信息,1禁用定时器,不会删除定时器信息,但定时器不会执行,2删除定时器,会删除定时器信息,而且定时器也不会再执行,3为启用定时器,定时器依据以前设置的定时信息执行。
}cs_onoff;
定时开关设置举例:
假设现在是9点,星期1,要设置今天和明天10点开,12点关。
Carry = 3600;
Count = 2;
Week = 0xff;//设置0xC也可以
Interval = 24*3600;
Lasttime = 2*3600;//如只是10点开关,不用12点关,则设置成0
Onoff = 1;