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:
0:9af80a39adcc
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 <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 }