Πίνακας περιεχομένων:

IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 Βήματα
IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 Βήματα

Βίντεο: IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 Βήματα

Βίντεο: IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS: 8 Βήματα
Βίντεο: Indefinite Pitch PREMIERES. Mod.1 - Into The Circle [Linderluft Records] 2024, Ιούλιος
Anonim
IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS
IOT123 - ASIMIMATE SENSOR HUB: ICOS10 CORS WEBCOMPONENTS

Το ASSIMILATE SENSOR/ACTOR Slaves ενσωματώνει μεταδεδομένα που χρησιμοποιούνται για τις καθοριστικές απεικονίσεις στο Crouton. Αυτή η κατασκευή είναι ελαφρώς διαφορετική από τις προηγούμενες. δεν υπάρχουν αλλαγές υλικού. Το υλικολογισμικό υποστηρίζει τώρα τη φιλοξενία προσαρμοσμένων (πλουσιότερων) εκδοτών που μπορούν να ενσωματωθούν στην τελευταία έκδοση του AssimilateCrouton. Περισσότερη προσοχή θα δοθεί στην εξήγηση του υλικολογισμικού και του πίνακα ελέγχου MQTT σε αυτό το άρθρο.

Ένα από τα πλεονεκτήματα της εξυπηρέτησης WebComponents από τη συσκευή που ελέγχουν είναι ότι ο πιο προηγμένος έλεγχος της συσκευής περιορίζεται στο δίκτυο στο οποίο είναι συνδεδεμένη η συσκευή: το WiFi Access Point. Αν και μόλις χρησιμοποιήσετε διακομιστή MQTT με έλεγχο ταυτότητας υπάρχει ομοιότητα προστασίας, σε δημόσια δίκτυα εάν εγκαταλείψετε στιγμιαία το πρόγραμμα περιήγησής σας (ιστότοπος AssimilateCrouton) κάποιος θα μπορούσε να εισέλθει και να ελέγξει τις συσκευές αυτοματισμού σας. Αυτή η δυνατότητα CORS WebComponent καθιστά δυνατή τη δημόσια προβολή μόνο των ενδείξεων (θερμοκρασία, επίπεδα φωτισμού, υγρασία) και λειτουργίες εντολών (ενεργοποίηση/απενεργοποίηση, προγραμματισμός) μόνο από το δίκτυο συσκευών.

Στη συσκευή, εξακολουθούν να υποστηρίζονται όλες οι δυνατότητες του διακομιστή ιστού με έλεγχο ταυτότητας και φιλοξενία στο SPIFFS, αλλά έχει δοθεί ιδιαίτερη έμφαση στην υποστήριξη CORS (Cross Origin Resource Sharing) για Polymer WebComponents (το Crouton χρησιμοποιεί Polymer 1.4.0).

Στο AssimilateCrouton (το πιρούνι του Crouton που χρησιμοποιείται για το Assimilate IOT Network) οι αλλαγές περιλαμβάνουν

  • υποστήριξη για κάρτα συσκευής (assim-device) που μεταξύ άλλων εμφανίζει και αποκρύπτει, για έναν χρήστη, μεμονωμένες κάρτες για μια συσκευή
  • ιδιότητα πληροφοριών σε όλες τις κάρτες που εμφανίζει μια φρυγανιά χρήσιμων πληροφοριών συμφραζομένων για μια κάρτα
  • υποστήριξη για τα διαδικτυακά στοιχεία CORS, σε αυτήν την περίπτωση που φιλοξενούνται στον διακομιστή ιστού στη συσκευή (ESP8266).

Βήμα 1: CROUTON

ΦΡΥΓΑΝΙΑ ΣΟΥΠΑΣ
ΦΡΥΓΑΝΙΑ ΣΟΥΠΑΣ
ΦΡΥΓΑΝΙΑ ΣΟΥΠΑΣ
ΦΡΥΓΑΝΙΑ ΣΟΥΠΑΣ

Το Crouton είναι ένας πίνακας ελέγχου που σας επιτρέπει να απεικονίσετε και να ελέγξετε τις συσκευές IOT με ελάχιστη ρύθμιση. Ουσιαστικά, είναι ο ευκολότερος πίνακας ελέγχου που μπορείτε να ρυθμίσετε για κάθε λάτρη του υλικού IOT χρησιμοποιώντας μόνο MQTT και JSON.

Οι ASSIMILATE SLAVES (αισθητήρες και ηθοποιοί) έχουν ενσωματωμένα μεταδεδομένα και ιδιότητες που χρησιμοποιεί ο κύριος για τη δημιουργία του πακέτου συσκευήςInfo json που χρησιμοποιεί ο Crouton για τη δημιουργία του ταμπλό. Ο διαμεσολαβητής μεταξύ ASSIMILATE NODES και Crouton είναι ένας μεσίτης MQTT που είναι φιλικός προς τα websockets: Το Mosquito χρησιμοποιείται για την επίδειξη.

Καθώς το ASSIMILATE MASTER ζητά ιδιότητες, διαμορφώνει τις τιμές απόκρισης στην απαιτούμενη μορφή για ενημερώσεις Crouton. Το πιρούνι AssimilateCrouton προσθέτει ορισμένες δυνατότητες που σας επιτρέπουν να αποκεντρώνετε τους επιχειρηματικούς κανόνες που τρέχουν τη συσκευή σας, δηλαδή η συσκευή IOT δεν χρειάζεται ενσωματωμένους επιχειρηματικούς κανόνες, είναι απλώς ένας αγωγός για επικοινωνία MQTT/I2C στους πιο έξυπνους (ελεγχόμενους με ATTINY) δούλους και αισθητήρες Το

Βήμα 2: ΑΠΟΚΑΛΥΗ ΚΡΟΥΤΟΝ

ΚΟΡΟΥΤΟΝ ΑΝΑΜΟΝΗΣΗΣ
ΚΟΡΟΥΤΟΝ ΑΝΑΜΟΝΗΣΗΣ

ΑΛΛΑΓΕΣ ΣΤΟ CROUTON

Οι αλλαγές από τη διχαλωτή έκδοση περιλαμβάνουν:

  • εάν ένα τελικό σημείο έχει καθορίσει μια ιδιότητα διαδρομής, το WebComponent για την κάρτα θα κάνει μια HTMLImport για έναν πόρο CORS (ο διακομιστής ιστού στο ESP8266 σε αυτήν την κατασκευή).
  • τυχόν πόροι ανάντη από (εξαρτήσεις) ενός WebComponent CORS αναφέρονται σαν να εξυπηρετούνται από τον ιστότοπο του Crouton. όταν αποτυγχάνουν να φορτώσουν έναν χειριστή εξαίρεσης επαναφέρει τις διαδρομές και φορτώνει εάν από τον ιστότοπο.
  • μια τρέχουσα τοπική ώρα εμφανίζεται πάνω δεξιά, χρήσιμη για τον προγραμματισμό της επαλήθευσης.

ΠΟΛΥΜΕΡΙΚΕΣ ΕΞΑΡΤΗΣΕΙΣ ΚΑΙ ΟΡΟΥΣ

Τα φύλλα ενός δέντρου εξάρτησης από πολυμερή μπορούν να φιλοξενηθούν στο CORS. Επειδή οι εξαρτήσεις ρίζας μπορούν να χρησιμοποιηθούν πολλές φορές σε μια εφαρμογή, δεν μπορούν να αναφερθούν από 2 τοποθεσίες (τον ιστότοπο και τη συσκευή) επειδή ο φορτωτής μονάδων πολυμερούς τα αντιμετωπίζει ως 2 ξεχωριστούς πόρους και πολλαπλά σφάλματα εγγραφής ανακατώνουν γρήγορα μια εφαρμογή.

Για το λόγο αυτό, το WebComponent για μια κάρτα (αρχείο HTML σε 1.4.0) και το σχετικό αρχείο CSS είναι τα μόνα αρχεία που φιλοξενούνται στη συσκευή. Οι άλλες εξαρτήσεις αναφέρονται ως εάν το WebComponent φιλοξενείται στο φάκελο "html" στον ιστότοπο προέλευσης, γεγονός που καθιστά εύκολη την ανάπτυξη των WebComponents από αυτόν τον φάκελο έως ότου είναι έτοιμο να μεταφορτωθεί στο SPIFFS στο ESP8266. Το AssimilateCrouton θα επεξεργαστεί πώς να αποκτήσει τα σωστά αρχεία.

ΑΝΑΠΤΥΞΗ

Ο δημιουργός edfungus του αρχικού Crouton έγραψε την πηγή στο Pug/Less και είχε μια εργαλειοθήκη NPM/Grunt. Έδωσα το Pug/Less ως HTML/css και μόλις επεξεργάστηκα/μοίρασα τα αποδιδόμενα αρχεία. Αυτό έσπασε την εργαλειοθήκη NPM/Grunt. Η διόρθωση αυτού καλύπτεται στην ενότητα ΜΕΛΛΟΝ.

Μπορείτε να δοκιμάσετε τον πίνακα ελέγχου τοπικά στο κιβώτιο DEV:

  • Από τη γραμμή εντολών στο βασικό φάκελο
  • npm έναρξη
  • ο διακομιστής lite ανοίγει για https:// localhost: 10001

Ανάπτυξη σε στατικό διακομιστή ιστού:

  • αντιγράψτε όλους τους φακέλους εκτός από τα node_modules
  • αντιγραφή index.html (και πιθανώς web.config)

ΜΕΛΛΟΝΤΙΚΟΣ

Ένας από τους κύριους στόχους είναι η αναβάθμιση σε Polymer3 και η εργασία από το Polymer CLI. Η προσθήκη προηγμένων εκδοτών και πλαισίου για τους προγραμματιστές IOT να αναπτύξουν το δικό τους αποτελεί υψηλή προτεραιότητα. Τελικά το προηγμένο αυτοματοποιημένο σύστημα θα τρέξει εντελώς από αποσπασμένους πελάτες MQTT όπως το AssimilateCrouton.

Ένα παράδειγμα του πακέτου συσκευής Info που χρησιμοποιείται για το AssimilateCrouton:

{
"πληροφορίες συσκευής": {
"endPoints": {
"CC_device": {
"όνομα_συσκευής": "ash_mezz_A3",
"card-type": "assim-device",
"ssid": "Corelines_2",
"ip_addr": "192.168.8.104",
"τελικά σημεία": [
{
"title": "Grow Lights",
"card-type": "crouton-simple-toggle",
"endpoint": "switch"
},
{
"title": "Planter Lights",
"card-type": "crouton-assim-weekview",
"endpoint": "CC_switch"
}
]
},
"CC_switch": {
"card-type": "assim-weekview",
"info": "Ενεργοποιήστε ή σβήστε τα φώτα σε χρονικά διαστήματα 15 λεπτών",
"path": "https://192.168.8.104/cors",
"title": "Planter Lights",
"interval_mins": 15,
"αξίες": {
"αξία": ""
}
},
"διακόπτης": {
"title": "Grow Lights",
"card-type": "crouton-simple-toggle",
"info": "Ενεργοποίηση ή απενεργοποίηση φώτων σε ad hoc βάση",
"ετικέτες": {
"false": "OFF",
"true": "ON"
},
"εικονίδια": {
"false": "sun-o",
"true": "sun-o"
},
"αξίες": {
"αξία": 0
}
}
},
"status": "good",
"name": "ash_mezz_A3",
"description": "Office at Ashmore, Mezzanine, Area A2",
"χρώμα": "#4D90FE"
}
}

προβολή rawdeviceInfo.json που φιλοξενείται με ❤ από το GitHub

Βήμα 3: ΣΥΝΕΛΕΥΣΗ ΣΥΣΚΕΥΗΣ

ΣΥΝΕΛΕΥΣΗ ΣΥΣΚΕΥΗΣ
ΣΥΝΕΛΕΥΣΗ ΣΥΣΚΕΥΗΣ
ΣΥΝΕΛΕΥΣΗ ΣΥΣΚΕΥΗΣ
ΣΥΝΕΛΕΥΣΗ ΣΥΣΚΕΥΗΣ
ΣΥΝΕΛΕΥΣΗ ΣΥΣΚΕΥΗΣ
ΣΥΝΕΛΕΥΣΗ ΣΥΣΚΕΥΗΣ

Καθώς δεν υπάρχουν αλλαγές υλικού, ακολουθούν οι σύνδεσμοι προς τις σχετικές πληροφορίες:

  • Συνέλευση Shell
  • Υλικά και Εργαλεία
  • Προετοιμασία MCU
  • MCU Housing Preparation
  • Δημιουργία του Slaves Low-side Switch/RESET Daughter-board
  • Συναρμολόγηση των κύριων εξαρτημάτων

Βήμα 4: FIRMWARE

ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ
ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ
ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ
ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ
ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ
ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ
ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ
ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ

ΚΥΡΙΑ ΑΛΛΑΖΕΙ ΑΥΤΟ ΤΟ ΚΤΙΡΙΟ

Προκειμένου η εφαρμογή AssimilateCrouton να μπορεί να χρησιμοποιεί πόρους CORS από τη συσκευή, οι κεφαλίδες απόκρισης έπρεπε να διαμορφωθούν με συγκεκριμένο τρόπο. Αυτό εφαρμόστηκε σε αυτήν την έκδοση του υλικολογισμικού (static_server.ino => server_file_read ()).

Επίσης, το κύριο γράφημα εξάρτησης για το Πολυμερές έπρεπε να είναι από μία μόνο προέλευση. Χρησιμοποιήθηκε μια στρατηγική για την προσθήκη ενός προγράμματος αντιμετώπισης σφαλμάτων (corsLinkOnError) στα αρχεία SPIFFS CORS για την επαναφόρτωση των πόρων από τον ιστότοπο AssimilateCrouton όταν δεν βρίσκονται στη συσκευή.

Υπάρχουν 2 νέες συμβάσεις που προστέθηκαν στο σύστημα αρχείων SPIFFS για την προσαρμογή των τελικών σημείων που δημιουργούνται στο deviceInfo - τα οποία χρησιμοποιεί το AssimilateCrouton για τη δημιουργία των καρτών ταμπλό:

  • /config/user_card_base.json Ορισμός τελικού σημείου με τις μεταβλητές χρόνου εκτέλεσης να αλλάζουν πρώτα:,,. Αυτό είναι συνήθως το σημείο όπου θα προστεθεί η κάρτα συσκευής assim. Αυτό δεν επικοινωνεί ξανά με τη συσκευή.
  • /config/user_card_#.json Ορισμός τελικού σημείου με τις μεταβλητές χρόνου εκτέλεσης να αλλάζουν πρώτα:,,. Αυτό είναι συνήθως το σημείο όπου οι πλούσιοι συντάκτες, όπως η κάρτα assim-weekview, θα προστεθούν συνδεδεμένοι με τον υποτελή I2C (ηθοποιός/αισθητήρας) που σχετίζεται με το #.

ΤΟ ΣΧΕΔΙΟ/ΒΙΒΛΙΟΘΗΚΕΣ

Σε αυτό το στάδιο το έργο έχει συσκευαστεί ως παράδειγμα για τη βιβλιοθήκη AssimilateBus Arduino. Αυτό γίνεται κυρίως για να είναι εύκολη η πρόσβαση σε όλα τα απαραίτητα αρχεία από το Arduino IDE. Τα κύρια τεχνουργήματα κώδικα είναι:

  • mqtt_crouton_esp8266_cors_webcomponents.ino - το κύριο σημείο εισόδου.
  • assimilate_bus.h/assimilate_bus.cpp - η βιβλιοθήκη που χειρίζεται την επικοινωνία I2C με τον Slave Sensor/Actors
  • VizJson.h/VizJson.cpp - η βιβλιοθήκη που μορφοποιεί/δημιουργεί οποιοδήποτε JSON δημοσιευμένο μέσω MQTT
  • config.h/config.cpp - η βιβλιοθήκη που διαβάζει/πλαίσιο/γράφει αρχεία ρυθμίσεων στο SPIFFS
  • static_i2c_callbacks.ino - οι κλήσεις I2C για μια ιδιότητα που λαμβάνεται και ο κύκλος αιτημάτων slaves είναι πλήρης static_mqtt.ino - οι συναρτήσεις MQTT
  • static_server.ino - οι λειτουργίες του διακομιστή ιστού
  • static_utility.ino - λειτουργίες βοηθού

Οι στατικές συναρτήσεις INO χρησιμοποιήθηκαν (αντί για βιβλιοθήκες) για διάφορους λόγους, αλλά κυρίως για να λειτουργούν καλά οι λειτουργίες Webserver και MQTT.

ΟΙ ΠΟΡΟΙ ΤΩΝ ΣΠΙΦΦΣ

Αναλυτικές επεξηγήσεις των αρχείων SPIFFS μπορείτε να βρείτε εδώ.

  • favicon.ico - πόρος που χρησιμοποιείται από τον Ace Editor
  • διαμόρφωση

    • device.json - η διαμόρφωση για τη συσκευή (Wifi, MQTT…)
    • slave_metas _#. json - δημιουργείται στο χρόνο εκτέλεσης για κάθε αριθμό διεύθυνσης σκλάβου (#)
    • user_card _#.
    • user_card_base.json - προσαρμοσμένο τελικό σημείο για ενσωμάτωση στο deviceInfo για τη συσκευή
    • user_meta _#.
    • user_props.json - προσαρμοσμένα ονόματα ιδιοτήτων για να παρακάμψετε αυτά στα μεταδεδομένα των υποτελών
  • cors

    • card -webcomponent.css - φύλλο στυλ για διάφορες προσαρμοσμένες κάρτες
    • card -webcomponent.html - webcomponent για διάφορες προσαρμοσμένες κάρτες
  • συντάκτης

    • assimilate -logo-p.webp" />
    • edit.htm.gz - gzip του HTML Ace Editor
    • edit.htm.src - πρωτότυπο HTML του Ace Editor
    • favicon -32x32-p.webp" />

ΑΝΕΒΑΣΗ ΤΟΥ FIRMWARE

  • Μπορείτε να βρείτε το αποθετήριο κώδικα εδώ (στιγμιότυπο).
  • Μπορείτε να βρείτε ένα ZIP της βιβλιοθήκης εδώ (στιγμιότυπο).
  • Οδηγίες για την "Εισαγωγή μιας βιβλιοθήκης ZIP" εδώ.
  • Μόλις εγκατασταθεί η βιβλιοθήκη, μπορείτε να ανοίξετε το παράδειγμα "mqtt_crouton_esp8266_cors_webcomponents".
  • Οδηγίες για τη ρύθμιση του Arduino για το Wemos D1 Mini εδώ.
  • Εξαρτήσεις: ArduinoJson, TimeLib, PubSubClient, NeoTimer (δείτε συνημμένα αν σπάσετε αλλαγές στα αποθετήρια).

ΑΝΕΒΑΣΗ ΣΤΟ SPIFFS

Μόλις φορτωθεί ο κωδικός στο Arduino IDE, ανοίξτε το device.json στο φάκελο data/config:

  • Τροποποιήστε την τιμή του wifi_ssid με το SSID WiFi σας.
  • Τροποποιήστε την τιμή του wifi_key με το κλειδί WiFi.
  • Τροποποιήστε την τιμή του mqtt_device_name με την προτιμώμενη αναγνώριση συσκευής (δεν απαιτείται συμμετοχή).
  • Τροποποιήστε την τιμή του mqtt_device_description με την προτιμώμενη Περιγραφή συσκευής (στο Crouton).
  • Αποθήκευση device.json.
  • Ανεβάστε τα αρχεία δεδομένων στο SPIFFS.

Το κύριο σημείο εισόδου για το παράδειγμα AssimilateBus:

/*
*
*ΟΙ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΙ ΚΑΝΟΝΕΣ ΓΙΑ ΤΗ ΣΥΣΚΕΥΗ ΣΑΣ ΑΝΑΜΕΝΟΝΤΑΙ ΝΑ ΕΛΕΓΧΟΝΤΑΙ ΜΕΣΩ MQTT - ΟΧΙ ΣΚΟΥΡΑ AKΗΜΕΝΟ ΣΕ ΑΥΤΟ ΤΟ FIRMWARE
*
* Εκτός από τη ρύθμιση και το βρόχο σε αυτό το αρχείο
* τα σημαντικά κινούμενα μέρη είναι
* on_bus_ελήφθη και on_bus_complete στο static_i2c_callbacks.ino
* και
* mqtt_publish και mqtt_callback στο static_mqtt.ino
*
*/
#include "types.h"
#include "VizJson.h"
#include "assimilate_bus.h"
#include "debug.h"
#include "config.h"
#περιλαμβάνω

#περιλαμβάνω

// ορίστε το MQTT_MAX_PACKET_SIZE σε 3000 ~ (ή τις ανάγκες σας για deviceInfo json)

#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
// --------------------------------- ΔΗΛΩΣΕΙΣ ΜΝΗΜΗΣ
// ---------------------------------------------------- - ορίζει
#defineDBG_OUTPUT_FLAG2 // 0, 1, 2 ΕΛΑΧΙΣΤΗ, ΕΚΔΟΣΗ, ΠΛΗΡΩΣ
#define_mqtt_pub_topic "outbox" // CROUTON CONVENTIONS
#define_mqtt_sub_topic "εισερχόμενα"
// ---------------------------------------------------- - αντικείμενα κλάσης
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);
// ---------------------------------------------------- - δομές δεδομένων / μεταβλητή
RuntimeDeviceData _runtime_device_data;
PropertyDto _dto_props [50]; // max 10 υποτελείς x max 5 ιδιότητες
// ---------------------------------------------------- - έλεγχος ροής
volatilebool _sent_device_info = false;
byte _dto_props_index = 0;
bool _fatal_error = false;
// --------------------------------- ΔΗΛΩΣΕΙΣ ΠΕΔΙΟΥ ΛΕΙΤΟΥΡΓΙΑΣ
// ---------------------------------------------------- - static_i2c_callbacks.ino
voidon_bus_received (byte slave_address, byte prop_index, Role role, char name [16], char char [16]);
voidon_bus_complete ();
// ---------------------------------------------------- - static_mqtt.ino
voidmqtt_callback (char* topic, byte* payload, unsignedint length);
voidmqtt_loop ();
int8_tmqtt_get_topic_index (char* topic);
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 (διεύθυνση byte, κωδικός byte, constchar *param);
// ---------------------------------------------------- - static_server.ino
String server_content_type_get (όνομα αρχείου συμβολοσειράς).
boolserver_path_in_auth_exclusion (διαδρομή συμβολοσειράς);
boolserver_auth_read (διαδρομή συμβολοσειράς);
boolserver_file_read (διαδρομή συμβολοσειράς);
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 & address);
char *time_stamp_get ();
// ---------------------------------------------------- - static_utility.ino
String spiffs_file_list_build (String path);
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);
//---------------------------------ΚΥΡΙΟΣ
voidsetup () {
DBG_OUTPUT_PORT.αρχή (115200);
SetupDeviceData device_data?
Serial.println (); Serial.println (); // περιθώριο για σκουπίδια κονσόλας
καθυστέρηση (5000)?
if (DBG_OUTPUT_FLAG == 2) DBG_OUTPUT_PORT.setDebugOutput (true);
_debug.out_fla (F ("setup"), true, 2);
// λάβετε την απαιτούμενη διαμόρφωση
εάν (SPIFFS.begin ()) {
_debug.out_str (spiffs_file_list_build ("/"), true, 2);
εάν (! _config_data.get_device_data (device_data, _runtime_device_data)) {
report_deserialize_error ();
ΕΠΙΣΤΡΟΦΗ;
}
}αλλού{
report_spiffs_error ();
ΕΠΙΣΤΡΟΦΗ;
}
// χρησιμοποιήστε την τιμή του χρονοδιακόπτη που έχει οριστεί στη συσκευή.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 ();
// ξεκινήστε τη συλλογή μεταδεδομένων
_assimilate_bus.get_metadata ();
_assimilate_bus.print_metadata_details ();
mqtt_ensure_connect ();
// χρειάζεται ιδιότητα αισθητήρα (ονόματα) για να ολοκληρωθεί η συλλογή μεταδεδομένων
_assimilate_bus.get_properties (on_bus_received, on_bus_complete);
_timer_property_request.reset (); // μπορεί να περάσει αξιοσημείωτος χρόνος μέχρι αυτό το σημείο, ώστε να ξεκινήσει ξανά
}
voidloop () {
αν (! check_fatal_error ()) επιστρέψει?
mqtt_loop ();
_server.handleClient ();
εάν (_timer_property_request.repeat ()) {
_assimilate_bus.get_properties (on_bus_received, on_bus_complete);
}
}

προβολή rawmqtt_crouton_esp8266_cors_webcomponents.ino που φιλοξενείται με ❤ από το GitHub

Βήμα 5: ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ

ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ
ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ
ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ
ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ
ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ
ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ
ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ
ΚΑΡΤΑ ΣΥΣΚΕΥΗΣ

Η κάρτα συσκευής (τύπος κάρτας: assim-device) φιλοξενείται στον ιστότοπο και δεν είναι απαραίτητη η προβολή της από τη συσκευή (CORS).

Η προεπιλεγμένη σελίδα του παραθέτει:

  • Τα θέματα MQTT για ανάγνωση και εγγραφή στη συσκευή
  • Το σημείο πρόσβασης στο οποίο είναι συνδεδεμένη η συσκευή
  • Ένας σύνδεσμος προς τον επεξεργαστή αρχείων SPIFFS που φιλοξενείται στη συσκευή χρησιμοποιώντας τον ACE EDITOR
  • Ένα εικονίδιο ματιού που αποκαλύπτει τη σελίδα Εμφάνιση/Απόκρυψη κάρτας.

Η σελίδα "Εμφάνιση/απόκρυψη καρτών" παραθέτει:

  • Κάθε κάρτα ως ξεχωριστό είδος
  • Έντονη μπλε γραμματοσειρά κατά την εμφάνιση
  • Μαύρη κανονική γραμματοσειρά όταν είναι κρυμμένη
  • Ένα εικονίδιο που απεικονίζει τον τύπο της κάρτας.

Η κάρτα μπορεί να κρυφτεί κάνοντας κλικ στο κουμπί απόκρυψης στις κάρτες ή κάνοντας κλικ σε ένα στοιχείο μπλε-έντονης γραμματοσειράς στη λίστα. Οι κάρτες μπορούν να εμφανιστούν κάνοντας κλικ σε ένα στοιχείο μαύρης κανονικής γραμματοσειράς στη λίστα.

Χαλαρά συνδεδεμένη με αυτό το χαρακτηριστικό είναι οι φρυγανιές πληροφοριών. Εάν σε κάποιο από τα τελικά σημεία του deviceInfo έχει οριστεί μια ιδιότητα πληροφοριών, ένα κουμπί πληροφοριών θα εμφανιστεί δίπλα στο κουμπί απόκρυψης της κάρτας. Όταν κάνετε κλικ, οι πληροφορίες σχετικά με τα συμφραζόμενα που ορίζονται στο τελικό σημείο θα "φρυγανιστούν" στο παράθυρο.

Εάν η κάρτα συσκευής δεν έχει οριστεί, τα κουμπιά απόκρυψης δεν θα εμφανίζονται στις κάρτες. Αυτό συμβαίνει γιατί όταν κρυφτεί δεν υπάρχει τρόπος να τα δείξουμε, ξανά.

Ανατρέξτε στην ενότητα ΤΕΛΕΥΤΑΙΑ ΠΡΟΣΑΡΜΟΓΗ για να δείτε λεπτομερώς πώς μπορεί να προστεθεί η κάρτα συσκευής assim μέσω των αρχείων SPIFFS στο ESP8266.

AssimilateCrouton WebComponent

σιδερένια σήματα>
div>
ΕΜΦΑΝΙΣΤΕ ΚΡΥΦΗ ΕΙΚΟΝΙ
i> span>
ΜΟΡΦΗ ΣΥΣΚΕΥΗΣ
MQTT TOPICSdiv>
/outbox/{{endPointJson.device_name}}/*div>
/inbox/{{endPointJson.device_name}}/*div>
WIFI SSIDdiv>
{{endPointJson.ssid}} div>
IP ADDRESSdiv>
{{endPointJson.ip_addr}} a> div>
div>
ΕΜΦΑΝΙΣΤΕ ΚΡΥΦΗ ΛΙΣΤΑ
στοιχείο>χαρτί-στοιχείο>
πρότυπο>
paper-listbox>
div>
crouton-card>
πρότυπο>
dom-module>

προβολή rawassim-device.html που φιλοξενείται με ❤ από το GitHub

Βήμα 6: ΚΑΡΤΑ ΕΒΔΟΜΑΔΑ

ΚΑΡΤΑ ΕΒΔΟΜΑΔΑ
ΚΑΡΤΑ ΕΒΔΟΜΑΔΑ
ΚΑΡΤΑ ΕΒΔΟΜΑΔΑ
ΚΑΡΤΑ ΕΒΔΟΜΑΔΑ
ΚΑΡΤΑ ΕΒΔΟΜΑΔΑ
ΚΑΡΤΑ ΕΒΔΟΜΑΔΑ

Η κάρτα προβολής εβδομάδας (τύπος κάρτας: assim-weekview) φιλοξενείται στη συσκευή (φάκελος cors). Εγχέεται στο πακέτο deviceInfo που δημοσιεύτηκε για το AssimilateCrouton, προσθέτοντας ένα αρχείο config/user_card _#. Json στο SPIFFS (σε αυτήν την περίπτωση user_card_9.json).

ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

Οι καθημερινές παρουσιάζονται ως λίστες με χρονοθυρίδες. Η λεπτομέρεια της χρονικής θέσης ορίζεται με την ιδιότητα "interval_mins" στο config/user_card _#. Json. Πρέπει να είναι κλάσμα της ώρας ή πολλαπλάσια της ώρας π.χ. 10, 15, 20, 30, 60, 120, 360. Κάνοντας κλικ σε μια χρονική υποδοχή, βεβαιωθείτε ότι η κατάσταση ενεργοποίησης έχει εντολή για τη σχετική συσκευή εκείνη τη στιγμή. Εάν το χρονικό όριο είναι τώρα, μια εντολή αποστέλλεται (δημοσιεύεται) αμέσως για τη συσκευή. Κανονικά η κατάσταση ελέγχεται/δημοσιεύεται κάθε λεπτό. Οι επιλογές αποθηκεύονται στο LocalStorage, επομένως οι χρόνοι θα φορτωθούν ξανά με ανανέωση προγράμματος περιήγησης.

ΠΕΡΙΠΤΩΣΕΙΣ ΧΡΗΣΗΣ

Στην τρέχουσα κατάσταση, η προβολή εβδομάδας είναι κατάλληλη για συσκευές που μπορούν να χρησιμοποιήσουν ένα διακόπτη εναλλαγής για να απεικονίσουν την κατάστασή τους, δηλαδή είναι είτε ενεργοποιημένες είτε απενεργοποιημένες και αφού ρυθμιστούν παραμένουν σε αυτήν την κατάσταση. Τα φώτα, οι ανεμιστήρες και οι θερμοσίφωνες είναι καλοί υποψήφιοι.

ΠΕΡΙΟΡΙΣΜΟΙ/ΣΠΗΛΑΙΑ

  • Το interval_mins πρέπει να είναι μία από τις τιμές που αναφέρονται παραπάνω
  • Η εβδομαδιαία προβολή δεν υποστηρίζει στιγμιαίες ενέργειες που είναι επίσης προγραμματισμένες, όπως η σύντομη ενεργοποίηση μιας βρύσης (5 δευτερόλεπτα) δύο φορές την ημέρα.

ΜΕΛΛΟΝΤΙΚΟΣ

  • Αναμένεται ότι θα υποστηριχθούν στιγμιαίες δράσεις.
  • Συγχρονισμένη αποθήκευση σε όλες τις συσκευές, για τις επιλογές χρονοδιαγράμματος εξετάζεται.

Βήμα 7: ΤΕΛΙΚΗ ΠΡΟΣΑΡΜΟΓΗ

Όπως αναφέρθηκε σύντομα στο FIRMWARE, υπάρχουν 2 νέες συμβάσεις που προστίθενται στο σύστημα αρχείων SPIFFS για την προσαρμογή των τελικών σημείων. Τα αρχεία JSON είναι θραύσματα που προστίθενται στην ιδιότητα των τελικών σημείων στο πακέτο deviceInfo που δημοσιεύονται στον μεσίτη MQTT και γίνεται ο ορισμός του πίνακα ελέγχου.

Τα κλειδιά των τελικών σημείων δημιουργούνται στο υλικολογισμικό:

  • CC_device (Προσαρμοσμένη κάρτα) για το user_card_base.json
  • CC_SLAVE_ENDPOINT NAME για το user_card _#. Json (# η διεύθυνση υποτελείας)

Όπως αναφέρθηκε προηγουμένως, υπάρχουν μεταβλητές που αντικαθίστανται από τιμές κατά την εκτέλεση:

  • mqtt_device_name
  • wifi_ssid
  • local_ip

user_card_base.json

Ενα παράδειγμα:

user_card _#. json

Ενα παράδειγμα:

Βήμα 8: ΒΙΝΤΕΟ

Συνιστάται: