Allows my home wiz lights to be timed on and off according to a schedule.

Dependents:   heating

Committer:
andrewboyson
Date:
Wed Jun 09 09:23:54 2021 +0000
Revision:
7:3035a540ef65
Parent:
3:d33dda272a7f
Changed WizSchedMinutesUtcToLocal function so that local midnight in summer is 00h00 rather than 24h00.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 0:9af80a39adcc 1 #include <stdint.h>
andrewboyson 0:9af80a39adcc 2 #include <string.h>
andrewboyson 0:9af80a39adcc 3 #include <stdlib.h>
andrewboyson 0:9af80a39adcc 4
andrewboyson 0:9af80a39adcc 5 #include "http.h"
andrewboyson 0:9af80a39adcc 6 #include "mac.h"
andrewboyson 0:9af80a39adcc 7 #include "clk.h"
andrewboyson 0:9af80a39adcc 8 #include "clktime.h"
andrewboyson 0:9af80a39adcc 9 #include "mstimer.h"
andrewboyson 0:9af80a39adcc 10 #include "log.h"
andrewboyson 0:9af80a39adcc 11 #include "wiz.h"
andrewboyson 0:9af80a39adcc 12 #include "wiz-send.h"
andrewboyson 0:9af80a39adcc 13 #include "wiz-list.h"
andrewboyson 0:9af80a39adcc 14 #include "settings.h"
andrewboyson 0:9af80a39adcc 15
andrewboyson 0:9af80a39adcc 16 #define TIME_TO_WAIT_FOR_SUCCESS_MS 500
andrewboyson 0:9af80a39adcc 17
andrewboyson 3:d33dda272a7f 18 #define DEBUG false
andrewboyson 0:9af80a39adcc 19
andrewboyson 0:9af80a39adcc 20 #define DO_NOTHING 0
andrewboyson 0:9af80a39adcc 21 #define DO_TURN_ON 1
andrewboyson 0:9af80a39adcc 22 #define DO_TURN_OFF 2
andrewboyson 0:9af80a39adcc 23
andrewboyson 0:9af80a39adcc 24 static uint32_t msTimer = 0;
andrewboyson 0:9af80a39adcc 25
andrewboyson 0:9af80a39adcc 26 struct wiz
andrewboyson 0:9af80a39adcc 27 {
andrewboyson 0:9af80a39adcc 28 char mac[6]; //Stored in FRAM
andrewboyson 0:9af80a39adcc 29 char name[WIZ_LIST_NAME_LENGTH]; //Stored in FRAM
andrewboyson 0:9af80a39adcc 30 char room[WIZ_LIST_NAME_LENGTH]; //Stored in FRAM
andrewboyson 0:9af80a39adcc 31 clktime nowtai;
andrewboyson 0:9af80a39adcc 32 int signal;
andrewboyson 0:9af80a39adcc 33 bool on;
andrewboyson 0:9af80a39adcc 34 int dimming;
andrewboyson 0:9af80a39adcc 35 int todo;
andrewboyson 0:9af80a39adcc 36 clktime requestMadeTai;
andrewboyson 0:9af80a39adcc 37 };
andrewboyson 0:9af80a39adcc 38
andrewboyson 0:9af80a39adcc 39 struct wiz items[WIZ_LIST_MAX_ITEMS];
andrewboyson 0:9af80a39adcc 40
andrewboyson 0:9af80a39adcc 41 int WizListGetIndexFromMac(char* mac)
andrewboyson 0:9af80a39adcc 42 {
andrewboyson 0:9af80a39adcc 43 if (!mac) return -1;
andrewboyson 0:9af80a39adcc 44 if (MacIsEmpty(mac)) return -1;
andrewboyson 0:9af80a39adcc 45 int i = 0;
andrewboyson 0:9af80a39adcc 46 while (i < WIZ_LIST_MAX_ITEMS)
andrewboyson 0:9af80a39adcc 47 {
andrewboyson 0:9af80a39adcc 48 if (MacIsSame(items[i].mac, mac)) return i;
andrewboyson 0:9af80a39adcc 49 i++;
andrewboyson 0:9af80a39adcc 50 }
andrewboyson 0:9af80a39adcc 51 return -1;
andrewboyson 0:9af80a39adcc 52 }
andrewboyson 0:9af80a39adcc 53 int getIndexFirstEmpty()
andrewboyson 0:9af80a39adcc 54 {
andrewboyson 0:9af80a39adcc 55 int i = 0;
andrewboyson 0:9af80a39adcc 56 while (i < WIZ_LIST_MAX_ITEMS)
andrewboyson 0:9af80a39adcc 57 {
andrewboyson 0:9af80a39adcc 58 if (MacIsEmpty(items[i].mac)) return i;
andrewboyson 0:9af80a39adcc 59 i++;
andrewboyson 0:9af80a39adcc 60 }
andrewboyson 0:9af80a39adcc 61 return -1;
andrewboyson 0:9af80a39adcc 62 }
andrewboyson 0:9af80a39adcc 63 char* WizListNameFromMac(char* mac) //Be careful that this returns NUL if not found and that the string returned may not be terminated if there is no room
andrewboyson 0:9af80a39adcc 64 {
andrewboyson 0:9af80a39adcc 65 if (!mac) return 0;
andrewboyson 0:9af80a39adcc 66 if (MacIsEmpty(mac)) return 0;
andrewboyson 0:9af80a39adcc 67 int i = 0;
andrewboyson 0:9af80a39adcc 68 while (i < WIZ_LIST_MAX_ITEMS)
andrewboyson 0:9af80a39adcc 69 {
andrewboyson 0:9af80a39adcc 70 if (MacIsSame(mac, items[i].mac)) return items[i].name;
andrewboyson 0:9af80a39adcc 71 i++;
andrewboyson 0:9af80a39adcc 72 }
andrewboyson 0:9af80a39adcc 73 return 0;
andrewboyson 0:9af80a39adcc 74 }
andrewboyson 0:9af80a39adcc 75 char* WizListNameToMac(char* name) //be careful that this returns NUL if not found
andrewboyson 0:9af80a39adcc 76 {
andrewboyson 0:9af80a39adcc 77 if (!name) return 0;
andrewboyson 0:9af80a39adcc 78 if (name[0] == 0) return 0;
andrewboyson 0:9af80a39adcc 79 int i = 0;
andrewboyson 0:9af80a39adcc 80 while (i < WIZ_LIST_MAX_ITEMS)
andrewboyson 0:9af80a39adcc 81 {
andrewboyson 0:9af80a39adcc 82 if (strncmp(name, items[i].name, WIZ_LIST_NAME_LENGTH) == 0) return items[i].mac;
andrewboyson 0:9af80a39adcc 83 i++;
andrewboyson 0:9af80a39adcc 84 }
andrewboyson 0:9af80a39adcc 85 return 0;
andrewboyson 0:9af80a39adcc 86 }
andrewboyson 0:9af80a39adcc 87
andrewboyson 0:9af80a39adcc 88 void WizListSetMac (int i, char* mac ) { MacCopy(items[i].mac, mac); SetWizListMac (i, mac ); }
andrewboyson 0:9af80a39adcc 89 void WizListGetMac (int i, char* mac ) { MacCopy(mac, items[i].mac); }
andrewboyson 0:9af80a39adcc 90 void WizListSetName(int i, char* name) { strncpy(items[i].name, name, WIZ_LIST_NAME_LENGTH); SetWizListName(i, name); }
andrewboyson 0:9af80a39adcc 91 void WizListGetName(int i, char* name) { strncpy(name, items[i].name, WIZ_LIST_NAME_LENGTH); }
andrewboyson 0:9af80a39adcc 92 void WizListSetRoom(int i, char* room) { strncpy(items[i].room, room, WIZ_LIST_NAME_LENGTH); SetWizListRoom(i, room); }
andrewboyson 0:9af80a39adcc 93 void WizListGetRoom(int i, char* room) { strncpy(room, items[i].room, WIZ_LIST_NAME_LENGTH); }
andrewboyson 0:9af80a39adcc 94
andrewboyson 0:9af80a39adcc 95
andrewboyson 0:9af80a39adcc 96 void WizListStatusAdd(char* mac, char* rssi, char* state, char* sceneId, char* dimming)
andrewboyson 0:9af80a39adcc 97 {
andrewboyson 0:9af80a39adcc 98 int i = WizListGetIndexFromMac(mac);
andrewboyson 0:9af80a39adcc 99 if (i < 0)
andrewboyson 0:9af80a39adcc 100 {
andrewboyson 0:9af80a39adcc 101 i = getIndexFirstEmpty();
andrewboyson 0:9af80a39adcc 102 if (i < 0)
andrewboyson 0:9af80a39adcc 103 {
andrewboyson 0:9af80a39adcc 104 LogTimeF("WIZ - no more spaces in lights list\r\n");
andrewboyson 0:9af80a39adcc 105 return;
andrewboyson 0:9af80a39adcc 106 }
andrewboyson 0:9af80a39adcc 107 WizListSetMac(i, mac);
andrewboyson 0:9af80a39adcc 108 }
andrewboyson 0:9af80a39adcc 109 items[i].nowtai = ClkNowTai();
andrewboyson 0:9af80a39adcc 110 items[i].signal = atoi(rssi);
andrewboyson 0:9af80a39adcc 111 items[i].on = state[0] == 't';
andrewboyson 0:9af80a39adcc 112 items[i].dimming = atoi(dimming);
andrewboyson 0:9af80a39adcc 113 }
andrewboyson 0:9af80a39adcc 114 void WizListMoveUp(int i)
andrewboyson 0:9af80a39adcc 115 {
andrewboyson 0:9af80a39adcc 116 if (i <= 0) return; //Cannot move further up
andrewboyson 0:9af80a39adcc 117 struct wiz item;
andrewboyson 0:9af80a39adcc 118 MacCopy(item.mac, items[i].mac);
andrewboyson 0:9af80a39adcc 119 strncpy(item.name, items[i].name, WIZ_LIST_NAME_LENGTH);
andrewboyson 0:9af80a39adcc 120 strncpy(item.room, items[i].room, WIZ_LIST_NAME_LENGTH);
andrewboyson 0:9af80a39adcc 121 item.nowtai = items[i].nowtai;
andrewboyson 0:9af80a39adcc 122 item.signal = items[i].signal;
andrewboyson 0:9af80a39adcc 123 item.on = items[i].on;
andrewboyson 0:9af80a39adcc 124 item.dimming = items[i].dimming;
andrewboyson 0:9af80a39adcc 125
andrewboyson 0:9af80a39adcc 126 WizListSetMac (i, items[i-1].mac );
andrewboyson 0:9af80a39adcc 127 WizListSetName(i, items[i-1].name);
andrewboyson 0:9af80a39adcc 128 WizListSetRoom(i, items[i-1].room);
andrewboyson 0:9af80a39adcc 129 items[i].nowtai = items[i-1].nowtai;
andrewboyson 0:9af80a39adcc 130 items[i].signal = items[i-1].signal;
andrewboyson 0:9af80a39adcc 131 items[i].on = items[i-1].on;
andrewboyson 0:9af80a39adcc 132 items[i].dimming = items[i-1].dimming;
andrewboyson 0:9af80a39adcc 133
andrewboyson 0:9af80a39adcc 134 WizListSetMac (i-1, item.mac );
andrewboyson 0:9af80a39adcc 135 WizListSetName(i-1, item.name);
andrewboyson 0:9af80a39adcc 136 WizListSetRoom(i-1, item.room);
andrewboyson 0:9af80a39adcc 137 items[i-1].nowtai = item.nowtai;
andrewboyson 0:9af80a39adcc 138 items[i-1].signal = item.signal;
andrewboyson 0:9af80a39adcc 139 items[i-1].on = item.on;
andrewboyson 0:9af80a39adcc 140 items[i-1].dimming = item.dimming;
andrewboyson 0:9af80a39adcc 141 }
andrewboyson 0:9af80a39adcc 142 void WizListMoveDown(int i)
andrewboyson 0:9af80a39adcc 143 {
andrewboyson 0:9af80a39adcc 144 if (i >= WIZ_LIST_MAX_ITEMS - 1) return; //Cannot move further down
andrewboyson 0:9af80a39adcc 145 struct wiz item;
andrewboyson 0:9af80a39adcc 146 MacCopy(item.mac, items[i].mac);
andrewboyson 0:9af80a39adcc 147 strncpy(item.name, items[i].name, WIZ_LIST_NAME_LENGTH);
andrewboyson 0:9af80a39adcc 148 strncpy(item.room, items[i].room, WIZ_LIST_NAME_LENGTH);
andrewboyson 0:9af80a39adcc 149 item.nowtai = items[i].nowtai;
andrewboyson 0:9af80a39adcc 150 item.signal = items[i].signal;
andrewboyson 0:9af80a39adcc 151 item.on = items[i].on;
andrewboyson 0:9af80a39adcc 152 item.dimming = items[i].dimming;
andrewboyson 0:9af80a39adcc 153
andrewboyson 0:9af80a39adcc 154 WizListSetMac (i, items[i+1].mac);
andrewboyson 0:9af80a39adcc 155 WizListSetName(i, items[i+1].name);
andrewboyson 0:9af80a39adcc 156 WizListSetRoom(i, items[i+1].room);
andrewboyson 0:9af80a39adcc 157 items[i].nowtai = items[i+1].nowtai;
andrewboyson 0:9af80a39adcc 158 items[i].signal = items[i+1].signal;
andrewboyson 0:9af80a39adcc 159 items[i].on = items[i+1].on;
andrewboyson 0:9af80a39adcc 160 items[i].dimming = items[i+1].dimming;
andrewboyson 0:9af80a39adcc 161
andrewboyson 0:9af80a39adcc 162 WizListSetMac (i+1, item.mac);
andrewboyson 0:9af80a39adcc 163 WizListSetName(i+1, item.name);
andrewboyson 0:9af80a39adcc 164 WizListSetRoom(i+1, item.room);
andrewboyson 0:9af80a39adcc 165 items[i+1].nowtai = item.nowtai;
andrewboyson 0:9af80a39adcc 166 items[i+1].signal = item.signal;
andrewboyson 0:9af80a39adcc 167 items[i+1].on = item.on;
andrewboyson 0:9af80a39adcc 168 items[i+1].dimming = item.dimming;
andrewboyson 0:9af80a39adcc 169 }
andrewboyson 0:9af80a39adcc 170 void WizListHttp()
andrewboyson 0:9af80a39adcc 171 {
andrewboyson 0:9af80a39adcc 172 int i = 0;
andrewboyson 0:9af80a39adcc 173 while (i < WIZ_LIST_MAX_ITEMS)
andrewboyson 0:9af80a39adcc 174 {
andrewboyson 0:9af80a39adcc 175 if (!MacIsEmpty(items[i].mac))
andrewboyson 0:9af80a39adcc 176 {
andrewboyson 0:9af80a39adcc 177 MacHttp ( items[i].mac ); HttpAddChar('\t'); //MAC
andrewboyson 0:9af80a39adcc 178 HttpAddTextN( items[i].name, WIZ_LIST_NAME_LENGTH); HttpAddChar('\t'); //Name
andrewboyson 0:9af80a39adcc 179 HttpAddTextN( items[i].room, WIZ_LIST_NAME_LENGTH); HttpAddChar('\t'); //Room
andrewboyson 0:9af80a39adcc 180
andrewboyson 0:9af80a39adcc 181 if (items[i].nowtai)
andrewboyson 0:9af80a39adcc 182 {
andrewboyson 0:9af80a39adcc 183 clktime taiDiff = ClkNowTai() - items[i].nowtai;
andrewboyson 0:9af80a39adcc 184 int seconds = taiDiff >> CLK_TIME_ONE_SECOND_SHIFT;
andrewboyson 0:9af80a39adcc 185 HttpAddF("%d", seconds);
andrewboyson 0:9af80a39adcc 186 }
andrewboyson 0:9af80a39adcc 187 HttpAddChar('\t'); //Seconds since last status received
andrewboyson 0:9af80a39adcc 188
andrewboyson 0:9af80a39adcc 189 HttpAddF("%d", items[i].signal ); HttpAddChar('\t'); //-127 to 0
andrewboyson 0:9af80a39adcc 190 HttpAddF("%d", items[i].on ); HttpAddChar('\t'); //1 or 0
andrewboyson 0:9af80a39adcc 191 HttpAddF("%d", items[i].dimming ); //0 to 100
andrewboyson 0:9af80a39adcc 192 }
andrewboyson 0:9af80a39adcc 193 HttpAddChar('\n');
andrewboyson 0:9af80a39adcc 194 i++;
andrewboyson 0:9af80a39adcc 195 }
andrewboyson 0:9af80a39adcc 196 }
andrewboyson 0:9af80a39adcc 197 void WizListInit()
andrewboyson 0:9af80a39adcc 198 {
andrewboyson 0:9af80a39adcc 199 msTimer = MsTimerCount;
andrewboyson 0:9af80a39adcc 200 for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++)
andrewboyson 0:9af80a39adcc 201 {
andrewboyson 0:9af80a39adcc 202 GetWizListMac (i, items[i].mac );
andrewboyson 0:9af80a39adcc 203 GetWizListName(i, items[i].name);
andrewboyson 0:9af80a39adcc 204 GetWizListRoom(i, items[i].room);
andrewboyson 0:9af80a39adcc 205 items[i].nowtai = 0;
andrewboyson 0:9af80a39adcc 206 items[i].signal = 0;
andrewboyson 0:9af80a39adcc 207 items[i].on = 0;
andrewboyson 0:9af80a39adcc 208 items[i].dimming = 0;
andrewboyson 0:9af80a39adcc 209 items[i].todo = 0;
andrewboyson 0:9af80a39adcc 210 items[i].requestMadeTai = 0;
andrewboyson 0:9af80a39adcc 211 }
andrewboyson 0:9af80a39adcc 212 }
andrewboyson 0:9af80a39adcc 213 static void log(char* mac, char* text)
andrewboyson 0:9af80a39adcc 214 {
andrewboyson 3:d33dda272a7f 215 if (!DEBUG) return;
andrewboyson 0:9af80a39adcc 216 LogTimeF("Wiz");
andrewboyson 0:9af80a39adcc 217 if (mac)
andrewboyson 0:9af80a39adcc 218 {
andrewboyson 0:9af80a39adcc 219 Log(" ");
andrewboyson 0:9af80a39adcc 220 MacLog(mac);
andrewboyson 0:9af80a39adcc 221 }
andrewboyson 0:9af80a39adcc 222 Log(" - ");
andrewboyson 0:9af80a39adcc 223 Log(text);
andrewboyson 0:9af80a39adcc 224 }
andrewboyson 0:9af80a39adcc 225
andrewboyson 0:9af80a39adcc 226 void WizListMain()
andrewboyson 0:9af80a39adcc 227 {
andrewboyson 0:9af80a39adcc 228 if (WizSendBusy()) return;
andrewboyson 0:9af80a39adcc 229 if (MsTimerRepetitive(&msTimer, 1000))
andrewboyson 0:9af80a39adcc 230 {
andrewboyson 0:9af80a39adcc 231 static int seconds = 0;
andrewboyson 0:9af80a39adcc 232 seconds++;
andrewboyson 0:9af80a39adcc 233 if (seconds > 20)
andrewboyson 0:9af80a39adcc 234 {
andrewboyson 0:9af80a39adcc 235 WizSendRegister(); //This will set WizSendBusy
andrewboyson 0:9af80a39adcc 236 seconds = 0;
andrewboyson 0:9af80a39adcc 237 return;
andrewboyson 0:9af80a39adcc 238 }
andrewboyson 0:9af80a39adcc 239 }
andrewboyson 0:9af80a39adcc 240
andrewboyson 0:9af80a39adcc 241 static int i = -1;
andrewboyson 0:9af80a39adcc 242 i++;
andrewboyson 0:9af80a39adcc 243 if (i >= WIZ_LIST_MAX_ITEMS) i = 0;
andrewboyson 0:9af80a39adcc 244
andrewboyson 0:9af80a39adcc 245 if (items[i].todo && !MacIsEmpty(items[i].mac))
andrewboyson 0:9af80a39adcc 246 {
andrewboyson 0:9af80a39adcc 247 clktime taiDiff = ClkNowTai() - items[i].requestMadeTai;
andrewboyson 0:9af80a39adcc 248 int ms = taiDiff >> (CLK_TIME_ONE_SECOND_SHIFT - 10); //1 ==> 1 /1024 rather than 1/1000 seconds but its good enough
andrewboyson 0:9af80a39adcc 249 if (!items[i].requestMadeTai || ms > TIME_TO_WAIT_FOR_SUCCESS_MS)
andrewboyson 0:9af80a39adcc 250 {
andrewboyson 0:9af80a39adcc 251 switch(items[i].todo)
andrewboyson 0:9af80a39adcc 252 {
andrewboyson 0:9af80a39adcc 253 case DO_TURN_ON:
andrewboyson 0:9af80a39adcc 254 if (!items[i].requestMadeTai) log(items[i].mac, "Turn on\r\n");
andrewboyson 0:9af80a39adcc 255 else log(items[i].mac, "Turn on repeat\r\n");
andrewboyson 0:9af80a39adcc 256 WizSendTurnOneOn(items[i].mac);
andrewboyson 0:9af80a39adcc 257 items[i].requestMadeTai = ClkNowTai();
andrewboyson 0:9af80a39adcc 258 break;
andrewboyson 0:9af80a39adcc 259 case DO_TURN_OFF:
andrewboyson 0:9af80a39adcc 260 if (!items[i].requestMadeTai) log(items[i].mac, "Turn off\r\n");
andrewboyson 0:9af80a39adcc 261 else log(items[i].mac, "Turn off repeat\r\n");
andrewboyson 0:9af80a39adcc 262 WizSendTurnOneOff(items[i].mac);
andrewboyson 0:9af80a39adcc 263 items[i].requestMadeTai = ClkNowTai();
andrewboyson 0:9af80a39adcc 264 break;
andrewboyson 0:9af80a39adcc 265 }
andrewboyson 0:9af80a39adcc 266 }
andrewboyson 0:9af80a39adcc 267 }
andrewboyson 0:9af80a39adcc 268 }
andrewboyson 0:9af80a39adcc 269 void WizListTurnIndexOn(int i)
andrewboyson 0:9af80a39adcc 270 {
andrewboyson 0:9af80a39adcc 271 if (MacIsEmpty(items[i].mac)) return;
andrewboyson 0:9af80a39adcc 272 items[i].todo = DO_TURN_ON;
andrewboyson 0:9af80a39adcc 273 items[i].requestMadeTai = 0;
andrewboyson 0:9af80a39adcc 274 }
andrewboyson 0:9af80a39adcc 275 void WizListTurnIndexOff(int i)
andrewboyson 0:9af80a39adcc 276 {
andrewboyson 0:9af80a39adcc 277 if (MacIsEmpty(items[i].mac)) return;
andrewboyson 0:9af80a39adcc 278 items[i].todo = DO_TURN_OFF;
andrewboyson 0:9af80a39adcc 279 items[i].requestMadeTai = 0;
andrewboyson 0:9af80a39adcc 280 }
andrewboyson 0:9af80a39adcc 281 void WizListTurnMacOn (char* mac)
andrewboyson 0:9af80a39adcc 282 {
andrewboyson 0:9af80a39adcc 283 if (!mac) return;
andrewboyson 0:9af80a39adcc 284 if (MacIsEmpty(mac)) return;
andrewboyson 0:9af80a39adcc 285 int i = WizListGetIndexFromMac(mac);
andrewboyson 0:9af80a39adcc 286 if (i < 0) return;
andrewboyson 0:9af80a39adcc 287 items[i].todo = DO_TURN_ON;
andrewboyson 0:9af80a39adcc 288 items[i].requestMadeTai = 0;
andrewboyson 0:9af80a39adcc 289 }
andrewboyson 0:9af80a39adcc 290 void WizListTurnMacOff(char* mac)
andrewboyson 0:9af80a39adcc 291 {
andrewboyson 0:9af80a39adcc 292 if (!mac) return;
andrewboyson 0:9af80a39adcc 293 if (MacIsEmpty(mac)) return;
andrewboyson 0:9af80a39adcc 294 int i = WizListGetIndexFromMac(mac);
andrewboyson 0:9af80a39adcc 295 if (i < 0) return;
andrewboyson 0:9af80a39adcc 296 items[i].todo = DO_TURN_OFF;
andrewboyson 0:9af80a39adcc 297 items[i].requestMadeTai = 0;
andrewboyson 0:9af80a39adcc 298 }
andrewboyson 0:9af80a39adcc 299 void WizListTurnAllOn()
andrewboyson 0:9af80a39adcc 300 {
andrewboyson 0:9af80a39adcc 301 for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++)
andrewboyson 0:9af80a39adcc 302 {
andrewboyson 0:9af80a39adcc 303 if (!MacIsEmpty(items[i].mac))
andrewboyson 0:9af80a39adcc 304 {
andrewboyson 0:9af80a39adcc 305 items[i].todo = DO_TURN_ON;
andrewboyson 0:9af80a39adcc 306 items[i].requestMadeTai = ClkNowTai();
andrewboyson 0:9af80a39adcc 307 }
andrewboyson 0:9af80a39adcc 308 }
andrewboyson 0:9af80a39adcc 309 WizSendTurnAllOn();
andrewboyson 0:9af80a39adcc 310 log(0, "Turn all on\r\n");
andrewboyson 0:9af80a39adcc 311 }
andrewboyson 0:9af80a39adcc 312 void WizListTurnAllOff( )
andrewboyson 0:9af80a39adcc 313 {
andrewboyson 0:9af80a39adcc 314 for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++)
andrewboyson 0:9af80a39adcc 315 {
andrewboyson 0:9af80a39adcc 316 if (!MacIsEmpty(items[i].mac))
andrewboyson 0:9af80a39adcc 317 {
andrewboyson 0:9af80a39adcc 318 items[i].todo = DO_TURN_OFF;
andrewboyson 0:9af80a39adcc 319 items[i].requestMadeTai = ClkNowTai();
andrewboyson 0:9af80a39adcc 320 }
andrewboyson 0:9af80a39adcc 321 }
andrewboyson 0:9af80a39adcc 322 WizSendTurnAllOff();
andrewboyson 0:9af80a39adcc 323 log(0, "Turn all off\r\n");
andrewboyson 0:9af80a39adcc 324 }
andrewboyson 0:9af80a39adcc 325 void WizListTurnRoomOn(char* room)
andrewboyson 0:9af80a39adcc 326 {
andrewboyson 0:9af80a39adcc 327 for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++)
andrewboyson 0:9af80a39adcc 328 {
andrewboyson 0:9af80a39adcc 329 if (!MacIsEmpty(items[i].mac) && strncmp(items[i].room, room, WIZ_LIST_NAME_LENGTH) == 0)
andrewboyson 0:9af80a39adcc 330 {
andrewboyson 0:9af80a39adcc 331 WizListTurnMacOn(items[i].mac);
andrewboyson 0:9af80a39adcc 332 }
andrewboyson 0:9af80a39adcc 333 }
andrewboyson 0:9af80a39adcc 334 }
andrewboyson 0:9af80a39adcc 335 void WizListTurnRoomOff(char* room)
andrewboyson 0:9af80a39adcc 336 {
andrewboyson 0:9af80a39adcc 337 for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++)
andrewboyson 0:9af80a39adcc 338 {
andrewboyson 0:9af80a39adcc 339 if (!MacIsEmpty(items[i].mac) && strncmp(items[i].room, room, WIZ_LIST_NAME_LENGTH) == 0)
andrewboyson 0:9af80a39adcc 340 {
andrewboyson 0:9af80a39adcc 341 WizListTurnMacOff(items[i].mac);
andrewboyson 0:9af80a39adcc 342 }
andrewboyson 0:9af80a39adcc 343 }
andrewboyson 0:9af80a39adcc 344 }
andrewboyson 0:9af80a39adcc 345 void WizListReceivedSuccess(char* mac)
andrewboyson 0:9af80a39adcc 346 {
andrewboyson 0:9af80a39adcc 347 if (!mac) return;
andrewboyson 0:9af80a39adcc 348 int i = WizListGetIndexFromMac(mac);
andrewboyson 0:9af80a39adcc 349 if (i < 0) return;
andrewboyson 0:9af80a39adcc 350 switch (items[i].todo)
andrewboyson 0:9af80a39adcc 351 {
andrewboyson 0:9af80a39adcc 352 case DO_TURN_ON:
andrewboyson 0:9af80a39adcc 353 items[i].on = true;
andrewboyson 0:9af80a39adcc 354 log(items[i].mac, "Turn on success\r\n");
andrewboyson 0:9af80a39adcc 355 break;
andrewboyson 0:9af80a39adcc 356 case DO_TURN_OFF:
andrewboyson 0:9af80a39adcc 357 items[i].on = false;
andrewboyson 0:9af80a39adcc 358 log(items[i].mac, "Turn off success\r\n");
andrewboyson 0:9af80a39adcc 359 break;
andrewboyson 0:9af80a39adcc 360 }
andrewboyson 0:9af80a39adcc 361 items[i].todo = DO_NOTHING;
andrewboyson 0:9af80a39adcc 362 items[i].requestMadeTai = 0;
andrewboyson 0:9af80a39adcc 363 }