Skrypt, który napiszemy będzie pozwalał na wprowadzenie do naszego systemu możliwości określenia tzw. ciszy nocnej w określonych godzinach. Takie rozwiązanie pozwoli np. na automatyczne wyłączanie urządzeń w określonych godzinach, wyłączenie wysyłania powiadomień, lub automatyczne ściemnianie światła o określonej godzinie.
Na początku należy utworzyć 5 zmiennych (obiektów):
moje.config.cisza_nocna (bool) – jeśli true to cisza nocna aktywna
moje.config.cisza_nocna_od (string) – godzina od kiedy ma obowiązywać cisza nocna
moje.config.cisza_nocna_do (string) – godzina do kiedy ma obowiązywać cisza nocna
moje.config.czisza_nocna_do_pom (string) – zmienna pomocnicza
moje.config.czisza_nocna_do_pom (string) – zmienna pomocnicza
W kolejnym kroku należy utworzyć skrypt w folderze CRON i nazwać go 1m co będzie odpowiadać zdarzeniom wykonywanym co 1 minutę.
//Deklarujemy niezbędne obiekty i zmienne var czas_od = new Date(); var czas_do = new Date(); var t1, t2; //skrypt będzie wykonywał się co 1 minutę schedule('* * * * *', function () { //wywołanie funkcji z kodem, którego będziemy używać w kilku miejscach ciszaNocna(); //jeżeli cisza nocna jest nieaktywna to zapisz obliczone daty i godziny do zmiennych pomocniczych if (getState("moje.config.cisza_nocna").val === false) { setState("moje.config.czisza_nocna_do_pom", czas_do.toString()); setState("moje.config.czisza_nocna_od_pom", czas_od.toString()); } //pobranie zapisanych dat i godzin ze zmiennych pomocniczych var czas_od_calc = new Date(getState("moje.config.czisza_nocna_od_pom").val); var czas_do_calc = new Date(getState("moje.config.czisza_nocna_do_pom").val); //jeżeli cisza nocna jest nieaktywna to... if (getState("moje.config.cisza_nocna").val == false) { //sprawdź czy jesteśmy w godzinach ciszy nocnej if (compareTime(czas_od_calc.getTime(), czas_do_calc.getTime(), "between")) { setState("moje.config.cisza_nocna", true); } } else { //sprawdź czy nie jesteśmy w godzinach ciszy nocnej if (compareTime(czas_od_calc, czas_do_calc, "not between")) { setState("moje.config.cisza_nocna", false); } } }); //Jeżeli wprowadzimy zmiany godzin podczas trwania ciszy nocnej zostaną one automatycznie uwzględnione on({ id: 'moje.config.cisza_nocna_od', change: 'ne' }, function (obj) { ciszaNocna(); //aktualizacja zmiennych o nowe daty setState("moje.config.czisza_nocna_do_pom", czas_do.toString()); setState("moje.config.czisza_nocna_od_pom", czas_od.toString()); }); on({ id: 'moje.config.cisza_nocna_do', change: 'ne' }, function (obj) { ciszaNocna(); //aktualizacja zmiennych o nowe daty setState("moje.config.czisza_nocna_do_pom", czas_do.toString()); setState("moje.config.czisza_nocna_od_pom", czas_od.toString()); }); function ciszaNocna() { //ustawienie daty początkowej czas_od = new Date(); czas_do = new Date(); //Pobieramy z obiektów wartości z ustawionymi godzinami t1 = getState("moje.config.cisza_nocna_od").val; t2 = getState("moje.config.cisza_nocna_do").val; //jeżeli zmienne są puste (nie ma ustawionych godzin) to przerwij skrypt if (t1 === null || t2 === null) return; //rozbijamy ustawione godziny na poszczególne składniki (godzina, minuty i sekundy) var at1 = t1.split(":"); var at2 = t2.split(":"); //Zapisuje date i czas dla ustawionych godzin czas_od.setHours(at1[0]); czas_od.setMinutes(at1[1]); czas_od.setSeconds(at1[2]); czas_do.setHours(at2[0]); czas_do.setMinutes(at2[1]); czas_do.setSeconds(at2[2]); //Jeżeli godzina "od" jest większa od godziny "do" oznacza to, że godzina "do" jest w kolejnym dniu //Jeżeli godzina "od" jest równa 0 (północ) to godzina "do" musi być w kolejnym dniu //Jeżeli godziny "od" i "do" są równe, ale minuty "od" są większe od minut "do" to godzina "do" jest w kolejnym dniu if (Number(at1[0]) > Number(at2[0]) || Number(at1[0]) === 0 || (Number(at1[0]) == Number(at2[0]) && Number(at1[1]) > Number(at2[1]))) { //dodanie do daty i czasu "do" 1 dnia czas_do.setDate(czas_do.getDate() + 1); } }
Aby móc korzystać z ciszy nocnej musimy mieć możliwość ustawiania godzin tej ciszy. Najwygodniejszą opcją będzie wizualizacja.
Otwieramy edytor wizualizacji i nasz projekt Projekt1. Przechodzimy do widoku Glowny i z lewej strony wyszukujemy widgetu Input Datetime

Przeciągamy go na ekran roboczy i następnie szukamy widgetu html, który posłuży nam za pole etykiety.

Zaznaczamy widget html i z prawej strony okna w polu HTML: wpisujemy Od:. Następnie zaznaczamy widget Input Datetime i w polu Object ID wybieramy moje.config.cisza_nocna_od i zaznaczamy opcję Time only. Zaznaczamy oba widgety, kopiujemy i zmieniamy ich właściwości dla zmiennej moje.config.cisza_nocna_do.
Aby wiedzieć czy cisza nocna jest aktywna dodamy odpowiednią ikonkę.
Szukamy widgetu image

W polu source wskazujemy na ikonkę o adresie /icons-icons8/others/color/Adware Free.png i zaznaczamy opcję Stretch abyśmy mogli zmieniać rozmiar obrazka. Następnie rozwijamy belkę Visibility i w polu Object ID wyszukujemy zmiennej moje.config.cisza_nocna. Pole condition zostawiamy bez zmian (==) a w polu Value for condition wpisujemy true. Powyższe ustawienia spowodują, że obrazek będzie widoczny tylko kiedy zmienna moje.config.cisza_nocna będzie miała wartość true.
Jeżeli wszystko ustawiliśmy dobrze to w przypadku aktywnej ciszy nocnej powinniśmy mieć taki widok
