Spisu treści:

IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS: 8 kroków
IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS: 8 kroków

Wideo: IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS: 8 kroków

Wideo: IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS: 8 kroków
Wideo: Маленький город Польши поразил. 20 тысяч жителей и такое... 2024, Listopad
Anonim
IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASYMILUJ KONCENTRATOR CZUJNIKÓW: ICOS10 CORS WEBCOMPONENTS

Moduły ASIMILATE SENSOR/ACTOR Slaves osadzają metadane, które są używane do definiowania wizualizacji w Crouton. Ta konfiguracja różni się nieco od poprzednich; nie ma zmian sprzętowych. Oprogramowanie układowe obsługuje teraz hostowanie niestandardowych (bogatszych) edytorów, które można zintegrować z najnowszą wersją AssimilateCrouton. Więcej uwagi zostanie poświęcone wyjaśnieniu oprogramowania układowego i pulpitu nawigacyjnego MQTT w tym artykule.

Jedną z zalet serwowania WebComponents z urządzenia, które kontroluje, jest to, że bardziej zaawansowana kontrola urządzenia jest ograniczona do sieci, do której urządzenie jest podłączone: twojego punktu dostępu WiFi. Chociaż po użyciu serwera MQTT z uwierzytelnianiem istnieje podobieństwo ochrony, w sieciach publicznych, jeśli na chwilę opuścisz przeglądarkę (witryna AssimilateCrouton), ktoś może wskoczyć i kontrolować urządzenia automatyki. Ta funkcja CORS WebComponent umożliwia publiczne wyświetlanie tylko odczytów (temperatura, poziom oświetlenia, wilgotność), a funkcje poleceń (włączanie/wyłączanie, planowanie) są dostępne tylko z sieci urządzenia.

Na urządzeniu wszystkie funkcje serwera WWW z uwierzytelnianiem i hostingiem w SPIFFS są nadal obsługiwane, ale szczególny nacisk położono na obsługę CORS (Cross Origin Resource Sharing) dla Polymer WebComponents (Crouton używa Polymer 1.4.0).

W AssimilateCrouton (widelec Croutona używany do Assimilate IOT Network) zmiany obejmują

  • obsługa karty Urządzenia (assim-device), która m.in. pokazuje i ukrywa dla użytkownika indywidualne karty urządzenia
  • właściwość info na wszystkich kartach, która pokazuje toast przydatnych informacji kontekstowych dla karty
  • obsługa komponentów internetowych CORS, w tym przypadku hostowanych na serwerze WWW na urządzeniu (ESP8266).

Krok 1: CROUTON

GRZANKA
GRZANKA
GRZANKA
GRZANKA

Crouton to pulpit nawigacyjny, który pozwala wizualizować i kontrolować urządzenia IOT przy minimalnej konfiguracji. Zasadniczo jest to najłatwiejszy pulpit nawigacyjny do skonfigurowania dla każdego entuzjasty sprzętu IOT przy użyciu tylko MQTT i JSON.

ASSIMILATE SLAVES (czujniki i aktorzy) mają wbudowane metadane i właściwości, których master używa do budowania pakietu json deviceInfo, którego używa Crouton do budowania pulpitu nawigacyjnego. Pośrednikiem między ASSIMILATE NODES a Croutonem jest broker MQTT, który jest przyjazny dla gniazd sieciowych: do demonstracji używa się Mosquito.

Gdy ASSIMILATE MASTER żąda właściwości, formatuje wartości odpowiedzi w wymaganym formacie dla aktualizacji Crouton. Widelec AssimilateCrouton dodaje kilka funkcji, które umożliwiają zdecentralizowanie reguł biznesowych, które obsługują Twoje urządzenie, tj. urządzenie IOT nie wymaga żadnych osadzonych reguł biznesowych, jest to tylko potok komunikacji MQTT/I2C z inteligentniejszymi (kontrolowanymi przez ATTINY) aktorami i czujnikami podrzędnymi.

Krok 2: ASYMILUJ CROUTON

ASYMILUJ GRZANKI
ASYMILUJ GRZANKI

ZMIANY W CROUTON

Zmiany w stosunku do wersji rozwidlonej obejmują:

  • jeśli punkt końcowy ma zdefiniowaną właściwość ścieżki, komponent WebComponent karty wykona import HTML dla zasobu CORS (serwer WWW na ESP8266 w tej kompilacji).
  • wszelkie zasoby poprzedzające (zależności) komponentu CORS WebComponent są przywoływane tak, jakby były obsługiwane ze strony internetowej Crouton; gdy nie uda im się załadować obsługi wyjątków, zmienia ścieżki i ładuje je ze strony internetowej.
  • aktualny czas lokalny jest wyświetlany w prawym górnym rogu, co jest przydatne do weryfikacji harmonogramu.

ZALEŻNOŚCI I KORSY POLIMEROWE

Liście drzewa zależności Polymer mogą być hostowane w CORS. Ponieważ zależności główne mogą być używane kilka razy w aplikacji, nie można się do nich odwoływać z 2 lokalizacji (strony internetowej i urządzenia), ponieważ moduł ładujący moduł polimerowy traktuje je jako 2 oddzielne zasoby, a wiele błędów rejestracji szybko błądzi w aplikacji.

Z tego powodu WebComponent dla karty (plik HTML w wersji 1.4.0) i powiązany plik CSS są jedynymi plikami hostowanymi na urządzeniu. Inne zależności są przywoływane tak, jakby WebComponent był hostowany w folderze „html” na pierwotnej stronie internetowej, co ułatwia rozwijanie WebComponents z tego folderu do momentu, gdy będą gotowe do przesłania do SPIFFS na ESP8266. AssimilateCrouton opracuje sposób uzyskania właściwych plików.

ROZLOKOWANIE

edfungus, twórca oryginalnego Croutona, napisał źródło w Pug/Less i miał toolchain NPM/Grunt. Wyrenderowałem Pug/Less jako HTML/css i właśnie edytowałem/dystrybuowałem wyrenderowane pliki. To zepsuło łańcuch narzędzi NPM/Grunt. Naprawienie tego zostało omówione w sekcji PRZYSZŁOŚĆ.

Pulpit nawigacyjny możesz przetestować lokalnie na swoim urządzeniu DEV:

  • Z wiersza poleceń w folderze głównym
  • początek npm
  • serwer lite jest uruchamiany dla

Wdróż na statycznym serwerze WWW:

  • skopiuj wszystkie foldery z wyjątkiem node_modules
  • skopiuj index.html (i ewentualnie web.config)

PRZYSZŁY

Jednym z głównych celów jest uaktualnienie do Polymer3 i praca z Polymer CLI. Dodanie zaawansowanych edytorów i frameworka dla programistów IOT do tworzenia własnych jest priorytetem. Ostatecznie zaawansowany zautomatyzowany system będzie uruchamiany całkowicie z odłączonych klientów MQTT, takich jak AssimilateCrouton.

Przykład pakietu deviceInfo używanego dla AssimilateCrouton:

{
"informacje o urządzeniu": {
"punkty końcowe": {
"CC_device": {
"nazwa_urządzenia": "ash_mezz_A3",
"card-type": "assim-device",
"ssid": "Corelines_2",
"ip_addr": "192.168.8.104",
"punkty końcowe": [
{
"tytuł": "Rozwijaj światła",
"card-type": "crouton-simple-toggle",
"punkt końcowy": "przełącznik"
},
{
"title": "Światła do doniczek",
"card-type": "crouton-assim-weekview",
"endpoint": "CC_switch"
}
]
},
"CC_switch": {
"card-type": "assim-weekview",
"info": "Ustawiaj lub wyłączaj światła w 15-minutowych przedziałach czasowych",
"ścieżka": "https://192.168.8.104/cors",
"title": "Światła do doniczek",
"interval_mins": 15,
"wartości": {
"wartość": ""
}
},
"przełącznik": {
"tytuł": "Rozwijaj światła",
"card-type": "crouton-simple-toggle",
"info": "Włącz lub wyłącz światła doraźnie",
„etykiety”: {
"false": "WYŁ",
"prawda": "WŁ"
},
"ikony": {
"false": "sun-o",
"prawda": "słońce"
},
"wartości": {
"wartość": 0
}
}
},
"status": "dobry",
"name": "ash_mezz_A3",
"opis": "Biuro w Ashmore, antresola, obszar A2",
"kolor": "#4D90FE"
}
}

wyświetl rawdeviceInfo.json hostowane z ❤ przez GitHub

Krok 3: MONTAŻ URZĄDZENIA

MONTAŻ URZĄDZENIA
MONTAŻ URZĄDZENIA
MONTAŻ URZĄDZENIA
MONTAŻ URZĄDZENIA
MONTAŻ URZĄDZENIA
MONTAŻ URZĄDZENIA

Ponieważ nie ma zmian sprzętowych, oto linki do odpowiednich informacji:

  • Zespół powłoki
  • Materiały i narzędzia
  • Przygotowanie MCU
  • Przygotowanie obudowy MCU
  • Budowanie płyty głównej przełącznika niskiego napięcia/RESETU Slaves
  • Montaż głównych komponentów

Krok 4: OPROGRAMOWANIE

OPROGRAMOWANIE
OPROGRAMOWANIE
OPROGRAMOWANIE
OPROGRAMOWANIE
OPROGRAMOWANIE
OPROGRAMOWANIE
OPROGRAMOWANIE
OPROGRAMOWANIE

GŁÓWNE ZMIANY W TEJ BUDOWIE

Aby aplikacja AssimilateCrouton mogła korzystać z zasobów CORS z urządzenia, nagłówki odpowiedzi musiały zostać skonfigurowane w określony sposób. Zostało to zaimplementowane w tej wersji oprogramowania układowego (static_server.ino => server_file_read()).

Również główny wykres zależności dla Polymera musiał pochodzić z jednego źródła. Zastosowano strategię dodania procedury obsługi onerror (corsLinkOnError) do plików SPIFFS CORS w celu przeładowania zasobów z witryny AssimilateCrouton, gdy nie zostały one znalezione na urządzeniu.

Do systemu plików SPIFFS dodano 2 nowe konwencje służące do dostosowywania punktów końcowych tworzonych w deviceInfo - których AssimilateCrouton używa do tworzenia kart pulpitu nawigacyjnego:

  • /config/user_card_base.json Definicja punktu końcowego ze zmiennymi środowiska uruchomieniowego, które są wymieniane jako pierwsze:,,. Jest to zazwyczaj miejsce, w którym zostanie dodana karta assim-device. To nie komunikuje się z powrotem z urządzeniem.
  • /config/user_card_#.json Definicja punktu końcowego ze zmiennymi środowiska uruchomieniowego, które są wymieniane jako pierwsze:,,. Jest to zwykle miejsce, w którym bogaci redaktorzy, tacy jak karta assim-weekview, zostaną dodani do urządzenia podrzędnego I2C (aktor/czujnik), który odnosi się do #.

SZKIC/BIBLIOTEKI

Na tym etapie projekt został spakowany jako przykład dla biblioteki AssimilateBus Arduino. Ma to głównie na celu ułatwienie dostępu do wszystkich niezbędnych plików z Arduino IDE. Główne artefakty kodu to:

  • mqtt_crouton_esp8266_cors_webcomponents.ino - główny punkt wejścia.
  • assimilate_bus.h/assimilate_bus.cpp - biblioteka obsługująca komunikację I2C z Slave Sensor/Actor
  • VizJson.h/VizJson.cpp - biblioteka, która formatuje/buduje dowolny JSON opublikowany przez MQTT
  • config.h/config.cpp - biblioteka czytająca/boxes/zapisująca pliki konfiguracyjne na SPIFFS
  • static_i2c_callbacks.ino - wywołania zwrotne I2C dla odbieranej właściwości i zakończenie cyklu żądań slave'ów static_mqtt.ino - funkcje MQTT
  • static_server.ino - funkcje serwera WWW
  • static_utility.ino - funkcje pomocnicze

Statyczne funkcje INO były używane (zamiast bibliotek) z różnych powodów, ale głównie po to, aby funkcje Webserver i MQTT mogły dobrze ze sobą współpracować.

ZASOBY SPIFFS

Szczegółowe wyjaśnienia dotyczące plików SPIFFS można znaleźć tutaj.

  • favicon.ico - zasób używany przez Ace Editor
  • konfiguracja
    • device.json - konfiguracja urządzenia (Wifi, MQTT…)
    • slave_metas_#.json - generowane w czasie wykonywania dla każdego numeru adresu slave (#)
    • user_card_#.json - niestandardowy punkt końcowy do integracji z deviceInfo dla każdego numeru adresu slave (#)
    • user_card_base.json - niestandardowy punkt końcowy do integracji z deviceInfo dla urządzenia
    • user_meta_#.json - niestandardowe metadane zastępują te z urządzeń podrzędnych dla każdego numeru adresu urządzenia podrzędnego (#)
    • user_props.json - niestandardowe nazwy właściwości do nadpisania tych w metadanych niewolników
  • korsa
    • card-webcomponent.css - arkusz stylów dla różnych niestandardowych kart
    • card-webcomponent.html - komponent webowy dla różnych kart niestandardowych
  • redaktor

    • assimilate-logo-p.webp" />
    • edit.htm.gz - gzip HTML edytora Ace
    • edit.htm.src - oryginalny kod HTML Ace Editor
    • favicon-32x32-p.webp" />

PRZESYŁANIE OPROGRAMOWANIA

  • Repozytorium kodu można znaleźć tutaj (migawka).
  • ZIP biblioteki można znaleźć tutaj (migawka).
  • Instrukcje dotyczące „Importowania biblioteki ZIP” znajdują się tutaj.
  • Po zainstalowaniu biblioteki możesz otworzyć przykład „mqtt_crouton_esp8266_cors_webcomponents”.
  • Instrukcja konfiguracji Arduino dla Wemos D1 Mini tutaj.
  • Zależności: ArduinoJson, TimeLib, PubSubClient, NeoTimer (patrz załączniki w przypadku łamania zmian w repozytoriach).

PRZEŚLIJ DO SPIFF

Po załadowaniu kodu do Arduino IDE otwórz device.json w folderze data/config:

  • Zmodyfikuj wartość wifi_ssid za pomocą swojego identyfikatora SSID Wi-Fi.
  • Zmodyfikuj wartość wifi_key za pomocą klucza WiFi.
  • Zmodyfikuj wartość mqtt_device_name za pomocą preferowanej identyfikacji urządzenia (bez konieczności łączenia).
  • Zmodyfikuj wartość mqtt_device_description za pomocą preferowanego opisu urządzenia (w Crouton).
  • Zapisz plik device.json.
  • Prześlij pliki danych do SPIFFS.

Główny punkt wejścia dla przykładu AssimilateBus:

/*
*
*OCZEKUJE SIĘ, ŻE ZASADY BIZNESOWE DLA TWOJEGO URZĄDZENIA BYĆ KONTROLOWANE ZA POMOCĄ MQTT - NIE WRAZ Z TYM OPROGRAMOWANIEM
*
* Inne niż konfiguracja i pętla w tym pliku
* ważne ruchome części to
* on_bus_received i on_bus_complete w static_i2c_callbacks.ino
* oraz
* mqtt_publish i mqtt_callback w static_mqtt.ino
*
*/
#include"types.h"
#include"VizJson.h"
#include"assimilate_bus.h"
#include"debug.h"
#include"config.h"
#włączać

#włączać

// ustaw MQTT_MAX_PACKET_SIZE na ~3000 (lub twoje potrzeby dla deviceInfo json)

#włączać
#włączać
#włączać
#włączać
#włączać
//---------------------------------DEKLARACJE PAMIĘCI
//------------------------------------------------ -- definiuje
#defineDBG_OUTPUT_FLAG2//0, 1, 2 MINIMUM, ZWOLNIENIE, PEŁNE
#define_mqtt_pub_topic"skrzynka nadawcza"// KONWENCJE CROUTON
#define_mqtt_sub_topic"skrzynka odbiorcza"
//------------------------------------------------ -- obiekty klasy
Debuguj _debug(DBG_OUTPUT_FLAG);
AssimilateBus _assimilate_bus;
VizJson _viz_json;
Konfiguracja _dane_konfiguracyjne;
Klient Wi-Fi _esp_klient;
PubSubClient _client(_esp_client);
UDP WiFiUDP;
ESP8266WebServer_server(80);
Neotimer _timer_property_request = Neotimer(5000);
//------------------------------------------------ -- struktury danych / zmienne
RuntimeDeviceData _runtime_device_data;
WłaściwośćDto _dto_props[50]; // maks. 10 niewolników x maks. 5 nieruchomości
//------------------------------------------------ -- kontrola przepływu
volatilebool _sent_device_info = false;
bajt _dto_props_index = 0;
bool _fatal_error = false;
//---------------------------------DEKLARACJE ZAKRESU FUNKCJI
//------------------------------------------------ -- static_i2c_callbacks.ino
voidon_bus_received(bajt slave_address, byte prop_index, rola roli, nazwa znaku[16], wartość znaku[16]);
voidon_bus_complete();
//------------------------------------------------ -- static_mqtt.ino
voidmqtt_callback(char* temat, bajt* ładunku, długość unsignedint);
voidmqtt_pętla();
int8_tmqtt_get_topic_index(char* temat);
voidmqtt_init(constchar* wifi_ssid, constchar* wifi_password, constchar* mqtt_broker, int mqtt_port);
voidmqtt_create_subscriptions();
voidmqtt_publish(char *root_topic, char *deviceName, char *endpoint, constchar *payload);
boolmqtt_ensure_connect();
voidmqtt_subscribe(char *root_topic, char *deviceName, char *endpoint);
voidi2c_set_and_get(adres bajtowy, kod bajtowy, constchar *param);
//------------------------------------------------ -- static_server.ino
String server_content_type_get(String nazwa pliku);
boolserver_path_in_auth_exclusion (ścieżka ciągu);
boolserver_auth_read (ścieżka ciągu);
boolserver_file_read (ścieżka ciągu);
voidserver_file_upload();
voidserver_file_delete();
voidserver_file_create();
voidserver_file_list();
voidserver_init();
voidtime_services_init (znak * nazwa_serwera_ntp, bajt strefa czasowa);
time_tget_ntp_time();
voidsend_ntp_packet(IPAdres &adres);
char *time_stamp_get();
//------------------------------------------------ -- static_utility.ino
String spiffs_file_list_build (ścieżka ciągu);
voidreport_deserialize_error();
voidreport_spiffs_error();
boolcheck_fatal_error();
boolget_json_card_type(bajt slave_address, bajt prop_index, char *card_type);
boolget_struct_card_type(bajt slave_address, bajt prop_index, char *card_type);
boolget_json_is_series(bajt slave_address, bajt prop_index);
voidstr_replace(char *src, constchar *stareznaki, char *noweznaki);
bajt get_prop_dto_idx(bajt slave_address, bajt prop_index);
//---------------------------------GŁÓWNY
voidsetup(){
DBG_OUTPUT_PORT.begin(115200);
SetupDeviceData dane_urządzenia;
Serial.println(); Serial.println(); // margines na śmieci konsoli
opóźnienie(5000);
if (DBG_OUTPUT_FLAG == 2)DBG_OUTPUT_PORT.setDebugOutput(true);
_debug.out_fla(F("ustawienia"), prawda, 2);
// pobierz wymaganą konfigurację
jeśli (SPIFFS.begin()){
_debug.out_str(spiffs_file_list_build("/"), prawda, 2);
if (!_config_data.get_device_data(device_data, _runtime_device_data)){
report_deserialize_error();
powrót;
}
}w przeciwnym razie{
report_spiffs_error();
powrót;
}
// użyj wartości timera ustawionej w device.json
_timer_property_request.set(device_data.sensor_interval);
mqtt_init(device_data.wifi_ssid, device_data.wifi_key, device_data.mqtt_broker, device_data.mqtt_port);
time_services_init (device_data.ntp_server_name, device_data.time_zone);
server_init();
// rozpocznij zbieranie metadanych
_assimilate_bus.get_metadata();
_assimilate_bus.print_metadata_details();
mqtt_ensure_connect();
// potrzebuje właściwości sensora (nazw) do kompletnego zbierania metadanych
_assimilate_bus.get_properties(on_bus_received, on_bus_complete);
_timer_property_request.reset(); // może upłynąć zauważalny czas do tego momentu, więc zacznij od nowa
}
voidloop(){
if (!check_fatal_error()) return;
mqtt_pętla();
_server.handleClient();
if(_timer_property_request.repeat()){
_assimilate_bus.get_properties(on_bus_received, on_bus_complete);
}
}

zobacz rawmqtt_crouton_esp8266_cors_webcomponents.ino hostowany z ❤ przez GitHub

Krok 5: KARTA URZĄDZENIA

KARTA URZĄDZENIA
KARTA URZĄDZENIA
KARTA URZĄDZENIA
KARTA URZĄDZENIA
KARTA URZĄDZENIA
KARTA URZĄDZENIA
KARTA URZĄDZENIA
KARTA URZĄDZENIA

Karta urządzenia (typ karty:assim-device) jest hostowana na stronie internetowej i nie jest konieczna jej obsługa z urządzenia (CORS).

Jego domyślna strona zawiera listę:

  • Tematy MQTT dotyczące czytania i pisania na urządzeniu
  • Punkt dostępowy, do którego jest podłączone urządzenie
  • Link do edytora plików SPIFFS hostowanego na urządzeniu za pomocą ACE EDITOR
  • Ikona oka, która pokazuje stronę karty Pokaż/Ukryj.

Strona Pokaż/Ukryj karty zawiera listę:

  • Każda karta jako osobna pozycja
  • Pogrubiona niebieska czcionka podczas wyświetlania
  • Czarna normalna czcionka, gdy jest ukryta
  • Ikona przedstawiająca rodzaj karty.

Kartę można ukryć, klikając przycisk ukrywania na kartach lub klikając pogrubioną niebieską czcionkę na liście. Karty można wyświetlić, klikając element z czarną czcionką na liście.

Luźno związane z tą funkcją są toasty informacyjne. Jeśli którykolwiek z punktów końcowych w deviceInfo ma przypisaną właściwość info, obok przycisku ukrywania na karcie zostanie wyświetlony przycisk informacji. Po kliknięciu informacje kontekstowe zdefiniowane w punkcie końcowym zostaną „wypieczone” do okna.

Jeśli karta urządzenia nie jest zdefiniowana, przyciski ukrywania nie będą widoczne na kartach. Dzieje się tak, ponieważ po ukryciu nie można ich ponownie pokazać.

Zobacz DOSTOSOWYWANIE PUNKTU KOŃCOWEGO, aby dowiedzieć się, jak dodać kartę assim-device za pośrednictwem plików SPIFFS w ESP8266.

AsymilujCrouton WebComponent

żelazne-sygnały>
div>
POKAŻ UKRYJ IKONĘ
ja>rozpiętość>
FORMULARZ URZĄDZENIA
TEMATY MQTTdiv>
/outbox/{{endPointJson.device_name}}/*div>
/inbox/{{endPointJson.device_name}}/*div>
WIFI SSIDdiv>
{{endPointJson.ssid}}div>
ADRES IP div>
{{endPointJson.ip_addr}}a>div>
div>
POKAŻ UKRYJ LISTĘ
element> [tytuł.tytułu]przedmiot-papieru>
szablon>
papier-listbox>
div>
karta z grzankami>
szablon>
moduł-dom>

zobacz rawassim-device.html hostowany z ❤ przez GitHub

Krok 6: KARTA TYGODNIA

KARTA TYGODNIA
KARTA TYGODNIA
KARTA TYGODNIA
KARTA TYGODNIA
KARTA TYGODNIA
KARTA TYGODNIA

Karta widoku tygodnia (typ karty: assim-weekview) jest hostowana na urządzeniu (folder cors). Jest wstrzykiwany do pakietu deviceInfo opublikowanego dla AssimilateCrouton, przez dodanie pliku config/user_card_#.json do SPIFFS (w tym przypadku user_card_9.json).

PRZEGLĄD

Dni tygodnia są prezentowane jako listy przedziałów czasowych. Szczegółowość przedziału czasu jest ustawiana za pomocą właściwości „interval_mins” w config/user_card_#.json. Musi to być ułamek godziny lub wielokrotność godziny, np. 10, 15, 20, 30, 60, 120, 360. Kliknięcie szczeliny czasowej zapewnia, że w tym czasie zostanie wydany stan włączenia dla powiązanego urządzenia. Jeśli przedział czasowy jest teraz, polecenie jest wysyłane (publikowane) natychmiast dla urządzenia. Normalnie stan jest sprawdzany/publikowany co minutę. Wybory są zapisywane w LocalStorage, więc czasy zostaną ponownie załadowane przy odświeżeniu przeglądarki.

PRZYPADKÓW UŻYCIA

W obecnym stanie widok tygodnia jest odpowiedni dla urządzeń, które mogą używać przełącznika Toggle do wizualizacji swojego stanu, tj. są włączone lub wyłączone, a po ustawieniu pozostają w tym stanie. Światła, wentylatory i podgrzewacze wody są dobrymi kandydatami.

OGRANICZENIA/OSTRZEŻENIA

  • Interwał_min musi być jedną z wartości wymienionych powyżej
  • Widok tygodniowy nie obsługuje chwilowych działań, które są również zaplanowane, takich jak krótkie odkręcanie kranu (5 sekund) dwa razy dziennie.

PRZYSZŁY

  • Oczekuje się, że doraźne działania będą wspierane.
  • Rozważana jest zsynchronizowana pamięć masowa na różnych urządzeniach w przypadku wyboru harmonogramu.

Krok 7: DOSTOSOWYWANIE PUNKTU KOŃCOWEGO

Jak wspomniano krótko w FIRMWARE, do systemu plików SPIFFS dodano 2 nowe konwencje w celu dostosowania punktów końcowych. Pliki JSON to fragmenty, które są dodawane do właściwości endpoints w pakiecie deviceInfo przesłanym do brokera MQTT, który staje się definicją pulpitu nawigacyjnego.

Klucze punktów końcowych są generowane w oprogramowaniu:

  • CC_device (karta niestandardowa) dla user_card_base.json
  • CC_SLAVE_ENDPOINT NAME dla user_card_#.json (# to adres slave)

Jak wspomniano wcześniej, istnieją zmienne, które są zastępowane wartościami w czasie wykonywania:

  • mqtt_nazwa_urządzenia
  • wifi_ssid
  • lokalny_ip

user_card_base.json

Przykład:

{ "device_name": "", "card-type": "assim-device", "ssid": "", "ip_addr": "", "endpoints": [{ "title": "Rozwijaj światła", " card-type": "crouton-simple-toggle", "endpoint": "switch" }, { "title": "Światła do sadzenia", "card-type": "crouton-assim-weekview", "endpoint": "CC_switch" }] }

user_card_#.json

Przykład:

{ "card-type": "assim-weekview", "path": "https:///cors", "title": "Światła doniczkowe", "info": "Włącz lub wyłącz światła za 15 minut slots", "interval_mins": 15, "values": { "value": "" } }

Krok 8: FILMY

Zalecana: