Skip to content
Snippets Groups Projects
api.js 12.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    "use strict";
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    import Luci from "../luci.js";
    
    import Scenari from "../scenari.js";
    import Antifurto from "../antifurto.js";
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    import ApiMqttOut from "./api-mqtt-out.js";
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    class Api {
    
    
        static baseURL = "/api/";
    
        // /api/luci/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the luci of the user from the server
         * @returns {*} all the lights of the user
         */
    
        static getLuci = () => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            ApiMqttOut.getStatusLuci();
    
        static sendLuciWeb = luci => { console.log('ciao');
            Luci.luciFromMqtt(luci);
    
        // static callbackGetAllLuci = null;
        static getAllLuci = () => { console.log('ciao');
    
            ApiMqttOut.getAllLuci();
        }
    
        static sendDataLuciWeb = luci => { console.log('ciao');
            Luci.luciFromMqtt(luci);
    
        }
    
        static luceMakeNewLuci = null;
        static callbackMakeNewLuci = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * adds a new luce to the server
         * @param {luceTemplate} luce the luce to add to the server
         * @returns {*} null if the light was added
         */
    
        static makeNewLuci = luce => { console.log('ciao');
    
            if (luce == null)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("luce must be defined");
    
            /*const url = Api.baseURL + "luci/";
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            const response = await fetch(url, {
                method: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                body: JSON.stringify(luce)
            });
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return null;
            else
    
                throw await response.json();*/
            Api.luceMakeNewLuci = luce;
            ApiMqttOut.makeNewLuci(luce);
        }
    
        static sendWebNewLuci = luce => { console.log('ciao');
    
            const oldLuce = Api.luceMakeNewLuci;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (oldLuce !== luce) {
                console.log('le luci non corrispondono', { oldLuce, luce });
    
            Luci.showCreatedLight(luce);
    
        static callbackLuciStatoToBeStatic = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        static toggleForLuciStato = null;
    
        static fixedCallbackLuciStato = null;
    
        // /api/luci/stato/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * changes the status of a luce on the server
         * @param {luceTemplate} luce the luce to change the status of
         * @returns {*} null if the light's status was changed
         */
    
        static setLuciStato = (luce, toggle, callback) => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (Api.fixedCallbackLuciStato == null)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (luce == null)
    
                throw new Error("luce must be defined");
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (toggle == null)
    
                throw new Error("toggle must be defined");
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (callback == null)
    
                throw new Error("callback must be defined");
    
    
            if(Api.callbackLuciStatoToBeStatic == null)
                Api.callbackLuciStatoToBeStatic = callback;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            Api.toggleForLuciStato = toggle;
            ApiMqttOut.setLuciStato(luce);
        }
    
        static sendLuciStatoWeb = response => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (response == null) {
    
                const toggle = Api.toggleForLuciStato;
                Api.toggleForLuciStato = null;
    
                Api.callbackLuciStatoToBeStatic(toggle);
    
            } else {
                Api.fixedCallbackLuciStato(response);
            }
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        }
    
        // /api/scenari/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the scenari of the user from the server
         * @returns {*} all the scenarios of the user
         */
    
        static getScenari = () => { console.log('ciao');
    
            ApiMqttOut.getAllFromScenari();
    
        static sendScenariWeb = scenari => { console.log('ciao');
            Scenari.mostraScenariServer(scenari);
    
        static setAntifurtoINbtnFromScenari = newINbtn => { console.log('ciao');
        console.log(newINbtn)
    
            if(newINbtn == null || newINbtn?.nome == null)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("newINbtn must be defined");
    
            ApiMqttOut.setAntifurtoINbtnFromScenari(newINbtn.nome);
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        }
    
        // /api/scenari/attiva/
    
        static scenarioSetScenarioStatus = null;
        static activatingSetScenarioStatus = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * activates or deactivates a scenario on the server
         * @param {scenarioTemplate} scenario the scenario to activate or deactivate
         * @returns {*} null if the scenario was activated or deactivated
         */
    
        static setScenarioStatus = (scenario, activating) => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (scenario == null)
    
                throw new Error("scenario must be defined");
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (activating == null)
    
                throw new Error("activating must be defined");
    
            Api.scenarioSetScenarioStatus = scenario;
            Api.activatingSetScenarioStatus = activating;
            ApiMqttOut.setScenarioStatus(scenario);
    
        static sendWebNewScenarioStatus = scenarioNome => { console.log('ciao');
    
            const scenario = Api.scenarioSetScenarioStatus;
            const activating = Api.activatingSetScenarioStatus;
            Api.scenarioSetScenarioStatus = null;
            Api.activatingSetScenarioStatus = null;
    
            if(scenario == null || activating == null)
                return;
    
            // FIXME forse dovrei controllare scenarioNome
    
            console.log(scenario)
            if (scenarioNome.startsWith(scenario.nome))
                Scenari.showScenarioAfterToggling(scenario, activating,true);
    
        // /api/scenari/registra/
    
        static recordingRecordScenario = null;
        static learnINBtnRecordScenario = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * starts/stop the recording of a scenario
         * @param {Boolean} recording true to start the recording, false to stop it
         * @returns {*} null if the recording was started or stopped
         */
    
        static recordScenario = (recording, learnINBtn) => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (recording == null)
    
                throw new Error("recording must be defined");
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (learnINBtn == null)
    
                throw new Error("learnINBtn must be defined");
    
            Api.recordingRecordScenario = recording;//true se voglio registrare
            Api.learnINBtnRecordScenario = learnINBtn;
    
            console.log(learnINBtn)
    
            ApiMqttOut.recordScenario(learnINBtn.nome);
    
        }
        static retriesRecordScenario = 0;
    
        static sendWebScenarioAutoma = stato => { console.log('ciao');
    
                return;
            const recording = Api.recordingRecordScenario;
    
            // const statoAspettato = recording ? 1 : 0;
            if (recording != null && stato !== recording && Api.retriesRecordScenario < 3) {
    
                Api.retriesRecordScenario++;
                ApiMqttOut.recordScenario(Api.learnINBtnRecordScenario);
    
            }
            Api.recordingRecordScenario = null;
            Api.learnINBtnRecordScenario = null;
            Api.retriesRecordScenario = 0;
    
            Scenari.apiCallbackRecordScenario(recording);
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        }
    
        // /api/scenari/salva/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * tells the server to save the currently recorded scenario
         * @returns {*} the scenario if it was saved
         */
    
        static saveScenario = nome => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (nome == null)
    
                throw new Error("nome must be defined");
    
            ApiMqttOut.saveScenario(nome);
    
        static sendWebSavedScenario = scenario => { console.log('ciao');
            Scenari.saveScenarioCallback(scenario);
    
        // /api/antifurto/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
    
         * gets everything about the antifurto (stato, allarme, attenzione (valore progress bar), soglia, sensori)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
         * @returns {*} the antifurto's values
         */
    
        static getAntifurto = () => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            ApiMqttOut.getAntifurto();
    
        static sendWebGetAntifurto = antifurto => { console.log('ciao');
            Antifurto.mostraAntifurtoServer(antifurto);
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        }
    
        // /api/antifurto/stato/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the status of the antifurto
         * @returns {*} the antifurto's status
         */
    
        /*static getAntifurtoStatus = async () => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            const url = Api.baseURL + "antifurto/stato/";
            const response = await fetch(url);
            const data = await response.json();
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return data;
            else
    
                throw data;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        };*/
    
        // static newStatusSetAntifurtoStatus = null;
        // static antifurtoINbtnSetAntifurtoStatus = null;
    
        static payloadSetAntifurtoStatus = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the status of the antifurto
         * @param {Boolean} status the new status of the antifurto
         * @returns {*} null if the status was changed
         */
    
        static setAntifurtoStatus = payload => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (payload == null)
    
                throw new Error("payload must be defined");
    
            // Api.newStatusSetAntifurtoStatus = newStatus;
            // Api.antifurtoINbtnSetAntifurtoStatus = antifurtoINbtn;
    
            Api.payloadSetAntifurtoStatus = payload;
    
            console.log(Antifurto.attivaAntifurtoINbtn)
            const nomeIN = Antifurto.attivaAntifurtoINbtn != null ? Antifurto.attivaAntifurtoINbtn.nome : Scenari.antifurtoINbtn.nome;
            ApiMqttOut.setAntifurtoStatus(nomeIN);
    
        static retriesSetAntifurtoStatus = 0;
    
        static sendWebSetAntifurtoStatus = stato => { console.log('ciao');
            if(stato === NaN)
    
            const newStatus = !Antifurto.status;
    
            const expectedStatus = newStatus ? 2 : 0;
    
            console.log(Antifurto.attivaAntifurtoINbtn)
            const nomeIN = Antifurto.attivaAntifurtoINbtn != null ? Antifurto.attivaAntifurtoINbtn.nome : Scenari.antifurtoINbtn.nome;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (stato !== expectedStatus && Api.retriesSetAntifurtoStatus < 3) {
    
                Api.retriesSetAntifurtoStatus++;
    
                ApiMqttOut.setAntifurtoStatus(nomeIN);
    
            }
            const payload = Api.payloadSetAntifurtoStatus;
    
            // Api.newStatusSetAntifurtoStatus = null;
            // Api.antifurtoINbtnSetAntifurtoStatus = null;
    
            Api.payloadSetAntifurtoStatus = null;
            Api.retriesSetAntifurtoStatus = 0;
    
            Antifurto.showChangeAntifurtoStatus(payload?.previousStatus ? payload?.previousStatus : Antifurto.status, newStatus, payload?.fromScenari ? payload?.fromScenari : false, payload?.fromServer ? payload?.fromServer : true);
    
        // /api/antifurto/allarme/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the status of the antifurto's alarm
         * @returns {*} the antifurto's alarm status
         */
    
        /*static getAntifurtoAllarme = async () => { console.log('ciao');
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            const url = Api.baseURL + "antifurto/allarme/";
            const response = await fetch(url);
            const data = await response.json();
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return data;
            else
    
                throw data;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        };*/
    
        static fixedCallbackStatoAllarme = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the status of the antifurto's alarm
         * @param {Boolean} allarme the new status of the antifurto's alarm
         * @returns {*} null if the status was changed
         */
    
        static setAntifurtoAllarme = allarme => { console.log('ciao');
            // const booleanAlarm = allarme == 'true';
            if (allarme == null || Api.fixedCallbackStatoAllarme == null)
                return;
            Api.fixedCallbackStatoAllarme(allarme);
    
        };
        // /api/antifurto/attenzione/
    
        static fixedCallbackValoreAttenzione = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the status for the progress bar of the antifurto's alarm
         * @param {Number} attenzione the new value of the antifurto's attention
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
         * @returns {*} null if the value was changed
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
         */
    
        static setAntifurtoAttenzione = attenzione => { console.log('ciao');
            if (attenzione == null || isNaN(parseInt(attenzione)) || Api.fixedCallbackValoreAttenzione == null)
                return;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            const val = parseInt(attenzione);
    
            Api.fixedCallbackValoreAttenzione(val);
    
        };
        // /api/antifurto/soglia/
    
        static sogliaSetAntifurtoSoglia = null;
        static fromServerSetAntifurtoSoglia = null;
        static callbackSetAntifurtoSoglia = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the value of the antifurto's threshold
         * @param {Number} soglia the user's value of the antifurto's threshold
         * @returns {*} null if the value was changed
         */
    
        static setAntifurtoSoglia = (soglia, fromServer) => { console.log('ciao');
    
            if (soglia == null || isNaN(parseInt(soglia)))
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("soglia must be a set integer");
            const val = parseInt(soglia);
    
            if (val < 0 || val > 100)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("soglia must be between 0 and 100");
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (fromServer == null)
                throw new Error("fromServer must be defined");
    
            Api.sogliaSetAntifurtoSoglia = val;
            Api.fromServerSetAntifurtoSoglia = fromServer;
            ApiMqttOut.setAntifurtoSoglia(val);
    
        static sendWebSoglia = soglia => { console.log('ciao');
    
            const expectedSoglia = Api.sogliaSetAntifurtoSoglia;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (expectedSoglia !== soglia) {
                console.log('soglie differenti', { expectedSoglia, soglia });
    
            }
            const fromServer = Api.fromServerSetAntifurtoSoglia;
            Api.sogliaSetAntifurtoSoglia = null;
            Api.fromServerSetAntifurtoSoglia = null;
    
            Antifurto.showEditsSoglia(soglia, fromServer);
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    }
    
    export default Api;