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

Dependents:   heating

web/web-wiz-query.c

Committer:
andrewboyson
Date:
2021-06-09
Revision:
7:3035a540ef65
Parent:
0:9af80a39adcc

File content as of revision 7:3035a540ef65:

#include <string.h>
#include <stdlib.h>
#include "http.h"
#include "mac.h"
#include "wiz.h"
#include "wiz-list.h"
#include "wiz-sched.h"
#include "settings.h"
#include "log.h"

void WebWizQuery(char* pQuery)
{
    while (pQuery)
    {
        char* pName;
        char* pValue;
        pQuery = HttpQuerySplit(pQuery, &pName, &pValue);
        
        HttpQueryUnencode(pValue);

        int value = HttpQueryValueAsInt(pValue);
        
        if (HttpSameStr(pName, "wiztrace"    )) ChgTraceWiz();
        
        if (HttpSameStr(pName, "turn-all-on" )) WizListTurnAllOn ();
        if (HttpSameStr(pName, "turn-all-off")) WizListTurnAllOff();
        
        //Lights
        if (strncmp(pName, "lnam", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            WizListSetName(i, pValue ? pValue : "");
        }
        if (strncmp(pName, "lroo", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            WizListSetRoom(i, pValue ? pValue : "");
        }
        if (strncmp(pName, "ldel", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            char mac[6];
            MacClear(mac);
            WizListSetMac (i, mac);
            WizListSetName(i, "");
        }
        if (strncmp(pName, "lmov", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            if (pValue)
            {
                if (pValue[0] == 'u') WizListMoveUp  (i);
                if (pValue[0] == 'd') WizListMoveDown(i);
            }
        }
        if (strncmp(pName, "lswi", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            if (pValue)
            {
                if (pValue[0] == '1') WizListTurnIndexOn (i);
                if (pValue[0] == '0') WizListTurnIndexOff(i);
            }
        }
        
        //Schedules 'snam', 'soff', 's-on', 'sdel' 'smov', 'sswi'
        
        if (strncmp(pName, "snam", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            WizSchedSetName(i, pValue ? pValue : "");
        }
        if (strncmp(pName, "s-on", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            char datum = 0;
            int16_t minutes = 0;
            WizSchedParseEvent(pValue, &datum, &minutes);
            WizSchedSetOnEvent(i, datum, minutes);
        }
        if (strncmp(pName, "soff", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            char datum = 0;
            int16_t minutes = 0;
            WizSchedParseEvent(pValue, &datum, &minutes);
            WizSchedSetOffEvent(i, datum, minutes);
        }
        if (strncmp(pName, "sdel", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            WizSchedSetName(i, "");
            WizSchedSetOnEvent (i, 0, 0);
            WizSchedSetOffEvent(i, 0, 0);
        }
        if (strncmp(pName, "smov", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            if (pValue)
            {
                if (pValue[0] == 'u') WizSchedMoveUp  (i);
                if (pValue[0] == 'd') WizSchedMoveDown(i);
            }
        }
        if (strncmp(pName, "sswi", 4) == 0)
        {
            int posn = 4;
            int i = pName[posn] - '0';
            if (pName[posn+1])
            {
                i *= 10;
                i += pName[posn+1] - '0';
            }
            if (i < 0) i = 0;
            if (i > WIZ_LIST_MAX_ITEMS - 1) i = WIZ_LIST_MAX_ITEMS - 1;
            if (pValue)
            {
                if (pValue[0] == '1')
                {
                     char room[WIZ_LIST_NAME_LENGTH];
                     WizListGetRoom(i, room);
                     WizListTurnRoomOn(room);
                }
                if (pValue[0] == '0')
                {
                     char room[WIZ_LIST_NAME_LENGTH];
                     WizListGetRoom(i, room);
                     WizListTurnRoomOff(room);
                }
            }
        }
        
    }
}