You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/el/2-farm/lessons/5-migrate-application-to-th.../README.md

62 KiB

Μεταφέρετε τη λογική της εφαρμογής σας στο cloud

Σχεδιάγραμμα επισκόπησης αυτού του μαθήματος

Σχεδιάγραμμα από τη Nitya Narasimhan. Κάντε κλικ στην εικόνα για μεγαλύτερη έκδοση.

Αυτό το μάθημα διδάχθηκε ως μέρος της σειράς IoT for Beginners Project 2 - Digital Agriculture από το Microsoft Reactor.

Ελέγξτε τη συσκευή IoT σας με serverless κώδικα

Ερωτηματολόγιο πριν το μάθημα

Ερωτηματολόγιο πριν το μάθημα

Εισαγωγή

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

Σε αυτό το μάθημα θα καλύψουμε:

Τι είναι το serverless;

Το serverless, ή serverless computing, περιλαμβάνει τη δημιουργία μικρών μπλοκ κώδικα που εκτελούνται στο cloud ως απάντηση σε διάφορα είδη γεγονότων. Όταν συμβαίνει το γεγονός, ο κώδικας σας εκτελείται και λαμβάνει δεδομένα σχετικά με το γεγονός. Αυτά τα γεγονότα μπορεί να προέρχονται από διάφορες πηγές, όπως αιτήματα web, μηνύματα σε μια ουρά, αλλαγές δεδομένων σε μια βάση δεδομένων ή μηνύματα που αποστέλλονται σε μια υπηρεσία IoT από συσκευές IoT.

Γεγονότα που αποστέλλονται από μια υπηρεσία IoT σε μια serverless υπηρεσία, όλα επεξεργάζονται ταυτόχρονα από πολλαπλές λειτουργίες

💁 Αν έχετε χρησιμοποιήσει triggers σε βάσεις δεδομένων, μπορείτε να το σκεφτείτε ως κάτι αντίστοιχο: κώδικας που ενεργοποιείται από ένα γεγονός, όπως η εισαγωγή μιας γραμμής.

Όταν πολλά γεγονότα αποστέλλονται ταυτόχρονα, η serverless υπηρεσία κλιμακώνεται για να τα επεξεργαστεί όλα ταυτόχρονα

Ο κώδικας σας εκτελείται μόνο όταν συμβαίνει το γεγονός, δεν παραμένει ενεργός σε άλλες στιγμές. Το γεγονός συμβαίνει, ο κώδικας σας φορτώνεται και εκτελείται. Αυτό καθιστά το serverless πολύ κλιμακούμενο - αν πολλά γεγονότα συμβούν ταυτόχρονα, ο πάροχος cloud μπορεί να εκτελέσει τη λειτουργία σας όσες φορές χρειαστεί ταυτόχρονα, χρησιμοποιώντας τους διαθέσιμους servers. Το μειονέκτημα είναι ότι αν χρειαστεί να μοιραστείτε πληροφορίες μεταξύ των γεγονότων, πρέπει να τις αποθηκεύσετε κάπου, όπως σε μια βάση δεδομένων, αντί να τις κρατάτε στη μνήμη.

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

🎓 Το serverless αναφέρεται επίσης ως Functions as a Service (FaaS), καθώς κάθε trigger γεγονότος υλοποιείται ως μια λειτουργία στον κώδικα.

Παρά το όνομα, το serverless χρησιμοποιεί πράγματι servers. Το όνομα προέρχεται από το γεγονός ότι ως προγραμματιστής δεν χρειάζεται να ασχοληθείτε με τους servers που απαιτούνται για την εκτέλεση του κώδικα σας, το μόνο που σας ενδιαφέρει είναι ότι ο κώδικας σας εκτελείται ως απάντηση σε ένα γεγονός. Ο πάροχος cloud διαθέτει ένα serverless runtime που διαχειρίζεται την κατανομή servers, δικτύωσης, αποθήκευσης, CPU, μνήμης και όλων των άλλων που χρειάζονται για την εκτέλεση του κώδικα σας. Αυτό το μοντέλο σημαίνει ότι δεν πληρώνετε ανά server για την υπηρεσία, καθώς δεν υπάρχει server. Αντίθετα, πληρώνετε για τον χρόνο που ο κώδικας σας εκτελείται και για την ποσότητα μνήμης που χρησιμοποιείται.

💰 Το serverless είναι ένας από τους πιο οικονομικούς τρόπους εκτέλεσης κώδικα στο cloud. Για παράδειγμα, τη στιγμή που γράφεται αυτό, ένας πάροχος cloud επιτρέπει σε όλες τις serverless λειτουργίες σας να εκτελούνται συνολικά 1.000.000 φορές το μήνα πριν αρχίσει να σας χρεώνει, και μετά από αυτό χρεώνει 0,20 USD για κάθε 1.000.000 εκτελέσεις. Όταν ο κώδικας σας δεν εκτελείται, δεν πληρώνετε.

Ως προγραμματιστής IoT, το serverless μοντέλο είναι ιδανικό. Μπορείτε να γράψετε μια λειτουργία που καλείται ως απάντηση σε μηνύματα που αποστέλλονται από οποιαδήποτε συσκευή IoT συνδεδεμένη στην υπηρεσία IoT που φιλοξενείται στο cloud. Ο κώδικας σας θα χειρίζεται όλα τα μηνύματα που αποστέλλονται, αλλά θα εκτελείται μόνο όταν χρειάζεται.

Ανατρέξτε στον κώδικα που γράψατε ως server κώδικα που ακούει μηνύματα μέσω MQTT. Πώς θα μπορούσε να εκτελεστεί στο cloud χρησιμοποιώντας serverless; Πώς πιστεύετε ότι ο κώδικας θα μπορούσε να τροποποιηθεί για να υποστηρίξει το serverless computing;

💁 Το serverless μοντέλο επεκτείνεται και σε άλλες υπηρεσίες cloud εκτός από την εκτέλεση κώδικα. Για παράδειγμα, serverless βάσεις δεδομένων είναι διαθέσιμες στο cloud χρησιμοποιώντας ένα serverless μοντέλο τιμολόγησης, όπου πληρώνετε ανά αίτημα που γίνεται στη βάση δεδομένων, όπως ένα query ή μια εισαγωγή, συνήθως με τιμολόγηση που βασίζεται στο πόση εργασία απαιτείται για την εξυπηρέτηση του αιτήματος. Για παράδειγμα, μια απλή επιλογή μιας γραμμής με βάση ένα primary key θα κοστίσει λιγότερο από μια περίπλοκη λειτουργία που ενώνει πολλούς πίνακες και επιστρέφει χιλιάδες γραμμές.

Δημιουργία μιας serverless εφαρμογής

Η υπηρεσία serverless computing της Microsoft ονομάζεται Azure Functions.

Το λογότυπο του Azure Functions

Το σύντομο βίντεο παρακάτω παρέχει μια επισκόπηση του Azure Functions.

Βίντεο επισκόπησης του Azure Functions

🎥 Κάντε κλικ στην εικόνα παραπάνω για να παρακολουθήσετε το βίντεο.

Αφιερώστε λίγο χρόνο για να κάνετε έρευνα και να διαβάσετε την επισκόπηση του Azure Functions στη τεκμηρίωση του Microsoft Azure Functions.

Για να γράψετε Azure Functions, ξεκινάτε με μια εφαρμογή Azure Functions στη γλώσσα της επιλογής σας. Το Azure Functions υποστηρίζει εξ ορισμού Python, JavaScript, TypeScript, C#, F#, Java και Powershell. Σε αυτό το μάθημα θα μάθετε πώς να γράψετε μια εφαρμογή Azure Functions σε Python.

💁 Το Azure Functions υποστηρίζει επίσης custom handlers, ώστε να μπορείτε να γράψετε τις λειτουργίες σας σε οποιαδήποτε γλώσσα υποστηρίζει HTTP αιτήματα, συμπεριλαμβανομένων παλαιότερων γλωσσών όπως η COBOL.

Οι εφαρμογές Functions αποτελούνται από ένα ή περισσότερα triggers - λειτουργίες που ανταποκρίνονται σε γεγονότα. Μπορείτε να έχετε πολλαπλά triggers μέσα σε μια εφαρμογή Functions, όλα μοιράζονται κοινή διαμόρφωση. Για παράδειγμα, στο αρχείο διαμόρφωσης της εφαρμογής Functions μπορείτε να έχετε τις λεπτομέρειες σύνδεσης του IoT Hub σας, και όλες οι λειτουργίες στην εφαρμογή μπορούν να χρησιμοποιήσουν αυτές τις λεπτομέρειες για να συνδεθούν και να ακούσουν για γεγονότα.

Εργασία - εγκατάσταση των εργαλείων Azure Functions

Τη στιγμή που γράφεται αυτό, τα εργαλεία κώδικα του Azure Functions δεν λειτουργούν πλήρως σε Apple Silicon με έργα Python. Θα χρειαστεί να χρησιμοποιήσετε έναν Mac με Intel, έναν υπολογιστή Windows ή έναν υπολογιστή Linux.

Ένα εξαιρετικό χαρακτηριστικό του Azure Functions είναι ότι μπορείτε να τα εκτελέσετε τοπικά. Το ίδιο runtime που χρησιμοποιείται στο cloud μπορεί να εκτελεστεί στον υπολογιστή σας, επιτρέποντάς σας να γράψετε κώδικα που ανταποκρίνεται σε μηνύματα IoT και να τον εκτελέσετε τοπικά. Μπορείτε ακόμη και να κάνετε debug στον κώδικα σας καθώς χειρίζεται γεγονότα. Μόλις είστε ικανοποιημένοι με τον κώδικα σας, μπορείτε να τον αναπτύξετε στο cloud.

Τα εργαλεία Azure Functions είναι διαθέσιμα ως CLI, γνωστά ως Azure Functions Core Tools.

  1. Εγκαταστήστε τα Azure Functions Core Tools ακολουθώντας τις οδηγίες στη τεκμηρίωση του Azure Functions Core Tools.

  2. Εγκαταστήστε την επέκταση Azure Functions για το VS Code. Αυτή η επέκταση παρέχει υποστήριξη για τη δημιουργία, το debugging και την ανάπτυξη Azure Functions. Ανατρέξτε στη τεκμηρίωση της επέκτασης Azure Functions για οδηγίες σχετικά με την εγκατάσταση αυτής της επέκτασης στο VS Code.

Όταν αναπτύσσετε την εφαρμογή Azure Functions σας στο cloud, χρειάζεται να χρησιμοποιήσει μια μικρή ποσότητα αποθήκευσης στο cloud για να αποθηκεύσει πράγματα όπως τα αρχεία της εφαρμογής και τα αρχεία καταγραφής. Όταν εκτελείτε την εφαρμογή Functions σας τοπικά, πρέπει να συνδεθείτε σε αποθήκευση cloud, αλλά αντί να χρησιμοποιήσετε πραγματική αποθήκευση cloud, μπορείτε να χρησιμοποιήσετε έναν εξομοιωτή αποθήκευσης που ονομάζεται Azurite. Αυτός εκτελείται τοπικά αλλά λειτουργεί σαν αποθήκευση cloud.

🎓 Στο Azure, η αποθήκευση που χρησιμοποιεί το Azure Functions είναι ένας Azure Storage Account. Αυτοί οι λογαριασμοί μπορούν να αποθηκεύουν αρχεία, blobs, δεδομένα σε πίνακες ή δεδομένα σε ουρές. Μπορείτε να μοιραστείτε έναν λογαριασμό αποθήκευσης μεταξύ πολλών εφαρμογών, όπως μια εφαρμογή Functions και μια web εφαρμογή.

  1. Το Azurite είναι μια εφαρμογή Node.js, οπότε θα χρειαστεί να εγκαταστήσετε το Node.js. Μπορείτε να βρείτε τις οδηγίες λήψης και εγκατάστασης στον ιστότοπο του Node.js. Αν χρησιμοποιείτε Mac, μπορείτε επίσης να το εγκαταστήσετε από το Homebrew.

  2. Εγκαταστήστε το Azurite χρησιμοποιώντας την παρακάτω εντολή (npm είναι ένα εργαλείο που εγκαθίσταται όταν εγκαθιστάτε το Node.js):

    npm install -g azurite
    
  3. Δημιουργήστε έναν φάκελο που ονομάζεται azurite για να χρησιμοποιήσει το Azurite για την αποθήκευση δεδομένων:

    mkdir azurite
    
  4. Εκτελέστε το Azurite, περνώντας του αυτόν τον νέο φάκελο:

    azurite --location azurite
    

    Ο εξομοιωτής αποθήκευσης Azurite θα ξεκινήσει και θα είναι έτοιμος για σύνδεση από το τοπικό runtime Functions.

    ➜  ~ azurite --location azurite  
    Azurite Blob service is starting at http://127.0.0.1:10000
    Azurite Blob service is successfully listening at http://127.0.0.1:10000
    Azurite Queue service is starting at http://127.0.0.1:10001
    Azurite Queue service is successfully listening at http://127.0.0.1:10001
    Azurite Table service is starting at http://127.0.0.1:10002
    Azurite Table service is successfully listening at http://127.0.0.1:10002
    

Εργασία - δημιουργία ενός έργου Azure Functions

Το CLI του Azure Functions μπορεί να χρησιμοποιηθεί για τη δημιουργία μιας νέας εφαρμογής Functions.

  1. Δημιουργήστε έναν φάκελο για την εφαρμογή Functions σας και μεταβείτε σε αυτόν. Ονομάστε τον soil-moisture-trigger.

    mkdir soil-moisture-trigger
    cd soil-moisture-trigger
    
  2. Δημιουργήστε ένα εικονικό περιβάλλον Python μέσα σε αυτόν τον φάκελο:

    python3 -m venv .venv
    
  3. Ενεργοποιήστε το εικονικό περιβάλλον:

    • Στα Windows:

      • Αν χρησιμοποιείτε το Command Prompt ή το Command Prompt μέσω του Windows Terminal, εκτελέστε:

        .venv\Scripts\activate.bat
        
      • Αν χρησιμοποιείτε PowerShell, εκτελέστε:

        .\.venv\Scripts\Activate.ps1
        
    • Σε macOS ή Linux, εκτελέστε:

      source ./.venv/bin/activate
      

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

  4. Εκτελέστε την παρακάτω εντολή για να δημιουργήσετε μια εφαρμογή Functions σε αυτόν τον φάκελο:

    func init --worker-runtime python soil-moisture-trigger
    

    Αυτό θα δημιουργήσει τρία αρχεία μέσα στον τρέχοντα φάκελο:

    • host.json - αυτό το JSON έγγραφο περιέχει ρυθμίσεις για την εφαρμογή Functions σας. Δεν θα χρειαστεί να τροποποιήσετε αυτές τις ρυθμίσεις.
    • local.settings.json - αυτό το JSON έγγραφο περιέχει ρυθμίσεις που η εφαρμογή σας θα χρησιμοποιεί όταν εκτελείται τοπικά, όπως strings σύνδεσης για το IoT Hub σας. Αυτές οι ρυθμίσεις είναι μόνο τοπικές και δεν πρέπει να προστεθούν στον έλεγχο πηγαίου κώδικα. Όταν αναπτύσσετε την εφαρμογή στο cloud, αυτές οι ρυθμίσεις δεν αναπτύσσονται, αντίθετα οι ρυθμίσεις σας φορτώνονται από τις ρυθμίσεις εφαρμογής. Αυτό θα καλυφθεί αργότερα σε αυτό το μάθημα.
    • requirements.txt - αυτό είναι ένα Pip requirements αρχείο που περιέχει τα Pip πακέτα που χρειάζονται για την εκτέλεση της εφαρμογής Functions σας.
  5. Το αρχείο local.settings.json έχει μια ρύθμιση για τον λογαριασμό αποθήκευσης που θα χρησιμοποιήσει η εφαρμογή Functions. Αυτό προεπιλέγεται σε μια κενή ρύθμιση, οπότε πρέπει να οριστεί. Για να συνδεθείτε στον τοπικό εξομοιωτή αποθήκευσης Azurite, ορίστε αυτήν την τιμή ως εξής:

    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    
  6. Εγκαταστήστε τα απαραίτητα Pip πακέτα χρησιμοποιώντας το αρχείο requirements:

    pip install -r requirements.txt
    

    💁 Τα απαραίτητα Pip πακέτα πρέπει να βρίσκονται σε αυτό το αρχείο, ώστε όταν η εφαρμογή Functions αναπτύσσεται στο cloud, το runtime να μπορεί να διασφαλίσει ότι εγκαθιστά τα σωστά πακέτα.

  7. Για να δοκιμάσετε ότι όλα λειτουργούν σωστά, μπορείτε να ξεκινήσετε το

⚠️ Εάν λάβετε ειδοποίηση από το τείχος προστασίας, δώστε άδεια καθώς η εφαρμογή func χρειάζεται να έχει δυνατότητα ανάγνωσης και εγγραφής στο δίκτυό σας. ⚠️ Εάν χρησιμοποιείτε macOS, μπορεί να εμφανιστούν προειδοποιήσεις στην έξοδο:

> (.venv) ➜  soil-moisture-trigger func start
> Found Python version 3.9.1 (python3).
>
> Azure Functions Core Tools
> Core Tools Version:       3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0  (64-bit)
> Function Runtime Version: 3.0.15417.0
>
> [2021-06-16T08:18:28.315Z] Cannot create directory for shared memory usage: /dev/shm/AzureFunctions
> [2021-06-16T08:18:28.316Z] System.IO.FileSystem: Access to the path '/dev/shm/AzureFunctions' is denied. Operation not permitted.
> [2021-06-16T08:18:30.361Z] No job functions found.
> ```

Μπορείτε να τις αγνοήσετε, αρκεί η εφαρμογή Functions να ξεκινά σωστά και να εμφανίζει τις τρέχουσες λειτουργίες. Όπως αναφέρεται σε αυτήν την ερώτηση στο Microsoft Docs Q&A, αυτές οι προειδοποιήσεις μπορούν να αγνοηθούν.

  1. Σταματήστε την εφαρμογή Functions πατώντας ctrl+c.

  2. Ανοίξτε τον τρέχοντα φάκελο στο VS Code, είτε ανοίγοντας το VS Code και στη συνέχεια αυτόν τον φάκελο, είτε εκτελώντας την ακόλουθη εντολή:

    code .
    

    Το VS Code θα εντοπίσει το έργο Functions και θα εμφανίσει μια ειδοποίηση που λέει:

    Detected an Azure Functions Project in folder "soil-moisture-trigger" that may have been created outside of
    VS Code. Initialize for optimal use with VS Code?
    

    Η ειδοποίηση

    Επιλέξτε Ναι από αυτήν την ειδοποίηση.

  3. Βεβαιωθείτε ότι το Python virtual environment εκτελείται στο τερματικό του VS Code. Τερματίστε το και επανεκκινήστε το αν χρειάζεται.

Δημιουργία ενεργοποιητή συμβάντων IoT Hub

Η εφαρμογή Functions είναι το κέλυφος του serverless κώδικα σας. Για να ανταποκριθείτε σε συμβάντα του IoT Hub, μπορείτε να προσθέσετε έναν ενεργοποιητή IoT Hub σε αυτήν την εφαρμογή. Αυτός ο ενεργοποιητής πρέπει να συνδεθεί στη ροή μηνυμάτων που αποστέλλονται στο IoT Hub και να ανταποκριθεί σε αυτά. Για να λάβετε αυτήν τη ροή μηνυμάτων, ο ενεργοποιητής σας πρέπει να συνδεθεί στο event hub compatible endpoint του IoT Hub.

Το IoT Hub βασίζεται σε μια άλλη υπηρεσία Azure που ονομάζεται Azure Event Hubs. Το Event Hubs είναι μια υπηρεσία που σας επιτρέπει να στέλνετε και να λαμβάνετε μηνύματα, ενώ το IoT Hub επεκτείνει αυτήν τη λειτουργία προσθέτοντας δυνατότητες για συσκευές IoT. Ο τρόπος σύνδεσης για την ανάγνωση μηνυμάτων από το IoT Hub είναι ίδιος με αυτόν που θα χρησιμοποιούσατε αν χρησιμοποιούσατε το Event Hubs.

Κάντε λίγη έρευνα: Διαβάστε την επισκόπηση του Event Hubs στη τεκμηρίωση του Azure Event Hubs. Πώς συγκρίνονται οι βασικές δυνατότητες με το IoT Hub;

Για να συνδεθεί μια συσκευή IoT στο IoT Hub, πρέπει να χρησιμοποιήσει ένα μυστικό κλειδί που διασφαλίζει ότι μόνο επιτρεπόμενες συσκευές μπορούν να συνδεθούν. Το ίδιο ισχύει και όταν συνδέεστε για να διαβάσετε μηνύματα. Ο κώδικάς σας θα χρειαστεί μια συμβολοσειρά σύνδεσης που περιέχει ένα μυστικό κλειδί, μαζί με λεπτομέρειες του IoT Hub.

💁 Η προεπιλεγμένη συμβολοσειρά σύνδεσης που λαμβάνετε έχει δικαιώματα iothubowner, που δίνουν σε οποιονδήποτε κώδικα τη χρησιμοποιεί πλήρη δικαιώματα στο IoT Hub. Ιδανικά, θα πρέπει να συνδεθείτε με το χαμηλότερο επίπεδο δικαιωμάτων που απαιτείται. Αυτό θα καλυφθεί στο επόμενο μάθημα.

Μόλις ο ενεργοποιητής σας συνδεθεί, ο κώδικας μέσα στη λειτουργία θα καλείται για κάθε μήνυμα που αποστέλλεται στο IoT Hub, ανεξάρτητα από τη συσκευή που το έστειλε. Ο ενεργοποιητής θα περάσει το μήνυμα ως παράμετρο.

Εργασία - λήψη της συμβολοσειράς σύνδεσης του Event Hub compatible endpoint

  1. Από το τερματικό του VS Code, εκτελέστε την ακόλουθη εντολή για να λάβετε τη συμβολοσειρά σύνδεσης για το Event Hub compatible endpoint του IoT Hub:

    az iot hub connection-string show --default-eventhub \
                                      --output table \
                                      --hub-name <hub_name>
    

    Αντικαταστήστε το <hub_name> με το όνομα που χρησιμοποιήσατε για το IoT Hub.

  2. Στο VS Code, ανοίξτε το αρχείο local.settings.json. Προσθέστε την ακόλουθη επιπλέον τιμή μέσα στην ενότητα Values:

    "IOT_HUB_CONNECTION_STRING": "<connection string>"
    

    Αντικαταστήστε το <connection string> με την τιμή από το προηγούμενο βήμα. Θα χρειαστεί να προσθέσετε ένα κόμμα μετά την προηγούμενη γραμμή για να είναι έγκυρο το JSON.

Εργασία - δημιουργία ενεργοποιητή συμβάντων

Είστε πλέον έτοιμοι να δημιουργήσετε τον ενεργοποιητή συμβάντων.

  1. Από το τερματικό του VS Code, εκτελέστε την ακόλουθη εντολή από τον φάκελο soil-moisture-trigger:

    func new --name iot-hub-trigger --template "Azure Event Hub trigger"
    

    Αυτό δημιουργεί μια νέα λειτουργία που ονομάζεται iot-hub-trigger. Ο ενεργοποιητής θα συνδεθεί στο Event Hub compatible endpoint του IoT Hub, ώστε να μπορείτε να χρησιμοποιήσετε έναν ενεργοποιητή event hub. Δεν υπάρχει συγκεκριμένος ενεργοποιητής IoT Hub.

Αυτό θα δημιουργήσει έναν φάκελο μέσα στον φάκελο soil-moisture-trigger που ονομάζεται iot-hub-trigger και περιέχει αυτήν τη λειτουργία. Αυτός ο φάκελος θα περιέχει τα ακόλουθα αρχεία:

  • __init__.py - αυτό είναι το αρχείο κώδικα Python που περιέχει τον ενεργοποιητή, χρησιμοποιώντας τη συμβατική ονομασία αρχείων Python για να μετατρέψει αυτόν τον φάκελο σε Python module.

    Αυτό το αρχείο θα περιέχει τον ακόλουθο κώδικα:

    import logging
    
    import azure.functions as func
    
    
    def main(event: func.EventHubEvent):
        logging.info('Python EventHub trigger processed an event: %s',
                    event.get_body().decode('utf-8'))
    

    Ο πυρήνας του ενεργοποιητή είναι η συνάρτηση main. Αυτή η συνάρτηση καλείται με τα συμβάντα από το IoT Hub. Η συνάρτηση έχει μια παράμετρο που ονομάζεται event και περιέχει ένα EventHubEvent. Κάθε φορά που ένα μήνυμα αποστέλλεται στο IoT Hub, αυτή η συνάρτηση καλείται περνώντας αυτό το μήνυμα ως event, μαζί με ιδιότητες που είναι ίδιες με τις σημειώσεις που είδατε στο προηγούμενο μάθημα.

    Ο πυρήνας αυτής της συνάρτησης καταγράφει το συμβάν.

  • function.json - αυτό περιέχει τη διαμόρφωση για τον ενεργοποιητή. Η κύρια διαμόρφωση βρίσκεται σε μια ενότητα που ονομάζεται bindings. Ένα binding είναι ο όρος για τη σύνδεση μεταξύ των Azure Functions και άλλων υπηρεσιών Azure. Αυτή η λειτουργία έχει ένα input binding σε ένα event hub - συνδέεται σε ένα event hub και λαμβάνει δεδομένα.

    💁 Μπορείτε επίσης να έχετε output bindings, ώστε η έξοδος μιας λειτουργίας να αποστέλλεται σε άλλη υπηρεσία. Για παράδειγμα, θα μπορούσατε να προσθέσετε ένα output binding σε μια βάση δεδομένων και να επιστρέψετε το συμβάν του IoT Hub από τη λειτουργία, και αυτό θα εισαχθεί αυτόματα στη βάση δεδομένων.

    Κάντε λίγη έρευνα: Διαβάστε για τα bindings στη τεκμηρίωση των triggers και bindings των Azure Functions.

    Η ενότητα bindings περιλαμβάνει τη διαμόρφωση για το binding. Οι τιμές ενδιαφέροντος είναι:

    • "type": "eventHubTrigger" - αυτό λέει στη λειτουργία ότι πρέπει να ακούει συμβάντα από ένα Event Hub

    • "name": "events" - αυτό είναι το όνομα της παραμέτρου που θα χρησιμοποιηθεί για τα συμβάντα του Event Hub. Αυτό αντιστοιχεί στο όνομα της παραμέτρου στη συνάρτηση main στον κώδικα Python.

    • "direction": "in" - αυτό είναι ένα input binding, τα δεδομένα από το event hub εισέρχονται στη λειτουργία

    • "connection": "" - αυτό ορίζει το όνομα της ρύθμισης από την οποία θα διαβαστεί η συμβολοσειρά σύνδεσης. Κατά την τοπική εκτέλεση, αυτή η ρύθμιση θα διαβαστεί από το αρχείο local.settings.json.

      💁 Η συμβολοσειρά σύνδεσης δεν μπορεί να αποθηκευτεί στο αρχείο function.json, πρέπει να διαβαστεί από τις ρυθμίσεις. Αυτό γίνεται για να μην εκθέσετε κατά λάθος τη συμβολοσειρά σύνδεσης.

  1. Λόγω ενός σφάλματος στο πρότυπο των Azure Functions, το function.json έχει μια λανθασμένη τιμή για το πεδίο cardinality. Ενημερώστε αυτό το πεδίο από many σε one:

    "cardinality": "one",
    
  2. Ενημερώστε την τιμή του "connection" στο αρχείο function.json ώστε να δείχνει στη νέα τιμή που προσθέσατε στο αρχείο local.settings.json:

    "connection": "IOT_HUB_CONNECTION_STRING",
    

    💁 Θυμηθείτε - αυτό πρέπει να δείχνει στη ρύθμιση, όχι να περιέχει την πραγματική συμβολοσειρά σύνδεσης.

  3. Η συμβολοσειρά σύνδεσης περιέχει την τιμή eventHubName, επομένως η τιμή για αυτό στο αρχείο function.json πρέπει να καθαριστεί. Ενημερώστε αυτήν την τιμή σε μια κενή συμβολοσειρά:

    "eventHubName": "",
    

Εργασία - εκτέλεση του ενεργοποιητή συμβάντων

  1. Βεβαιωθείτε ότι δεν εκτελείται ο παρατηρητής συμβάντων του IoT Hub. Εάν αυτό εκτελείται ταυτόχρονα με την εφαρμογή Functions, η εφαρμογή Functions δεν θα μπορεί να συνδεθεί και να καταναλώσει συμβάντα.

    💁 Πολλαπλές εφαρμογές μπορούν να συνδεθούν στα endpoints του IoT Hub χρησιμοποιώντας διαφορετικές consumer groups. Αυτά καλύπτονται σε επόμενο μάθημα.

  2. Για να εκτελέσετε την εφαρμογή Functions, εκτελέστε την ακόλουθη εντολή από το τερματικό του VS Code:

    func start
    

    Η εφαρμογή Functions θα ξεκινήσει και θα ανακαλύψει τη λειτουργία iot-hub-trigger. Στη συνέχεια, θα επεξεργαστεί οποιαδήποτε συμβάντα έχουν ήδη αποσταλεί στο IoT Hub την τελευταία ημέρα.

    (.venv) ➜  soil-moisture-trigger func start
    Found Python version 3.9.1 (python3).
    
    Azure Functions Core Tools
    Core Tools Version:       3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0  (64-bit)
    Function Runtime Version: 3.0.15417.0
    
    Functions:
    
            iot-hub-trigger: eventHubTrigger
    
    For detailed output, run func with --verbose flag.
    [2021-05-05T02:44:07.517Z] Worker process started and initialized.
    [2021-05-05T02:44:09.202Z] Executing 'Functions.iot-hub-trigger' (Reason='(null)', Id=802803a5-eae9-4401-a1f4-176631456ce4)
    [2021-05-05T02:44:09.205Z] Trigger Details: PartitionId: 0, Offset: 1011240-1011632, EnqueueTimeUtc: 2021-05-04T19:04:04.2030000Z-2021-05-04T19:04:04.3900000Z, SequenceNumber: 2546-2547, Count: 2
    [2021-05-05T02:44:09.352Z] Python EventHub trigger processed an event: {"soil_moisture":628}
    [2021-05-05T02:44:09.354Z] Python EventHub trigger processed an event: {"soil_moisture":624}
    [2021-05-05T02:44:09.395Z] Executed 'Functions.iot-hub-trigger' (Succeeded, Id=802803a5-eae9-4401-a1f4-176631456ce4, Duration=245ms)
    

    Κάθε κλήση στη λειτουργία θα περιβάλλεται από ένα μπλοκ Executing 'Functions.iot-hub-trigger'/Executed 'Functions.iot-hub-trigger' στην έξοδο, ώστε να μπορείτε να δείτε πόσα μηνύματα επεξεργάστηκαν σε κάθε κλήση λειτουργίας.

  3. Βεβαιωθείτε ότι η συσκευή IoT σας εκτελείται. Θα δείτε νέα μηνύματα υγρασίας εδάφους να εμφανίζονται στην εφαρμογή Functions.

  4. Σταματήστε και επανεκκινήστε την εφαρμογή Functions. Θα δείτε ότι δεν θα επεξεργαστεί ξανά προηγούμενα μηνύματα, θα επεξεργαστεί μόνο νέα μηνύματα.

💁 Το VS Code υποστηρίζει επίσης την αποσφαλμάτωση των Functions σας. Μπορείτε να ορίσετε σημεία διακοπής κάνοντας κλικ στο περιθώριο δίπλα στην αρχή κάθε γραμμής κώδικα, ή τοποθετώντας τον κέρσορα σε μια γραμμή κώδικα και επιλέγοντας Run -> Toggle breakpoint, ή πατώντας F9. Μπορείτε να εκκινήσετε τον αποσφαλματωτή επιλέγοντας Run -> Start debugging, πατώντας F5, ή επιλέγοντας το Run and debug pane και επιλέγοντας το κουμπί Start debugging. Με αυτόν τον τρόπο μπορείτε να δείτε τις λεπτομέρειες των συμβάντων που επεξεργάζονται.

Αντιμετώπιση προβλημάτων

  • Εάν λάβετε το ακόλουθο σφάλμα:

    The listener for function 'Functions.iot-hub-trigger' was unable to start. Microsoft.WindowsAzure.Storage: Connection refused. System.Net.Http: Connection refused. System.Private.CoreLib: Connection refused.
    

    Ελέγξτε ότι το Azurite εκτελείται και ότι έχετε ορίσει το AzureWebJobsStorage στο αρχείο local.settings.json σε UseDevelopmentStorage=true.

  • Εάν λάβετε το ακόλουθο σφάλμα:

    System.Private.CoreLib: Exception while executing function: Functions.iot-hub-trigger. System.Private.CoreLib: Result: Failure Exception: AttributeError: 'list' object has no attribute 'get_body'
    

    Ελέγξτε ότι έχετε ορίσει το cardinality στο αρχείο function.json σε one.

  • Εάν λάβετε το ακόλουθο σφάλμα:

    Azure.Messaging.EventHubs: The path to an Event Hub may be specified as part of the connection string or as a separate value, but not both.  Please verify that your connection string does not have the `EntityPath` token if you are passing an explicit Event Hub name. (Parameter 'connectionString').
    

    Ελέγξτε ότι έχετε ορίσει το eventHubName στο αρχείο function.json σε μια κενή συμβολοσειρά.

Αποστολή αιτημάτων άμεσης μεθόδου από serverless κώδικα

Μέχρι στιγμής, η εφαρμογή Functions σας ακούει μηνύματα από το IoT Hub χρησιμοποιώντας το Event Hub compatible endpoint. Τώρα πρέπει να στείλετε εντολές στη συσκευή IoT. Αυτό γίνεται χρησιμοποιώντας μια διαφορετική σύνδεση στο IoT Hub μέσω του Registry Manager. Το Registry Manager είναι ένα εργαλείο που σας επιτρέπει να δείτε ποιες συσκευές είναι εγγεγραμμένες στο IoT Hub και να επικοινωνήσετε με αυτές τις συσκευές στέλνοντας μηνύματα cloud-to-device, αιτήματα άμεσης μεθόδου ή ενημερώνοντας το device twin. Μπορείτε επίσης να το χρησιμοποιήσετε για να εγγράψετε, ενημερώσετε ή διαγράψετε συσκευές IoT από το IoT Hub.

Για να συνδεθείτε στο Registry Manager, χρειάζεστε μια συμβολοσειρά σύνδεσης.

Εργασία - λήψη της συμβολοσειράς σύνδεσης του Registry Manager

  1. Για να λάβετε τη συμβολοσειρά σύνδεσης, εκτελέστε την ακόλουθη εντολή:

    az iot hub connection-string show --policy-name service \
                                      --output table \
                                      --hub-name <hub_name>
    

    Αντικαταστήστε το <hub_name> με το όνομα που χρησιμοποιήσατε για το IoT Hub.

    Η συμβολοσειρά σύνδεσης ζητείται για την πολιτική ServiceConnect χρησιμοποιώντας την παράμετρο --policy-name service. Όταν ζητάτε μια συμβολοσειρά σύνδεσης, μπορείτε να καθορίσετε ποια δικαιώματα θα επιτρέπει αυτή η συμβολοσειρά. Η πολιτική ServiceConnect επιτρέπει στον κώδικά σας να συνδεθεί και να στείλει μηνύματα σε συσκευές IoT.

    Κάντε λίγη έρευνα: Διαβάστε για τις διαφορετικές πολιτικές στη τεκμηρίωση δικαιωμάτων του IoT Hub

  2. Στο VS Code, ανοίξτε το αρχείο local.settings.json. Προσθέστε την ακόλουθη επιπλέον τιμή μέσα στην ενότητα Values:

    "REGISTRY_MANAGER_CONNECTION_STRING": "<connection string>"
    

    Αντικαταστήστε το <connection string> με την τιμή από το προηγούμενο βήμα. Θα χρειαστεί να προσθέσετε ένα κόμμα μετά την προηγούμενη γραμμή για να είναι έγκυρο το JSON.

Εργασία - αποστολή αιτήματος άμεσης μεθόδου σε μια συσκευή

  1. Το SDK για το Registry Manager είναι διαθέσιμο μέσω ενός πακέτου Pip. Προσθέστε την ακόλουθη γραμμή στο αρχείο requirements.txt για να προσθέσετε την εξάρτηση από αυτό το πακέτο:

    azure-iot-hub
    
  2. Βεβαιωθείτε ότι το τερματικό του VS Code έχει ενεργοποιημένο το virtual environment και εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε τα πακέτα Pip:

    pip install -r requirements.txt
    
  3. Προσθέστε τις ακόλουθες εισαγωγές στο αρχείο __init__.py:

    import json
    import os
    from azure.iot.hub import IoTHubRegistryManager
    from azure.iot.hub.models import CloudToDeviceMethod
    

    Αυτό εισάγει κάποιες βιβλιοθήκες συστήματος, καθώς και τις βιβλιοθήκες για την αλληλεπίδραση με το Registry Manager και την αποστολή αιτημάτων άμεσης μεθόδου.

  4. Αφαιρέστε τον κώδικα από μέσα στη μέθοδο main, αλλά κρατήστε τη μέθοδο.

  5. Στη μέθοδο main, προσθέστε τον ακόλουθο κώδικα:

    body = json.loads(event.get_body().decode('utf-8'))
    device_id = event.iothub_metadata['connection-device-id']
    
    logging.info(f'Received message: {body} from {device_id}')
    

    Αυτός ο κώδικας εξάγει το σώμα του συμβάντος που περιέχει το μήνυμα JSON που αποστέλλ Αυτός ο κώδικας φορτώνει το REGISTRY_MANAGER_CONNECTION_STRING από το αρχείο local.settings.json. Οι τιμές σε αυτό το αρχείο είναι διαθέσιμες ως μεταβλητές περιβάλλοντος και μπορούν να διαβαστούν χρησιμοποιώντας τη συνάρτηση os.environ, η οποία επιστρέφει ένα λεξικό με όλες τις μεταβλητές περιβάλλοντος.

💁 Όταν αυτός ο κώδικας αναπτυχθεί στο cloud, οι τιμές στο αρχείο local.settings.json θα οριστούν ως Application Settings και μπορούν να διαβαστούν από τις μεταβλητές περιβάλλοντος.

Ο κώδικας στη συνέχεια δημιουργεί μια παρουσία της βοηθητικής κλάσης Registry Manager χρησιμοποιώντας το connection string.

  1. Προσθέστε τον παρακάτω κώδικα:

    registry_manager.invoke_device_method(device_id, direct_method)
    
    logging.info('Direct method request sent!')
    

    Αυτός ο κώδικας λέει στον registry manager να στείλει το αίτημα direct method στη συσκευή που έστειλε την τηλεμετρία.

    💁 Στις εκδόσεις της εφαρμογής που δημιουργήσατε σε προηγούμενα μαθήματα χρησιμοποιώντας MQTT, οι εντολές ελέγχου του ρελέ αποστέλλονταν σε όλες τις συσκευές. Ο κώδικας υπέθετε ότι θα είχατε μόνο μία συσκευή. Αυτή η έκδοση του κώδικα στέλνει το αίτημα method σε μία μόνο συσκευή, ώστε να λειτουργεί αν έχετε πολλαπλές εγκαταστάσεις αισθητήρων υγρασίας και ρελέ, στέλνοντας το σωστό αίτημα direct method στη σωστή συσκευή.

  2. Εκτελέστε την εφαρμογή Functions και βεβαιωθείτε ότι η IoT συσκευή σας στέλνει δεδομένα. Θα δείτε τα μηνύματα να επεξεργάζονται και τα αιτήματα direct method να αποστέλλονται. Μετακινήστε τον αισθητήρα υγρασίας εδάφους μέσα και έξω από το έδαφος για να δείτε τις τιμές να αλλάζουν και το ρελέ να ενεργοποιείται και να απενεργοποιείται.

💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο code/functions.

Αναπτύξτε τον serverless κώδικά σας στο cloud

Ο κώδικάς σας λειτουργεί τώρα τοπικά, οπότε το επόμενο βήμα είναι να αναπτύξετε την εφαρμογή Functions στο cloud.

Εργασία - δημιουργήστε τους πόρους στο cloud

Η εφαρμογή Functions σας πρέπει να αναπτυχθεί σε έναν πόρο Functions App στο Azure, που βρίσκεται μέσα στην Resource Group που δημιουργήσατε για το IoT Hub σας. Θα χρειαστεί επίσης να δημιουργήσετε έναν Storage Account στο Azure για να αντικαταστήσετε τον εξομοιωμένο που εκτελείτε τοπικά.

  1. Εκτελέστε την παρακάτω εντολή για να δημιουργήσετε έναν storage account:

    az storage account create --resource-group soil-moisture-sensor \
                              --sku Standard_LRS \
                              --name <storage_name> 
    

    Αντικαταστήστε το <storage_name> με ένα όνομα για τον storage account σας. Αυτό πρέπει να είναι μοναδικό παγκοσμίως, καθώς αποτελεί μέρος του URL που χρησιμοποιείται για την πρόσβαση στον storage account. Μπορείτε να χρησιμοποιήσετε μόνο πεζά γράμματα και αριθμούς για αυτό το όνομα, χωρίς άλλους χαρακτήρες, και είναι περιορισμένο σε 24 χαρακτήρες. Χρησιμοποιήστε κάτι όπως sms και προσθέστε έναν μοναδικό αναγνωριστικό στο τέλος, όπως κάποιες τυχαίες λέξεις ή το όνομά σας.

    Η επιλογή --sku Standard_LRS επιλέγει την κατηγορία τιμολόγησης, επιλέγοντας τον χαμηλότερο κόστος γενικού σκοπού λογαριασμό. Δεν υπάρχει δωρεάν κατηγορία αποθήκευσης και πληρώνετε για ό,τι χρησιμοποιείτε. Το κόστος είναι σχετικά χαμηλό, με την πιο ακριβή αποθήκευση να κοστίζει λιγότερο από 0,05 USD ανά μήνα ανά gigabyte αποθηκευμένο.

    Διαβάστε περισσότερα για την τιμολόγηση στη σελίδα τιμολόγησης του Azure Storage Account

  2. Εκτελέστε την παρακάτω εντολή για να δημιουργήσετε ένα Function App:

    az functionapp create --resource-group soil-moisture-sensor \
                          --runtime python \
                          --functions-version 3 \
                          --os-type Linux \
                          --consumption-plan-location <location> \
                          --storage-account <storage_name> \
                          --name <functions_app_name>
    

    Αντικαταστήστε το <location> με την τοποθεσία που χρησιμοποιήσατε κατά τη δημιουργία της Resource Group στο προηγούμενο μάθημα.

    Αντικαταστήστε το <storage_name> με το όνομα του storage account που δημιουργήσατε στο προηγούμενο βήμα.

    Αντικαταστήστε το <functions_app_name> με ένα μοναδικό όνομα για το Functions App σας. Αυτό πρέπει να είναι μοναδικό παγκοσμίως, καθώς αποτελεί μέρος ενός URL που μπορεί να χρησιμοποιηθεί για την πρόσβαση στο Functions App. Χρησιμοποιήστε κάτι όπως soil-moisture-sensor- και προσθέστε έναν μοναδικό αναγνωριστικό στο τέλος, όπως κάποιες τυχαίες λέξεις ή το όνομά σας.

    Η επιλογή --functions-version 3 ορίζει την έκδοση του Azure Functions που θα χρησιμοποιηθεί. Η έκδοση 3 είναι η πιο πρόσφατη έκδοση.

    Η επιλογή --os-type Linux λέει στο Functions runtime να χρησιμοποιήσει Linux ως λειτουργικό σύστημα για τη φιλοξενία αυτών των functions. Τα Functions μπορούν να φιλοξενηθούν σε Linux ή Windows, ανάλογα με τη γλώσσα προγραμματισμού που χρησιμοποιείται. Οι εφαρμογές Python υποστηρίζονται μόνο σε Linux.

Εργασία - ανεβάστε τις ρυθμίσεις της εφαρμογής σας

Όταν αναπτύξατε την εφαρμογή Functions, αποθηκεύσατε κάποιες ρυθμίσεις στο αρχείο local.settings.json για τα connection strings του IoT Hub σας. Αυτές πρέπει να γραφτούν στις Application Settings στο Functions App σας στο Azure, ώστε να μπορούν να χρησιμοποιηθούν από τον κώδικά σας.

🎓 Το αρχείο local.settings.json είναι μόνο για τοπικές ρυθμίσεις ανάπτυξης και δεν πρέπει να ελέγχεται σε σύστημα ελέγχου πηγαίου κώδικα, όπως το GitHub. Όταν αναπτύσσεται στο cloud, χρησιμοποιούνται Application Settings. Τα Application Settings είναι ζεύγη κλειδιού/τιμής που φιλοξενούνται στο cloud και διαβάζονται από μεταβλητές περιβάλλοντος είτε στον κώδικά σας είτε από το runtime όταν συνδέει τον κώδικά σας με το IoT Hub.

  1. Εκτελέστε την παρακάτω εντολή για να ορίσετε τη ρύθμιση IOT_HUB_CONNECTION_STRING στις Application Settings του Functions App:

    az functionapp config appsettings set --resource-group soil-moisture-sensor \
                                          --name <functions_app_name> \
                                          --settings "IOT_HUB_CONNECTION_STRING=<connection string>"
    

    Αντικαταστήστε το <functions_app_name> με το όνομα που χρησιμοποιήσατε για το Functions App σας.

    Αντικαταστήστε το <connection string> με την τιμή του IOT_HUB_CONNECTION_STRING από το αρχείο local.settings.json.

  2. Επαναλάβετε το παραπάνω βήμα, αλλά ορίστε την τιμή του REGISTRY_MANAGER_CONNECTION_STRING στην αντίστοιχη τιμή από το αρχείο local.settings.json.

Όταν εκτελέσετε αυτές τις εντολές, θα εμφανιστεί επίσης μια λίστα με όλες τις Application Settings για το Functions App. Μπορείτε να χρησιμοποιήσετε αυτήν τη λίστα για να ελέγξετε ότι οι τιμές σας έχουν οριστεί σωστά.

💁 Θα δείτε μια τιμή που έχει ήδη οριστεί για το AzureWebJobsStorage. Στο αρχείο local.settings.json, αυτή είχε οριστεί σε μια τιμή για τη χρήση του τοπικού εξομοιωτή αποθήκευσης. Όταν δημιουργήσατε το Functions App, περάσατε τον storage account ως παράμετρο και αυτό ορίστηκε αυτόματα σε αυτήν τη ρύθμιση.

Εργασία - αναπτύξτε το Functions App σας στο cloud

Τώρα που το Functions App είναι έτοιμο, ο κώδικάς σας μπορεί να αναπτυχθεί.

  1. Εκτελέστε την παρακάτω εντολή από το τερματικό του VS Code για να δημοσιεύσετε το Functions App σας:

    func azure functionapp publish <functions_app_name>
    

    Αντικαταστήστε το <functions_app_name> με το όνομα που χρησιμοποιήσατε για το Functions App σας.

Ο κώδικας θα συσκευαστεί και θα σταλεί στο Functions App, όπου θα αναπτυχθεί και θα ξεκινήσει. Θα υπάρξει αρκετή έξοδος κονσόλας, που θα καταλήγει σε επιβεβαίωση της ανάπτυξης και μια λίστα με τις functions που αναπτύχθηκαν. Σε αυτήν την περίπτωση, η λίστα θα περιέχει μόνο το trigger.

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in soil-moisture-sensor:
    iot-hub-trigger - [eventHubTrigger]

Βεβαιωθείτε ότι η IoT συσκευή σας λειτουργεί. Αλλάξτε τα επίπεδα υγρασίας προσαρμόζοντας την υγρασία του εδάφους ή μετακινώντας τον αισθητήρα μέσα και έξω από το έδαφος. Θα δείτε το ρελέ να ενεργοποιείται και να απενεργοποιείται καθώς αλλάζει η υγρασία του εδάφους.


🚀 Πρόκληση

Στο προηγούμενο μάθημα, διαχειριστήκατε το χρονισμό για το ρελέ αποσυνδέοντας τα μηνύματα MQTT ενώ το ρελέ ήταν ενεργοποιημένο και για λίγο μετά την απενεργοποίησή του. Δεν μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο εδώ - δεν μπορείτε να αποσυνδέσετε το IoT Hub trigger σας.

Σκεφτείτε διαφορετικούς τρόπους με τους οποίους θα μπορούσατε να χειριστείτε αυτό στο Functions App σας.

Κουίζ μετά το μάθημα

Κουίζ μετά το μάθημα

Ανασκόπηση & Αυτομελέτη

Εργασία

Προσθέστε χειροκίνητο έλεγχο του ρελέ


Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.