Allows my home wiz lights to be timed on and off according to a schedule.
web/web-wiz-query.c@7:3035a540ef65, 2021-06-09 (annotated)
- Committer:
- andrewboyson
- Date:
- Wed Jun 09 09:23:54 2021 +0000
- Revision:
- 7:3035a540ef65
- Parent:
- 0:9af80a39adcc
Changed WizSchedMinutesUtcToLocal function so that local midnight in summer is 00h00 rather than 24h00.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewboyson | 0:9af80a39adcc | 1 | #include <string.h> |
andrewboyson | 0:9af80a39adcc | 2 | #include <stdlib.h> |
andrewboyson | 0:9af80a39adcc | 3 | #include "http.h" |
andrewboyson | 0:9af80a39adcc | 4 | #include "mac.h" |
andrewboyson | 0:9af80a39adcc | 5 | #include "wiz.h" |
andrewboyson | 0:9af80a39adcc | 6 | #include "wiz-list.h" |
andrewboyson | 0:9af80a39adcc | 7 | #include "wiz-sched.h" |
andrewboyson | 0:9af80a39adcc | 8 | #include "settings.h" |
andrewboyson | 0:9af80a39adcc | 9 | #include "log.h" |
andrewboyson | 0:9af80a39adcc | 10 | |
andrewboyson | 0:9af80a39adcc | 11 | void WebWizQuery(char* pQuery) |
andrewboyson | 0:9af80a39adcc | 12 | { |
andrewboyson | 0:9af80a39adcc | 13 | while (pQuery) |
andrewboyson | 0:9af80a39adcc | 14 | { |
andrewboyson | 0:9af80a39adcc | 15 | char* pName; |
andrewboyson | 0:9af80a39adcc | 16 | char* pValue; |
andrewboyson | 0:9af80a39adcc | 17 | pQuery = HttpQuerySplit(pQuery, &pName, &pValue); |
andrewboyson | 0:9af80a39adcc | 18 | |
andrewboyson | 0:9af80a39adcc | 19 | HttpQueryUnencode(pValue); |
andrewboyson | 0:9af80a39adcc | 20 | |
andrewboyson | 0:9af80a39adcc | 21 | int value = HttpQueryValueAsInt(pValue); |
andrewboyson | 0:9af80a39adcc | 22 | |
andrewboyson | 0:9af80a39adcc | 23 | if (HttpSameStr(pName, "wiztrace" )) ChgTraceWiz(); |
andrewboyson | 0:9af80a39adcc | 24 | |
andrewboyson | 0:9af80a39adcc | 25 | if (HttpSameStr(pName, "turn-all-on" )) WizListTurnAllOn (); |
andrewboyson | 0:9af80a39adcc | 26 | if (HttpSameStr(pName, "turn-all-off")) WizListTurnAllOff(); |
andrewboyson | 0:9af80a39adcc | 27 | |
andrewboyson | 0:9af80a39adcc | 28 | //Lights |
andrewboyson | 0:9af80a39adcc | 29 | if (strncmp(pName, "lnam", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 30 | { |
andrewboyson | 0:9af80a39adcc | 31 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 32 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 33 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 34 | { |
andrewboyson | 0:9af80a39adcc | 35 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 36 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 37 | } |
andrewboyson | 0:9af80a39adcc | 38 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 39 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 40 | WizListSetName(i, pValue ? pValue : ""); |
andrewboyson | 0:9af80a39adcc | 41 | } |
andrewboyson | 0:9af80a39adcc | 42 | if (strncmp(pName, "lroo", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 43 | { |
andrewboyson | 0:9af80a39adcc | 44 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 45 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 46 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 47 | { |
andrewboyson | 0:9af80a39adcc | 48 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 49 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 50 | } |
andrewboyson | 0:9af80a39adcc | 51 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 52 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 53 | WizListSetRoom(i, pValue ? pValue : ""); |
andrewboyson | 0:9af80a39adcc | 54 | } |
andrewboyson | 0:9af80a39adcc | 55 | if (strncmp(pName, "ldel", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 56 | { |
andrewboyson | 0:9af80a39adcc | 57 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 58 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 59 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 60 | { |
andrewboyson | 0:9af80a39adcc | 61 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 62 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 63 | } |
andrewboyson | 0:9af80a39adcc | 64 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 65 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 66 | char mac[6]; |
andrewboyson | 0:9af80a39adcc | 67 | MacClear(mac); |
andrewboyson | 0:9af80a39adcc | 68 | WizListSetMac (i, mac); |
andrewboyson | 0:9af80a39adcc | 69 | WizListSetName(i, ""); |
andrewboyson | 0:9af80a39adcc | 70 | } |
andrewboyson | 0:9af80a39adcc | 71 | if (strncmp(pName, "lmov", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 72 | { |
andrewboyson | 0:9af80a39adcc | 73 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 74 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 75 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 76 | { |
andrewboyson | 0:9af80a39adcc | 77 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 78 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 79 | } |
andrewboyson | 0:9af80a39adcc | 80 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 81 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 82 | if (pValue) |
andrewboyson | 0:9af80a39adcc | 83 | { |
andrewboyson | 0:9af80a39adcc | 84 | if (pValue[0] == 'u') WizListMoveUp (i); |
andrewboyson | 0:9af80a39adcc | 85 | if (pValue[0] == 'd') WizListMoveDown(i); |
andrewboyson | 0:9af80a39adcc | 86 | } |
andrewboyson | 0:9af80a39adcc | 87 | } |
andrewboyson | 0:9af80a39adcc | 88 | if (strncmp(pName, "lswi", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 89 | { |
andrewboyson | 0:9af80a39adcc | 90 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 91 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 92 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 93 | { |
andrewboyson | 0:9af80a39adcc | 94 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 95 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 96 | } |
andrewboyson | 0:9af80a39adcc | 97 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 98 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 99 | if (pValue) |
andrewboyson | 0:9af80a39adcc | 100 | { |
andrewboyson | 0:9af80a39adcc | 101 | if (pValue[0] == '1') WizListTurnIndexOn (i); |
andrewboyson | 0:9af80a39adcc | 102 | if (pValue[0] == '0') WizListTurnIndexOff(i); |
andrewboyson | 0:9af80a39adcc | 103 | } |
andrewboyson | 0:9af80a39adcc | 104 | } |
andrewboyson | 0:9af80a39adcc | 105 | |
andrewboyson | 0:9af80a39adcc | 106 | //Schedules 'snam', 'soff', 's-on', 'sdel' 'smov', 'sswi' |
andrewboyson | 0:9af80a39adcc | 107 | |
andrewboyson | 0:9af80a39adcc | 108 | if (strncmp(pName, "snam", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 109 | { |
andrewboyson | 0:9af80a39adcc | 110 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 111 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 112 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 113 | { |
andrewboyson | 0:9af80a39adcc | 114 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 115 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 116 | } |
andrewboyson | 0:9af80a39adcc | 117 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 118 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 119 | WizSchedSetName(i, pValue ? pValue : ""); |
andrewboyson | 0:9af80a39adcc | 120 | } |
andrewboyson | 0:9af80a39adcc | 121 | if (strncmp(pName, "s-on", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 122 | { |
andrewboyson | 0:9af80a39adcc | 123 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 124 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 125 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 126 | { |
andrewboyson | 0:9af80a39adcc | 127 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 128 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 129 | } |
andrewboyson | 0:9af80a39adcc | 130 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 131 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 132 | char datum = 0; |
andrewboyson | 0:9af80a39adcc | 133 | int16_t minutes = 0; |
andrewboyson | 0:9af80a39adcc | 134 | WizSchedParseEvent(pValue, &datum, &minutes); |
andrewboyson | 0:9af80a39adcc | 135 | WizSchedSetOnEvent(i, datum, minutes); |
andrewboyson | 0:9af80a39adcc | 136 | } |
andrewboyson | 0:9af80a39adcc | 137 | if (strncmp(pName, "soff", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 138 | { |
andrewboyson | 0:9af80a39adcc | 139 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 140 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 141 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 142 | { |
andrewboyson | 0:9af80a39adcc | 143 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 144 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 145 | } |
andrewboyson | 0:9af80a39adcc | 146 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 147 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 148 | char datum = 0; |
andrewboyson | 0:9af80a39adcc | 149 | int16_t minutes = 0; |
andrewboyson | 0:9af80a39adcc | 150 | WizSchedParseEvent(pValue, &datum, &minutes); |
andrewboyson | 0:9af80a39adcc | 151 | WizSchedSetOffEvent(i, datum, minutes); |
andrewboyson | 0:9af80a39adcc | 152 | } |
andrewboyson | 0:9af80a39adcc | 153 | if (strncmp(pName, "sdel", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 154 | { |
andrewboyson | 0:9af80a39adcc | 155 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 156 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 157 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 158 | { |
andrewboyson | 0:9af80a39adcc | 159 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 160 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 161 | } |
andrewboyson | 0:9af80a39adcc | 162 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 163 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 164 | WizSchedSetName(i, ""); |
andrewboyson | 0:9af80a39adcc | 165 | WizSchedSetOnEvent (i, 0, 0); |
andrewboyson | 0:9af80a39adcc | 166 | WizSchedSetOffEvent(i, 0, 0); |
andrewboyson | 0:9af80a39adcc | 167 | } |
andrewboyson | 0:9af80a39adcc | 168 | if (strncmp(pName, "smov", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 169 | { |
andrewboyson | 0:9af80a39adcc | 170 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 171 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 172 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 173 | { |
andrewboyson | 0:9af80a39adcc | 174 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 175 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 176 | } |
andrewboyson | 0:9af80a39adcc | 177 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 178 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 179 | if (pValue) |
andrewboyson | 0:9af80a39adcc | 180 | { |
andrewboyson | 0:9af80a39adcc | 181 | if (pValue[0] == 'u') WizSchedMoveUp (i); |
andrewboyson | 0:9af80a39adcc | 182 | if (pValue[0] == 'd') WizSchedMoveDown(i); |
andrewboyson | 0:9af80a39adcc | 183 | } |
andrewboyson | 0:9af80a39adcc | 184 | } |
andrewboyson | 0:9af80a39adcc | 185 | if (strncmp(pName, "sswi", 4) == 0) |
andrewboyson | 0:9af80a39adcc | 186 | { |
andrewboyson | 0:9af80a39adcc | 187 | int posn = 4; |
andrewboyson | 0:9af80a39adcc | 188 | int i = pName[posn] - '0'; |
andrewboyson | 0:9af80a39adcc | 189 | if (pName[posn+1]) |
andrewboyson | 0:9af80a39adcc | 190 | { |
andrewboyson | 0:9af80a39adcc | 191 | i *= 10; |
andrewboyson | 0:9af80a39adcc | 192 | i += pName[posn+1] - '0'; |
andrewboyson | 0:9af80a39adcc | 193 | } |
andrewboyson | 0:9af80a39adcc | 194 | if (i < 0) i = 0; |
andrewboyson | 0:9af80a39adcc | 195 | if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1; |
andrewboyson | 0:9af80a39adcc | 196 | if (pValue) |
andrewboyson | 0:9af80a39adcc | 197 | { |
andrewboyson | 0:9af80a39adcc | 198 | if (pValue[0] == '1') |
andrewboyson | 0:9af80a39adcc | 199 | { |
andrewboyson | 0:9af80a39adcc | 200 | char room[WIZ_LIST_NAME_LENGTH]; |
andrewboyson | 0:9af80a39adcc | 201 | WizListGetRoom(i, room); |
andrewboyson | 0:9af80a39adcc | 202 | WizListTurnRoomOn(room); |
andrewboyson | 0:9af80a39adcc | 203 | } |
andrewboyson | 0:9af80a39adcc | 204 | if (pValue[0] == '0') |
andrewboyson | 0:9af80a39adcc | 205 | { |
andrewboyson | 0:9af80a39adcc | 206 | char room[WIZ_LIST_NAME_LENGTH]; |
andrewboyson | 0:9af80a39adcc | 207 | WizListGetRoom(i, room); |
andrewboyson | 0:9af80a39adcc | 208 | WizListTurnRoomOff(room); |
andrewboyson | 0:9af80a39adcc | 209 | } |
andrewboyson | 0:9af80a39adcc | 210 | } |
andrewboyson | 0:9af80a39adcc | 211 | } |
andrewboyson | 0:9af80a39adcc | 212 | |
andrewboyson | 0:9af80a39adcc | 213 | } |
andrewboyson | 0:9af80a39adcc | 214 | } |