Indholdsfortegnelse:

IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 trin
IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 trin

Video: IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 trin

Video: IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 trin
Video: Indefinite Pitch PREMIERES. Mod.1 - Into The Circle [Linderluft Records] 2024, Juli
Anonim
IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASSIMILATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS

ASSIMILATE SENSOR/ACTOR Slaves integrerer metadata, der bruges til at definere visualiseringer i Crouton. Denne opbygning er lidt forskellig fra tidligere; der er ingen hardwareændringer. Firmwaren understøtter nu hosting tilpassede (rigere) redaktører, der kan integreres i den seneste version af AssimilateCrouton. Mere opmærksomhed vil blive givet til at forklare firmwaren og MQTT -instrumentbrættet i denne artikel.

En af fordelene ved at betjene WebComponents fra den enhed, de kontrollerer, er, at den mere avancerede kontrol af enheden er begrænset til det netværk, som enheden er forbundet til: dit WiFi -adgangspunkt. Selvom der, når du først har brugt en MQTT -server med godkendelse, er en lighed med beskyttelse, kan der på offentlige netværk, hvis du forlader din browser et øjeblik (AssimilateCrouton -webstedet), springe ind og styre dine automatiseringsenheder. Denne CORS WebComponent -funktion gør det muligt kun at få aflæsninger (temp, lysniveauer, fugtighed) vist offentligt og kommandofunktioner (on/off, planlægning) kun tilgængelige fra enhedsnetværket.

På enheden understøttes alle webserverfunktioner med godkendelse og hosting i SPIFFS stadig, men der er specielt fokus på CORS (Cross Origin Resource Sharing) understøttelse af Polymer WebComponents (Crouton bruger Polymer 1.4.0).

I AssimilateCrouton (gaffelen af Crouton brugt til Assimilate IOT Network) omfatter ændringerne bl.a.

  • understøttelse af et enhedskort (assim-device), der blandt andet viser og skjuler, for en bruger, individuelle kort til en enhed
  • info -ejendom på alle kort, der viser en skål med nyttige kontekstuelle oplysninger til et kort
  • support til CORS webkomponenter, i dette tilfælde hostet på webserveren på enheden (ESP8266).

Trin 1: CROUTON

CROUTON
CROUTON
CROUTON
CROUTON

Crouton er et dashboard, der lader dig visualisere og styre dine IOT -enheder med minimal opsætning. I det væsentlige er det det nemmeste instrumentbræt at konfigurere for enhver IOT -hardwareentusiast, der kun bruger MQTT og JSON.

ASSIMILATE SLAVES (sensorer og aktører) har indlejrede metadata og egenskaber, som masteren bruger til at opbygge deviceInfo json -pakken, som Crouton bruger til at bygge dashboardet. Mellemlederen mellem ASSIMILATE NODES og Crouton er en MQTT -mægler, der er websockets venlig: Myg bruges til demoen.

Da ASSIMILATE MASTER anmoder om egenskaber, formaterer det svarværdierne i det nødvendige format til Crouton -opdateringer. AssimilateCrouton -gaffelen tilføjer nogle funktioner, der gør dig i stand til at decentralisere forretningsreglerne, der kører din enhed, dvs. IOT -enheden behøver ikke nogen integrerede forretningsregler, det er bare en pipeline til MQTT/I2C -kommunikation til de smartere (ATTINY -kontrollerede) slaveaktører og sensorer.

Trin 2: ASSIMILER CROUTON

ASSIMILER CROUTON
ASSIMILER CROUTON

ÆNDRINGER I CROUTON

Ændringer fra den forked version omfatter:

  • hvis et slutpunkt har en stiegenskab defineret, udfører WebComponent for kortet en HTMLImport for en CORS -ressource (webserveren på ESP8266 i denne build).
  • eventuelle ressourcer opstrøms for (afhængigheder af) et CORS -webkomponent refereres til, som om de serveres fra Crouton -webstedet; når de ikke kan indlæse en undtagelseshåndterer afviser stierne og indlæser hvis fra webstedet.
  • en aktuel lokal tid vises øverst til højre, nyttig til planlægning af verifikation.

POLYMERAFHÆNGIGHEDER OG KORS

Bladene i et Polymer -afhængighedstræ kan hostes i CORS. Fordi rodafhængighederne kan bruges flere gange i en app, kan der ikke henvises til dem fra to placeringer (webstedet og enheden), fordi Polymer Module Loader behandler dem som 2 separate ressourcer og flere registreringsfejl hurtigt flykker et program.

Af denne grund er webkomponenten til et kort (HTML -fil i 1.4.0) og den tilhørende CSS -fil de eneste filer, der er hostet på enheden. De andre afhængigheder refereres til, som om WebComponent er hostet i "html" -mappen på det oprindelige websted, hvilket gør det let at udvikle WebComponents fra den mappe, indtil den er klar til at uploades til SPIFFS på ESP8266. AssimilateCrouton finder ud af, hvordan man får de korrekte filer.

UDVIKLING

edfungus skaberen af den originale Crouton skrev kilden i Pug/Less og havde en NPM/Grunt værktøjskæde. Jeg gengav Pug/Less som HTML/css og redigerede/distribuerede bare de gengivne filer. Dette brød NPM/Grunt værktøjskæden. Rettelse af dette er dækket i afsnittet FREMTID.

Du kan teste instrumentbrættet lokalt på din DEV -boks:

  • Fra kommandolinjen i rodmappen
  • npm start
  • lite-serveren er spundet op til https:// localhost: 10001

Distribuer til en statisk webserver:

  • kopier alle mapper undtagen node_modules
  • kopier index.html (og muligvis web.config)

FREMTID

Et af hovedmålene er at opgradere til Polymer3 og arbejde ud fra Polymer CLI. Tilføjelse af avancerede redaktører og rammer for IOT -udviklere til at udvikle deres egne er en høj prioritet. Til sidst vil avanceret automatiseret system blive kørt fuldstændigt fra løsrevne MQTT -klienter som AssimilateCrouton.

Et eksempel på deviceInfo-pakken, der bruges til AssimilateCrouton:

{
"deviceInfo": {
"endPoints": {
"CC_enhed": {
"device_name": "ash_mezz_A3",
"card-type": "assim-enhed",
"ssid": "Corelines_2",
"ip_addr": "192.168.8.104",
"endepunkter": [
{
"title": "Grow Lights",
"card-type": "crouton-simple-toggle",
"endpoint": "switch"
},
{
"title": "Planterlys",
"card-type": "crouton-assim-weekview",
"endpoint": "CC_switch"
}
]
},
"CC_switch": {
"card-type": "assim-weekview",
"info": "Tænd eller sluk lyset i 15 minutters tidsrum",
"sti": "https://192.168.8.104/cors",
"title": "Planterlys",
"interval_min": 15,
"værdier": {
"værdi": ""
}
},
"kontakt": {
"title": "Grow Lights",
"card-type": "crouton-simple-toggle",
"info": "Tænd eller sluk lys på ad hoc -basis",
"labels": {
"false": "OFF",
"true": "ON"
},
"ikoner": {
"false": "sun-o",
"true": "sun-o"
},
"værdier": {
"værdi": 0
}
}
},
"status": "god",
"name": "ash_mezz_A3",
"description": "Kontor i Ashmore, mezzanin, område A2",
"farve": "#4D90FE"
}
}

se rawdeviceInfo.json hostet af ❤ af GitHub

Trin 3: ENHEDSMONTERING

ENHEDSMONTERING
ENHEDSMONTERING
ENHEDSMONTERING
ENHEDSMONTERING
ENHEDSMONTERING
ENHEDSMONTERING

Da der ikke er nogen hardwareændringer, er her linkene til den relevante information:

  • Skalsamling
  • Materialer og værktøjer
  • Forberedelse af MCU
  • Forberedelse af MCU -boliger
  • Bygning af slaverne Lavsidekontakt/RESET Datterbræt
  • Samling af hovedkomponenterne

Trin 4: FIRMWARE

FIRMWARE
FIRMWARE
FIRMWARE
FIRMWARE
FIRMWARE
FIRMWARE
FIRMWARE
FIRMWARE

Vigtigste ændringer i denne bygning

For at AssimilateCrouton -applikationen kunne bruge CORS -ressourcer fra enheden, skulle svarhoveder konfigureres på en bestemt måde. Dette blev implementeret i denne version af firmwaren (static_server.ino => server_file_read ()).

Også den vigtigste afhængighedsgraf for Polymer skulle være fra en enkelt oprindelse. En strategi blev brugt til at tilføje en onerror -handler (corsLinkOnError) til SPIFFS CORS -filerne for at genindlæse ressourcerne fra AssimilateCrouton -webstedet, når de ikke findes på enheden.

Der er tilføjet 2 nye konventioner til SPIFFS -filsystemet til at tilpasse de slutpunkter, der oprettes i deviceInfo - som AssimilateCrouton bruger til at oprette dashboardkortene:

  • /config/user_card_base.json Endpoint definition med runtime variabler, der først byttes:,,. Det er typisk her, assim-enhedskortet tilføjes. Dette kommunikerer ikke tilbage med enheden.
  • /config/user_card_#.json Slutpunktsdefinition med runtime -variabler, der først byttes:,,. Det er typisk her, de rige redaktører som assim-weekview-kort vil blive tilføjet tilsluttet I2C-slave (skuespiller/sensor), der vedrører #.

SKETSEN/BIBLIOTEKERNE

På dette stadium er projektet blevet pakket som et eksempel til AssimilateBus Arduino -biblioteket. Dette er hovedsageligt for at gøre alle de nødvendige filer let tilgængelige fra Arduino IDE. De vigtigste kodegenstande er:

  • mqtt_crouton_esp8266_cors_webcomponents.ino - hovedindgangspunktet.
  • assimilate_bus.h/assimilate_bus.cpp - biblioteket, der håndterer I2C -kommunikationen med Slave Sensor/Actors
  • VizJson.h/VizJson.cpp - biblioteket, der formaterer/bygger enhver JSON, der er udgivet via MQTT
  • config.h/config.cpp - biblioteket, der læser/bokser/skriver konfigurationsfiler på SPIFFS
  • static_i2c_callbacks.ino - I2C -tilbagekald for en ejendom, der modtages, og slaveforespørgslernes cyklus er fuldstændig static_mqtt.ino - MQTT -funktionerne
  • static_server.ino - webserverens funktioner
  • static_utility.ino - hjælperfunktioner

De statiske INO -funktioner blev brugt (i stedet for biblioteker) af forskellige årsager, men hovedsageligt for at Webserver- og MQTT -funktionerne kunne spille godt sammen.

SPIFFS -RESSOURCERNE

Detaljerede forklaringer på SPIFFS -filerne findes her.

  • favicon.ico - ressource brugt af Ace Editor
  • konfiguration

    • device.json - konfigurationen til enheden (Wifi, MQTT …)
    • slave_metas _#. json - genereret ved runtime for hvert slaveadressenummer (#)
    • user_card _#. json - brugerdefineret slutpunkt, der skal integreres i deviceInfo for hvert slaveadressenummer (#)
    • user_card_base.json - brugerdefineret slutpunkt, der skal integreres i deviceInfo til enheden
    • user_meta _#. json - brugerdefinerede metadata tilsidesætter slavernes for hvert slaveadressenummer (#)
    • user_props.json - tilpassede ejendomsnavne til at tilsidesætte dem i slavernes metadata
  • cors

    • card -webcomponent.css - stylesheet til forskellige brugerdefinerede kort
    • card -webcomponent.html - webcomponent til forskellige brugerdefinerede kort
  • redaktør

    • assimilate -logo-p.webp" />
    • edit.htm.gz - gzip af Ace Editor HTML
    • edit.htm.src - original HTML for Ace Editor
    • favicon -32x32-p.webp" />

OPLADNING AF FIRMWAREN

  • Kodelageret kan findes her (øjebliksbillede).
  • Et ZIP af biblioteket findes her (øjebliksbillede).
  • Instruktioner til "Import af et ZIP -bibliotek" her.
  • Når biblioteket er installeret, kan du åbne eksemplet "mqtt_crouton_esp8266_cors_webcomponents".
  • Instruktioner til opsætning af Arduino til Wemos D1 Mini her.
  • Afhængigheder: ArduinoJson, TimeLib, PubSubClient, NeoTimer (se vedhæftede filer, hvis du bryder ændringer i lagre).

UPLOAD TIL SPIFFS

Når koden er indlæst i Arduino IDE, skal du åbne device.json i data/config -mappen:

  • Rediger værdien af wifi_ssid med dit WiFi SSID.
  • Rediger værdien af wifi_key med din WiFi -nøgle.
  • Rediger værdien af mqtt_device_name med din foretrukne enhedsidentifikation (ingen tilslutning nødvendig).
  • Rediger værdien af mqtt_device_description med din foretrukne enhedsbeskrivelse (i Crouton).
  • Gem device.json.
  • Upload datafilerne til SPIFFS.

Hovedindgangspunktet for AssimilateBus-eksemplet:

/*
*
*FORRETNINGSREGLERNE FOR DIN ENHED FORVENTES AT KONTROLLERES VIA MQTT - IKKE HARDT BAGET I DENNE FIRMWARE
*
* Andet end opsætning og loop i denne fil
* de vigtige bevægelige dele er
* on_bus_received og on_bus_complete i static_i2c_callbacks.ino
* og
* mqtt_publish og mqtt_callback i static_mqtt.ino
*
*/
#include "types.h"
#include "VizJson.h"
#include "assimilate_bus.h"
#include "debug.h"
#include "config.h"
#omfatte

#omfatte

// indstil MQTT_MAX_PACKET_SIZE til ~ 3000 (eller dine behov for deviceInfo json)

#omfatte
#omfatte
#omfatte
#omfatte
#omfatte
// --------------------------------- HUKOMMELSESERKLÆRINGER
// ------------------------------------------------ - definerer
#defineDBG_OUTPUT_FLAG2 // 0, 1, 2 MINIMUM, RELEASE, FULL
#define_mqtt_pub_topic "udbakke" // CROUTON CONVENTIONS
#define_mqtt_sub_topic "indbakke"
// ------------------------------------------------ - klasseobjekter
Debug _debug (DBG_OUTPUT_FLAG);
AssimilateBus _assimilate_bus;
VizJson _viz_json;
Config _config_data;
WiFiClient _esp_client;
PubSubClient _client (_esp_client);
WiFiUDP Udp;
ESP8266WebServer _server (80);
Neotimer _timer_property_request = Neotimer (5000);
// ------------------------------------------------ - datastrukturer / variabel
RuntimeDeviceData _runtime_device_data;
PropertyDto _dto_props [50]; // max 10 slaver x max 5 ejendomme
// ------------------------------------------------ - kontrolflow
volatilebool _sent_device_info = false;
byte _dto_props_index = 0;
bool _fatal_error = falsk;
// --------------------------------- FUNKTIONSOMRÅDE ERKLÆRINGER
// ------------------------------------------------ - static_i2c_callbacks.ino
voidon_bus_received (byte slave_address, byte prop_index, rolle rolle, char navn [16], char værdi [16]);
voidon_bus_complete ();
// ------------------------------------------------ - statisk_mqtt.ino
voidmqtt_callback (char* topic, byte* nyttelast, usigneret længde);
voidmqtt_loop ();
int8_tmqtt_get_topic_index (tegn* emne);
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 *nyttelast);
boolmqtt_ensure_connect ();
voidmqtt_subscribe (char *root_topic, char *deviceName, char *endpoint);
voidi2c_set_and_get (byte adresse, byte kode, constchar *param);
// ------------------------------------------------ - statisk_server.ino
String server_content_type_get (strengfilnavn);
boolserver_path_in_auth_exclusion (strengsti);
boolserver_auth_read (strengsti);
boolserver_file_read (strengsti);
voidserver_file_upload ();
voidserver_file_delete ();
voidserver_file_create ();
voidserver_file_list ();
voidserver_init ();
voidtime_services_init (char *ntp_server_name, byte time_zone);
time_tget_ntp_time ();
voidsend_ntp_packet (IPAddress & adresse);
char *time_stamp_get ();
// ------------------------------------------------ - static_utility.ino
String spiffs_file_list_build (strengsti);
voidreport_deserialize_error ();
voidreport_spiffs_error ();
boolcheck_fatal_error ();
boolget_json_card_type (byte slave_address, byte prop_index, char *card_type);
boolget_struct_card_type (byte slave_address, byte prop_index, char *card_type);
boolget_json_is_series (byte slave_address, byte prop_index);
voidstr_replace (char *src, constchar *oldchars, char *newchars);
byte get_prop_dto_idx (byte slave_address, byte prop_index);
// --------------------------------- HOVED
voidsetup () {
DBG_OUTPUT_PORT.begyndt (115200);
SetupDeviceData device_data;
Serial.println (); Serial.println (); // margin for konsollaffald
forsinkelse (5000);
hvis (DBG_OUTPUT_FLAG == 2) DBG_OUTPUT_PORT.setDebugOutput (sand);
_debug.out_fla (F ("setup"), true, 2);
// få den nødvendige konfiguration
hvis (SPIFFS.begin ()) {
_debug.out_str (spiffs_file_list_build ("/"), sand, 2);
hvis (! _config_data.get_device_data (device_data, _runtime_device_data)) {
report_deserialize_error ();
Vend tilbage;
}
}andet{
report_spiffs_error ();
Vend tilbage;
}
// brug timerværdi indstillet i 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 ();
// kick off metadata collection
_assimilate_bus.get_metadata ();
_assimilate_bus.print_metadata_details ();
mqtt_ensure_connect ();
// har brug for sensoregenskab (navne) for at fuldføre metadataopsamling
_assimilate_bus.get_properties (on_bus_received, on_bus_complete);
_timer_property_request.reset (); // kan bortfalde mærkbar tid indtil dette tidspunkt, så start det igen
}
voidloop () {
hvis (! check_fatal_error ()) returnerer;
mqtt_loop ();
_server.handleClient ();
hvis (_timer_property_request.repeat ()) {
_assimilate_bus.get_properties (on_bus_received, on_bus_complete);
}
}

se rawmqtt_crouton_esp8266_cors_webcomponents.ino hostet med ❤ af GitHub

Trin 5: ENHEDKORT

ENHEDSKORT
ENHEDSKORT
ENHEDSKORT
ENHEDSKORT
ENHEDSKORT
ENHEDSKORT
ENHEDSKORT
ENHEDSKORT

Enhedskortet (korttype: assim-device) er hostet på webstedet, og det er ikke nødvendigt at betjene det fra enheden (CORS).

Dets standardsider viser:

  • MQTT -emnerne til læsning og skrivning til enheden
  • Adgangspunktet, enheden er forbundet til
  • Et link til SPIFFS -fileditoren, der er hostet på enheden ved hjælp af ACE EDITOR
  • Et øjeikon, der viser siden Vis/skjul kort.

Siden Vis/skjul kort viser:

  • Hvert kort som en separat vare
  • Fed blå skrift, når den vises
  • Sort normal skrifttype, når den er skjult
  • Et ikon, der viser typen af kort.

Kortet kan skjules ved at klikke på skjul-knappen på kortene eller ved at klikke på et blåt skrift-element på listen. Kortene kan vises ved at klikke på en sort-normal-skrifttype på listen.

Løst relateret til denne funktion er informationsskålene. Hvis et af slutpunkterne i deviceInfo er tildelt en info -egenskab, vises en info -knap ud for knappen Skjul på kortet. Når der klikkes på de kontekstuelle oplysninger, der er defineret i slutpunktet, bliver "ristet" til vinduet.

Hvis enhedskortet ikke er defineret, vises skjulknapperne ikke på kortene. Dette skyldes, at når de er skjult, er der ingen måde at vise dem igen.

Se ENDPOINT CUSTOMIZATION for at se, hvordan assim-enhedskortet kan tilføjes via SPIFFS-filerne på ESP8266.

AssimilateCrouton WebComponent

jernsignaler>
div>
VIS HIDE ICON
i> span>
ENHEDSFORM
MQTT TOPICSdiv>
/outbox/{{endPointJson.device_name}}/*div>
/indbakke/{{endPointJson.device_name}}/*div>
WIFI SSIDdiv>
{{endPointJson.ssid}} div>
IP ADDRESSdiv>
{{endPointJson.ip_addr}} a> div>
div>
VIS HIDE LIST
element>papir-element>
skabelon>
paper-listbox>
div>
crouton-kort>
skabelon>
dom-modul>

se rawassim-device.html hostet af ❤ af GitHub

Trin 6: WEEKVIEW CARD

UGEVISNINGSKORT
UGEVISNINGSKORT
UGEVISNINGSKORT
UGEVISNINGSKORT
UGEVISNINGSKORT
UGEVISNINGSKORT

Weekview-kortet (korttype: assim-weekview) er hostet på enheden (mappen cors). Det injiceres i deviceInfo -pakken, der er offentliggjort til AssimilateCrouton, ved at tilføje en fil config/user_card _#. Json til SPIFFS (i dette tilfælde user_card_9.json).

OVERSIGT

Hverdagene præsenteres som lister over tidspunkter. Tidsrummets granularitet indstilles med egenskaben "interval_mins" i config/user_card _#. Json. Det skal være en brøkdel af en time eller multipla af en time f.eks. 10, 15, 20, 30, 60, 120, 360. Hvis du klikker på en tidsluke, skal du sikre, at der er kommandoer til en tilstand på den tilhørende enhed i den tid. Hvis tidsrummet er nu, sendes (offentliggøres) en kommando med det samme til enheden. Normalt kontrolleres/offentliggøres staten hvert minut. Valg gemmes i LocalStorage, så tiderne genindlæses med en browseropdatering.

BRUG SAGER

I sin nuværende tilstand er weekview egnet til enheder, der kan bruge en Toggle -switch til at visualisere deres tilstand, dvs. Lys, blæsere og vandvarmere er gode kandidater.

BEGRÆNSNINGER/HULLER

  • Intervallet_min skal være en af de ovennævnte værdier
  • Weekview understøtter ikke øjeblikkelige handlinger, der også er planlagt, f.eks. At trykke kortvarigt på (5 sekunder) to gange om dagen.

FREMTID

  • Det forventes, at øjeblikkelige handlinger vil blive understøttet.
  • Synkroniseret lagring på tværs af enheder, for valg af tidsplan overvejes.

Trin 7: ENDPOINT -TILPASNING

Som nævnt i FIRMWARE er der tilføjet 2 nye konventioner til SPIFFS -filsystemet for at tilpasse slutpunkterne. JSON -filerne er fragmenter, der tilføjes til slutpunkter -egenskaben i deviceInfo -pakken, der indsendes til MQTT -mægleren, der bliver til dashboarddefinitionen.

Nøglerne til slutpunkterne genereres i firmware:

  • CC_device (brugerdefineret kort) til user_card_base.json
  • CC_SLAVE_ENDPOINT NAME for user_card _#. Json (# er slaveadresse)

Som nævnt før er der variabler, der bliver erstattet af værdier ved runtime:

  • mqtt_device_name
  • wifi_ssid
  • lokal_ip

user_card_base.json

Et eksempel:

user_card _#. json

Et eksempel:

Trin 8: VIDEOS

Anbefalede: